Introducing a Mapillary-ArcGIS Experience Builder Integration Widget (Mapillary Explorer)

Wow! What a wealth of improvements! Great release @sukruburakcetin !

1 Like

Hi everyone! :green_heart:

I wanted to share some exciting news with the community.

The Mapillary Explorer project (a 2D-only customized one) has been accepted to the 2026 Esri User Conference Virtual Map Gallery! :slight_smile:

When I started this project, the goal was simply to make it easier for ArcGIS Experience Builder users to work with Mapillary imagery inside their web GIS applications. Thanks to the feedback, ideas, and encouragement I’ve received from this forum over the past months, the project has grown far beyond that initial idea.

The Map Gallery submission highlights the original concept of integrating Mapillary into ArcGIS Experience Builder.

I’d really appreciate your support. If you enjoy the project, please consider visiting the Map Gallery page and giving it a vote.

:link: Esri Map Gallery | Maps Created by Our Global User Community

I’ll also be attending Esri UC 2026 in San Diego. If you’re attending as well, I’d be happy to meet and talk. :grinning_face:

Finally, thank you to everyone who has commented on this thread, tested the widget, reported issues, or shared suggestions.

2 Likes

Congratulations!!

1 Like

Hey everyone,

Quick update on Mapillary Explorer. Over the last couple of releases (v4.5.0 and v4.6.0), I focused on turning imagery from something you just look at into something you can actually plan field trips with and use for real-world inspections.

Here are the highlights:

Coverage Filtering by AI Quality Score

You can now filter imagery sequences and track points based on Mapillary’s AI Quality Scores:

  • Interactive Legend Toggles: Simply click on the legend categories (Good, Fair, Poor) to toggle them on or off on the fly.
  • Want to see only crystal-clear, high-quality runs? Or specifically spot blurry, poorly scored sequences that need to be re-captured? Just toggle the legend.

Turn Missing Coverage into Driving Routes (OSRM + GPX)

If you do mapping drives to fill coverage gaps, you’ll love this:

  • Generate an automated driving route covering up to 50 missing or outdated street segments in your current view.
  • Automatically filters out footways and bike paths so it’s 100% legal for driving.
  • One-click GPX download: Throw the file straight into OsmAnd, Garmin, or Google My Maps and hit the road to map.

In-App Field Notes (2D & 3D)

A built-in inspection tool directly in the viewer:

  • Drop pins on the 2D map or 3D scene to flag issues in real time.
  • Spatially-Aware 3D Pinning: When point cloud mode is active, you can drop field notes with true spatial accuracy right onto real-world surfaces and objects in the 3D space, rather than just placing a flat pin.
  • Custom Categories: Define your own preset category list in the widget settings (e.g., Potholes, Damaged Signs, Streetlights) so users can tag and organize findings consistently.
  • Export to GIS: Export everything anytime as standard 3D GeoJSON to open directly in QGIS or ArcGIS Pro.
  • Everything auto-saves locally in your browser so you don’t lose notes between sessions.

Smarter 3D Tools & Better Measurements

  • Point Cloud Lasso: Draw a polygon right over a 360° panorama to select and inspect 3D points.
  • Slope & Ramp Audits: The measurement tool now calculates true slope percentage (rise/run) for sidewalk and accessibility audits, calibrated with SfM math so GPS drift doesn’t mess up your distances.

Other Goodies & Fixes

  • Cleaner Detections: Target boxes in the viewer now use a flashing radar pulse instead of a solid block, so they don’t hide the object you’re trying to inspect.
  • Esri Compatibility: Fully tested and ready for ArcGIS Enterprise 12.0 / 12.1 and the newest Experience Builder 1.21.
3 Likes

Fancy! This feature to “Turn Missing Coverage into Driving Routes (OSRM + GPX)” has been discussed in the past - pretty cool that you were able to implement - how well does it work for you? Do you have an example gpx file you generated using it?

1 Like

Thank you, @boris. Yeah, I remember reading through past forum threads about this exact idea.

Honestly, it works pretty well for quick neighborhood-level runs. Since it uses OSRM on OSM road data, it already respects one-ways and turn restrictions out of the box, which saves you from endless backtracking.

The main trick is keeping the bbox at a reasonable size. If the area is too big or super dense, the routing can get a bit wild with TSP and try to pull off sketchy U-turns in tight alleys. But if you stick to around 5–15 km loops, the routes come out really clean and actually drivable.

For example, this is where I run the analysis:

First, you zoom into a specific area to let the Mapillary coverage points load. Once they pop up, the ‘Analyse Coverage’ button becomes active. When Coverage Analysis runs, the widget identifies which streets are Red (unmapped) or Orange (stale). Once you preview the results on the map, the ‘Generate driving route’ button unlocks. It filters out non-drivable paths (footways, rails, parks) and selects the 50 missing streets closest to your screen center to keep the route localized. It sends those 50 midpoints to OSRM’s Trip API (/trip/v1/driving/ with roundtrip=false), which calculates the fastest, continuous, legal driving path that covers all of them.

2026-09-16 09-24-18

Here is the result for the specific area that you can preview the import on Google Maps:
Mapillary Explorer Demo OSRM - Google My Maps

You can try it out on the demo for other areas. The OSM API can occasionally time out during the coverage analysis, so just try again if it fails.

1 Like

Very cool @sukruburakcetin - so you’re not generating a .gpx of the route and sending it to OSRM, but rather generating the waypoints and sending those over (and hopefully/most of the time OSRM should choose the streets you want). Does OSRM also take care of re-arranging the waypoints in the most efficient order (traveling salesman problem) - or does it take them in the same order you provide them?

You are right, dear @boris. I extract the midpoints of target segments (unmapped or 4+ years old) and send them as waypoints. Then, yes, OSRM handles the TSP rearrangement.

I use OSRM’s Trip API (/trip/v1/driving/) with source=first and roundtrip=false. So, it filters for drivable OSM highway types (ignoring footways, cycleways, etc.) and takes the midpoints of the targeted segments, and sorts them by distance to the map center and caps them at 50 waypoints (to avoid server timeouts).

Those are drivable highway types that are being used:

        const drivableTypes = [
            'motorway', 'motorway_link', 'trunk', 'trunk_link', 
            'primary', 'primary_link', 'secondary', 'secondary_link', 
            'tertiary', 'tertiary_link', 'unclassified', 'residential', 
            'living_street', 'service'
        ];

With source=first, the route is locked to start at the street closest to the center of the user’s view, and OSRM then solves the TSP to order all remaining waypoints into the most efficient driving path.

Therefore, OSRM returns the optimized geometry, and the widget converts it into a .gpx file that you can download.

2 Likes

The analysis and route generation is pretty cool but the area that it can work in is limited. What I was hoping for is something that can route between two points that I’m already heading to and lets me put in the minutes I have to spare. It would work out which of the stale or missing stretches it can swing by on the way within that time and still get me to where I’m going. So if I’m heading out and I’ve got 15 or 20 minutes to burn before I need to be somewhere, it puts me on a route that picks up the bits I can realistically cover in that time.

1 Like