abstreet/docs/TODO_quality.md

130 lines
5.3 KiB
Markdown

# TODO - Map quality
## Boundary clipping
- lakes missing from huge_seattle
- just connecting the ends of ways doesnt always work well
- maybe increase the Bounds for areas, and let clipping clean up later?
- some border intersections have weird OOBish geometry, or the arrows look weird
- simplify border node detection, only do it in convert_osm?
## Geometry
- bad polyline shifting remains
- from the remaining cases, looks like we need to totally remove some tight points and retry
- make polygons use the corrections too?
- bad polyline shifting causes jagged lane endings in generalized_trim_back
- handle small roads again somehow?
- reduce degenerate min trim. the disabled fix doesn't look great.
- I40, I25, I0 cut corners when merged. disabled fix works, but breaks other things.
- try it bigger
- deal with loop roads?
- model U-turns
- degenerate-2's should only have one crosswalk
- then make them thinner
- car turns often clip sidewalk corners now
- draw SharedSidewalkCorners just around the ped path, not arbitrarily thick
- dont forget to draw the notches
- figure out what to do about yellow center lines
- intersections on one-ways look weird
- yellow and white lines intersect cars and turn icons and such
- who should own drawing them?
## More data
- lanes: https://data-seattlecitygis.opendata.arcgis.com/datasets/49d417979fec452981a068ca078e7070_3
- not filled out for most streets
- traffic circles: https://data-seattlecitygis.opendata.arcgis.com/datasets/717b10434d4945658355eba78b66971a_6
- https://data-seattlecitygis.opendata.arcgis.com/datasets/sidewalks
- disagrees with OSM road centers sometimes
- https://data-seattlecitygis.opendata.arcgis.com/datasets/curb-ramps
- high quality thick roads: https://seattlecitygis.maps.arcgis.com/apps/webappviewer/index.html?id=86cb6824307c4d63b8e180ebcff58ce2
- OSM has footways
- but theyre not marked everywhere
- and theyre hard to associate with roads (sometimes need to infer a planter strip)
- draw benches, bike racks
- render trees
- look for current stop sign priorities
- https://gis-kingcounty.opendata.arcgis.com/datasets/traffic-signs--sign-point/
- http://guides.lib.uw.edu/research/gis/uw-lib_data has cool stuff, but .lyr??
## Low-priority geometry issues
- if building front path intersects another building, then scrap that building.
- or wait, just require bldgs to be even closer to sidewalk first.
- need to do polygon vs polygon check!
- will need to speed it up with quadtree containing entire buildings. make sure these are easy to use.
- can we make OSM buildings with holes?
- experiment with https://docs.rs/clipping/0.1.1/clipping/gh/struct.CPolygon.html and https://github.com/21re/rust-geo-booleanop
## More problems to fix
- Disconnected map
- now that LCing model is simple...
- Impossible turns (from a far bus lane to a crazy left)
- Buildings intersecting roads, probably because bad lane inference
- when this happens, get rid of parking lanes first (one or both sides?)
- iterative process... have to redo affected roads and intersections
- we havent filtered buildings by proximity to sidewalk yet
- if we dont filter at all, we pick up some houseboats! :) should draw water...
- undo disabled traffic signal assertion
## Map edits
- lane type can affect border intersections
- lane type can affect turn idx
- assert turns are the same
- crash when loading some edits (priori->bikelanez)
- edit an intersection first, then change lanes to destroy turns. need to recalculate the policy, preserving edits!
- just revert intersection and warn
- or store overrides more granularly and warn or do something reasonable
## Release
- publish the map data
## Sim bugs/tests needed
- do bikes use bike lanes?
- test that peds will use buses organically
- make sure that we can jump to a ped on a bus and see the bus
- park/unpark needs to jump two lanes in the case of crossing a bike lane or something
- should only be able to park from the closest lane, though!
## Discrete-event sim model
- gridlock
- get_car_positions will recurse?
- laggy head stuff will be inefficient without prevention?
- preventish... dont start turn unless target WILL have capacity
- stronger is room_at_end now, but thats too strict
- best-case static capacity wont help (we might have longer buses and over-commit)
- worst-case static capacity will stop shorter cars from going when they legit could
- look at current occupants, find where the back WILL eventually wind up (just add up lengths + following dist, actually), then reserve after that.
- cleanup after the cutover
- explicit tests making cars park at 0 and max_dist, peds walk to 0 and max_dist
- proper intersection policies, by seeing full view
- time travel mode can be very smart
- dupe code for initially spawning vs spawning when a trip leg starts.
- validation (just do it in spawn and return an error?)
- getting the path
- converting goal into router and such
- perf
- speed up Scheduler
- BinaryHeap
- binheapplus not serde
- std::cmp::Reverse not serde
- so have to manually impl ord
- BinaryHeap isnt PartialEq, which sim det stuff needs!
- update() is very hard
- priority_queue crate... internally uses hash, so serialization and determinism probably borked
- dig into individual events, still too many?
- for laggy heads, often round down and try slightly too early