mirror of
https://github.com/a-b-street/abstreet.git
synced 2024-12-27 08:24:15 +03:00
clean up old experiments from the intersection geometry code.
imperceptible changes to some (already broken) intersections. also grab fresh osm and a new traffic signal
This commit is contained in:
parent
614354271a
commit
eeb70030c2
2
Cargo.lock
generated
2
Cargo.lock
generated
@ -2814,7 +2814,7 @@ dependencies = [
|
|||||||
[[package]]
|
[[package]]
|
||||||
name = "seattle_traffic_signals"
|
name = "seattle_traffic_signals"
|
||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
source = "git+https://github.com/dabreegster/seattle_traffic_signals#22d7d7b378a8467ef5196236d4fd5de68a24e88c"
|
source = "git+https://github.com/dabreegster/seattle_traffic_signals#c110e0dfb330a3fd9dcfbb8df45403adf0d10c8e"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"include_dir 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
"include_dir 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"serde 1.0.110 (registry+https://github.com/rust-lang/crates.io-index)",
|
"serde 1.0.110 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
@ -1,55 +1,55 @@
|
|||||||
data/input/krakow/osm/huge_krakow.osm,0b098456c8ae844ff240ca9fe3b617d1,https://www.dropbox.com/s/fe2e8qzd4g5tkoy/huge_krakow.osm.zip?dl=0
|
data/input/krakow/osm/huge_krakow.osm,03bae13bcf9461236b81dd1f0a74696d,https://www.dropbox.com/s/ooqaw4z5yfwucql/huge_krakow.osm.zip?dl=0
|
||||||
data/input/krakow/osm/malopolskie-latest.osm.pbf,d848a278092001aaab3ced09de4d98ff,https://www.dropbox.com/s/ia2uwy3z52r6hpe/malopolskie-latest.osm.pbf.zip?dl=0
|
data/input/krakow/osm/malopolskie-latest.osm.pbf,36071de68f68c516fe81300c2d1940a9,https://www.dropbox.com/s/4718vobelcz32id/malopolskie-latest.osm.pbf.zip?dl=0
|
||||||
data/input/raw_maps/ballard.bin,f15f2fd87b0cac16fa0683a978971adf,https://www.dropbox.com/s/7g761ophke8h5o6/ballard.bin.zip?dl=0
|
data/input/raw_maps/ballard.bin,34ee5e25dc7fae4d1afffced0e11133e,https://www.dropbox.com/s/dczk7174xmdij2k/ballard.bin.zip?dl=0
|
||||||
data/input/raw_maps/downtown.bin,68c6d2c200916e1b7c41a52e1db83d77,https://www.dropbox.com/s/jr9lu60f14ow2tn/downtown.bin.zip?dl=0
|
data/input/raw_maps/downtown.bin,dbafee6ab45aaa55e95360ce1b3cfe2c,https://www.dropbox.com/s/5bhmnwhjfbdr73y/downtown.bin.zip?dl=0
|
||||||
data/input/raw_maps/huge_krakow.bin,f3a5700b1c8c9fab48e8ed952dcc6ee3,https://www.dropbox.com/s/6208nglhzvjkj0l/huge_krakow.bin.zip?dl=0
|
data/input/raw_maps/huge_krakow.bin,dee71f3a27fb5d412b0b8d5f820dbc8f,https://www.dropbox.com/s/8r9sc6sdhh3sr2a/huge_krakow.bin.zip?dl=0
|
||||||
data/input/raw_maps/huge_seattle.bin,182ee725ca939a6df1743302b7f32650,https://www.dropbox.com/s/kocsgguvu5t2gul/huge_seattle.bin.zip?dl=0
|
data/input/raw_maps/huge_seattle.bin,8ed56005a5b5fc50e08dfdfb54a5b93d,https://www.dropbox.com/s/ldsv4rgpm4s47jv/huge_seattle.bin.zip?dl=0
|
||||||
data/input/raw_maps/lakeslice.bin,b145e5dee9c953e0e0700843d6c96ac7,https://www.dropbox.com/s/wrmxud893nt427w/lakeslice.bin.zip?dl=0
|
data/input/raw_maps/lakeslice.bin,b145e5dee9c953e0e0700843d6c96ac7,https://www.dropbox.com/s/wrmxud893nt427w/lakeslice.bin.zip?dl=0
|
||||||
data/input/raw_maps/montlake.bin,712532a30baa5225aca621fd1f1f7f0a,https://www.dropbox.com/s/evwmldb5872nf0u/montlake.bin.zip?dl=0
|
data/input/raw_maps/montlake.bin,02aeaafd38499339d8574a91d49eb78a,https://www.dropbox.com/s/8gu9v36ngqs5ylf/montlake.bin.zip?dl=0
|
||||||
data/input/raw_maps/south_seattle.bin,9c7e5d352405efbd0234c4ddb92ed1d4,https://www.dropbox.com/s/lh2t2otcl15oo86/south_seattle.bin.zip?dl=0
|
data/input/raw_maps/south_seattle.bin,81abad5c266a0a074679697249e53486,https://www.dropbox.com/s/rojped5f21sj0gs/south_seattle.bin.zip?dl=0
|
||||||
data/input/raw_maps/udistrict.bin,a45f45140c03da4abf8d698cda580133,https://www.dropbox.com/s/plspsqay9c77fwz/udistrict.bin.zip?dl=0
|
data/input/raw_maps/udistrict.bin,ee9a8e476096c378f41ce6600ca2dea4,https://www.dropbox.com/s/58a90wvzmlptnxo/udistrict.bin.zip?dl=0
|
||||||
data/input/raw_maps/west_seattle.bin,09143db3acb0354d2bc202ca1b93fa39,https://www.dropbox.com/s/nxl6qh4mr2mz1ng/west_seattle.bin.zip?dl=0
|
data/input/raw_maps/west_seattle.bin,68e1469e777df5cd0cd0d71923429805,https://www.dropbox.com/s/90ydkk1peuevt51/west_seattle.bin.zip?dl=0
|
||||||
data/input/screenshots/downtown.zip,4df6e66d60791eddb29cb2df7a42d2b9,https://www.dropbox.com/s/qawd35wz62m2acl/downtown.zip.zip?dl=0
|
data/input/screenshots/downtown.zip,44988ee69685062557bee477ff8a1853,https://www.dropbox.com/s/qawd35wz62m2acl/downtown.zip.zip?dl=0
|
||||||
data/input/screenshots/huge_krakow.zip,ec769392353bc2faedbb0900426d1341,https://www.dropbox.com/s/dbzon7k5ukndtza/huge_krakow.zip.zip?dl=0
|
data/input/screenshots/huge_krakow.zip,e1caa42e6627358c8c25276be8abc3ff,https://www.dropbox.com/s/dbzon7k5ukndtza/huge_krakow.zip.zip?dl=0
|
||||||
data/input/screenshots/lakeslice.zip,1be026bf7ae86fa6aa83a9ef3df7867c,https://www.dropbox.com/s/z0z96lsn7bunqfy/lakeslice.zip.zip?dl=0
|
data/input/screenshots/lakeslice.zip,5fc8a5cb061d2df40fefd1599470e9f7,https://www.dropbox.com/s/z0z96lsn7bunqfy/lakeslice.zip.zip?dl=0
|
||||||
data/input/screenshots/montlake.zip,f7f972a167dd11be4de82e5c9da9eff1,https://www.dropbox.com/s/r9vkgwesqklfuq2/montlake.zip.zip?dl=0
|
data/input/screenshots/montlake.zip,98678d91a22b5839a968432bfc9410af,https://www.dropbox.com/s/r9vkgwesqklfuq2/montlake.zip.zip?dl=0
|
||||||
data/input/screenshots/udistrict.zip,362c1a09ec6ab4277157513d315c9788,https://www.dropbox.com/s/ecnt1tyza48y9o2/udistrict.zip.zip?dl=0
|
data/input/screenshots/udistrict.zip,95302b49c910a972307204bb7dbda971,https://www.dropbox.com/s/ecnt1tyza48y9o2/udistrict.zip.zip?dl=0
|
||||||
data/input/seattle/N47W122.hgt,0db4e23e51f7680538b0bbbc72208e07,https://www.dropbox.com/s/mmb4mgutwotijdw/N47W122.hgt.zip?dl=0
|
data/input/seattle/N47W122.hgt,0db4e23e51f7680538b0bbbc72208e07,https://www.dropbox.com/s/mmb4mgutwotijdw/N47W122.hgt.zip?dl=0
|
||||||
data/input/seattle/blockface.bin,add872bab9040ae911366328a230f8b5,https://www.dropbox.com/s/rxd2care60tbe75/blockface.bin.zip?dl=0
|
data/input/seattle/blockface.bin,add872bab9040ae911366328a230f8b5,https://www.dropbox.com/s/rxd2care60tbe75/blockface.bin.zip?dl=0
|
||||||
data/input/seattle/blockface.kml,350bd9e59bf2af4e885a7c0741e6ee6b,https://www.dropbox.com/s/ukknmpjdvilncq9/blockface.kml.zip?dl=0
|
data/input/seattle/blockface.kml,350bd9e59bf2af4e885a7c0741e6ee6b,https://www.dropbox.com/s/ukknmpjdvilncq9/blockface.kml.zip?dl=0
|
||||||
data/input/seattle/offstreet_parking.bin,a33c05e8962dfe10a7a14b9eb6413803,https://www.dropbox.com/s/7j2gwb18685kd5u/offstreet_parking.bin.zip?dl=0
|
data/input/seattle/offstreet_parking.bin,a33c05e8962dfe10a7a14b9eb6413803,https://www.dropbox.com/s/7j2gwb18685kd5u/offstreet_parking.bin.zip?dl=0
|
||||||
data/input/seattle/offstreet_parking.kml,e24d1c308ca739df73621846c7b7847c,https://www.dropbox.com/s/dkkkpywob7cdo57/offstreet_parking.kml.zip?dl=0
|
data/input/seattle/offstreet_parking.kml,e24d1c308ca739df73621846c7b7847c,https://www.dropbox.com/s/dkkkpywob7cdo57/offstreet_parking.kml.zip?dl=0
|
||||||
data/input/seattle/osm/ballard.osm,b0d304caf28dab951f544567cff2bf32,https://www.dropbox.com/s/25i2e5ztndggijn/ballard.osm.zip?dl=0
|
data/input/seattle/osm/ballard.osm,06b4ed9280a004e816b66c6fd1f76066,https://www.dropbox.com/s/dadzwhwfgfhpe3z/ballard.osm.zip?dl=0
|
||||||
data/input/seattle/osm/downtown.osm,93ff3e6c06152e0bf9c99498445282da,https://www.dropbox.com/s/d64ha2060cq9oeh/downtown.osm.zip?dl=0
|
data/input/seattle/osm/downtown.osm,7a837ff497495f896614303d71923f14,https://www.dropbox.com/s/44oakescjjebyfg/downtown.osm.zip?dl=0
|
||||||
data/input/seattle/osm/huge_seattle.osm,c25311813f02bd2043d11024fe35267b,https://www.dropbox.com/s/5be3ufmoy42gw58/huge_seattle.osm.zip?dl=0
|
data/input/seattle/osm/huge_seattle.osm,f0556627caf76db901ac5fe244285fab,https://www.dropbox.com/s/sg472oq40zz7p0d/huge_seattle.osm.zip?dl=0
|
||||||
data/input/seattle/osm/lakeslice.osm,431da0077988f3e85fc43321bb8c793e,https://www.dropbox.com/s/ynesf6p1jreevv9/lakeslice.osm.zip?dl=0
|
data/input/seattle/osm/lakeslice.osm,a592d77833d99ef7969bedd2129075b9,https://www.dropbox.com/s/9zqrgvgm529kwns/lakeslice.osm.zip?dl=0
|
||||||
data/input/seattle/osm/montlake.osm,d6403149e1f13a837a93c63659d6beb3,https://www.dropbox.com/s/z6deuqxf2sz596u/montlake.osm.zip?dl=0
|
data/input/seattle/osm/montlake.osm,d151c1d711452c6c279145eef8fd45c4,https://www.dropbox.com/s/hvjnwcyhcdl3f7z/montlake.osm.zip?dl=0
|
||||||
data/input/seattle/osm/south_seattle.osm,856ba9af0751432d40f51c0bec8a1664,https://www.dropbox.com/s/5rc06uj8m5z2hlt/south_seattle.osm.zip?dl=0
|
data/input/seattle/osm/south_seattle.osm,bfffbfee550f627f9d61f127fab31855,https://www.dropbox.com/s/23ur33gldoo9hth/south_seattle.osm.zip?dl=0
|
||||||
data/input/seattle/osm/udistrict.osm,184c269bd39ac6d475c1d31b01af824f,https://www.dropbox.com/s/35pu17pckr55p74/udistrict.osm.zip?dl=0
|
data/input/seattle/osm/udistrict.osm,9b6ba4a130ce6e791564e739c6c34903,https://www.dropbox.com/s/nl1f0lpzej2rant/udistrict.osm.zip?dl=0
|
||||||
data/input/seattle/osm/washington-latest.osm.pbf,0db475bae90a383273865215f5b61f15,https://www.dropbox.com/s/lowvuydkyypnjwi/washington-latest.osm.pbf.zip?dl=0
|
data/input/seattle/osm/washington-latest.osm.pbf,250d9706d97466356e47e613cade7989,https://www.dropbox.com/s/nuastb68n0vi2lv/washington-latest.osm.pbf.zip?dl=0
|
||||||
data/input/seattle/osm/west_seattle.osm,924178166c37e2cc6c284783d27be459,https://www.dropbox.com/s/nkq6xr8jhqk5k9z/west_seattle.osm.zip?dl=0
|
data/input/seattle/osm/west_seattle.osm,1dda33df0fe65226060164c37d59295c,https://www.dropbox.com/s/j949ws29depbop4/west_seattle.osm.zip?dl=0
|
||||||
data/input/seattle/parcels.bin,58c55a6e18ff3c5e08fa719006b6edf6,https://www.dropbox.com/s/hxc1dbtfpsu6203/parcels.bin.zip?dl=0
|
data/input/seattle/parcels.bin,37da94a682b27ff5ff863bee1a2cdf70,https://www.dropbox.com/s/fy0aj4bmwz38w5z/parcels.bin.zip?dl=0
|
||||||
data/input/seattle/parcels_urbansim.txt,db63d7d606e8702d12f9399e87e6a00f,https://www.dropbox.com/s/6g8rbsf200dssj3/parcels_urbansim.txt.zip?dl=0
|
data/input/seattle/parcels_urbansim.txt,db63d7d606e8702d12f9399e87e6a00f,https://www.dropbox.com/s/6g8rbsf200dssj3/parcels_urbansim.txt.zip?dl=0
|
||||||
data/input/seattle/popdat.bin,ad38e1f20ce71f488112fe81e32798d2,https://www.dropbox.com/s/ajqii1qpfke8063/popdat.bin.zip?dl=0
|
data/input/seattle/popdat.bin,1aa2569c7e5a5a4773d7ca706d60432d,https://www.dropbox.com/s/p0g5cohy3p40p71/popdat.bin.zip?dl=0
|
||||||
data/input/seattle/trips_2014.csv,d4a8e733045b28c0385fb81359d6df03,https://www.dropbox.com/s/5ppravwmk6bf20d/trips_2014.csv.zip?dl=0
|
data/input/seattle/trips_2014.csv,d4a8e733045b28c0385fb81359d6df03,https://www.dropbox.com/s/5ppravwmk6bf20d/trips_2014.csv.zip?dl=0
|
||||||
data/system/cities/seattle.bin,9ed9ff25b3f3941fecf530b3815a1b05,https://www.dropbox.com/s/nwb29tt4koqk6um/seattle.bin.zip?dl=0
|
data/system/cities/seattle.bin,7019f93dac8ba704566049f6d253e533,https://www.dropbox.com/s/1k23g2q1nrmbh1m/seattle.bin.zip?dl=0
|
||||||
data/system/maps/ballard.bin,4e7bcd6fa971da03ba0d7fc87bfb240f,https://www.dropbox.com/s/ec7yg6d2aclcgop/ballard.bin.zip?dl=0
|
data/system/maps/ballard.bin,c2f643a65c0b9ecbc8374d1e2cc60bcf,https://www.dropbox.com/s/fil9kcrk5l7r1fn/ballard.bin.zip?dl=0
|
||||||
data/system/maps/downtown.bin,789690697d79505522e784b475dcc046,https://www.dropbox.com/s/vpylkr71x6wue0m/downtown.bin.zip?dl=0
|
data/system/maps/downtown.bin,603198543115ae2b72e69d0b1ca96e54,https://www.dropbox.com/s/u1b92n7126strx3/downtown.bin.zip?dl=0
|
||||||
data/system/maps/huge_krakow.bin,bb0c97e39ea7142a9856c01f8673b58d,https://www.dropbox.com/s/dnzxcg9lmo0yu1t/huge_krakow.bin.zip?dl=0
|
data/system/maps/huge_krakow.bin,27096c2d517cff77476824327546eadb,https://www.dropbox.com/s/qyrjzbl8010a76n/huge_krakow.bin.zip?dl=0
|
||||||
data/system/maps/huge_seattle.bin,b8912032d14023f7d2c036e3c119c6cb,https://www.dropbox.com/s/joezpphe2y4xtz0/huge_seattle.bin.zip?dl=0
|
data/system/maps/huge_seattle.bin,21cea6688896df39b84ae8d5295ebe63,https://www.dropbox.com/s/gfylby17ljl6quv/huge_seattle.bin.zip?dl=0
|
||||||
data/system/maps/lakeslice.bin,968eacb5331034944b3ae90ef14100bb,https://www.dropbox.com/s/g771j6pdkap0vjw/lakeslice.bin.zip?dl=0
|
data/system/maps/lakeslice.bin,5e49702c7af8d635f5b0fe2271c1eaa6,https://www.dropbox.com/s/bk5nmfjpya688ao/lakeslice.bin.zip?dl=0
|
||||||
data/system/maps/montlake.bin,04faf98ee6e6e40998b46d6dffd71288,https://www.dropbox.com/s/zrkn57g3bfp3ky2/montlake.bin.zip?dl=0
|
data/system/maps/montlake.bin,c63ec0e9c07fe4d471795def80f595cc,https://www.dropbox.com/s/xph355bczlkv21a/montlake.bin.zip?dl=0
|
||||||
data/system/maps/south_seattle.bin,e3f585a7365048b5a6ad48dd47758017,https://www.dropbox.com/s/022ehrh4r08fsrd/south_seattle.bin.zip?dl=0
|
data/system/maps/south_seattle.bin,01aab7ac2da951a8ee146c89f30a918d,https://www.dropbox.com/s/31p4wctn2zu0yfa/south_seattle.bin.zip?dl=0
|
||||||
data/system/maps/udistrict.bin,864459a858f573f95937a82080278804,https://www.dropbox.com/s/m8quryc6n0ffo3j/udistrict.bin.zip?dl=0
|
data/system/maps/udistrict.bin,a967aaa7071c7d89072f2c69d9316eb8,https://www.dropbox.com/s/4l6ti36v11uvowv/udistrict.bin.zip?dl=0
|
||||||
data/system/maps/west_seattle.bin,75f3395beeb04bd477faf2c2efdc017e,https://www.dropbox.com/s/wlg18qsw9sewkji/west_seattle.bin.zip?dl=0
|
data/system/maps/west_seattle.bin,c39d362ef2d95ece021d009da814aabe,https://www.dropbox.com/s/47e0ovfolaiyojw/west_seattle.bin.zip?dl=0
|
||||||
data/system/prebaked_results/lakeslice/weekday.bin,53ba42ec207e868eab5506e3b7363064,https://www.dropbox.com/s/84wu1rwie10aoce/weekday.bin.zip?dl=0
|
data/system/prebaked_results/lakeslice/weekday.bin,53ba42ec207e868eab5506e3b7363064,https://www.dropbox.com/s/84wu1rwie10aoce/weekday.bin.zip?dl=0
|
||||||
data/system/prebaked_results/montlake/car vs bike contention.bin,1fac82d6dcd567874fd6e0b106956dd9,https://www.dropbox.com/s/jefg0ikjy9dsrdd/car%20vs%20bike%20contention.bin.zip?dl=0
|
data/system/prebaked_results/montlake/car vs bike contention.bin,1fac82d6dcd567874fd6e0b106956dd9,https://www.dropbox.com/s/jefg0ikjy9dsrdd/car%20vs%20bike%20contention.bin.zip?dl=0
|
||||||
data/system/prebaked_results/montlake/weekday.bin,d32acd99d4c1fe1792f822da980ddade,https://www.dropbox.com/s/rgi9ovr2j9iep0p/weekday.bin.zip?dl=0
|
data/system/prebaked_results/montlake/weekday.bin,f240b53fd33e45a29039553705d8a576,https://www.dropbox.com/s/3wsw4f6kkxvk1sr/weekday.bin.zip?dl=0
|
||||||
data/system/scenarios/ballard/weekday.bin,ece364faff895fd189e74352fe8626d4,https://www.dropbox.com/s/7wjlqrb5zfifluy/weekday.bin.zip?dl=0
|
data/system/scenarios/ballard/weekday.bin,d2b581d266ee9aa53310daa194427a92,https://www.dropbox.com/s/2zi0nkbx10y8w8b/weekday.bin.zip?dl=0
|
||||||
data/system/scenarios/downtown/weekday.bin,68aa6c83137960aa06853596342dbbf0,https://www.dropbox.com/s/ri7gi7fld5qodei/weekday.bin.zip?dl=0
|
data/system/scenarios/downtown/weekday.bin,b7b41aa8ab9b80ae0b92ec15ba7a9232,https://www.dropbox.com/s/043aw8ayw6ay17m/weekday.bin.zip?dl=0
|
||||||
data/system/scenarios/huge_seattle/weekday.bin,63972f6752f4613a1446a3902fededf3,https://www.dropbox.com/s/1n5vhtr447viyxe/weekday.bin.zip?dl=0
|
data/system/scenarios/huge_seattle/weekday.bin,7fa3e6752fd1d5af6c63d752ccd14171,https://www.dropbox.com/s/xvu146rho6af5r5/weekday.bin.zip?dl=0
|
||||||
data/system/scenarios/lakeslice/weekday.bin,e6c33cc6b5abf817daa04e7bb2b3354a,https://www.dropbox.com/s/zl0v3ymv2lelwkh/weekday.bin.zip?dl=0
|
data/system/scenarios/lakeslice/weekday.bin,a8747683db13ca949c2765781a742a4a,https://www.dropbox.com/s/v03onrceyzvsdni/weekday.bin.zip?dl=0
|
||||||
data/system/scenarios/montlake/weekday.bin,3b1454d83901a671b0f532c74ca76a3f,https://www.dropbox.com/s/q79la99l7cychba/weekday.bin.zip?dl=0
|
data/system/scenarios/montlake/weekday.bin,5196126cec763107224da08cc39149da,https://www.dropbox.com/s/vquzt1jzy39doms/weekday.bin.zip?dl=0
|
||||||
data/system/scenarios/south_seattle/weekday.bin,ccbf5ac5138bbabef8e9fcf6e6f1900a,https://www.dropbox.com/s/i7fs1kgif8otldz/weekday.bin.zip?dl=0
|
data/system/scenarios/south_seattle/weekday.bin,931639cb0920c79090dbbd5f0f0d9b61,https://www.dropbox.com/s/ts3snue8p5rug80/weekday.bin.zip?dl=0
|
||||||
data/system/scenarios/udistrict/weekday.bin,b18b0ab6b0e13e9f927f557e49edfb0f,https://www.dropbox.com/s/mff06ifv2onx4qx/weekday.bin.zip?dl=0
|
data/system/scenarios/udistrict/weekday.bin,b1d9ddb99eaa349d5692b020b1e14e65,https://www.dropbox.com/s/u6qr3vusohl2uwt/weekday.bin.zip?dl=0
|
||||||
data/system/scenarios/west_seattle/weekday.bin,211172f12d5e2e93721336bb215b6a55,https://www.dropbox.com/s/o89xmcl5a2r07dl/weekday.bin.zip?dl=0
|
data/system/scenarios/west_seattle/weekday.bin,0029a60e744fddf299648b331621bafd,https://www.dropbox.com/s/y402to715i8zvyl/weekday.bin.zip?dl=0
|
||||||
|
@ -18,12 +18,10 @@ pub fn intersection_polygon(
|
|||||||
if i.roads.is_empty() {
|
if i.roads.is_empty() {
|
||||||
panic!("{} has no roads", i.id);
|
panic!("{} has no roads", i.id);
|
||||||
}
|
}
|
||||||
let mut road_endpts: Vec<Pt2D> = Vec::new();
|
|
||||||
|
|
||||||
// Turn all of the incident roads into two PolyLines (the "forwards" and "backwards" borders of
|
// Turn all of the incident roads into two PolyLines (the "forwards" and "backwards" borders of
|
||||||
// the road, if the roads were oriented to both be incoming to the intersection), both ending
|
// the road, if the roads were oriented to both be incoming to the intersection), both ending
|
||||||
// at the intersection (which may be different points for merged intersections!), and the last
|
// at the intersection, and the last segment of the center line.
|
||||||
// segment of the center line.
|
|
||||||
// TODO Maybe express the two incoming PolyLines as the "right" and "left"
|
// TODO Maybe express the two incoming PolyLines as the "right" and "left"
|
||||||
let mut lines: Vec<(OriginalRoad, Line, PolyLine, PolyLine)> = i
|
let mut lines: Vec<(OriginalRoad, Line, PolyLine, PolyLine)> = i
|
||||||
.roads
|
.roads
|
||||||
@ -38,22 +36,14 @@ pub fn intersection_polygon(
|
|||||||
} else {
|
} else {
|
||||||
panic!("Incident road {} doesn't have an endpoint at {}", id, i.id);
|
panic!("Incident road {} doesn't have an endpoint at {}", id, i.id);
|
||||||
};
|
};
|
||||||
road_endpts.push(pl.last_pt());
|
|
||||||
|
|
||||||
let pl_normal = driving_side.right_shift(pl.clone(), r.half_width);
|
let pl_normal = driving_side.right_shift(pl.clone(), r.half_width);
|
||||||
let pl_reverse = driving_side.left_shift(pl.clone(), r.half_width);
|
let pl_reverse = driving_side.left_shift(pl.clone(), r.half_width);
|
||||||
(*id, pl.last_line(), pl_normal, pl_reverse)
|
(*id, pl.last_line(), pl_normal, pl_reverse)
|
||||||
})
|
})
|
||||||
.collect();
|
.collect();
|
||||||
|
|
||||||
// Find the average of all road endpoints at the intersection. This is usually just a single
|
// Sort the polylines by the angle their last segment makes to the common point.
|
||||||
// point, except for merged intersections.
|
let intersection_center = lines[0].1.pt2();
|
||||||
road_endpts.sort_by_key(|pt| pt.to_hashable());
|
|
||||||
road_endpts.dedup();
|
|
||||||
let intersection_center = Pt2D::center(&road_endpts);
|
|
||||||
|
|
||||||
// Sort the polylines by the angle their last segment makes to the "center". This is normally
|
|
||||||
// equivalent to the angle of the last line, except when the intersection has been merged.
|
|
||||||
lines.sort_by_key(|(_, l, _, _)| {
|
lines.sort_by_key(|(_, l, _, _)| {
|
||||||
l.pt1().angle_to(intersection_center).normalized_degrees() as i64
|
l.pt1().angle_to(intersection_center).normalized_degrees() as i64
|
||||||
});
|
});
|
||||||
@ -74,11 +64,10 @@ fn generalized_trim_back(
|
|||||||
) -> (Vec<Pt2D>, Vec<(String, Polygon)>) {
|
) -> (Vec<Pt2D>, Vec<(String, Polygon)>) {
|
||||||
let mut debug = Vec::new();
|
let mut debug = Vec::new();
|
||||||
|
|
||||||
let mut road_lines: Vec<(OriginalRoad, PolyLine, PolyLine)> = Vec::new();
|
let mut road_lines: Vec<(OriginalRoad, PolyLine)> = Vec::new();
|
||||||
for (r, _, pl1, pl2) in lines {
|
for (r, _, pl1, pl2) in lines {
|
||||||
// TODO Argh, just use original lines.
|
road_lines.push((*r, pl1.clone()));
|
||||||
road_lines.push((*r, pl1.clone(), pl2.clone()));
|
road_lines.push((*r, pl2.clone()));
|
||||||
road_lines.push((*r, pl2.clone(), pl1.clone()));
|
|
||||||
|
|
||||||
if false {
|
if false {
|
||||||
debug.push((
|
debug.push((
|
||||||
@ -92,11 +81,10 @@ fn generalized_trim_back(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
let mut new_road_centers: BTreeMap<OriginalRoad, PolyLine> = BTreeMap::new();
|
|
||||||
|
|
||||||
// Intersect every road's boundary lines with all the other lines. Only side effect here is to
|
// Intersect every road's boundary lines with all the other lines. Only side effect here is to
|
||||||
// populate new_road_centers.
|
// populate new_road_centers.
|
||||||
for (r1, pl1, other_pl1) in &road_lines {
|
let mut new_road_centers: BTreeMap<OriginalRoad, PolyLine> = BTreeMap::new();
|
||||||
|
for (r1, pl1) in &road_lines {
|
||||||
// road_center ends at the intersection.
|
// road_center ends at the intersection.
|
||||||
let road_center = if roads[r1].dst_i == i {
|
let road_center = if roads[r1].dst_i == i {
|
||||||
roads[r1].trimmed_center_pts.clone()
|
roads[r1].trimmed_center_pts.clone()
|
||||||
@ -116,7 +104,7 @@ fn generalized_trim_back(
|
|||||||
road_center.clone()
|
road_center.clone()
|
||||||
};
|
};
|
||||||
|
|
||||||
for (r2, pl2, _) in &road_lines {
|
for (r2, pl2) in &road_lines {
|
||||||
if r1 == r2 {
|
if r1 == r2 {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
@ -138,10 +126,8 @@ fn generalized_trim_back(
|
|||||||
(pl1.clone(), pl2.clone())
|
(pl1.clone(), pl2.clone())
|
||||||
};
|
};
|
||||||
|
|
||||||
// TODO This only happens in Austin so far, haven't dove into why.
|
|
||||||
if use_pl1 == use_pl2 {
|
if use_pl1 == use_pl2 {
|
||||||
timer.warn(format!("{} and {} wind up with the same polyline", r1, r2));
|
panic!("{} and {} wind up with the same polyline", r1, r2);
|
||||||
continue;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if let Some((hit, angle)) = use_pl1.intersection(&use_pl2) {
|
if let Some((hit, angle)) = use_pl1.intersection(&use_pl2) {
|
||||||
@ -172,29 +158,6 @@ fn generalized_trim_back(
|
|||||||
|
|
||||||
// We could also do the update for r2, but we'll just get to it later.
|
// We could also do the update for r2, but we'll just get to it later.
|
||||||
}
|
}
|
||||||
|
|
||||||
// Another check... sometimes a boundary line crosss the perpendicular end of another
|
|
||||||
// road.
|
|
||||||
// TODO Reduce DEGENERATE_INTERSECTION_HALF_LENGTH to play with this.
|
|
||||||
if false {
|
|
||||||
let perp = Line::must_new(pl1.last_pt(), other_pl1.last_pt());
|
|
||||||
if perp.intersection(&pl2.last_line()).is_some() {
|
|
||||||
let new_perp = Line::must_new(
|
|
||||||
pl2.last_pt(),
|
|
||||||
pl2.last_pt()
|
|
||||||
.project_away(Distance::meters(1.0), perp.angle()),
|
|
||||||
)
|
|
||||||
.infinite();
|
|
||||||
// Find the hit closest to the intersection -- this matters for very curvy
|
|
||||||
// roads, like highway ramps.
|
|
||||||
if let Some(trim_to) = road_center.reversed().intersection_infinite(&new_perp) {
|
|
||||||
let trimmed = road_center.get_slice_ending_at(trim_to).unwrap();
|
|
||||||
if trimmed.length() < shortest_center.length() {
|
|
||||||
shortest_center = trimmed;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
let new_center = if roads[r1].dst_i == i {
|
let new_center = if roads[r1].dst_i == i {
|
||||||
@ -231,19 +194,6 @@ fn generalized_trim_back(
|
|||||||
{
|
{
|
||||||
if let Some((hit, _)) = fwd_pl.second_half().intersection(&adj_fwd_pl.second_half()) {
|
if let Some((hit, _)) = fwd_pl.second_half().intersection(&adj_fwd_pl.second_half()) {
|
||||||
endpoints.push(hit);
|
endpoints.push(hit);
|
||||||
} else {
|
|
||||||
// Style 1
|
|
||||||
/*endpoints.push(fwd_pl.last_pt());
|
|
||||||
endpoints.push(adj_fwd_pl.last_pt());*/
|
|
||||||
|
|
||||||
// Style 2
|
|
||||||
/*if let Some(hit) = fwd_pl
|
|
||||||
.last_line()
|
|
||||||
.infinite()
|
|
||||||
.intersection(&adj_fwd_pl.last_line().infinite())
|
|
||||||
{
|
|
||||||
endpoints.push(hit);
|
|
||||||
}*/
|
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
timer.warn(format!(
|
timer.warn(format!(
|
||||||
@ -286,19 +236,6 @@ fn generalized_trim_back(
|
|||||||
.intersection(&adj_back_pl.second_half())
|
.intersection(&adj_back_pl.second_half())
|
||||||
{
|
{
|
||||||
endpoints.push(hit);
|
endpoints.push(hit);
|
||||||
} else {
|
|
||||||
// Style 1
|
|
||||||
/*endpoints.push(back_pl.last_pt());
|
|
||||||
endpoints.push(adj_back_pl.last_pt());*/
|
|
||||||
|
|
||||||
// Style 2
|
|
||||||
/*if let Some(hit) = back_pl
|
|
||||||
.last_line()
|
|
||||||
.infinite()
|
|
||||||
.intersection(&adj_back_pl.last_line().infinite())
|
|
||||||
{
|
|
||||||
endpoints.push(hit);
|
|
||||||
}*/
|
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
timer.warn(format!(
|
timer.warn(format!(
|
||||||
@ -307,22 +244,12 @@ fn generalized_trim_back(
|
|||||||
id
|
id
|
||||||
));
|
));
|
||||||
}
|
}
|
||||||
|
|
||||||
/*if *id == OriginalRoad(384) {
|
|
||||||
let thin = Distance::meters(1.0);
|
|
||||||
debug.push((format!("back of {}", id), back_pl.make_polygons(thin)));
|
|
||||||
debug.push((
|
|
||||||
format!("adj back of {}", adj_back_id),
|
|
||||||
adj_back_pl.make_polygons(thin),
|
|
||||||
));
|
|
||||||
}*/
|
|
||||||
}
|
}
|
||||||
|
|
||||||
let main_result = close_off_polygon(Pt2D::approx_dedupe(endpoints, Distance::meters(0.1)));
|
|
||||||
|
|
||||||
// There are bad polygons caused by weird short roads. As a temporary workaround, detect cases
|
// There are bad polygons caused by weird short roads. As a temporary workaround, detect cases
|
||||||
// where polygons dramatically double back on themselves and force the polygon to proceed
|
// where polygons dramatically double back on themselves and force the polygon to proceed
|
||||||
// around its center.
|
// around its center.
|
||||||
|
let main_result = close_off_polygon(Pt2D::approx_dedupe(endpoints, Distance::meters(0.1)));
|
||||||
let mut deduped = main_result.clone();
|
let mut deduped = main_result.clone();
|
||||||
deduped.pop();
|
deduped.pop();
|
||||||
deduped.sort_by_key(|pt| pt.to_hashable());
|
deduped.sort_by_key(|pt| pt.to_hashable());
|
||||||
@ -341,7 +268,7 @@ fn generalized_trim_back(
|
|||||||
(deduped, debug)
|
(deduped, debug)
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO Or always sort points?
|
// TODO Or always sort points? Helps some cases, hurts other for downtown Seattle.
|
||||||
/*endpoints.sort_by_key(|pt| pt.to_hashable());
|
/*endpoints.sort_by_key(|pt| pt.to_hashable());
|
||||||
endpoints = Pt2D::approx_dedupe(endpoints, Distance::meters(0.1));
|
endpoints = Pt2D::approx_dedupe(endpoints, Distance::meters(0.1));
|
||||||
let center = Pt2D::center(&endpoints);
|
let center = Pt2D::center(&endpoints);
|
||||||
|
@ -1256,6 +1256,9 @@ impl TripManager {
|
|||||||
pub fn all_arrivals_at_border(&self, at: IntersectionID) -> Vec<(Time, TripMode)> {
|
pub fn all_arrivals_at_border(&self, at: IntersectionID) -> Vec<(Time, TripMode)> {
|
||||||
let mut times = Vec::new();
|
let mut times = Vec::new();
|
||||||
for t in &self.trips {
|
for t in &self.trips {
|
||||||
|
if t.aborted {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
if let TripEndpoint::Border(i, _) = t.start {
|
if let TripEndpoint::Border(i, _) = t.start {
|
||||||
if i == at {
|
if i == at {
|
||||||
times.push((t.departure, t.mode));
|
times.push((t.departure, t.mode));
|
||||||
|
Loading…
Reference in New Issue
Block a user