PolyLine instead of list of points.
This exposed two edge cases, fixed here:
1) While merging short roads near junctions, we sometimes create a loop.
Filter it out immeditely.
2) If an OSM way is physically sharing geometry with another one
invalidly, detect that and discard it much earlier.
We need this because we have a data source for SMP that we can use with
extra attribution, but not upload to OSM.
This whole commit is gross hacks; going forward, we need a proper
process for upstreaming stuff in OSM.
Verified no behavioral change. Much more cleanup is now possible inside
algorithm.rs. But most importantly, the InitialMap stuff only has 3
purposes -- all actually focused on producing final geometry.
Borders now seem to be skipped correctly.
Having a hard time skipping dual carriageways based on angle.
Aiming to enable first for Montlake, then gradually rollout to
individual maps, solving problems very incrementally and without
regressions.
OSM and other raw input into and store, before later converting to a
Map.
Why?
- build-time performance: while iterating on geometry problems, map_editor in release mode took 33s to build before, 11s now that the crate is split
- better layering: operations on a RawMap are becoming increasingly distinct from later transformations on the bigger map model
- this helps tease apart the dependencies of the intersection polygon algorithm for #846
- this will make it simpler to cutover to osm2lanes for https://github.com/a-b-street/osm2lanes/issues/71
There's further reorganization in raw_map and map_model that'll follow,
but the main work is done here.