-
-
Notifications
You must be signed in to change notification settings - Fork 82
Add Overture data source support #541
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
Add Overture data source support #541
Conversation
a905299 to
03a5d92
Compare
|
This is awesome, @migurski. /cc @jonahadkins |
…and line splitting - Updated 6 existing tests to include access_restrictions and road_flags data - Added 6 new splitting tests for partial bridge/tunnel/oneway/level application - Tests use simple geometries (0,0)-(1,0) for easy verification - All 12 tests failing as expected (property extraction and splitting not yet implemented) - References real Overture feature IDs and OSM way IDs in comments
…way/level properties
Major Changes:
- Created com.protomaps.basemap.geometry.Linear utility class for line splitting operations
- Rewrote Roads.processOverture() to handle fractional 'between' ranges from Overture data
- Implemented collectSplitPoints() to gather all split positions from road_flags, access_restrictions, and level_rules
- Implemented extractSegmentProperties() to determine which properties apply to each split segment
- Added emitRoadFeature() to create features with custom split geometries
Results:
- 15/21 tests now passing (6 original property extraction tests now pass)
- 6 splitting tests create correct features with correct attributes and geometries
- Only remaining issue: cosmetic Norm{} wrapper in test assertions (geometries are actually correct)
Implementation handles:
- Partial bridges via road_flags with 'is_bridge' flag
- Partial tunnels via road_flags with 'is_tunnel' flag
- Partial oneway restrictions via access_restrictions with heading='backward'
- Partial level changes via level_rules
- Overlapping property ranges (e.g., bridge + oneway on same segment)
- Multiple split points creating 2-5 output features per input feature
…urved roads - Add comprehensive unit tests for line splitting with curves - Rewrite Linear.splitAtFractions() to preserve all vertices between split points - Add coordinate transformation from lat/lon to world coordinates before emitting - All 9 new Linear tests pass, roads render correctly with curves preserved 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <[email protected]>
🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <[email protected]>
b80cb91 to
055ec6b
Compare
5a435aa to
a459963
Compare
|
Curious, how long does this take for you to download? From how long it takes it seems to require some enumeration over the overture |
|
I am just downloading the entire December release now with something like: With about 10 MiB/s it is a bit pedestrian but if the whole thing is only roughly 500 GB then the download should still complete within 14 hours. Sometimes those downloads also get faster over time. Let's see... |
|
Thanks for making the online demo @migurski! The first thing that I saw when opening it was the Emirate Kush Cargo Airport in the middle of Oakland. According to the overture explorer this POI has a confidence score of roughly 63 percent. To experiment with thresholding it might make sense to temporarily add the confidence score in the tiles and then we could add a slider to the frontend and change the maplibre style with a filter or so based on the slider value. |
Try the DuckDB sample code in the description! The OMS Parquet files are already clustered spatially, and small areas can take just minutes to extract. |
For me, about a minute or two. |
I agree, and incorporating QRank and confidence would be a good way to improve the POI quality since we don't have way areas or building heights like in OSM. |
|
I have a local copy now of the roughly 500 GB overture data. |
|
@msbarry uses the following I think to read a parquet directory: |




Add basemap support for Overture Maps input data as alternative to OSM extracts. Port
kind=/kind_detail=/min_zoom=mappings with no changes to MapLibre styles.Layers
All Protomaps layers except for Boundaries and Transit have some coverage in this PR.
POIs
theme=placesbasic_categorymapped to Protomapskind, with limited exceptionsRoads
theme=transportationtype=segmentsubtype=road,subtype=rail, andsubtype=waterclassandsubclassmapped to Protomapskind,kind_detail, and internalhighwayroad_flagsto split linestrings on bridge, tunnel, and level flags to match rendering of OSM basemapPlaces
theme=placesBuildings
theme=buildingstype=buildingandtype=building_partto match Protomaps visual styleLanduse
theme=basetype=land_useto match Protomaps visual styleEarth, Water, and Land Cover
theme=basetype=land,type=water,type=land_coverto match Protomaps visual styleTesting
Extract Overture data with e.g. DuckDB:
COPY ( SELECT * FROM read_parquet( 's3://overturemaps-us-west-2/release/2025-12-17.0/**/*.parquet', hive_partitioning=1, filename=1, union_by_name=1 ) WHERE theme IN ('transportation', 'places', 'base', 'buildings', 'divisions') AND bbox.xmin <= -121 AND bbox.xmax >= -123 AND bbox.ymin <= 38 AND bbox.ymax >= 37 ) TO 'data/sources/bay-area.parquet' (FORMAT PARQUET);Generate PMTiles from Overture data:
java -jar target/protomaps-basemap-HEAD-with-deps.jar \ --overture=data/sources/bay-area.parquet --download --forceRun the
app/map frontend or one of the HTML examples to preview.Screenshots
Taken from interactive preview at mike.teczno.com; compare with OSM data at maps.protomaps.com.
Flavor Compatibility
The changes in this PR map Overture properties to existing Protomaps conventions with no changes to styles, so all five of the included flavors are compatible: black, grayscale, white, light, and dark.