Commit 11da474
authored
Add Overture data source support (#541)
Add preliminary support for Overture as a data source.
* Recoded Claude-provided plan for Overture addition
* Added script to download Overture data as Parquet
* Updated Overture plan with some manual edits
* Implemented --overture CLI flag and got it working with just land & water at first
* Expanded Overture theme=base to landuse layer
* Added Overture theme=buildings to buildings layer
* Added Overture theme=transportation to roads layer
* Added Overture theme=places to pois layer
* Added first failing Overture POI tests
* Added feature finder script to assist with Overture test cases
* Sped up feature finder with RTree
* Added more failing Overture POI tests
* Replaced failing OGR SQL queries that were too long
* Added failing Overture POI test
* Sped up feature finder with more parallel ops
* Added numerous failing RoadsTest cases
* Added failing trunk and motorway tests
* Added test for all classes of link roads
* Switched from raw tags to assigned kind in POI zooms to prepare for Overture
* Passed all Overture POI tests by applying new rules
* Added QRank for Overture
* Added basic kind assignments for Overture roads
* Added basic zoom assignments for Overture roads
* Add comprehensive tests for Overture roads oneway/is_link extraction 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
* Implement Overture roads line splitting for partial bridge/tunnel/oneway/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
* Fix Linear.splitAtFractions() to preserve intermediate vertices for curved 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
* Reimplemented Linear.java using existing JTS linear referencing support
* Fixed split geometry tests to correctly handle world coordinates
* Corrected oneway=yes to get arrows showing up
* Shortened some superlong function bodies
* Migrated OSM minZoom to highwayZoomsIndex
* Separated remaining zoom-related rules for OSM roads
* Claude's version of Places.java
* Organized Places rules to separate kinds and zooms indexes
* kindRank can come from osmKindsIndex (for now!) and zoomsIndex, but not overtureKindsIndex
* Building parts look nice
* Added rendering and tests for theme=transportation/type=segment rail and water
* Added basic Overture landcover
* Replaced Python scripts with https://gist.github.com/migurski/8765492ef831457d7c21c20f4e454e1b
* Bumped version to 4.14
* Improved Landcover test coverage
* Added Overture water tests
* Read bounds from GeoParquet metadata and pass to tile archive
When using --overture with a Parquet file, the basemap now reads the
bounding box from the GeoParquet metadata and uses it to set the bounds
in the output PMTiles archive. This enables "fit bounds" functionality
on maps.protomaps.com to zoom to the precise area covered by the data.
The bounds are only applied when no --bounds argument is provided,
allowing users to still override with manual bounds if needed.
* Add test coverage for GeoParquet bounds extraction
Refactors bounds reading logic into a separate testable method and adds comprehensive test coverage including valid bounds extraction, missing file handling, and invalid file handling. Includes test GeoParquet file with Alcatraz Island buildings.1 parent c2ec15f commit 11da474
20 files changed
Lines changed: 2653 additions & 541 deletions
File tree
- tiles/src
- main/java/com/protomaps/basemap
- feature
- geometry
- layers
- test
- java/com/protomaps/basemap
- geometry
- layers
- resources
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
1 | 5 | | |
2 | 6 | | |
3 | 7 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1 | 1 | | |
2 | 2 | | |
| 3 | + | |
3 | 4 | | |
4 | 5 | | |
5 | 6 | | |
| 7 | + | |
6 | 8 | | |
7 | 9 | | |
8 | 10 | | |
| |||
24 | 26 | | |
25 | 27 | | |
26 | 28 | | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
27 | 32 | | |
28 | 33 | | |
29 | 34 | | |
| |||
46 | 51 | | |
47 | 52 | | |
48 | 53 | | |
| 54 | + | |
49 | 55 | | |
50 | 56 | | |
51 | 57 | | |
52 | 58 | | |
53 | 59 | | |
54 | 60 | | |
| 61 | + | |
55 | 62 | | |
56 | 63 | | |
57 | 64 | | |
58 | 65 | | |
59 | 66 | | |
60 | 67 | | |
61 | 68 | | |
| 69 | + | |
62 | 70 | | |
63 | 71 | | |
64 | 72 | | |
65 | 73 | | |
66 | 74 | | |
67 | 75 | | |
| 76 | + | |
68 | 77 | | |
69 | 78 | | |
70 | 79 | | |
71 | 80 | | |
72 | 81 | | |
73 | 82 | | |
| 83 | + | |
74 | 84 | | |
75 | 85 | | |
76 | 86 | | |
77 | 87 | | |
78 | 88 | | |
79 | 89 | | |
| 90 | + | |
80 | 91 | | |
81 | 92 | | |
82 | 93 | | |
| |||
91 | 102 | | |
92 | 103 | | |
93 | 104 | | |
| 105 | + | |
94 | 106 | | |
95 | 107 | | |
96 | 108 | | |
| |||
100 | 112 | | |
101 | 113 | | |
102 | 114 | | |
| 115 | + | |
103 | 116 | | |
104 | 117 | | |
105 | 118 | | |
| |||
119 | 132 | | |
120 | 133 | | |
121 | 134 | | |
122 | | - | |
| 135 | + | |
123 | 136 | | |
124 | 137 | | |
125 | 138 | | |
| |||
149 | 162 | | |
150 | 163 | | |
151 | 164 | | |
| 165 | + | |
| 166 | + | |
| 167 | + | |
| 168 | + | |
| 169 | + | |
| 170 | + | |
| 171 | + | |
| 172 | + | |
| 173 | + | |
| 174 | + | |
| 175 | + | |
| 176 | + | |
| 177 | + | |
| 178 | + | |
| 179 | + | |
| 180 | + | |
| 181 | + | |
| 182 | + | |
| 183 | + | |
| 184 | + | |
| 185 | + | |
| 186 | + | |
| 187 | + | |
| 188 | + | |
| 189 | + | |
| 190 | + | |
152 | 191 | | |
153 | 192 | | |
154 | 193 | | |
| |||
183 | 222 | | |
184 | 223 | | |
185 | 224 | | |
| 225 | + | |
186 | 226 | | |
187 | 227 | | |
188 | 228 | | |
| |||
210 | 250 | | |
211 | 251 | | |
212 | 252 | | |
| 253 | + | |
213 | 254 | | |
214 | 255 | | |
215 | 256 | | |
| |||
221 | 262 | | |
222 | 263 | | |
223 | 264 | | |
224 | | - | |
| 265 | + | |
| 266 | + | |
| 267 | + | |
| 268 | + | |
| 269 | + | |
| 270 | + | |
| 271 | + | |
| 272 | + | |
| 273 | + | |
| 274 | + | |
| 275 | + | |
| 276 | + | |
| 277 | + | |
| 278 | + | |
| 279 | + | |
| 280 | + | |
| 281 | + | |
| 282 | + | |
| 283 | + | |
| 284 | + | |
| 285 | + | |
225 | 286 | | |
226 | 287 | | |
227 | | - | |
228 | | - | |
229 | | - | |
230 | | - | |
231 | | - | |
232 | | - | |
233 | | - | |
234 | | - | |
| 288 | + | |
| 289 | + | |
| 290 | + | |
| 291 | + | |
| 292 | + | |
| 293 | + | |
| 294 | + | |
| 295 | + | |
| 296 | + | |
| 297 | + | |
| 298 | + | |
| 299 | + | |
| 300 | + | |
| 301 | + | |
| 302 | + | |
| 303 | + | |
| 304 | + | |
| 305 | + | |
| 306 | + | |
| 307 | + | |
| 308 | + | |
235 | 309 | | |
236 | 310 | | |
237 | 311 | | |
| |||
281 | 355 | | |
282 | 356 | | |
283 | 357 | | |
| 358 | + | |
| 359 | + | |
| 360 | + | |
| 361 | + | |
| 362 | + | |
| 363 | + | |
| 364 | + | |
| 365 | + | |
| 366 | + | |
| 367 | + | |
| 368 | + | |
| 369 | + | |
284 | 370 | | |
285 | | - | |
| 371 | + | |
286 | 372 | | |
287 | 373 | | |
288 | 374 | | |
Lines changed: 1 addition & 1 deletion
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
155 | 155 | | |
156 | 156 | | |
157 | 157 | | |
158 | | - | |
| 158 | + | |
159 | 159 | | |
160 | 160 | | |
161 | 161 | | |
| |||
Lines changed: 113 additions & 0 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
| 33 | + | |
| 34 | + | |
| 35 | + | |
| 36 | + | |
| 37 | + | |
| 38 | + | |
| 39 | + | |
| 40 | + | |
| 41 | + | |
| 42 | + | |
| 43 | + | |
| 44 | + | |
| 45 | + | |
| 46 | + | |
| 47 | + | |
| 48 | + | |
| 49 | + | |
| 50 | + | |
| 51 | + | |
| 52 | + | |
| 53 | + | |
| 54 | + | |
| 55 | + | |
| 56 | + | |
| 57 | + | |
| 58 | + | |
| 59 | + | |
| 60 | + | |
| 61 | + | |
| 62 | + | |
| 63 | + | |
| 64 | + | |
| 65 | + | |
| 66 | + | |
| 67 | + | |
| 68 | + | |
| 69 | + | |
| 70 | + | |
| 71 | + | |
| 72 | + | |
| 73 | + | |
| 74 | + | |
| 75 | + | |
| 76 | + | |
| 77 | + | |
| 78 | + | |
| 79 | + | |
| 80 | + | |
| 81 | + | |
| 82 | + | |
| 83 | + | |
| 84 | + | |
| 85 | + | |
| 86 | + | |
| 87 | + | |
| 88 | + | |
| 89 | + | |
| 90 | + | |
| 91 | + | |
| 92 | + | |
| 93 | + | |
| 94 | + | |
| 95 | + | |
| 96 | + | |
| 97 | + | |
| 98 | + | |
| 99 | + | |
| 100 | + | |
| 101 | + | |
| 102 | + | |
| 103 | + | |
| 104 | + | |
| 105 | + | |
| 106 | + | |
| 107 | + | |
| 108 | + | |
| 109 | + | |
| 110 | + | |
| 111 | + | |
| 112 | + | |
| 113 | + | |
Lines changed: 23 additions & 0 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
137 | 137 | | |
138 | 138 | | |
139 | 139 | | |
| 140 | + | |
| 141 | + | |
| 142 | + | |
| 143 | + | |
| 144 | + | |
| 145 | + | |
| 146 | + | |
| 147 | + | |
| 148 | + | |
| 149 | + | |
| 150 | + | |
| 151 | + | |
| 152 | + | |
| 153 | + | |
| 154 | + | |
| 155 | + | |
| 156 | + | |
| 157 | + | |
| 158 | + | |
| 159 | + | |
| 160 | + | |
| 161 | + | |
| 162 | + | |
140 | 163 | | |
141 | 164 | | |
142 | 165 | | |
| |||
0 commit comments