diff --git a/.travis.yml b/.travis.yml index 8a62697ae..5068cac21 100644 --- a/.travis.yml +++ b/.travis.yml @@ -62,8 +62,8 @@ matrix: - npm ci --ignore-scripts script: - ./scripts/check_taginfo.py taginfo.json profiles/car.lua - - ${MASON} install clang-format 3.8.1 - - PATH=$(${MASON} prefix clang-format 3.8.1)/bin:${PATH} ./scripts/format.sh && ./scripts/error_on_dirty.sh + - ${MASON} install clang-format 10.0.0 + - PATH=$(${MASON} prefix clang-format 10.0.0)/bin:${PATH} ./scripts/format.sh && ./scripts/error_on_dirty.sh - node ./scripts/validate_changelog.js # See issue 4043 #- npm run docs && ./scripts/error_on_dirty.sh @@ -177,9 +177,17 @@ matrix: - os: osx osx_image: xcode9.2 - compiler: "mason-osx-release-node-8" + compiler: "mason-osx-release-node-12" # we use the xcode provides clang and don't install our own - env: ENABLE_MASON=ON BUILD_TYPE='Release' CUCUMBER_TIMEOUT=60000 CCOMPILER='clang' CXXCOMPILER='clang++' ENABLE_ASSERTIONS=ON ENABLE_LTO=ON NODE="8" + env: ENABLE_MASON=ON BUILD_TYPE='Release' CUCUMBER_TIMEOUT=60000 CCOMPILER='clang' CXXCOMPILER='clang++' ENABLE_ASSERTIONS=ON ENABLE_LTO=ON NODE="12" + after_success: + - ./scripts/travis/publish.sh + + - os: osx + osx_image: xcode9.2 + compiler: "mason-osx-release-node-14" + # we use the xcode provides clang and don't install our own + env: ENABLE_MASON=ON BUILD_TYPE='Release' CUCUMBER_TIMEOUT=60000 CCOMPILER='clang' CXXCOMPILER='clang++' ENABLE_ASSERTIONS=ON ENABLE_LTO=ON NODE="14" after_success: - ./scripts/travis/publish.sh @@ -195,12 +203,12 @@ matrix: # Node build jobs. These skip running the tests. - os: linux sudo: false - compiler: "node-8-mason-linux-release" + compiler: "node-14-mason-linux-release" addons: apt: sources: ['ubuntu-toolchain-r-test'] packages: ['libstdc++-4.9-dev'] - env: CLANG_VERSION='5.0.0' BUILD_TYPE='Release' ENABLE_MASON=ON ENABLE_LTO=ON JOBS=3 NODE="8" + env: CLANG_VERSION='5.0.0' BUILD_TYPE='Release' ENABLE_MASON=ON ENABLE_LTO=ON JOBS=3 NODE="14" install: - pushd ${OSRM_BUILD_DIR} - | @@ -219,12 +227,60 @@ matrix: - os: linux sudo: false - compiler: "node-8-mason-linux-debug" + compiler: "node-14-mason-linux-debug" addons: apt: sources: ['ubuntu-toolchain-r-test'] packages: ['libstdc++-4.9-dev'] - env: CLANG_VERSION='5.0.0' BUILD_TYPE='Debug' ENABLE_MASON=ON ENABLE_LTO=ON JOBS=3 NODE="8" + env: CLANG_VERSION='5.0.0' BUILD_TYPE='Debug' ENABLE_MASON=ON ENABLE_LTO=ON JOBS=3 NODE="14" + install: + - pushd ${OSRM_BUILD_DIR} + - | + cmake .. -DCMAKE_BUILD_TYPE=${BUILD_TYPE} \ + -DENABLE_MASON=${ENABLE_MASON:-OFF} \ + -DENABLE_NODE_BINDINGS=${ENABLE_NODE_BINDINGS:-OFF} \ + -DENABLE_CCACHE=ON \ + -DCMAKE_INSTALL_PREFIX=${OSRM_INSTALL_DIR} \ + -DENABLE_GLIBC_WORKAROUND=ON + - make --jobs=${JOBS} + - popd + script: + - npm run nodejs-tests + after_success: + - ./scripts/travis/publish.sh + + - os: linux + sudo: false + compiler: "node-12-mason-linux-release" + addons: + apt: + sources: ['ubuntu-toolchain-r-test'] + packages: ['libstdc++-4.9-dev'] + env: CLANG_VERSION='5.0.0' BUILD_TYPE='Release' ENABLE_MASON=ON ENABLE_LTO=ON JOBS=3 NODE="12" + install: + - pushd ${OSRM_BUILD_DIR} + - | + cmake .. -DCMAKE_BUILD_TYPE=${BUILD_TYPE} \ + -DENABLE_MASON=${ENABLE_MASON:-OFF} \ + -DENABLE_NODE_BINDINGS=${ENABLE_NODE_BINDINGS:-OFF} \ + -DENABLE_CCACHE=ON \ + -DCMAKE_INSTALL_PREFIX=${OSRM_INSTALL_DIR} \ + -DENABLE_GLIBC_WORKAROUND=ON + - make --jobs=${JOBS} + - popd + script: + - npm run nodejs-tests + after_success: + - ./scripts/travis/publish.sh + + - os: linux + sudo: false + compiler: "node-12-mason-linux-debug" + addons: + apt: + sources: ['ubuntu-toolchain-r-test'] + packages: ['libstdc++-4.9-dev'] + env: CLANG_VERSION='5.0.0' BUILD_TYPE='Debug' ENABLE_MASON=ON ENABLE_LTO=ON JOBS=3 NODE="12" install: - pushd ${OSRM_BUILD_DIR} - | @@ -510,6 +566,7 @@ script: - ./unit_tests/util-tests - ./unit_tests/server-tests - ./unit_tests/partitioner-tests + - ./unit_tests/customizer-tests - | if [ -z "${ENABLE_SANITIZER}" ] && [ "$TARGET_ARCH" != "i686" ]; then npm run nodejs-tests diff --git a/CHANGELOG.md b/CHANGELOG.md index 3a73315d6..3f6edd150 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,11 +1,29 @@ # Unreleased - - Changes from 5.21.0 + - Changes from 5.23.0 + - Features + - ADDED: Added support for multiple via-way restrictions. [#5907](https://github.com/Project-OSRM/osrm-backend/pull/5907) + - ADDED: Add node bindings support for Node 12, 14, and publish binaries [#5918](https://github.com/Project-OSRM/osrm-backend/pull/5918) + - REMOVED: we no longer publish Node 8 binary modules (they are still buildable from source) [#5918](https://github.com/Project-OSRM/osrm-backend/pull/5918) + - Routing: + - FIXED: Avoid copying ManyToMany table results [#5923](https://github.com/Project-OSRM/osrm-backend/pull/5923) + - FIXED: Reduce copying in API parameter constructors [#5925](https://github.com/Project-OSRM/osrm-backend/pull/5925) + - Misc: + - CHANGED: Unify `.osrm.turn_penalites_index` dump processing same with `.osrm.turn_weight_penalties` and `.osrm.turn_duration_penalties` [#5868](https://github.com/Project-OSRM/osrm-backend/pull/5868) + - Profile: + - ADDED: Profile debug script which fetches a way from OSM then outputs the result of the profile. [#5908](https://github.com/Project-OSRM/osrm-backend/pull/5908) + - Infrastructure + - CHANGED: Bundled protozero updated to v1.7.0. [#5858](https://github.com/Project-OSRM/osrm-backend/pull/5858) + - Windows: + - FIXED: Fix bit-shift overflow in MLD partition step. [#5878](https://github.com/Project-OSRM/osrm-backend/pull/5878) + - FIXED: Fix vector bool permutation in graph contraction step [#5882](https://github.com/Project-OSRM/osrm-backend/pull/5882) + - API: + - FIXED: Undo libosrm API break by adding old interface as method overload [#5861](https://github.com/Project-OSRM/osrm-backend/pull/5861) + +# 5.23.0 + - Changes from 5.22.0 - Build: - - ADDED: optionally build Node `lts` and `latest` bindings [#5347](https://github.com/Project-OSRM/osrm-backend/pull/5347) - FIXED: pessimistic calls to std::move [#5560](https://github.com/Project-OSRM/osrm-backend/pull/5561) - Features: - - ADDED: new waypoints parameter to the `route` plugin, enabling silent waypoints [#5345](https://github.com/Project-OSRM/osrm-backend/pull/5345) - - ADDED: data timestamp information in the response (saved in new file `.osrm.timestamp`). [#5115](https://github.com/Project-OSRM/osrm-backend/issues/5115) - ADDED: new API parameter - `snapping=any|default` to allow snapping to previously unsnappable edges [#5361](https://github.com/Project-OSRM/osrm-backend/pull/5361) - ADDED: keepalive support to the osrm-routed HTTP server [#5518](https://github.com/Project-OSRM/osrm-backend/pull/5518) - ADDED: flatbuffers output format support [#5513](https://github.com/Project-OSRM/osrm-backend/pull/5513) @@ -17,11 +35,25 @@ - CHANGED: default car weight was reduced to 2000 kg. [#5371](https://github.com/Project-OSRM/osrm-backend/pull/5371) - CHANGED: default car height was reduced to 2 meters. [#5389](https://github.com/Project-OSRM/osrm-backend/pull/5389) - FIXED: treat `bicycle=use_sidepath` as no access on the tagged way. [#5622](https://github.com/Project-OSRM/osrm-backend/pull/5622) + - FIXED: fix table result when source and destination on same one-way segment. [#5828](https://github.com/Project-OSRM/osrm-backend/pull/5828) + - FIXED: fix occasional segfault when swapping data with osrm-datastore and using `exclude=` [#5844](https://github.com/Project-OSRM/osrm-backend/pull/5844) + - FIXED: fix crash in MLD alternative search if source or target are invalid [#5851](https://github.com/Project-OSRM/osrm-backend/pull/5851) - Misc: - CHANGED: Reduce memory usage for raster source handling. [#5572](https://github.com/Project-OSRM/osrm-backend/pull/5572) - CHANGED: Add cmake option `ENABLE_DEBUG_LOGGING` to control whether output debug logging. [#3427](https://github.com/Project-OSRM/osrm-backend/issues/3427) + - CHANGED: updated extent of Hong Kong as left hand drive country. [#5535](https://github.com/Project-OSRM/osrm-backend/issues/5535) + - FIXED: corrected error message when failing to snap input coordinates [#5846](https://github.com/Project-OSRM/osrm-backend/pull/5846) - Infrastructure - REMOVED: STXXL support removed as STXXL became abandonware. [#5760](https://github.com/Project-OSRM/osrm-backend/pull/5760) + +# 5.22.0 + - Changes from 5.21.0 + - Build: + - ADDED: optionally build Node `lts` and `latest` bindings [#5347](https://github.com/Project-OSRM/osrm-backend/pull/5347) + - Features: + - ADDED: new waypoints parameter to the `route` plugin, enabling silent waypoints [#5345](https://github.com/Project-OSRM/osrm-backend/pull/5345) + - ADDED: data timestamp information in the response (saved in new file `.osrm.timestamp`). [#5115](https://github.com/Project-OSRM/osrm-backend/issues/5115) + # 5.21.0 - Changes from 5.20.0 - Features: diff --git a/appveyor-build.bat b/appveyor-build.bat index c24f92382..37cfd8f07 100644 --- a/appveyor-build.bat +++ b/appveyor-build.bat @@ -131,6 +131,10 @@ ECHO running extractor-tests.exe ... unit_tests\%Configuration%\extractor-tests.exe IF %ERRORLEVEL% EQU 1 GOTO ERROR +ECHO running contractor-tests.exe ... +unit_tests\%Configuration%\contractor-tests.exe +IF %ERRORLEVEL% EQU 1 GOTO ERROR + ECHO running engine-tests.exe ... unit_tests\%Configuration%\engine-tests.exe IF %ERRORLEVEL% EQU 1 GOTO ERROR @@ -143,34 +147,41 @@ ECHO running server-tests.exe ... unit_tests\%Configuration%\server-tests.exe IF %ERRORLEVEL% EQU 1 GOTO ERROR -::TODO: CH processing sometimes mysteriously hangs, need to find why and enable tests below. -::ECHO running library-tests.exe ... -::SET test_region=monaco -::SET test_region_ch=ch\monaco -::SET test_region_corech=corech\monaco -::SET test_region_mld=mld\monaco -::SET test_osm=%test_region%.osm.pbf -::IF NOT EXIST %test_osm% powershell Invoke-WebRequest http://project-osrm.wolt.com/testing/monaco.osm.pbf -OutFile %test_osm% -::ECHO running %Configuration%\osrm-extract.exe -p ../profiles/car.lua %test_osm% -::%Configuration%\osrm-extract.exe -::%Configuration%\osrm-extract.exe -p ../profiles/car.lua %test_osm% -::MKDIR ch -::XCOPY %test_region%.osrm.* ch\ -::XCOPY %test_region%.osrm ch\ -::MKDIR corech -::XCOPY %test_region%.osrm.* corech\ -::XCOPY %test_region%.osrm corech\ -::MKDIR mld -::XCOPY %test_region%.osrm.* mld\ -::XCOPY %test_region%.osrm mld\ -::%Configuration%\osrm-contract.exe %test_region_ch%.osrm -::%Configuration%\osrm-contract.exe --core 0.8 %test_region_corech%.osrm -::%Configuration%\osrm-partition.exe %test_region_mld%.osrm -::%Configuration%\osrm-customize.exe %test_region_mld%.osrm -::XCOPY /Y ch\*.* ..\test\data\ch\ -::XCOPY /Y corech\*.* ..\test\data\corech\ -::XCOPY /Y mld\*.* ..\test\data\mld\ -::unit_tests\%Configuration%\library-tests.exe +ECHO running partitioner-tests.exe ... +unit_tests\%Configuration%\partitioner-tests.exe +IF %ERRORLEVEL% EQU 1 GOTO ERROR + +ECHO running customizer-tests.exe ... +unit_tests\%Configuration%\customizer-tests.exe +IF %ERRORLEVEL% EQU 1 GOTO ERROR + +ECHO running library-tests.exe ... +SET test_region=monaco +SET test_region_ch=ch\monaco +SET test_region_corech=corech\monaco +SET test_region_mld=mld\monaco +SET test_osm=%test_region%.osm.pbf +IF NOT EXIST %test_osm% powershell Invoke-WebRequest http://project-osrm.wolt.com/testing/monaco.osm.pbf -OutFile %test_osm% +ECHO running %Configuration%\osrm-extract.exe -p ../profiles/car.lua %test_osm% +%Configuration%\osrm-extract.exe +%Configuration%\osrm-extract.exe -p ../profiles/car.lua %test_osm% +MKDIR ch +XCOPY %test_region%.osrm.* ch\ +XCOPY %test_region%.osrm ch\ +MKDIR corech +XCOPY %test_region%.osrm.* corech\ +XCOPY %test_region%.osrm corech\ +MKDIR mld +XCOPY %test_region%.osrm.* mld\ +XCOPY %test_region%.osrm mld\ +%Configuration%\osrm-contract.exe %test_region_ch%.osrm +%Configuration%\osrm-contract.exe --core 0.8 %test_region_corech%.osrm +%Configuration%\osrm-partition.exe %test_region_mld%.osrm +%Configuration%\osrm-customize.exe %test_region_mld%.osrm +XCOPY /Y ch\*.* ..\test\data\ch\ +XCOPY /Y corech\*.* ..\test\data\corech\ +XCOPY /Y mld\*.* ..\test\data\mld\ +unit_tests\%Configuration%\library-tests.exe :ERROR ECHO ~~~~~~~~~~~~~~~~~~~~~~ ERROR %~f0 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ diff --git a/data/driving_side.geojson b/data/driving_side.geojson index 6ae14ceac..9dc8e7652 100644 --- a/data/driving_side.geojson +++ b/data/driving_side.geojson @@ -11,348 +11,288 @@ "coordinates": [ [ [ - 159.78515624999997, - -21.943045533438166 + 113.573, + 22.186 ], [ - 163.828125, - -7.710991655433217 + 114, + 22.5 ], [ - 154.8632597923279, - 1.230288366531784 + 114.05534, + 22.503 ], [ - 130.49558401107788, - 5.900103419579043 + 114.0595, + 22.51422 ], [ - 122.8710722923279, - 4.5653879923552605 + 114.07345, + 22.51934 ], [ - 120.7177519798279, - 5.315150278601077 + 114.0786, + 22.53012 ], [ - 120.5749297142029, - 5.697896578851922 + 114.08512, + 22.53228 ], [ - 120.3277373313904, - 5.531158894311544 + 114.09034, + 22.53717 ], [ - 119.5312285423279, - 5.484682580410128 + 114.09611, + 22.53486 ], [ - 118.9105010032654, - 7.275207196686071 + 114.10602, + 22.53472 ], [ - 117.7734160423279, - 7.710906600862094 + 114.1115, + 22.52929 ], [ - 102.6562285423279, - 8.059144644195047 + 114.11522, + 22.5308 ], [ - 102.91990041732791, - 11.652152342254183 + 114.11649, + 22.53418 ], [ - 102.90481567382812, - 11.766536924462363 + 114.11979, + 22.53511 ], [ - 102.82928466796874, - 11.884821555123915 + 114.1244, + 22.5393 ], [ - 102.7716064453125, - 12.052751072179356 + 114.12729, + 22.53947 ], [ - 102.70843505859375, - 12.181649710171742 + 114.13018, + 22.54132 ], [ - 102.72628784179688, - 12.352075625709524 + 114.13807, + 22.5432 ], [ - 102.78533935546875, - 12.412436216375175 + 114.14429, + 22.54176 ], [ - 102.56423950195311, - 12.656417878339736 + 114.14441, + 22.54114 ], [ - 102.49008178710938, - 12.981809528732812 + 114.14846, + 22.54179 ], [ - 102.381591796875, - 13.18914225554674 + 114.14855, + 22.54397 ], [ - 102.34725952148438, - 13.352209751204438 + 114.15042, + 22.54593 ], [ - 102.37058401107791, - 13.539117223464746 + 114.14964, + 22.54954 ], [ - 103.11765432357788, - 14.243003670396702 + 114.15166, + 22.55168 ], [ - 103.53515625, - 14.424040444354699 + 114.15192, + 22.55438 ], [ - 104.1064453125, - 14.370833973406821 + 114.15642, + 22.55495 ], [ - 105.1391386985779, - 14.285594123582854 + 114.15841, + 22.55909 ], [ - 105.5126953125, - 14.530415228007362 + 114.16032, + 22.56153 ], [ - 105.46875, - 15.114552871944115 + 114.16162, + 22.56187 ], [ - 105.6005859375, - 15.559544421458103 + 114.1634, + 22.55931 ], [ - 105.413818359375, - 16.003575733881327 + 114.16553, + 22.5593 ], [ - 105.062255859375, - 16.06692895745012 + 114.16733, + 22.56119 ], [ - 104.75463867187499, - 16.488764934242077 + 114.16934, + 22.56093 ], [ - 104.7656035423279, - 17.308605942846185 + 114.17061, + 22.5597 ], [ - 103.95261526107788, - 18.25013846381984 + 114.17702, + 22.56 ], [ - 103.2934355735779, - 18.3752976396967 + 114.17798, + 22.55546 ], [ - 102.67820119857791, - 17.85320841659695 + 114.18401, + 22.5552 ], [ - 102.1069121360779, - 18.166648857895012 + 114.18673, + 22.55468 ], [ - 101.0302519798279, - 17.56016467227813 + 114.1878, + 22.55545 ], [ - 101.326904296875, - 18.999802829053262 + 114.18979, + 22.55446 ], [ - 101.2060546875, - 19.611543503814232 + 114.1955, + 22.55564 ], [ - 100.7666015625, - 19.476950206488414 + 114.19674, + 22.55691 ], [ - 100.404052734375, - 19.72534224805787 + 114.20005, + 22.55717 ], [ - 100.546875, - 20.148784632164155 + 114.20376, + 22.55623 ], [ - 100.14038085937499, - 20.396123272467616 + 114.20884, + 22.55672 ], [ - 99.052734375, - 20.16941122761028 + 114.22438, + 22.55055 ], [ - 99.03076171875, - 19.735683578629445 + 114.2264, + 22.5476 ], [ - 98.59130859375, - 19.663280219987662 + 114.22545, + 22.54528 ], [ - 98.0419921875, - 19.797717490704738 + 114.22661, + 22.54339 ], [ - 97.75634765625, - 19.155546551403607 + 114.32, + 22.576 ], [ - 97.3828125, - 18.510865709091377 + 114.45, + 22.43 ], [ - 97.9541015625, - 17.612610761099077 + 114.45, + 22.14 ], [ - 98.89892578125, - 16.351767849269347 + 113.9, + 22.14 ], [ - 98.59130859375, - 16.014136002085912 + 113.75, + 22.22 ], [ - 98.5693359375, - 15.368949896534705 + 113.553, + 22.095 ], [ - 98.19580078125, - 15.231189704767242 + 113.54678, + 22.1207 ], [ - 98.382568359375, - 14.732386081418454 + 113.5456, + 22.1207 ], [ - 99.16257619857791, - 13.560478307112557 + 113.54076, + 22.12373 ], [ - 99.58142995834352, - 11.918331814112104 + 113.54016, + 22.13618 ], [ - 99.64872121810917, - 11.805501728366703 + 113.54701, + 22.13651 ], [ - 99.64111447334291, - 11.789853455395441 + 113.5475, + 22.14583 ], [ - 99.64106082916263, - 11.788918731650105 + 113.52456, + 22.17978 ], [ - 99.64245557785038, - 11.778699577993807 + 113.53623, + 22.20191 ], [ - 99.64048147201542, - 11.753071252426949 + 113.53299, + 22.21232 ], [ - 99.28342580795291, - 11.210712717455792 + 113.53497, + 22.21351 ], [ - 99.02662038803102, - 10.888581271040938 + 113.53735, + 22.21377 ], [ - 98.80277395248417, - 10.711866898462292 + 113.54156, + 22.21315 ], [ - 98.80826711654666, - 10.521547650627832 + 113.54385, + 22.21709 ], [ - 98.75196218490605, - 10.381094932405219 + 113.55849, + 22.21565 ], [ - 98.67231130599978, - 10.18246297848021 - ], - [ - 98.57343435287478, - 9.971534577962496 - ], - [ - 98.48417043685916, - 9.955303622625479 - ], - [ - 98.34615468978888, - 9.917428257015372 - ], - [ - 98.27405691146853, - 9.575000723804276 - ], - [ - 97.960946559906, - 9.493741474485672 - ], - [ - 97.13147878646853, - 9.786183416123238 - ], - [ - 92.56116628646856, - 15.147674168282906 - ], - [ - 90.71546316146853, - 0.759386240320313 - ], - [ - 109.34827566146853, - -15.46296618728526 - ], - [ - 107.23890066146849, - -38.418107244191766 - ], - [ - 130.4420256614686, - -41.64727816306098 - ], - [ - 160.67640066146856, - -53.96175413197849 - ], - [ - 185.81311941146856, - -48.23109085729586 - ], - [ - 184.93421316146848, - -33.73235247373941 - ], - [ - 159.78515624999997, - -21.943045533438166 + 113.573, + 22.186 ] ] ] @@ -368,56 +308,24 @@ "coordinates": [ [ [ - 147.15087890625003, - 44.13885576756881 + -75, + 18 ], [ - 145.52490234375, - 43.50075243569041 + -80, + 20.5 ], [ - 145.20629882812497, - 43.8186748554532 + -83, + 19 ], [ - 145.70068359375, - 44.55916341529182 + -77, + 16 ], [ - 141.48193359375, - 45.836454050187726 - ], - [ - 135.0439453125, - 37.71859032558816 - ], - [ - 127.88085937500001, - 32.565333160841035 - ], - [ - 125.61767578124999, - 27.196014383173306 - ], - [ - 122.54150390625, - 24.70691524106633 - ], - [ - 123.64013671874999, - 22.411028521558706 - ], - [ - 131.66015625, - 25.284437746983055 - ], - [ - 141.36108398437503, - 33.394759218577995 - ], - [ - 147.15087890625003, - 44.13885576756881 + -75, + 18 ] ] ] @@ -433,48 +341,440 @@ "coordinates": [ [ [ - 1.9116210937499998, - 61.19621314083867 + -64.33594, + 32.86113 ], [ - -2.0654296875, - 61.990587736204105 + -79.39819, + 27.21067 ], [ - -12.54638671875, - 55.94919982336746 + -80.63965, + 23.71998 ], [ - -12.260742187500002, - 50.62507306341437 + -73.39966, + 20.40642 ], [ - -1.9445800781249998, - 48.93693495409401 + -65.1709, + 19.20743 ], [ - -1.768798828125, - 49.210420445650286 + -65.09399, + 16.23577 ], [ - -2.142333984375, - 49.50380954152213 + -59.13391, + 16.80454 ], [ - -1.966552734375, - 49.930008124606886 + -62.64404, + 15.16228 ], [ - -0.3515625, - 49.69606181911566 + -59.43054, + 14.85985 ], [ - 2.5048828125, - 51.6180165487737 + -62.83081, + 13.64599 ], [ - 1.9116210937499998, - 61.19621314083867 + -61.80359, + 10.73752 + ], + [ + -62.08649, + 10.04729 + ], + [ + -61.06201, + 9.85522 + ], + [ + -59.81369, + 8.31274 + ], + [ + -59.8027, + 8.27469 + ], + [ + -59.83498, + 8.22712 + ], + [ + -59.94141, + 8.21149 + ], + [ + -59.99771, + 8.15576 + ], + [ + -59.97986, + 8.13265 + ], + [ + -59.99771, + 8.12041 + ], + [ + -60.00183, + 8.07147 + ], + [ + -60.05127, + 8.02524 + ], + [ + -60.09933, + 8.03747 + ], + [ + -60.12268, + 8.02388 + ], + [ + -60.14053, + 7.98988 + ], + [ + -60.36163, + 7.83345 + ], + [ + -60.53467, + 7.81713 + ], + [ + -60.5896, + 7.6375 + ], + [ + -60.72144, + 7.54493 + ], + [ + -60.5896, + 7.31888 + ], + [ + -60.63904, + 7.24532 + ], + [ + -60.54703, + 7.12542 + ], + [ + -60.46875, + 7.20309 + ], + [ + -60.37262, + 7.18401 + ], + [ + -60.29984, + 7.1445 + ], + [ + -60.2916, + 7.06819 + ], + [ + -60.39871, + 6.95097 + ], + [ + -60.66513, + 6.83235 + ], + [ + -60.71869, + 6.75053 + ], + [ + -60.91232, + 6.81735 + ], + [ + -60.94254, + 6.72053 + ], + [ + -61.14441, + 6.72326 + ], + [ + -61.23093, + 6.5773 + ], + [ + -61.1554, + 6.45314 + ], + [ + -61.14441, + 6.20199 + ], + [ + -61.39709, + 5.95619 + ], + [ + -60.71045, + 5.20036 + ], + [ + -60.21606, + 5.23319 + ], + [ + -59.99634, + 5.06906 + ], + [ + -60.13916, + 4.51071 + ], + [ + -59.69971, + 4.40118 + ], + [ + -59.5459, + 3.93002 + ], + [ + -59.87549, + 3.56825 + ], + [ + -59.7876, + 3.37086 + ], + [ + -60.01831, + 2.83332 + ], + [ + -59.90845, + 2.38335 + ], + [ + -59.69971, + 2.2626 + ], + [ + -59.77661, + 1.87833 + ], + [ + -59.65302, + 1.85087 + ], + [ + -59.69147, + 1.75754 + ], + [ + -59.61456, + 1.71361 + ], + [ + -59.55139, + 1.73283 + ], + [ + -59.36188, + 1.49123 + ], + [ + -59.26575, + 1.39238 + ], + [ + -58.92242, + 1.30726 + ], + [ + -58.83728, + 1.17271 + ], + [ + -58.71918, + 1.23037 + ], + [ + -58.71094, + 1.29902 + ], + [ + -58.49121, + 1.26058 + ], + [ + -58.461, + 1.37591 + ], + [ + -58.50494, + 1.38689 + ], + [ + -58.51044, + 1.46102 + ], + [ + -58.38135, + 1.4775 + ], + [ + -58.32642, + 1.57359 + ], + [ + -58.00507, + 1.49946 + ], + [ + -57.99133, + 1.65321 + ], + [ + -57.79907, + 1.69165 + ], + [ + -57.70844, + 1.71087 + ], + [ + -57.54364, + 1.68341 + ], + [ + -57.41455, + 1.94421 + ], + [ + -57.10693, + 1.97715 + ], + [ + -56.8103, + 1.85636 + ], + [ + -56.48071, + 1.92225 + ], + [ + -55.90942, + 1.81244 + ], + [ + -55.90942, + 2.04302 + ], + [ + -56.14014, + 2.26534 + ], + [ + -55.94788, + 2.53701 + ], + [ + -55.70892, + 2.39981 + ], + [ + -55.37933, + 2.43274 + ], + [ + -55.19257, + 2.53976 + ], + [ + -54.98108, + 2.57268 + ], + [ + -54.88495, + 2.43548 + ], + [ + -54.71191, + 2.46293 + ], + [ + -54.69543, + 2.34767 + ], + [ + -54.58832, + 2.32846 + ], + [ + -54.43451, + 2.43548 + ], + [ + -54.20654, + 2.76748 + ], + [ + -54.17358, + 3.12955 + ], + [ + -53.96484, + 3.57921 + ], + [ + -54.33838, + 4.00674 + ], + [ + -54.44412, + 4.52577 + ], + [ + -54.46884, + 4.91036 + ], + [ + -54.36653, + 5.13061 + ], + [ + -54.27727, + 5.26191 + ], + [ + -54.19968, + 5.3084 + ], + [ + -54.01222, + 5.54457 + ], + [ + -54.0239, + 5.64605 + ], + [ + -53.86322, + 5.94936 + ], + [ + -64.33594, + 32.86113 ] ] ] @@ -490,368 +790,736 @@ "coordinates": [ [ [ - 92.39501953125, - 21.514406720030294 + -14.5, + -6 ], [ - 92.74658203125, - 21.248422235627014 + 11.79657, + -17.27197 ], [ - 92.65869140625, - 22.06527806776582 + 12.03415, + -17.14866 ], [ - 93.1640625, - 22.30942584120019 + 12.38159, + -17.22213 ], [ - 93.2080078125, - 23.059516273509303 + 12.58484, + -17.22476 ], [ - 93.36181640625, - 24.066528197726857 + 13.01193, + -16.97405 ], [ - 94.21875, - 23.905926927314724 + 13.24951, + -17.00098 ], [ - 94.76806640624999, - 25.06569718553588 + 13.38135, + -16.98522 ], [ - 94.52636718749999, - 25.284437746983055 + 13.93341, + -17.38734 ], [ - 95.16357421875, - 26.13571361317392 + 18.42476, + -17.38996 ], [ - 95.1416015625, - 26.56887654795065 + 18.47763, + -17.46857 ], [ - 95.97656249999999, - 27.059125784374068 + 18.62663, + -17.64599 ], [ - 96.8115234375, - 27.332735136859146 + 18.79211, + -17.76177 ], [ - 97.18505859374999, - 27.15692045688088 + 18.92944, + -17.82061 ], [ - 96.92138671875, - 27.6251403350933 + 19.33044, + -17.84806 ], [ - 97.36083984375, - 27.955591004642553 + 19.66278, + -17.8644 ], [ - 97.3828125, - 28.285033294640684 + 19.74792, + -17.90557 ], [ - 96.7236328125, - 28.5941685062326 + 19.85161, + -17.87486 ], [ - 95.97656249999999, - 29.401319510041485 + 20.10361, + -17.90296 ], [ - 95.29541015625, - 29.075375179558346 + 20.18394, + -17.88401 ], [ - 94.7021484375, - 29.267232865200878 + 20.34737, + -17.88466 ], [ - 92.10937499999999, - 27.800209937418252 + 20.44693, + -17.91733 ], [ - 91.669921875, - 27.858503954841247 + 20.51697, + -17.96698 ], [ - 91.1865234375, - 28.110748760633534 + 20.83008, + -18.03032 ], [ - 90.4833984375, - 28.07198030177986 + 20.95711, + -17.97285 ], [ - 90.52734374999999, - 28.246327971048842 + 21.16997, + -17.93497 ], [ - 89.75830078125, - 28.323724553546015 + 21.42677, + -18.0264 ], [ - 88.9013671875, - 27.31321389856826 + 23.45032, + -17.63879 ], [ - 88.9013671875, - 27.89734922968426 + 22.00012, + -16.38866 ], [ - 88.5498046875, - 28.130127737874005 + 21.99944, + -13.00523 ], [ - 87.29736328125, - 27.877928333679495 + 24.03809, + -12.99118 ], [ - 85.14404296875, - 28.536274512989916 + 24.03809, + -10.91962 ], [ - 82.001953125, - 30.35391637229704 + 24.43359, + -11.09217 ], [ - 81.45263671875, - 30.41078179084589 + 24.45557, + -11.48002 ], [ - 81.18896484375, - 30.031055426540206 + 25.37842, + -11.19996 ], [ - 79.40917968749999, - 31.090574094954192 + 25.42236, + -11.60919 ], [ - 78.75, - 31.555133721172034 + 26.96045, + -11.97484 ], [ - 78.5357666015625, - 32.60698915452777 + 27.18018, + -11.60919 ], [ - 79.002685546875, - 32.33355894864106 + 28.125, + -12.42048 ], [ - 79.4146728515625, - 32.532920675187846 + 29.11377, + -13.36824 ], [ - 79.21142578125, - 33.18813395605041 + 29.1687, + -13.43771 ], [ - 78.8104248046875, - 33.829356907739296 + 29.55872, + -13.19716 ], [ - 79.024658203125, - 34.30260622622907 + 29.68506, + -13.2239 ], [ - 78.0908203125, - 34.912962495216966 + 29.62463, + -13.41099 ], [ - 78.134765625, - 35.505400093441324 + 29.80591, + -13.44305 ], [ - 76.761474609375, - 35.65729624809628 + 29.81415, + -12.14809 ], [ - 76.552734375, - 35.92464453144099 + 29.31152, + -12.55456 ], [ - 76.0693359375, - 35.97800618085566 + 28.41064, + -11.78133 ], [ - 75.69580078125, - 36.80928470205937 + 28.63037, + -10.70379 ], [ - 74.55322265625, - 37.10776507118514 + 28.65234, + -9.73071 ], [ - 73.10302734375, - 36.86204269508728 + 28.37219, + -9.24309 ], [ - 71.56494140625, - 36.38591277287651 + 28.89748, + -8.47916 ], [ - 71.2353515625, - 36.01356058518153 + 30.78644, + -8.26857 ], [ - 71.5869140625, - 35.15584570226544 + 29.39941, + -6.05316 ], [ - 70.9716796875, - 34.470335121217474 + 29.4873, + -4.45595 ], [ - 71.12548828125, - 34.27083595165 + 29.75922, + -4.46759 ], [ - 70.927734375, - 33.99802726234877 + 29.81415, + -4.36421 ], [ - 69.85107421874999, - 34.016241889667015 + 29.88007, + -4.36832 ], [ - 70.3125, - 33.32134852669881 + 30.04074, + -4.26699 ], [ - 69.521484375, - 33.063924198120645 + 30.07919, + -4.1629 ], [ - 69.23583984375, - 31.970803930433096 + 30.18356, + -4.08311 ], [ - 68.84033203125, - 31.541089879585808 + 30.1918, + -4.05126 ], [ - 68.48876953125, - 31.80289258670676 + 30.21566, + -4.04595 ], [ - 68.13720703125, - 31.82156451492074 + 30.22923, + -4.01136 ], [ - 67.5439453125, - 31.541089879585808 + 30.21326, + -3.99612 ], [ - 67.82958984375, - 31.372399104880525 + 30.25978, + -3.88755 ], [ - 67.12646484375, - 31.22219703210317 + 30.29274, + -3.86288 ], [ - 66.81884765625, - 31.297327991404266 + 30.34424, + -3.77245 ], [ - 66.4453125, - 30.939924331023445 + 30.39848, + -3.79095 ], [ - 66.3134765625, - 29.859701442126756 + 30.40878, + -3.76765 ], [ - 65.126953125, - 29.57345707301757 + 30.39548, + -3.7304 ], [ - 64.44580078125, - 29.592565403314087 + 30.39054, + -3.72821 ], [ - 64.072265625, - 29.401319510041485 + 30.3896, + -3.71918 ], [ - 62.4462890625, - 29.420460341013133 + 30.39093, + -3.7101 ], [ - 60.88623046875001, - 29.84064389983441 + 30.39514, + -3.70444 ], [ - 61.36962890625001, - 29.34387539941801 + 30.42028, + -3.64963 ], [ - 61.58935546875, - 28.9023972285585 + 30.46886, + -3.53501 ], [ - 61.89697265624999, - 28.51696944040106 + 30.67108, + -3.41335 ], [ - 62.77587890625, - 28.246327971048842 + 30.63297, + -3.34892 ], [ - 62.7978515625, - 27.254629577800063 + 30.84206, + -3.25535 ], [ - 63.25927734375, - 27.235094607795503 + 30.84549, + -3.16108 ], [ - 63.19335937499999, - 26.686729520004036 + 30.83485, + -3.09698 ], [ - 62.2705078125, - 26.509904531413927 + 30.7933, + -3.06235 ], [ - 62.24853515624999, - 26.31311263768267 + 30.82111, + -3.02258 ], [ - 61.85302734375001, - 26.27371402440643 + 30.84515, + -2.9739 ], [ - 61.58935546875, - 25.224820176765036 + 30.74764, + -2.99618 ], [ - 74.970703125, - 7.580327791330129 + 30.7037, + -2.97013 ], [ - 67.6318359375, - 4.521666342614804 + 30.66422, + -2.98967 ], [ - 72.4658203125, - -2.986927393334863 + 30.57632, + -2.90738 ], [ - 85.86914062500001, - 5.5941182188847876 + 30.49393, + -2.94441 ], [ - 92.39501953125, - 21.514406720030294 + 30.41016, + -2.87172 + ], + [ + 30.52002, + -2.39432 + ], + [ + 30.77545, + -2.38883 + ], + [ + 30.8606, + -2.31199 + ], + [ + 30.84961, + -2.19398 + ], + [ + 30.89081, + -2.07322 + ], + [ + 30.81116, + -1.96068 + ], + [ + 30.83862, + -1.6587 + ], + [ + 30.73425, + -1.4418 + ], + [ + 30.56259, + -1.33884 + ], + [ + 30.4541, + -1.05737 + ], + [ + 30.35797, + -1.06287 + ], + [ + 30.34149, + -1.13152 + ], + [ + 30.16571, + -1.34296 + ], + [ + 29.91852, + -1.48024 + ], + [ + 29.83887, + -1.31824 + ], + [ + 29.58344, + -1.39238 + ], + [ + 29.729, + 0.05493 + ], + [ + 29.96796, + 0.5136 + ], + [ + 29.9707, + 0.8569 + ], + [ + 30.22339, + 0.92281 + ], + [ + 30.24536, + 1.15349 + ], + [ + 30.47745, + 1.20772 + ], + [ + 31.30966, + 2.15693 + ], + [ + 31.20255, + 2.22211 + ], + [ + 31.20255, + 2.29278 + ], + [ + 31.16409, + 2.27906 + ], + [ + 31.13937, + 2.28318 + ], + [ + 31.13113, + 2.26534 + ], + [ + 31.07826, + 2.30033 + ], + [ + 31.0714, + 2.34767 + ], + [ + 31.00479, + 2.4005 + ], + [ + 30.97183, + 2.40461 + ], + [ + 30.94711, + 2.38746 + ], + [ + 30.94849, + 2.36276 + ], + [ + 30.9375, + 2.33532 + ], + [ + 30.88531, + 2.34012 + ], + [ + 30.83038, + 2.42176 + ], + [ + 30.74112, + 2.43274 + ], + [ + 30.76035, + 2.5864 + ], + [ + 30.90179, + 2.88132 + ], + [ + 30.76447, + 3.04178 + ], + [ + 30.93613, + 3.40239 + ], + [ + 30.94059, + 3.50588 + ], + [ + 30.85236, + 3.48601 + ], + [ + 30.90866, + 3.5936 + ], + [ + 30.95055, + 3.63918 + ], + [ + 30.94677, + 3.65391 + ], + [ + 30.9866, + 3.70187 + ], + [ + 31.00582, + 3.70701 + ], + [ + 31.02058, + 3.69708 + ], + [ + 31.16547, + 3.7954 + ], + [ + 31.28838, + 3.79643 + ], + [ + 31.52699, + 3.66282 + ], + [ + 31.7038, + 3.72449 + ], + [ + 31.82671, + 3.82794 + ], + [ + 31.96198, + 3.65596 + ], + [ + 31.95854, + 3.57099 + ], + [ + 32.04987, + 3.59155 + ], + [ + 32.07733, + 3.57099 + ], + [ + 32.0842, + 3.53672 + ], + [ + 32.20093, + 3.50657 + ], + [ + 32.21672, + 3.56448 + ], + [ + 32.19578, + 3.59977 + ], + [ + 32.41516, + 3.74504 + ], + [ + 32.72055, + 3.76782 + ], + [ + 32.89307, + 3.81219 + ], + [ + 33.02782, + 3.89371 + ], + [ + 33.18146, + 3.7793 + ], + [ + 33.51173, + 3.75258 + ], + [ + 33.98758, + 4.23309 + ], + [ + 34.05762, + 4.28342 + ], + [ + 34.38721, + 4.61065 + ], + [ + 35.94452, + 4.62023 + ], + [ + 35.95688, + 4.53467 + ], + [ + 36.04134, + 4.44568 + ], + [ + 36.89621, + 4.4491 + ], + [ + 38.14728, + 3.62992 + ], + [ + 38.55927, + 3.62033 + ], + [ + 38.92181, + 3.51068 + ], + [ + 39.56039, + 3.43392 + ], + [ + 39.87076, + 3.87522 + ], + [ + 40.76752, + 4.28753 + ], + [ + 41.16371, + 3.94372 + ], + [ + 41.89774, + 3.97797 + ], + [ + 41.31271, + 3.14463 + ], + [ + 40.98896, + 2.82869 + ], + [ + 40.99548, + -0.84042 + ], + [ + 41.7, + -1.8 + ], + [ + 41.7, + -49 + ], + [ + -27, + -60 + ], + [ + -65.7, + -52.5 + ], + [ + -14.5, + -6 ] ] ] @@ -867,272 +1535,20 @@ "coordinates": [ [ [ - 43.57177734375001, - -4.390228926463384 + 31.33301, + 35.47856 ], [ - 41.0009765625, - -0.8129610018708315 + 33.0249, + 33.75175 ], [ - 40.97900390625, - 2.7235830833483856 + 35.44189, + 36.02245 ], [ - 41.90185546875, - 3.995780512963038 - ], - [ - 41.15478515624999, - 3.9738609758391017 - ], - [ - 40.75927734375, - 4.3464112753331925 - ], - [ - 39.814453125, - 3.8423316311549156 - ], - [ - 39.55078125, - 3.447624666646865 - ], - [ - 38.14453125, - 3.6230713262356864 - ], - [ - 36.9580078125, - 4.477856485570586 - ], - [ - 35.9912109375, - 4.477856485570586 - ], - [ - 35.947265625, - 4.696879026871425 - ], - [ - 34.43115234375, - 4.631179340411012 - ], - [ - 33.94775390625, - 4.171115454867424 - ], - [ - 34.43115234375, - 3.6449998008920375 - ], - [ - 32.01416015625, - 3.601142320158735 - ], - [ - 31.81640625, - 3.8642546157214084 - ], - [ - 30.871582031249996, - 3.6230713262356864 - ], - [ - 30.78369140625, - 2.3943223575350774 - ], - [ - 31.289062500000004, - 2.152813583128846 - ], - [ - 30.454101562499996, - 1.1644706071806057 - ], - [ - 29.860839843749996, - 0.4833927027896987 - ], - [ - 29.553222656249996, - -1.2962761196418089 - ], - [ - 30.454101562499996, - -1.0546279422758742 - ], - [ - 30.91552734375, - -1.8014609294680355 - ], - [ - 30.871582031249996, - -2.3943223575350774 - ], - [ - 30.563964843750004, - -2.4162756547063857 - ], - [ - 30.43212890625, - -2.921097018708451 - ], - [ - 30.827636718749996, - -2.921097018708451 - ], - [ - 30.827636718749996, - -3.2502085616531686 - ], - [ - 30.322265625000004, - -3.864254615721396 - ], - [ - 29.970703124999996, - -4.3245014930191905 - ], - [ - 29.443359375, - -4.412136788910181 - ], - [ - 29.355468750000004, - -4.872047700241915 - ], - [ - 29.663085937499996, - -5.7690358661221355 - ], - [ - 29.729003906249996, - -6.620957270326323 - ], - [ - 31.09130859375, - -8.581021215641842 - ], - [ - 28.894042968749996, - -8.472372282909127 - ], - [ - 28.410644531249996, - -9.297306856327596 - ], - [ - 28.67431640625, - -9.925565912405494 - ], - [ - 28.652343749999996, - -10.703791711680724 - ], - [ - 28.36669921875, - -11.695272733029402 - ], - [ - 29.02587890625, - -12.340001834116316 - ], - [ - 29.77294921875, - -12.146745814539685 - ], - [ - 29.838867187500004, - -13.432366575813747 - ], - [ - 29.597167968750004, - -13.17577122442339 - ], - [ - 28.54248046875, - -12.790374787613588 - ], - [ - 27.9052734375, - -12.254127737657369 - ], - [ - 27.0703125, - -11.630715737981474 - ], - [ - 26.69677734375, - -11.953349393643416 - ], - [ - 25.356445312499996, - -11.566143767762844 - ], - [ - 25.356445312499996, - -11.199956869621811 - ], - [ - 24.41162109375, - -11.372338792141125 - ], - [ - 24.0380859375, - -10.898042159726009 - ], - [ - 23.994140624999996, - -12.961735843534306 - ], - [ - 21.97265625, - -13.025965926333539 - ], - [ - 21.9287109375, - -16.13026201203474 - ], - [ - 23.48876953125, - -17.644022027872712 - ], - [ - 21.4013671875, - -18.041421221891937 - ], - [ - 18.45703125, - -17.392579271057766 - ], - [ - 14.23828125, - -17.392579271057766 - ], - [ - 13.359375, - -16.951724234434423 - ], - [ - 12.5244140625, - -17.224758206624628 - ], - [ - 9.77783203125, - -17.245744208007117 - ], - [ - 13.359375, - -38.54816542304657 - ], - [ - 36.03515625, - -34.74161249883172 - ], - [ - 43.57177734375001, - -4.390228926463384 + 31.33301, + 35.47856 ] ] ] @@ -1148,24 +1564,20 @@ "coordinates": [ [ [ - 56.35986328125, - -21.125497636606266 + 14, + 36.5 ], [ - 59.23828124999999, - -21.125497636606266 + 15, + 36 ], [ - 59.23828124999999, - -19.642587534013032 + 14, + 35 ], [ - 56.35986328125, - -19.642587534013032 - ], - [ - 56.35986328125, - -21.125497636606266 + 14, + 36.5 ] ] ] @@ -1181,24 +1593,28 @@ "coordinates": [ [ [ - 70.42236328125, - -7.896029593273104 + 0, + 62 ], [ - 73.2623291015625, - -7.896029593273104 + 2.5, + 51.3 ], [ - 73.2623291015625, - -5.78543165536185 + -2, + 50 ], [ - 70.42236328125, - -5.78543165536185 + -1.9, + 49 ], [ - 70.42236328125, - -7.896029593273104 + -20, + 53 + ], + [ + 0, + 62 ] ] ] @@ -1214,24 +1630,1408 @@ "coordinates": [ [ [ - 49.39453125, - -8.146242825034385 + 180, + -35 ], [ - 60.6005859375, - -8.146242825034385 + 161, + -19 ], [ - 60.6005859375, - -2.67968661580376 + 167, + -12 ], [ - 49.39453125, - -2.67968661580376 + 180, + -22 ], [ - 49.39453125, - -8.146242825034385 + 180, + 4 + ], + [ + 170, + 3.7 + ], + [ + 127, + 5.7 + ], + [ + 118, + 2.7 + ], + [ + 119.5, + 5.4 + ], + [ + 117.2, + 7.5 + ], + [ + 102.6, + 8 + ], + [ + 102.9158, + 11.74099 + ], + [ + 102.76268, + 12.07357 + ], + [ + 102.70226, + 12.17158 + ], + [ + 102.74139, + 12.46474 + ], + [ + 102.53128, + 12.68857 + ], + [ + 102.49557, + 12.9256 + ], + [ + 102.49763, + 13.0064 + ], + [ + 102.4597, + 13.08199 + ], + [ + 102.43412, + 13.09026 + ], + [ + 102.39155, + 13.16407 + ], + [ + 102.35481, + 13.29341 + ], + [ + 102.35893, + 13.30945 + ], + [ + 102.34503, + 13.34837 + ], + [ + 102.35928, + 13.39797 + ], + [ + 102.3567, + 13.48095 + ], + [ + 102.36168, + 13.50582 + ], + [ + 102.33559, + 13.53787 + ], + [ + 102.33971, + 13.56023 + ], + [ + 102.35498, + 13.5649 + ], + [ + 102.36511, + 13.5785 + ], + [ + 102.40047, + 13.5679 + ], + [ + 102.42537, + 13.56891 + ], + [ + 102.44614, + 13.56123 + ], + [ + 102.48047, + 13.57091 + ], + [ + 102.53849, + 13.56757 + ], + [ + 102.5699, + 13.58526 + ], + [ + 102.57806, + 13.60486 + ], + [ + 102.62501, + 13.60845 + ], + [ + 102.62132, + 13.61295 + ], + [ + 102.60767, + 13.61562 + ], + [ + 102.57231, + 13.63331 + ], + [ + 102.56922, + 13.64082 + ], + [ + 102.54879, + 13.658 + ], + [ + 102.56252, + 13.68552 + ], + [ + 102.5972, + 13.70803 + ], + [ + 102.67084, + 13.74472 + ], + [ + 102.68818, + 13.75172 + ], + [ + 102.7014, + 13.7684 + ], + [ + 102.73161, + 13.77082 + ], + [ + 102.76543, + 13.85541 + ], + [ + 102.78397, + 13.93207 + ], + [ + 102.80388, + 13.94406 + ], + [ + 102.81607, + 13.96639 + ], + [ + 102.90705, + 14.02119 + ], + [ + 102.89726, + 14.0535 + ], + [ + 102.90095, + 14.0838 + ], + [ + 102.92421, + 14.10744 + ], + [ + 102.92378, + 14.12838 + ], + [ + 102.94147, + 14.15035 + ], + [ + 102.92953, + 14.17952 + ], + [ + 103.17535, + 14.33774 + ], + [ + 103.19939, + 14.32992 + ], + [ + 103.68553, + 14.44 + ], + [ + 103.94508, + 14.34157 + ], + [ + 104.05756, + 14.34589 + ], + [ + 104.06636, + 14.3419 + ], + [ + 104.26025, + 14.37749 + ], + [ + 104.50058, + 14.36984 + ], + [ + 104.57817, + 14.36019 + ], + [ + 104.6422, + 14.42387 + ], + [ + 104.66632, + 14.40234 + ], + [ + 104.68357, + 14.39877 + ], + [ + 104.71138, + 14.43169 + ], + [ + 104.72305, + 14.42188 + ], + [ + 104.71687, + 14.40043 + ], + [ + 104.75344, + 14.40459 + ], + [ + 104.80408, + 14.43867 + ], + [ + 104.83429, + 14.41573 + ], + [ + 104.99239, + 14.3838 + ], + [ + 105.05402, + 14.19783 + ], + [ + 105.47905, + 14.49186 + ], + [ + 105.60883, + 15.0005 + ], + [ + 105.46703, + 15.13005 + ], + [ + 105.48866, + 15.20237 + ], + [ + 105.59269, + 15.2716 + ], + [ + 105.58617, + 15.32823 + ], + [ + 105.50308, + 15.31912 + ], + [ + 105.46703, + 15.33948 + ], + [ + 105.49175, + 15.37921 + ], + [ + 105.59372, + 15.42869 + ], + [ + 105.59372, + 15.50927 + ], + [ + 105.60986, + 15.54871 + ], + [ + 105.62616, + 15.56492 + ], + [ + 105.62702, + 15.59129 + ], + [ + 105.63518, + 15.62742 + ], + [ + 105.63612, + 15.66056 + ], + [ + 105.5975, + 15.72088 + ], + [ + 105.49965, + 15.76681 + ], + [ + 105.46291, + 15.74517 + ], + [ + 105.43819, + 15.75459 + ], + [ + 105.40489, + 15.79424 + ], + [ + 105.34241, + 15.92039 + ], + [ + 105.37811, + 15.98344 + ], + [ + 105.39167, + 15.99136 + ], + [ + 105.41931, + 15.98608 + ], + [ + 105.42652, + 15.99764 + ], + [ + 105.41468, + 16.01661 + ], + [ + 105.21263, + 16.05076 + ], + [ + 105.04955, + 16.10552 + ], + [ + 105.01316, + 16.24401 + ], + [ + 104.88235, + 16.37812 + ], + [ + 104.8391, + 16.45782 + ], + [ + 104.77936, + 16.49041 + ], + [ + 104.73919, + 16.53287 + ], + [ + 104.74228, + 16.62205 + ], + [ + 104.76391, + 16.70953 + ], + [ + 104.73953, + 16.80323 + ], + [ + 104.76425, + 16.85088 + ], + [ + 104.73782, + 16.90968 + ], + [ + 104.744, + 17.0128 + ], + [ + 104.81266, + 17.21853 + ], + [ + 104.79841, + 17.39274 + ], + [ + 104.70348, + 17.52833 + ], + [ + 104.46384, + 17.65515 + ], + [ + 104.34368, + 17.83564 + ], + [ + 104.27776, + 17.8559 + ], + [ + 104.22661, + 17.98069 + ], + [ + 104.1116, + 18.10735 + ], + [ + 104.06525, + 18.21174 + ], + [ + 103.97392, + 18.33823 + ], + [ + 103.9286, + 18.33237 + ], + [ + 103.88809, + 18.29456 + ], + [ + 103.85582, + 18.28673 + ], + [ + 103.83659, + 18.32715 + ], + [ + 103.79128, + 18.3467 + ], + [ + 103.70201, + 18.34214 + ], + [ + 103.60931, + 18.40405 + ], + [ + 103.57292, + 18.40437 + ], + [ + 103.51593, + 18.42978 + ], + [ + 103.45963, + 18.42587 + ], + [ + 103.41568, + 18.44802 + ], + [ + 103.30479, + 18.43206 + ], + [ + 103.24265, + 18.37082 + ], + [ + 103.24333, + 18.34133 + ], + [ + 103.29123, + 18.32357 + ], + [ + 103.28899, + 18.29521 + ], + [ + 103.23595, + 18.28299 + ], + [ + 103.16608, + 18.25511 + ], + [ + 103.02429, + 17.98135 + ], + [ + 102.6535, + 17.83237 + ], + [ + 102.40631, + 17.99963 + ], + [ + 102.10968, + 18.22413 + ], + [ + 101.548, + 17.81538 + ], + [ + 101.30493, + 17.64991 + ], + [ + 101.14563, + 17.46595 + ], + [ + 100.95886, + 17.61654 + ], + [ + 101.01757, + 17.88858 + ], + [ + 101.18752, + 18.05121 + ], + [ + 101.16863, + 18.10409 + ], + [ + 101.18134, + 18.33595 + ], + [ + 101.08727, + 18.38287 + ], + [ + 101.05499, + 18.43988 + ], + [ + 101.23215, + 18.73015 + ], + [ + 101.35265, + 19.04524 + ], + [ + 101.25927, + 19.12733 + ], + [ + 101.2373, + 19.32637 + ], + [ + 101.25824, + 19.58438 + ], + [ + 101.11954, + 19.56836 + ], + [ + 101.08898, + 19.58777 + ], + [ + 101.08624, + 19.59715 + ], + [ + 101.03165, + 19.6185 + ], + [ + 100.89844, + 19.62125 + ], + [ + 100.77827, + 19.49249 + ], + [ + 100.63751, + 19.56432 + ], + [ + 100.58258, + 19.49313 + ], + [ + 100.47478, + 19.5944 + ], + [ + 100.42929, + 19.67152 + ], + [ + 100.43341, + 19.7024 + ], + [ + 100.4147, + 19.7255 + ], + [ + 100.40525, + 19.7646 + ], + [ + 100.43907, + 19.80345 + ], + [ + 100.45555, + 19.84843 + ], + [ + 100.50636, + 19.87264 + ], + [ + 100.51709, + 19.93027 + ], + [ + 100.58653, + 20.1599 + ], + [ + 100.56576, + 20.1757 + ], + [ + 100.54945, + 20.17473 + ], + [ + 100.52731, + 20.14379 + ], + [ + 100.51065, + 20.14895 + ], + [ + 100.48697, + 20.17956 + ], + [ + 100.46774, + 20.196 + ], + [ + 100.45246, + 20.20147 + ], + [ + 100.45521, + 20.22129 + ], + [ + 100.44783, + 20.23546 + ], + [ + 100.41607, + 20.25286 + ], + [ + 100.40594, + 20.28184 + ], + [ + 100.38397, + 20.31082 + ], + [ + 100.37556, + 20.35187 + ], + [ + 100.36165, + 20.35638 + ], + [ + 100.35736, + 20.37408 + ], + [ + 100.33195, + 20.39902 + ], + [ + 100.27805, + 20.40224 + ], + [ + 100.25917, + 20.39677 + ], + [ + 100.2475, + 20.37263 + ], + [ + 100.22535, + 20.35509 + ], + [ + 100.22346, + 20.31839 + ], + [ + 100.16579, + 20.29988 + ], + [ + 100.17162, + 20.24545 + ], + [ + 100.10845, + 20.25221 + ], + [ + 100.09266, + 20.2696 + ], + [ + 100.09798, + 20.31485 + ], + [ + 100.07961, + 20.3678 + ], + [ + 99.9567, + 20.46417 + ], + [ + 99.91636, + 20.44925 + ], + [ + 99.90765, + 20.44977 + ], + [ + 99.89121, + 20.44511 + ], + [ + 99.87276, + 20.44406 + ], + [ + 99.86212, + 20.44326 + ], + [ + 99.80186, + 20.33948 + ], + [ + 99.46472, + 20.3884 + ], + [ + 99.56085, + 20.20035 + ], + [ + 99.43691, + 20.08882 + ], + [ + 99.27727, + 20.11623 + ], + [ + 99.06921, + 20.1101 + ], + [ + 98.97789, + 19.74538 + ], + [ + 98.24387, + 19.68656 + ], + [ + 97.85934, + 19.57014 + ], + [ + 97.76733, + 18.57336 + ], + [ + 97.39655, + 18.47179 + ], + [ + 97.62451, + 18.30238 + ], + [ + 97.73849, + 17.97743 + ], + [ + 97.66502, + 17.87943 + ], + [ + 97.90947, + 17.56745 + ], + [ + 98.52951, + 16.82557 + ], + [ + 98.51303, + 16.69276 + ], + [ + 98.69293, + 16.26873 + ], + [ + 98.87421, + 16.43609 + ], + [ + 98.93394, + 16.3353 + ], + [ + 98.84743, + 16.13356 + ], + [ + 98.74512, + 16.12037 + ], + [ + 98.58307, + 16.07287 + ], + [ + 98.5762, + 15.79754 + ], + [ + 98.54736, + 15.37557 + ], + [ + 98.17383, + 15.15167 + ], + [ + 98.3606, + 14.63674 + ], + [ + 99.08295, + 13.89208 + ], + [ + 99.16534, + 13.72204 + ], + [ + 99.18182, + 13.00723 + ], + [ + 99.39331, + 12.56797 + ], + [ + 99.64153, + 11.78973 + ], + [ + 99.32156, + 11.30266 + ], + [ + 98.77859, + 10.67849 + ], + [ + 98.80597, + 10.47642 + ], + [ + 98.76657, + 10.40459 + ], + [ + 98.74924, + 10.34194 + ], + [ + 96.85547, + 6.40265 + ], + [ + 92.42523, + 20.54794 + ], + [ + 92.2728, + 20.96272 + ], + [ + 92.187, + 21.16 + ], + [ + 92.26, + 21.36 + ], + [ + 92.27, + 21.4328 + ], + [ + 92.62, + 21.43 + ], + [ + 92.6, + 22 + ], + [ + 93.22, + 22.25 + ], + [ + 93.4, + 23.7 + ], + [ + 93.34, + 23.95 + ], + [ + 94.155, + 23.847 + ], + [ + 94.17, + 23.92 + ], + [ + 94.25171, + 24.07405 + ], + [ + 94.28, + 24.23 + ], + [ + 94.30175, + 24.2371 + ], + [ + 94.3256, + 24.2731 + ], + [ + 94.6, + 24.7 + ], + [ + 94.78, + 25.47 + ], + [ + 95.2, + 26 + ], + [ + 95.1, + 26.6 + ], + [ + 97.3, + 27.9 + ], + [ + 96.14, + 29.38 + ], + [ + 95.4, + 29.1 + ], + [ + 94.8, + 29.2 + ], + [ + 92.5, + 27.8 + ], + [ + 91.64, + 27.76 + ], + [ + 91.4, + 28 + ], + [ + 89.58, + 28.18 + ], + [ + 88.9, + 27.32 + ], + [ + 88.74, + 27.47 + ], + [ + 88.9, + 27.86 + ], + [ + 88.7, + 28.1 + ], + [ + 88.1, + 27.87 + ], + [ + 85.93, + 27.942 + ], + [ + 81.6, + 30.5 + ], + [ + 81.2, + 30 + ], + [ + 78.73, + 31.5 + ], + [ + 78.77, + 31.99 + ], + [ + 78.4, + 32.5 + ], + [ + 79.3, + 32.5 + ], + [ + 79, + 34.3 + ], + [ + 78.3, + 34.6 + ], + [ + 78, + 35.5 + ], + [ + 76.1, + 35.8 + ], + [ + 76, + 36.55 + ], + [ + 75.15, + 37 + ], + [ + 72.5, + 36.9 + ], + [ + 71.1, + 36.1 + ], + [ + 71.65, + 35.44 + ], + [ + 71.45, + 35 + ], + [ + 70.985, + 34.54 + ], + [ + 71.18, + 34.36 + ], + [ + 71.092, + 34.118 + ], + [ + 70.88, + 33.97 + ], + [ + 70.5, + 33.94 + ], + [ + 69.908, + 34.04 + ], + [ + 69.869, + 33.96 + ], + [ + 70, + 33.75 + ], + [ + 70.13, + 33.73 + ], + [ + 70.34, + 33.34 + ], + [ + 70.013, + 33.14 + ], + [ + 69.57, + 33.09 + ], + [ + 69.24, + 32.45 + ], + [ + 69.3, + 31.9 + ], + [ + 68.1, + 31.6 + ], + [ + 66.393, + 30.934 + ], + [ + 66.2, + 29.8 + ], + [ + 62.5, + 29.4 + ], + [ + 60.87, + 29.86 + ], + [ + 61.53, + 29.0165 + ], + [ + 61.66, + 28.77 + ], + [ + 61.96, + 28.54 + ], + [ + 62.43, + 28.42 + ], + [ + 62.6, + 28.25 + ], + [ + 62.795, + 28.28 + ], + [ + 62.86, + 27.25 + ], + [ + 63.24, + 27.25 + ], + [ + 63.327, + 27.13 + ], + [ + 63.25, + 27.1 + ], + [ + 63.25, + 26.84 + ], + [ + 63.18, + 26.83 + ], + [ + 63.18, + 26.65 + ], + [ + 62.3, + 26.5 + ], + [ + 62.2, + 26.28 + ], + [ + 61.85, + 26.22 + ], + [ + 61.84, + 25.75 + ], + [ + 61.68, + 25.67 + ], + [ + 58.49, + -1.62 + ], + [ + 49.26, + -1.62 + ], + [ + 49.30, + -8.23 + ], + [ + 57.78, + -8.27 + ], + [ + 56.5, + -21 + ], + [ + 180, + -65 + ], + [ + 180, + -35 ] ] ] @@ -1247,152 +3047,32 @@ "coordinates": [ [ [ - -53.9208984375, - 6.096859818887948 + 138.7, + 46.7 ], [ - -55.72265625, - 7.863381805309173 + 145.5, + 44.5 ], [ - -60.13916015625, - 8.86336203355168 + 145.2, + 43.7 ], [ - -59.83154296874999, - 8.276727101164047 + 146, + 43.3 ], [ - -60.53466796874999, - 7.863381805309173 + 142, + 18 ], [ - -60.71044921875, - 7.558546606093156 + 122, + 24.3 ], [ - -60.57861328125, - 7.18810087117902 - ], - [ - -60.2490234375, - 7.18810087117902 - ], - [ - -60.5126953125, - 6.860985433763661 - ], - [ - -60.88623046875001, - 6.860985433763661 - ], - [ - -61.19384765625, - 6.68643125265198 - ], - [ - -61.10595703125, - 6.227933930268672 - ], - [ - -61.41357421874999, - 5.987606891658272 - ], - [ - -60.732421875, - 5.222246513227375 - ], - [ - -60.18310546874999, - 5.331644153439766 - ], - [ - -59.96337890624999, - 5.0690578267840465 - ], - [ - -60.20507812499999, - 4.54357027937176 - ], - [ - -59.61181640625, - 4.324501493019203 - ], - [ - -59.5458984375, - 3.9300201571114752 - ], - [ - -59.87548828125, - 3.5572827265412794 - ], - [ - -60.029296875, - 2.767477951092084 - ], - [ - -59.765625, - 2.2625953010152453 - ], - [ - -59.47998046874999, - 1.6037944300589855 - ], - [ - -58.86474609374999, - 1.1864386394452024 - ], - [ - -57.919921875, - 1.6477220517969353 - ], - [ - -57.1728515625, - 2.0210651187669897 - ], - [ - -56.5576171875, - 1.9771465537125772 - ], - [ - -55.8984375, - 1.8234225930141614 - ], - [ - -56.1181640625, - 2.3504147112508176 - ], - [ - -55.96435546875, - 2.5040852618529215 - ], - [ - -54.99755859375, - 2.591888984149953 - ], - [ - -54.51416015625, - 2.28455066023697 - ], - [ - -53.94287109375, - 3.5572827265412794 - ], - [ - -54.38232421875, - 4.039617826768437 - ], - [ - -54.4482421875, - 4.893940608902113 - ], - [ - -54.0087890625, - 5.506639674354886 - ], - [ - -53.9208984375, - 6.096859818887948 + 138.7, + 46.7 ] ] ] @@ -1408,24 +3088,36 @@ "coordinates": [ [ [ - -62.60009765624999, - -53.409531853086435 + -180, + 7 ], [ - -55.70068359375, - -53.409531853086435 + -148, + 7 ], [ - -55.70068359375, - -50.247204901392664 + -151, + -12 ], [ - -62.60009765624999, - -50.247204901392664 + -171.5, + -10.75 ], [ - -62.60009765624999, - -53.409531853086435 + -171, + -16 + ], + [ + -152, + -19 + ], + [ + -180, + -55 + ], + [ + -180, + 7 ] ] ] @@ -1441,776 +3133,24 @@ "coordinates": [ [ [ - -41.220703125, - -57.70414723434192 + -130.21, + -25.16 ], [ - -29.091796875, - -57.70414723434192 + -129.99, + -25.16 ], [ - -29.091796875, - -52.74959372674114 + -129.99, + -24.98 ], [ - -41.220703125, - -52.74959372674114 + -130.21, + -24.98 ], [ - -41.220703125, - -57.70414723434192 - ] - ] - ] - } - }, - { - "type": "Feature", - "properties": { - "driving_side": "left" - }, - "geometry": { - "type": "Polygon", - "coordinates": [ - [ - [ - -46.845703125, - -60.95444387929966 - ], - [ - -43.81347656249999, - -60.95444387929966 - ], - [ - -43.81347656249999, - -60.329667021005825 - ], - [ - -46.845703125, - -60.329667021005825 - ], - [ - -46.845703125, - -60.95444387929966 - ] - ] - ] - } - }, - { - "type": "Feature", - "properties": { - "driving_side": "left" - }, - "geometry": { - "type": "Polygon", - "coordinates": [ - [ - [ - -65.489501953125, - 31.840232667909365 - ], - [ - -64.00634765625, - 31.840232667909365 - ], - [ - -64.00634765625, - 32.76418137510082 - ], - [ - -65.489501953125, - 32.76418137510082 - ], - [ - -65.489501953125, - 31.840232667909365 - ] - ] - ] - } - }, - { - "type": "Feature", - "properties": { - "driving_side": "left" - }, - "geometry": { - "type": "Polygon", - "coordinates": [ - [ - [ - -78.90380859375, - 16.867633616803836 - ], - [ - -75.6298828125, - 16.867633616803836 - ], - [ - -75.6298828125, - 18.979025953255267 - ], - [ - -78.90380859375, - 18.979025953255267 - ], - [ - -78.90380859375, - 16.867633616803836 - ] - ] - ] - } - }, - { - "type": "Feature", - "properties": { - "driving_side": "left" - }, - "geometry": { - "type": "Polygon", - "coordinates": [ - [ - [ - -81.67236328125001, - 19.03875247795316 - ], - [ - -79.76898193359376, - 19.48989674307901 - ], - [ - -79.48333740234375, - 19.888140273126222 - ], - [ - -81.45263671875001, - 19.46400263520258 - ], - [ - -81.67236328125001, - 19.03875247795316 - ] - ] - ] - } - }, - { - "type": "Feature", - "properties": { - "driving_side": "left" - }, - "geometry": { - "type": "Polygon", - "coordinates": [ - [ - [ - 13.90869140625, - 35.6126508187567 - ], - [ - 15.00732421875, - 35.505400093441324 - ], - [ - 15.029296875, - 36.32397712011264 - ], - [ - 13.831787109375, - 36.36822190085111 - ], - [ - 13.90869140625, - 35.6126508187567 - ] - ] - ] - } - }, - { - "type": "Feature", - "properties": { - "driving_side": "left" - }, - "geometry": { - "type": "Polygon", - "coordinates": [ - [ - [ - 113.53256464004518, - 22.17096258989228 - ], - [ - 113.53754281997682, - 22.16047023983672 - ], - [ - 113.54106187820436, - 22.154587822430837 - ], - [ - 113.54878664016725, - 22.14703570986906 - ], - [ - 113.54990243911743, - 22.141947742446394 - ], - [ - 113.54792833328247, - 22.118731558535227 - ], - [ - 113.54852914810182, - 22.11006426296891 - ], - [ - 113.56088876724245, - 22.105531611874294 - ], - [ - 113.5914444923401, - 22.117300298747207 - ], - [ - 113.60217332839966, - 22.136303063467075 - ], - [ - 113.58766794204713, - 22.183520585503548 - ], - [ - 113.57015848159791, - 22.189083895743767 - ], - [ - 113.56621026992799, - 22.189163370008256 - ], - [ - 113.56406450271608, - 22.190514425625366 - ], - [ - 113.56380701065065, - 22.19941517306984 - ], - [ - 113.56191873550418, - 22.2050573189853 - ], - [ - 113.56088876724245, - 22.21260631441281 - ], - [ - 113.55256319046022, - 22.217294433458783 - ], - [ - 113.54850769042969, - 22.21683754739093 - ], - [ - 113.5441303253174, - 22.217056058304685 - ], - [ - 113.54318618774415, - 22.216479983343337 - ], - [ - 113.5415554046631, - 22.213242000752253 - ], - [ - 113.54114770889284, - 22.213003618712484 - ], - [ - 113.53824019432068, - 22.213659168347313 - ], - [ - 113.53728532791139, - 22.21367903343993 - ], - [ - 113.53571891784668, - 22.213559842841935 - ], - [ - 113.53435635566713, - 22.213182405280275 - ], - [ - 113.53312253952026, - 22.212367931293002 - ], - [ - 113.53496789932252, - 22.20616982803302 - ], - [ - 113.53222131729127, - 22.19401121511328 - ], - [ - 113.52681398391725, - 22.184792218694355 - ], - [ - 113.53256464004518, - 22.17096258989228 - ] - ] - ] - } - }, - { - "type": "Feature", - "properties": { - "driving_side": "left" - }, - "geometry": { - "type": "Polygon", - "coordinates": [ - [ - [ - 114.1398811340332, - 22.298308554808454 - ], - [ - 114.1146469116211, - 22.295926164040363 - ], - [ - 114.10280227661133, - 22.2808367460213 - ], - [ - 114.1505241394043, - 22.226342457476385 - ], - [ - 114.20768737792969, - 22.188199741518677 - ], - [ - 114.26794052124023, - 22.199325771045544 - ], - [ - 114.26673889160155, - 22.257008033931445 - ], - [ - 114.24699783325194, - 22.278295210101668 - ], - [ - 114.22657012939453, - 22.29354373265189 - ], - [ - 114.20408248901367, - 22.29973796977008 - ], - [ - 114.184513092041, - 22.290843594643704 - ], - [ - 114.16563034057617, - 22.28925525380013 - ], - [ - 114.1398811340332, - 22.298308554808454 - ] - ] - ] - } - }, - { - "type": "Feature", - "properties": { - "driving_side": "left" - }, - "geometry": { - "type": "Polygon", - "coordinates": [ - [ - [ - -79.82666015625001, - 25.035838555635017 - ], - [ - -73.55346679687501, - 20.324023603422518 - ], - [ - -70.82336425781251, - 21.307287323905406 - ], - [ - -78.38745117187501, - 28.304380682962783 - ], - [ - -79.82666015625001, - 25.035838555635017 - ] - ] - ] - } - }, - { - "type": "Feature", - "properties": { - "driving_side": "left" - }, - "geometry": { - "type": "Polygon", - "coordinates": [ - [ - [ - -59.06250000000001, - 13.378931658431565 - ], - [ - -61.02905273437501, - 14.216463756160174 - ], - [ - -61.92443847656251, - 12.350734120814016 - ], - [ - -61.71569824218751, - 10.935798432254105 - ], - [ - -62.06176757812501, - 10.028357677443571 - ], - [ - -61.13891601562501, - 9.855216086088848 - ], - [ - -59.06250000000001, - 13.378931658431565 - ] - ] - ] - } - }, - { - "type": "Feature", - "properties": { - "driving_side": "left" - }, - "geometry": { - "type": "Polygon", - "coordinates": [ - [ - [ - -61.43829345703126, - 17.17228278169308 - ], - [ - -61.80358886718751, - 17.882045302279195 - ], - [ - -62.91870117187501, - 17.403062993328938 - ], - [ - -62.149658203125, - 16.52826534972986 - ], - [ - -61.43829345703126, - 17.17228278169308 - ] - ] - ] - } - }, - { - "type": "Feature", - "properties": { - "driving_side": "left" - }, - "geometry": { - "type": "Polygon", - "coordinates": [ - [ - [ - -61.33392333984376, - 15.731457491108594 - ], - [ - -61.63604736328126, - 15.570127852659427 - ], - [ - -61.36138916015626, - 15.10394633500913 - ], - [ - -61.13342285156251, - 15.257689080778713 - ], - [ - -61.33392333984376, - 15.731457491108594 - ] - ] - ] - } - }, - { - "type": "Feature", - "properties": { - "driving_side": "left" - }, - "geometry": { - "type": "Polygon", - "coordinates": [ - [ - [ - -63.46664428710938, - 18.672267305093758 - ], - [ - -64.5604705810547, - 18.78736737706614 - ], - [ - -64.8845672607422, - 18.40665471391907 - ], - [ - -64.6593475341797, - 18.365604299215338 - ], - [ - -64.61608886718751, - 18.114529138838503 - ], - [ - -63.30596923828126, - 18.108002884854656 - ], - [ - -62.79235839843751, - 18.231960055191504 - ], - [ - -63.46664428710938, - 18.672267305093758 - ] - ] - ] - } - }, - { - "type": "Feature", - "properties": { - "driving_side": "left" - }, - "geometry": { - "type": "Polygon", - "coordinates": [ - [ - [ - 31.898803710937504, - 35.29943548054545 - ], - [ - 32.38220214843751, - 34.43409789359469 - ], - [ - 34.69482421875001, - 34.74161249883172 - ], - [ - 34.74975585937501, - 35.79999392988527 - ], - [ - 31.898803710937504, - 35.29943548054545 - ] - ] - ] - } - }, - { - "type": "Feature", - "properties": { - "driving_side": "left" - }, - "geometry": { - "type": "Polygon", - "coordinates": [ - [ - [ - 166.53076171875003, - -0.7140928403610857 - ], - [ - 172.81494140625009, - 0.4751532449748611 - ], - [ - 176.50634765625003, - -17.245744208007117 - ], - [ - 177.82470703125009, - -19.36038488536514 - ], - [ - 180.0439453125002, - -19.67103928897615 - ], - [ - 180.1098632812502, - -13.333502655583224 - ], - [ - 189.00878906250003, - -9.760490714194388 - ], - [ - 189.931640625, - -4.726989319952657 - ], - [ - 199.62158203125003, - 2.583657640731887 - ], - [ - 201.04980468750003, - -0.6014904163878395 - ], - [ - 193.31542968750003, - -9.543874794137526 - ], - [ - 193.42529296875003, - -14.95274576245613 - ], - [ - 183.7353515625, - -14.846576365691352 - ], - [ - 180.3295898437502, - -24.27450874986185 - ], - [ - 203.46679687500003, - -22.662175307872086 - ], - [ - 203.2470703125, - -13.247966096402816 - ], - [ - 211.33300781250003, - -11.35887518924762 - ], - [ - 200.65429687500003, - 6.468151012664214 - ], - [ - 179.8461914062502, - -4.836470204221701 - ], - [ - 173.1445312500001, - 4.162897490667403 - ], - [ - 166.53076171875003, - -0.7140928403610857 - ] - ] - ] - } - }, - { - "type": "Feature", - "properties": { - "driving_side": "left" - }, - "geometry": { - "type": "Polygon", - "coordinates": [ - [ - [ - -127.33154296875001, - -24.166802085303225 - ], - [ - -131.17675781250003, - -23.60426184707018 - ], - [ - -130.34179687500003, - -25.324166525738384 - ], - [ - -123.49731445312501, - -24.716895455859337 - ], - [ - -127.33154296875001, - -24.166802085303225 - ] - ] - ] - } - }, - { - "type": "Feature", - "properties": { - "driving_side": "left" - }, - "geometry": { - "type": "Polygon", - "coordinates": [ - [ - [ - -5.976562500000001, - -15.728813770533979 - ], - [ - -5.949096679687501, - -16.13026201203474 - ], - [ - -5.482177734375001, - -16.156644815257152 - ], - [ - -5.465698242187501, - -15.760536148501288 - ], - [ - -5.976562500000001, - -15.728813770533979 + -130.21, + -25.16 ] ] ] diff --git a/docs/http.md b/docs/http.md index 346e6e2ec..398aba1ae 100644 --- a/docs/http.md +++ b/docs/http.md @@ -299,9 +299,9 @@ curl 'http://router.project-osrm.org/table/v1/driving/13.388860,52.517037;13.397 - `code` if the request was successful `Ok` otherwise see the service dependent and general status codes. - `durations` array of arrays that stores the matrix in row-major order. `durations[i][j]` gives the travel time from - the i-th waypoint to the j-th waypoint. Values are given in seconds. Can be `null` if no route between `i` and `j` can be found. + the i-th source to the j-th destination. Values are given in seconds. Can be `null` if no route between `i` and `j` can be found. - `distances` array of arrays that stores the matrix in row-major order. `distances[i][j]` gives the travel distance from - the i-th waypoint to the j-th waypoint. Values are given in meters. Can be `null` if no route between `i` and `j` can be found. + the i-th source to the j-th destination. Values are given in meters. Can be `null` if no route between `i` and `j` can be found. - `sources` array of `Waypoint` objects describing all sources in order - `destinations` array of `Waypoint` objects describing all destinations in order - `fallback_speed_cells` (optional) array of arrays containing `i,j` pairs indicating which cells contain estimated values based on `fallback_speed`. Will be absent if `fallback_speed` is not used. diff --git a/docs/nodejs/api.md b/docs/nodejs/api.md index 6e8bdf3ff..9bff3ada8 100644 --- a/docs/nodejs/api.md +++ b/docs/nodejs/api.md @@ -141,6 +141,8 @@ tables. Optionally returns distance table. - `options.fallback_coordinate` **[String](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String)?** Either `input` (default) or `snapped`. If using a `fallback_speed`, use either the user-supplied coordinate (`input`), or the snapped coordinate (`snapped`) for calculating the as-the-crow-flies diestance between two points. - `options.scale_factor` **[Number](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number)?** Multiply the table duration values in the table by this number for more controlled input into a route optimization solver. - `options.snapping` **[String](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String)?** Which edges can be snapped to, either `default`, or `any`. `default` only snaps to edges marked by the profile as `is_startpoint`, `any` will allow snapping to any edge in the routing graph. + - `options.annotations` **[Array](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array)?** Return the requested table or tables in response. Can be `['duration']` (return the duration matrix, default) or `['duration', distance']` (return both the duration matrix and the distance matrix). + - `callback` **[Function](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/function)** **Examples** diff --git a/features/car/conditional_restrictions.feature b/features/car/conditional_restrictions.feature index 23a9e1efe..c2311067c 100644 --- a/features/car/conditional_restrictions.feature +++ b/features/car/conditional_restrictions.feature @@ -387,217 +387,37 @@ Feature: Car - Turn restrictions | m | p | mj,jp,jp | @no_turning @conditionals - Scenario: Car - only_right_turn + Scenario: Car - Multiple conditional restrictions applicable to same turn Given the extract extra arguments "--parse-conditional-restrictions" # time stamp for 10am on Tues, 02 May 2017 GMT Given the contract extra arguments "--time-zone-file=test/data/tz/{timezone_names}/guinea.geojson --parse-conditionals-from-now=1493719200" Given the customize extra arguments "--time-zone-file=test/data/tz/{timezone_names}/guinea.geojson --parse-conditionals-from-now=1493719200" + Given the node map """ - a - d j b - c + j + | + k - l - m + | + n """ And the ways - | nodes | oneway | - | aj | no | - | jc | no | - | bj | yes | - | jd | yes | + | nodes | + | kl | + | jl | + | ln | + | lm | And the relations | type | way:from | way:to | node:via | restriction:conditional | - | restriction | bj | aj | j | only_right_turn @ (Mo-Su 07:00-14:00) | + | restriction | kl | lj | l | only_left_turn @ (Sa-Su 07:00-10:30) | + | restriction | kl | ln | l | only_right_turn @ (Mo-Fr 07:00-10:30) | When I route I should get | from | to | route | - | b | c | bj,aj,aj,jc,jc | - | b | a | bj,aj,aj | - | b | d | bj,aj,aj,jd,jd | + | k | m | kl,ln,ln,lm,lm | - @no_turning @conditionals - Scenario: Car - No right turn - Given the extract extra arguments "--parse-conditional-restrictions" - # time stamp for 10am on Tues, 02 May 2017 GMT - Given the contract extra arguments "--time-zone-file=test/data/tz/{timezone_names}/guinea.geojson --parse-conditionals-from-now=1493719200" - Given the customize extra arguments "--time-zone-file=test/data/tz/{timezone_names}/guinea.geojson --parse-conditionals-from-now=1493719200" - Given the node map - """ - a - d j b - c - """ - - And the ways - | nodes | oneway | - | aj | no | - | jc | no | - | bj | yes | - | jd | yes | - - And the relations - | type | way:from | way:to | node:via | restriction:conditional | - | restriction | bj | aj | j | no_right_turn @ (Mo-Fr 07:00-13:00) | - - When I route I should get - | from | to | route | # | - | b | c | bj,jc,jc | normal turn | - | b | a | bj,jc,jc,aj,aj | avoids right turn | - | b | d | bj,jd,jd | normal maneuver | - - @only_turning @conditionals - Scenario: Car - only_left_turn - Given the extract extra arguments "--parse-conditional-restrictions" - # time stamp for 10am on Tues, 02 May 2017 GMT - Given the contract extra arguments "--time-zone-file=test/data/tz/{timezone_names}/guinea.geojson --parse-conditionals-from-now=1493719200" - Given the customize extra arguments "--time-zone-file=test/data/tz/{timezone_names}/guinea.geojson --parse-conditionals-from-now=1493719200" - Given the node map - """ - a - d j b - c - """ - - And the ways - | nodes | oneway | - | aj | no | - | jc | no | - | bj | yes | - | jd | yes | - - And the relations - | type | way:from | way:to | node:via | restriction:conditional | - | restriction | bj | jc | j | only_left_turn @ (Mo-Fr 07:00-16:00) | - - When I route I should get - | from | to | route | - | b | c | bj,jc,jc | - | b | a | bj,jc,jc,aj,aj | - | b | d | bj,jc,jc,jd,jd | - - @no_turning @conditionals - Scenario: Car - No left turn - Given the extract extra arguments "--parse-conditional-restrictions" - # time stamp for 10am on Tues, 02 May 2017 GMT - Given the contract extra arguments "--time-zone-file=test/data/tz/{timezone_names}/guinea.geojson --parse-conditionals-from-now=1493719200" - Given the customize extra arguments "--time-zone-file=test/data/tz/{timezone_names}/guinea.geojson --parse-conditionals-from-now=1493719200" - Given the node map - """ - a - d j b - c - """ - - And the ways - | nodes | oneway | - | aj | no | - | jc | no | - | bj | yes | - | jd | yes | - - And the relations - | type | way:from | way:to | node:via | restriction:conditional | - | restriction | bj | jc | j | no_left_turn @ (Mo-Su 00:00-23:59) | - - When I route I should get - | from | to | route | - | b | c | bj,aj,aj,jc,jc | - | b | a | bj,aj,aj | - | b | d | bj,jd,jd | - - @no_turning @conditionals - Scenario: Car - Conditional restriction is off - Given the extract extra arguments "--parse-conditional-restrictions" - # time stamp for 10am on Tues, 02 May 2017 GMT - Given the contract extra arguments "--time-zone-file=test/data/tz/{timezone_names}/guinea.geojson --parse-conditionals-from-now=1493719200" - Given the customize extra arguments "--time-zone-file=test/data/tz/{timezone_names}/guinea.geojson --parse-conditionals-from-now=1493719200" - Given the node map - """ - a - d j b - c - """ - - And the ways - | nodes | oneway | - | aj | no | - | jc | no | - | bj | yes | - | jd | yes | - - And the relations - | type | way:from | way:to | node:via | restriction:conditional | - | restriction | bj | aj | j | no_right_turn @ (Mo-Su 16:00-20:00) | - - When I route I should get - | from | to | route | - | b | c | bj,jc,jc | - | b | a | bj,aj,aj | - | b | d | bj,jd,jd | - - @no_turning @conditionals - Scenario: Car - Conditional restriction is on - Given the extract extra arguments "--parse-conditional-restrictions" - # 10am utc, wed - Given the contract extra arguments "--time-zone-file=test/data/tz/{timezone_names}/guinea.geojson --parse-conditionals-from-now=1493805600" - Given the customize extra arguments "--time-zone-file=test/data/tz/{timezone_names}/guinea.geojson --parse-conditionals-from-now=1493805600" - Given the node map - """ - a - d j b - c - """ - - And the ways - | nodes | oneway | - | aj | no | - | jc | no | - | bj | yes | - | jd | yes | - - And the relations - | type | way:from | way:to | node:via | restriction:conditional | - | restriction | jb | aj | j | no_right_turn @ (Mo-Fr 07:00-14:00) | - - When I route I should get - | from | to | route | - | b | c | bj,jc,jc | - | b | a | bj,jc,jc,aj,aj | - | b | d | bj,jd,jd | - - @no_turning @conditionals - Scenario: Car - Conditional restriction with multiple time windows - Given the extract extra arguments "--parse-conditional-restrictions" - # 5pm Wed 02 May, 2017 GMT - Given the contract extra arguments "--time-zone-file=test/data/tz/{timezone_names}/guinea.geojson --parse-conditionals-from-now=1493744400" - Given the customize extra arguments "--time-zone-file=test/data/tz/{timezone_names}/guinea.geojson --parse-conditionals-from-now=1493744400" - - Given the node map - """ - a - p | - \ | - j - | \ - c m - """ - - And the ways - | nodes | oneway | - | aj | no | - | jc | no | - | jp | yes | - | mj | yes | - - And the relations - | type | way:from | way:to | node:via | restriction:conditional | - | restriction | aj | jp | j | no_right_turn @ (Mo-Fr 07:00-11:00,16:00-18:30) | - - When I route I should get - | from | to | route | - | a | p | aj,jc,jc,jp,jp | - | m | p | mj,jp,jp | @restriction-way Scenario: Car - prohibit turn @@ -719,7 +539,7 @@ Feature: Car - Turn restrictions When I route I should get | from | to | route | turns | | a | e | cap south,florida nw,florida nw,florida ne | depart,turn right,continue uturn,arrive | - | f | d | cap north,florida nw,florida nw | depart,turn left,arrive | + | f | d | cap north,florida nw,florida nw | depart,turn left,arrive | | e | c | florida ne,florida nw,cap south,cap south | depart,continue uturn,turn right,arrive | @no_turning @conditionals @@ -796,8 +616,8 @@ Feature: Car - Turn restrictions | nodes | name | | ab | albic | | bc | albic | - | db | dobe | - | be | dobe | + | db | dobe | + | be | dobe | And the relations | type | way:from | way:to | node:via | restriction:conditional | @@ -1047,7 +867,7 @@ Feature: Car - Turn restrictions | type | way:from | node:via | way:to | restriction:conditional | | restriction | be | e | de | no_right_turn @ (Mo-Fr 07:00-11:00) | - # node restrictino is off, way restriction is on + # node restriction is off, way restriction is on When I route I should get | from | to | route | turns | locations | | a | d | ab,be,ef,ef,de,de | depart,turn right,turn left,continue uturn,new name straight,arrive | a,b,e,f,e,d | diff --git a/features/car/multi_via_restrictions.feature b/features/car/multi_via_restrictions.feature new file mode 100644 index 000000000..42c6c6d42 --- /dev/null +++ b/features/car/multi_via_restrictions.feature @@ -0,0 +1,1033 @@ +@routing @car @restrictions + +Feature: Car - Multiple Via Turn restrictions + + Background: Use car routing + Given the profile "car" + Given a grid size of 200 meters + + + @restriction-way @no_turning @overlap + Scenario: Car - Node restriction inside multiple via restriction + Given the node map + """ + 1 2 3 4 5 + a---b---c---d---e---------f---------g + | | | + |7 |8 |9 + | | | + x---h---------i---------j + """ + + And the ways + | nodes | oneway | name | + | ab | yes | forward | + | bc | yes | forward | + | cd | yes | forward | + | de | yes | forward | + | ef | yes | forward | + | fg | yes | forward | + | eh | yes | first | + | fi | yes | second | + | gj | yes | third | + | ih | yes | back | + | ji | yes | back | + | hx | yes | back | + + And the relations + | type | way:from | way:via | way:to | restriction | + | restriction | ab | bc,cd,de,ef | fi | no_right_turn | + + And the relations + | type | way:from | node:via | way:to | restriction | + | restriction | de | e | eh | no_right_turn | + + When I route I should get + | from | to | route | + | 1 | x | forward,third,back,back | + | 2 | x | forward,second,back,back | + | 3 | x | forward,second,back,back | + | 4 | x | forward,second,back,back | + | 5 | x | forward,third,back,back | + | 7 | x | first,back,back | + | 8 | x | second,back,back | + | 9 | x | third,back,back | + + + @restriction-way @no_turning @overlap @conditionals + Scenario: Car - Conditional node restriction inside conditional multiple via restriction + Given the origin -9.2972,10.3811 + # coordinate in Guinée, a country that observes GMT year round + Given the extract extra arguments "--parse-conditional-restrictions" + # time stamp for 10am on Tues, 02 May 2017 GMT + Given the contract extra arguments "--time-zone-file=test/data/tz/{timezone_names}/guinea.geojson --parse-conditionals-from-now=1493719200" + Given the customize extra arguments "--time-zone-file=test/data/tz/{timezone_names}/guinea.geojson --parse-conditionals-from-now=1493719200" + Given the node map + """ + 1 2 3 4 5 + a---b---c---d---e---------f---------g + | | | + |7 |8 |9 + | | | + x---h---------i---------j + """ + + And the ways + | nodes | oneway | name | + | ab | yes | forward | + | bc | yes | forward | + | cd | yes | forward | + | de | yes | forward | + | ef | yes | forward | + | fg | yes | forward | + | eh | yes | first | + | fi | yes | second | + | gj | yes | third | + | ih | yes | back | + | ji | yes | back | + | hx | yes | back | + + And the relations + | type | way:from | way:via | way:to | restriction:conditional | + | restriction | ab | bc,cd,de,ef | fi | no_right_turn @ (Mo-Fr 07:00-10:30) | + + And the relations + | type | way:from | node:via | way:to | restriction:conditional | + | restriction | de | e | eh | no_right_turn @ (Mo-Fr 07:00-10:30) | + | restriction | de | e | eh | only_right_turn @ (Sa-Su 07:00-10:30) | + + When I route I should get + | from | to | route | + | 1 | x | forward,third,back,back | + | 2 | x | forward,second,back,back | + | 3 | x | forward,second,back,back | + | 4 | x | forward,second,back,back | + | 5 | x | forward,third,back,back | + | 7 | x | first,back,back | + | 8 | x | second,back,back | + | 9 | x | third,back,back | + + + @restriction-way @no_turning @overlap + Scenario: Car - Multiple via restriction inside multiple via restriction + Given the node map + """ + 1 2 3 4 5 + a---b---c---d---e---------f---------g + | | | + |7 |8 |9 + | | | + x---h---------i---------j + """ + + And the ways + | nodes | oneway | name | + | ab | yes | forward | + | bc | yes | forward | + | cd | yes | forward | + | de | yes | forward | + | ef | yes | forward | + | fg | yes | forward | + | eh | yes | first | + | fi | yes | second | + | gj | yes | third | + | ih | yes | back | + | ji | yes | back | + | hx | yes | back | + + And the relations + | type | way:from | way:via | way:to | restriction | + | restriction | ab | bc,cd,de,ef | fi | no_right_turn | + | restriction | bc | cd,de | eh | no_right_turn | + + When I route I should get + | from | to | route | + | 1 | x | forward,third,back,back | + | 2 | x | forward,second,back,back | + | 3 | x | forward,first,back,back | + | 4 | x | forward,second,back,back | + | 5 | x | forward,third,back,back | + | 7 | x | first,back,back | + | 8 | x | second,back,back | + | 9 | x | third,back,back | + + + @restriction-way @no_turning @overlap @conditionals + Scenario: Car - Conditional multiple via restriction inside conditional multiple via restriction + + Given a grid size of 200 meters + Given the origin -9.2972,10.3811 + # coordinate in Guinée, a country that observes GMT year round + Given the extract extra arguments "--parse-conditional-restrictions" + # time stamp for 10am on Tues, 02 May 2017 GMT + Given the contract extra arguments "--time-zone-file=test/data/tz/{timezone_names}/guinea.geojson --parse-conditionals-from-now=1493719200" + Given the customize extra arguments "--time-zone-file=test/data/tz/{timezone_names}/guinea.geojson --parse-conditionals-from-now=1493719200" + Given the node map + + """ + 1 2 3 4 5 + a---b---c---d---e---------f---------g + | | | + |7 |8 |9 + | | | + x---h---------i---------j + """ + + And the ways + | nodes | oneway | name | + | ab | yes | forward | + | bc | yes | forward | + | cd | yes | forward | + | de | yes | forward | + | ef | yes | forward | + | fg | yes | forward | + | eh | yes | first | + | fi | yes | second | + | gj | yes | third | + | ih | yes | back | + | ji | yes | back | + | hx | yes | back | + + And the relations + | type | way:from | way:via | way:to | restriction:conditional | + | restriction | ab | bc,cd,de,ef | fi | no_right_turn @ (Mo-Fr 07:00-10:30) | + | restriction | bc | cd,de | eh | no_right_turn @ (Mo-Fr 07:00-10:30) | + | restriction | bc | cd,de | eh | only_right_turn @ (Sa-Su 07:00-10:30) | + + When I route I should get + | from | to | route | + | 1 | x | forward,third,back,back | + | 2 | x | forward,second,back,back | + | 3 | x | forward,first,back,back | + | 4 | x | forward,second,back,back | + | 5 | x | forward,third,back,back | + | 7 | x | first,back,back | + | 8 | x | second,back,back | + | 9 | x | third,back,back | + + + @restriction-way @only_turning @overlap + Scenario: Car - Overlapping multiple via restrictions + Given the node map + """ + a f j + | | | + b---d---e---i---k----m + | | | + c g l + """ + + And the ways + | nodes | oneway | name | + | ab | yes | down | + | cb | yes | up | + | bd | yes | right | + | de | yes | right | + | ef | yes | up | + | eg | yes | down | + | ei | yes | right | + | ik | yes | right | + | kj | yes | up | + | kl | yes | down | + | km | yes | right | + + And the relations + | type | way:from | way:via | way:to | restriction | + | restriction | ab | bd,de | ei | only_straight_on | + | restriction | de | ei,ik | km | only_straight_on | + + When I route I should get + | from | to | route | + | a | f | | + | a | g | | + | a | j | | + | a | l | | + | a | m | down,right,right | + | c | f | up,right,up,up | + | c | g | up,right,down,down | + | c | j | | + | c | l | | + | c | m | up,right,right | + | i | j | right,up,up | + | i | l | right,down,down | + | i | m | right,right | + + + @restriction-way @only_turning @overlap @conditionals + Scenario: Car - Overlapping conditional multiple via restrictions + Given a grid size of 200 meters + Given the origin -9.2972,10.3811 + # coordinate in Guinée, a country that observes GMT year round + Given the extract extra arguments "--parse-conditional-restrictions" + # time stamp for 10am on Tues, 02 May 2017 GMT + Given the contract extra arguments "--time-zone-file=test/data/tz/{timezone_names}/guinea.geojson --parse-conditionals-from-now=1493719200" + Given the customize extra arguments "--time-zone-file=test/data/tz/{timezone_names}/guinea.geojson --parse-conditionals-from-now=1493719200" + Given the node map + """ + a f j + | | | + b---d---e---i---k----m + | | | + c g l + """ + + And the ways + | nodes | oneway | name | + | ab | yes | down | + | cb | yes | up | + | bd | yes | right | + | db | yes | left | + | de | yes | right | + | ed | yes | left | + | ef | yes | up | + | eg | yes | down | + | ei | yes | right | + | ie | yes | left | + | ik | yes | right | + | ki | yes | left | + | kj | yes | up | + | kl | yes | down | + | km | no | end | + + And the relations + | type | way:from | way:via | way:to | restriction:conditional | + | restriction | ab | bd,de | ei | only_straight_on @ (Mo-Fr 07:00-10:30) | + | restriction | ab | bd,de | ef | only_left_turn @ (Sa-Su 07:00-10:30) | + | restriction | de | ei,ik | km | only_straight_on @ (Mo-Fr 07:00-10:30) | + + When I route I should get + | from | to | route | + | a | f | down,right,end,end,left,up,up | + | a | g | down,right,end,end,left,down,down | + | a | j | down,right,end,end,up,up | + | a | l | down,right,end,end,down,down | + | a | m | down,right,end,end | + | c | f | up,right,up,up | + | c | g | up,right,down,down | + | c | j | up,right,end,end,up,up | + | c | l | up,right,end,end,down,down | + | c | m | up,right,end,end | + | i | j | right,up,up | + | i | l | right,down,down | + | i | m | right,end,end | + + + + @restriction-way @only_turning @geometry + Scenario: Car - Multiple via restriction with non-compressable via geometry + Given the node map + """ + a---b---c---d---e---f---g---h + | | | + i j k + """ + + And the ways + | nodes | oneway | name | + | ab | yes | right | + | bcd | yes | right | + | defg | yes | right | + | ci | yes | down | + | ej | yes | down | + | gh | yes | end | + | gk | yes | down | + + And the relations + | type | way:from | way:via | way:to | restriction | + | restriction | ab | bcd,defg | gh | only_straight_on | + + When I route I should get + | from | to | route | + | a | h | right,end,end | + | a | k | | + + @restriction-way @only_turning @geometry + Scenario: Car - Multiple via restriction with non-compressable from/to nodes + Given the node map + """ + a---b---c---d---e---f---g---h---i---j---k---l + | | | | | + m n o p q + """ + + And the ways + | nodes | oneway | name | + | abcdefg | yes | right | + | ghi | yes | right | + | ijkl | yes | end | + | cm | yes | down | + | en | yes | down | + | go | yes | down | + | ip | yes | down | + | kq | yes | down | + + And the relations + | type | way:from | way:via | way:to | restriction | + | restriction | abcdefg | ghi | ijkl | only_straight_on | + + When I route I should get + | from | to | route | + | a | l | right,end,end | + | a | p | | + + @restriction-way @no_turning + Scenario: Car - Long unrestricted route and short restricted route + Given the node map + """ + a------------------------------------b + | | + c--d--e--f--------------------------- + """ + + And the ways + | nodes | + | ac | + | ab | + | bf | + | cd | + | de | + | ef | + + And the relations + | type | way:from | way:via | way:to | restriction | + | restriction | ac | cd | de | no_straight_on | + + When I route I should get + | from | to | route | + | a | f | ab,bf,bf | + + + @restriction-way @overlap @no_turning + Scenario: Car - Junction with multiple via u-turn restrictions + # Example: https://www.openstreetmap.org/#map=19/52.07399/5.09724 + Given the node map + """ + a b + | | + c---d---e---f + | | + g---h---i---j + | | + k l + """ + + And the ways + | nodes | oneway | name | + | ad | yes | down | + | eb | yes | up | + | fe | yes | left | + | ij | yes | right | + | li | yes | up | + | hk | yes | down | + | gh | yes | right | + | dc | yes | left | + | dh | yes | down | + | hi | yes | right | + | ie | yes | up | + | ed | yes | left | + + And the relations + | type | way:from | way:via | way:to | restriction | + | restriction | ad | dh,hi | ie | no_u_turn | + | restriction | li | ie,ed | dh | no_u_turn | + + When I route I should get + | from | to | route | + | a | b | | + | a | c | down,left,left | + | a | k | down,down | + | a | j | down,right,right | + | f | b | left,up,up | + | f | c | left,left | + | f | k | left,down,down | + | f | j | left,down,right,right | + | l | b | up,up | + | l | c | up,left,left | + | l | k | | + | l | j | up,right,right | + | g | b | right,up,up | + | g | c | right,up,left,left | + | g | k | right,down,down | + | g | j | right,right | + + + @restriction-way @overlap @no_turning + Scenario: Car - Junction with multiple via u-turn restrictions, service roads + # Example: https://www.openstreetmap.org/#map=19/48.38566/10.88068 + Given the node map + """ + a b + | | + c---d--e--f---g + | _/| + h__/ | + |\ \ | + i---j-k-l-m---n + | | + o p + """ + + And the ways + | nodes | oneway | name | + | ad | yes | down | + | fb | yes | up | + | gf | yes | left | + | mn | yes | right | + | pm | yes | up | + | jo | yes | down | + | ij | yes | right | + | dc | yes | left | + | dh | yes | down | + | hj | yes | down | + | jkl | yes | right | + | lm | yes | right | + | mf | yes | up | + | fe | yes | left | + | ed | yes | left | + + And the ways + | nodes | oneway | name | highway | access | psv | + | kh | yes | service | service | no | yes | + | lh | no | service | service | no | yes | + | fh | yes | service | service | no | yes | + + And the relations + | type | way:from | way:via | way:to | restriction | + | restriction | hj | jkl,lm | mf | no_u_turn | + | restriction | lm | mf | fe | no_u_turn | + | restriction | mf | fe,ed | dh | no_u_turn | + | restriction | ed | dh,hj | jkl | no_u_turn | + + When I route I should get + | from | to | route | + | a | b | | + | a | c | down,left,left | + | a | o | down,down | + | a | n | down,right,right | + | i | b | right,up,up | + | i | c | | + | i | o | right,down,down | + | i | n | right,right | + | p | b | up,up | + | p | c | up,left,left | + | p | o | | + | p | n | up,right,right | + | g | b | left,up,up | + | g | c | left,left | + | g | o | left,down,down | + | g | n | | + + + @restriction-way @overlap @no_turning + Scenario: Car - Junction with overlapping and duplicate multiple via restrictions + # Example: https://www.openstreetmap.org/#map=19/34.66291/33.01711 + Given the profile file "car" initialized with + """ + profile.properties.left_hand_driving = true + """ + + And the node map + """ + a b + | | + c---d---e---f + | | + g---h---i---j + | | + k l + """ + + And the nodes + | node | highway | + | d | traffic_signals | + | e | traffic_signals | + | h | traffic_signals | + | i | traffic_signals | + + And the ways + | nodes | oneway | name | + | da | yes | up | + | be | yes | down | + | ef | yes | right | + | ji | yes | left | + | il | yes | down | + | kh | yes | up | + | hg | yes | left | + | cd | yes | right | + | hd | yes | up | + | ih | yes | left | + | ei | yes | down | + | de | yes | right | + + And the relations + | type | way:from | way:via | way:to | restriction | + | restriction | be | ei,ih | hd | no_u_turn | + | restriction | ji | ih,hd | de | no_u_turn | + | restriction | kh | hd,de | ei | no_u_turn | + | restriction | cd | de,ei | ih | no_u_turn | + | restriction | hd | de | ei | no_u_turn | + | restriction | de | ei | ih | no_u_turn | + | restriction | ei | ih | hd | no_u_turn | + | restriction | ei | ih,hd | de | no_u_turn | + | restriction | ih | hd | de | no_u_turn | + | restriction | ih | hd,de | ei | no_u_turn | + + When I route I should get + | from | to | route | + | b | a | | + | b | g | down,left,left | + | b | l | down,down | + | b | f | down,right,right | + | j | a | left,up,up | + | j | g | left,left | + | j | l | left,down,down | + | j | f | | + | k | a | up,up | + | k | g | up,left,left | + | k | l | | + | k | f | up,right,right | + | c | a | right,up,up | + | c | g | | + | c | l | right,down,down | + | c | f | right,right | + + + @restriction-way @no_turning + Scenario: Car - Junction with multiple via restriction to side road, traffic lights + # Example: https://www.openstreetmap.org/#map=19/48.23662/16.42545 + Given the node map + """ + e---d + | + f---c---g + | + h---b---i + | + a + """ + + And the nodes + | node | highway | + | c | traffic_signals | + | b | traffic_signals | + + And the ways + | nodes | oneway | name | + | ab | no | up | + | bc | no | up | + | cd | no | up | + | de | no | left | + | hb | yes | right | + | bi | yes | right | + | gc | yes | left | + | cf | yes | left | + + And the relations + | type | way:from | way:via | way:to | restriction | + | restriction | ab | bc,cd | de | no_left_turn | + + When I route I should get + | from | to | route | + | a | e | | + | a | f | up,left,left | + | a | g | | + | a | h | | + | a | i | up,right,right | + + + @restriction-way @overlap @no_turning + Scenario: Car - Many overlapping multiple via restrictions, traffic signals + # Example: https://www.openstreetmap.org/#map=19/48.76987/11.43410 + Given the node map + """ + 8 5 + p______a_______n________o__x + 1| | | + | \ / + r___q____b____ m + | \ \___ _/ 7 + \ c _l____k__w + s \ _/ _/ + \ _d/ __j + \ _/ \ _/ + | ___g e_____i + v__t__/ _/ \ 4 + 6 2/ 3\ + f h + """ + + And the nodes + | node | highway | + | n | traffic_signals | + | m | traffic_signals | + | q | traffic_signals | + + And the ways + | nodes | oneway | + | on | yes | + | na | yes | + | ap | yes | + | pr | yes | + | rqb | yes | + | bl | yes | + | oml | yes | + | ld | yes | + | lk | yes | + | ba | yes | + | bcd | no | + | de | no | + | eh | no | + | ei | no | + | ejk | yes | + | rst | yes | + | dgt | yes | + | fe | yes | + | xo | yes | + | tv | yes | + | kw | yes | + + And the relations + | type | way:from | way:via | way:to | restriction | + | restriction | pr | rqb,bcd | dgt | no_right_turn | + | restriction | rqb | bcd,de | ejk | no_left_turn | + | restriction | rqb | bcd | dgt | no_right_turn | + | restriction | fe | ed | dgt | no_u_turn | + | restriction | fe | ed,dcb | bl | no_right_turn | + | restriction | he | ed,dcb | bl | no_right_turn | + | restriction | oml | ld,de | ejk | no_u_turn | + + And the relations + | type | way:from | node:via | way:to | restriction | + | restriction | ap | p | pr | no_u_turn | + | restriction | rqb | b | ba | no_left_turn | + | restriction | ld | d | dcb | no_right_turn | + | restriction | oml | l | lk | no_left_turn | + | restriction | na | a | ab | no_left_turn | + | restriction | dcb | b | bl | no_right_turn | + | restriction | dcb | b | bcd | no_u_turn | + | restriction | bcd | d | dcb | no_u_turn | + | restriction | bl | l | ld | no_right_turn | + + # Additional relations to prevent u-turns on small roads polluting the results + And the relations + | type | way:from | node:via | way:to | restriction | + | restriction | eh | h | he | no_u_turn | + | restriction | ei | i | ie | no_u_turn | + + When I route I should get + | from | to | route | locations | + | 1 | 6 | pr,rst,tv,tv | _,r,t,_ | + | 1 | 3 | pr,rqb,bcd,de,eh,eh | _,r,b,d,e,_ | + | 1 | 4 | pr,rqb,bcd,de,ei,ei | _,r,b,d,e,_ | + | 1 | 7 | pr,rqb,bl,lk,kw,kw | _,r,b,l,k,_ | + | 1 | 8 | | | + | 2 | 6 | | | + | 2 | 3 | fe,eh,eh | _,e,_ | + | 2 | 4 | fe,ei,ei | _,e,_ | + | 2 | 7 | fe,ejk,kw,kw | _,e,k,_ | + | 2 | 8 | fe,de,bcd,ba,ap,ap | _,e,d,b,a,_ | + | 3 | 6 | eh,de,dgt,tv,tv | _,e,d,t,_ | + | 3 | 4 | eh,ei,ei | _,e,_ | + | 3 | 7 | eh,ejk,kw,kw | _,e,k,_ | + | 3 | 8 | eh,de,bcd,ba,ap,ap | _,e,d,b,a,_ | + | 4 | 6 | ei,de,dgt,tv,tv | _,e,d,t,_ | + | 4 | 3 | ei,eh,eh | _,e,_ | + | 4 | 7 | ei,ejk,kw,kw | _,e,k,_ | + | 4 | 8 | ei,de,bcd,ba,ap,ap | _,e,d,b,a,_ | + | 5 | 6 | xo,oml,ld,dgt,tv,tv | _,o,l,d,t,_ | + | 5 | 3 | xo,oml,ld,de,eh,eh | _,o,l,d,e,_ | + | 5 | 4 | xo,oml,ld,de,ei,ei | _,o,l,d,e,_ | + | 5 | 7 | | | + | 5 | 8 | xo,on,na,ap,ap | _,o,n,a,_ | + + + + @restriction-way @overlap @no_turning + Scenario: Car - Multiple via restriction with start and end on same node + # Example: https://www.openstreetmap.org/#map=19/52.41988/16.96088 + Given the node map + """ + |--g---f---e + a | | + |--b---c---d + + """ + + And the nodes + | node | highway | + | b | traffic_signals | + + And the ways + | nodes | oneway | name | + | abc | yes | enter | + | cd | yes | right | + | de | yes | up | + | ef | yes | left | + | fga | yes | exit | + | fc | yes | down | + + And the relations + | type | way:from | way:via | way:to | restriction | + | restriction | abc | cd,de,ef | fga | no_u_turn | + + When I route I should get + | from | to | route | locations | + | a | g | enter,right,up,left,down,right,up,left,exit,exit | a,c,d,e,f,c,d,e,f,g | + | b | a | enter,right,up,left,down,right,up,left,exit,exit | b,c,d,e,f,c,d,e,f,a | + # This is a correct but not within the spirit of the restriction. + # Does this indicate the restriction is not strong enough? + + + @restriction-way @no_turning + Scenario: Car - Multiple via restriction preventing bypassing main road + # Example: https://www.openstreetmap.org/#map=19/48.72429/21.25912 + Given the node map + """ + a--b--c--d--e--f + \ | + --g--h--i--j + | + k + """ + + And the nodes + | node | highway | + | d | traffic_signals | + | e | traffic_signals | + + And the ways + | nodes | oneway | name | + | ab | yes | main | + | bc | yes | main | + | cd | yes | main | + | de | yes | main | + | ef | yes | main | + | bg | yes | side | + | gh | yes | side | + | hi | yes | side | + | ij | yes | side | + | fj | yes | turn | + | jk | yes | turn | + + + And the relations + | type | way:from | way:via | way:to | restriction | + | restriction | ab | bg,gh,hi,ij | jk | no_right_turn | + + When I route I should get + | from | to | route | + | a | k | main,turn,turn | + + + @restriction-way @overlap @no_turning @only_turning + Scenario: Car - Multiple via restriction with to,via,from sharing same node + # Example: https://www.openstreetmap.org/relation/3972923 + Given the node map + """ + e---d + | | + a---b---c + | + f + """ + + And the ways + | nodes | oneway | + | ab | yes | + | bc | yes | + | cd | yes | + | deb | yes | + | bf | yes | + + + And the relations + | type | way:from | way:via | way:to | restriction | + | restriction | ab | bc,cd,deb | bf | no_u_turn | + + And the relations + | type | way:from | node:via | way:to | restriction | + | restriction | ab | b | bc | only_straight_on | + | restriction | deb | b | bc | no_left_turn | + + When I route I should get + | from | to | route | + | a | f | | + # The last restriction is missing from OSM. Without it, + # it produces the route: ab,bc,cd,deb,bc,cd,deb,bf,bf + + + @restriction-way @except + Scenario: Car - Multiple via restriction, exception applies + # Example: https://www.openstreetmap.org/#map=19/50.04920/19.93251 + Given the node map + """ + a---b---c---d--e + """ + + And the ways + | nodes | oneway | + | ab | yes | + | bc | yes | + | cd | yes | + | de | yes | + + + And the relations + | type | way:from | way:via | way:to | restriction | except | + | restriction | ab | bc,cd | de | no_straight_on | motorcar | + + When I route I should get + | from | to | route | + | a | e | ab,bc,cd,de,de | + + + @restriction-way @except @no_turning + Scenario: Car - Multiple via restriction, exception n/a + # Example: https://www.openstreetmap.org/#map=19/50.04920/19.93251 + Given the node map + """ + a---b---c---d--e + """ + + And the ways + | nodes | oneway | + | ab | yes | + | bc | yes | + | cd | yes | + | de | yes | + + + And the relations + | type | way:from | way:via | way:to | restriction | except | + | restriction | ab | bc,cd | de | no_straight_on | psv;emergency | + + When I route I should get + | from | to | route | + | a | e | | + + + @restriction-way @overlap @only_turning + Scenario: Car - Multiple via restriction overlapping single via restriction + Given the node map + """ + e + | + a---b---c---d + | + f - g + | + h + """ + + And the ways + | nodes | name | + | ab | abcd | + | bc | abcd | + | cd | abcd | + | hf | hfb | + | fb | hfb | + | gf | gf | + | ce | ce | + + And the relations + | type | way:from | way:via | way:to | restriction | + | restriction | ab | bc | ce | only_left_turn | + | restriction | gf | fb,bc | cd | only_u_turn | + + When I route I should get + | from | to | route | turns | locations | + | a | d | abcd,ce,ce,abcd,abcd | depart,turn left,continue uturn,turn left,arrive | a,c,e,c,d | + | a | e | abcd,ce,ce | depart,turn left,arrive | a,c,e | + | a | f | abcd,hfb,hfb | depart,turn right,arrive | a,b,f | + | g | e | gf,hfb,abcd,abcd,ce,ce | depart,turn right,turn right,continue uturn,turn right,arrive | g,f,b,d,c,e | + | g | d | gf,hfb,abcd,abcd | depart,turn right,turn right,arrive | g,f,b,d | + | h | e | hfb,abcd,ce,ce | depart,end of road right,turn left,arrive | h,b,c,e | + | h | d | hfb,abcd,abcd | depart,end of road right,arrive | h,b,d | + + + @restriction-way + Scenario: Ambiguous from/to ways + Given the node map + """ + a + | + b---d---e + | | + c f + """ + + And the ways + | nodes | + | abc | + | bd | + | de | + | ef | + + And the relations + | type | way:from | way:via | way:to | restriction | + | restriction | abc | bd,de | ef | no_right_turn | + | restriction | ef | de,bd | abc | no_right_turn | + + When I route I should get + | from | to | route | locations | + | a | f | abc,bd,de,ef,ef | a,b,d,e,f | + | f | a | ef,de,bd,abc,abc | f,e,d,b,a | + | c | f | abc,bd,de,ef,ef | c,b,d,e,f | + | f | c | ef,de,bd,abc,abc | f,e,d,b,c | + + + @restriction-way + Scenario: Ambiguous via ways + Given the node map + """ + a + | + b---d---e---c + | + f + """ + + And the ways + | nodes | + | ab | + | bd | + | dec | + | ef | + + And the relations + | type | way:from | way:via | way:to | restriction | + | restriction | ab | bd,dec | ef | no_right_turn | + | restriction | ef | dec,bd | ab | no_right_turn | + + When I route I should get + | from | to | route | locations | + | a | f | ab,bd,dec,ef,ef | a,b,d,e,f | + | f | a | ef,dec,bd,ab,ab | f,e,d,b,a | + + + @restriction-way @invalid + Scenario: Badly tagged restrictions + Given the node map + """ + a--b--c--d--e--f + """ + + And the ways + | nodes | oneway | + | ab | yes | + | bc | yes | + | cd | yes | + | de | yes | + | ef | yes | + + And the relations + | type | way:from | way:via | way:to | restriction | + | restriction | ab | cd,de | ef | no_straight_on | + | restriction | ab | bc,de | ef | no_straight_on | + | restriction | ab | bc,cd | ef | no_straight_on | + | restriction | ef | de,cd | bc | no_straight_on | + + When I route I should get + | from | to | route | locations | + | a | f | ab,bc,cd,de,ef,ef | a,b,c,d,e,f | + diff --git a/features/car/restrictions.feature b/features/car/restrictions.feature index 80cb5b95e..da76f4ded 100644 --- a/features/car/restrictions.feature +++ b/features/car/restrictions.feature @@ -798,82 +798,6 @@ Feature: Car - Turn restrictions | from | to | route | | a | d | ab,be,de,de | - @restriction-way - Scenario: Multi Way restriction - Given the node map - """ - k j - | | - h - - g - f - - e - | | - | | - a - - b - c - - d - | | - l i - """ - - And the ways - | nodes | name | oneway | - | ab | horiz | yes | - | bc | horiz | yes | - | cd | horiz | yes | - | ef | horiz | yes | - | fg | horiz | yes | - | gh | horiz | yes | - | ic | vert | yes | - | cf | vert | yes | - | fj | vert | yes | - | kg | vert | yes | - | gb | vert | yes | - | bl | vert | yes | - - And the relations - | type | way:from | way:via | way:to | restriction | - | restriction | ab | bc,cf,fg | gh | no_u_turn | - - When I route I should get - | from | to | route | - | a | h | horiz,vert,horiz,horiz | - - @restriction-way - Scenario: Multi-Way overlapping single-way - Given the node map - """ - e - | - a - b - c - d - | - f - g - | - h - """ - - And the ways - | nodes | name | - | ab | abcd | - | bc | abcd | - | cd | abcd | - | hf | hfb | - | fb | hfb | - | gf | gf | - | ce | ce | - - And the relations - | type | way:from | way:via | way:to | restriction | - | restriction | ab | bc | ce | only_left_turn | - | restriction | gf | fb,bc | cd | only_u_turn | - - When I route I should get - | from | to | route | turns | locations | - | a | d | abcd,ce,ce,abcd,abcd | depart,turn left,continue uturn,turn left,arrive | a,c,e,c,d | - | a | e | abcd,ce,ce | depart,turn left,arrive | a,c,e | - | a | f | abcd,hfb,hfb | depart,turn right,arrive | a,b,f | - | g | e | gf,hfb,abcd,ce,ce | depart,turn right,turn right,turn left,arrive | g,f,b,c,e | - | g | d | gf,hfb,abcd,abcd | depart,turn right,turn right,arrive | g,f,b,d | - | h | e | hfb,abcd,ce,ce | depart,end of road right,turn left,arrive | h,b,c,e | - | h | d | hfb,abcd,abcd | depart,end of road right,arrive | h,b,d | - - @restriction-way Scenario: Car - prohibit turn, traffic lights Given the node map @@ -984,8 +908,6 @@ Feature: Car - Turn restrictions | restriction | ab | bge | de | no_right_turn | | restriction | bc | bge | ef | no_left_turn | - # this case is currently not handling the via-way restrictions and we need support for looking across traffic signals. - # It is mainly included to show limitations and to prove that we don't crash hard here When I route I should get | from | to | route | | a | d | ab,bge,ef,ef,de,de | diff --git a/features/testbot/nil.feature b/features/testbot/nil.feature index af8a0b988..521720af7 100644 --- a/features/testbot/nil.feature +++ b/features/testbot/nil.feature @@ -1,18 +1,18 @@ @routing @testbot @nil -Feature: Testbot - Check assigning nil values - Scenario: Assign nil values to all way strings +Feature: Testbot - Check assigning empty values + Scenario: Assign empty values to all way strings Given the profile file """ functions = require('testbot') function way_function(profile, way, result) - result.name = nil - result.ref = nil - result.destinations = nil - result.exits = nil - result.pronunciation = nil - result.turn_lanes_forward = nil - result.turn_lanes_backward = nil + result.name = "" + result.ref = "" + result.destinations = "" + result.exits = "" + result.pronunciation = "" + result.turn_lanes_forward = "" + result.turn_lanes_backward = "" result.forward_speed = 10 result.backward_speed = 10 diff --git a/features/testbot/oneway_phantom.feature b/features/testbot/oneway_phantom.feature new file mode 100644 index 000000000..9d728a507 --- /dev/null +++ b/features/testbot/oneway_phantom.feature @@ -0,0 +1,85 @@ +@routing @testbot @oneway +Feature: Handle multiple phantom nodes in one-way segment + +# Check we handle routes where source and destination are +# phantom nodes on the same one-way segment. +# See: https://github.com/Project-OSRM/osrm-backend/issues/5788 + + Background: + Given the profile "testbot" + + Scenario: One-way segment with adjacent phantom nodes + Given the node map + """ + d c + + a12b + """ + + And the ways + | nodes | oneway | + | ab | yes | + | bc | no | + | cd | no | + | da | no | + + When I route I should get + | from | to | route | time | distance | + | 1 | 2 | ab,ab | 5s +-0.1 | 50m ~1% | + | 1 | c | ab,bc,bc | 30s +-0.1 | 300m ~1% | + | 2 | 1 | ab,bc,cd,da,ab | 65s +-0.1 | 650m ~1% | + | 2 | c | ab,bc,bc | 25s +-0.1 | 250m ~1% | + | c | 1 | cd,da,ab | 40s +-0.1 | 400m ~1% | + | c | 2 | cd,da,ab | 45s +-0.1 | 450m ~1% | + + When I request a travel time matrix I should get + | | 1 | 2 | c | + | 1 | 0 | 5 +-0.1 | 30 +-0.1 | + | 2 | 65 +-0.1 | 0 | 25 +-0.1 | + | c | 40 +-0.1 | 45 +-0.1 | 0 | + + When I request a travel time matrix I should get + | | 1 | 2 | c | + | 1 | 0 | 5 +-0.1 | 30 +-0.1 | + + When I request a travel time matrix I should get + | | 1 | 2 | c | + | 2 | 65 +-0.1 | 0 | 25 +-0.1 | + + When I request a travel time matrix I should get + | | 1 | + | 1 | 0 | + | 2 | 65 +-0.1 | + | c | 40 +-0.1 | + + When I request a travel time matrix I should get + | | 2 | + | 1 | 5 +-0.1 | + | 2 | 0 | + | c | 45 +-0.1 | + + When I request a travel distance matrix I should get + | | 1 | 2 | c | + | 1 | 0 | 50 ~1% | 300 ~1% | + | 2 | 650 ~1% | 0 | 250 ~1% | + | c | 400 ~1% | 450 ~1% | 0 | + + When I request a travel distance matrix I should get + | | 1 | 2 | c | + | 1 | 0 | 50 ~1% | 300 ~1% | + + When I request a travel distance matrix I should get + | | 1 | 2 | c | + | 2 | 650 ~1% | 0 | 250 ~1% | + + When I request a travel distance matrix I should get + | | 1 | + | 1 | 0 | + | 2 | 650 ~1% | + | c | 400 ~1% | + + When I request a travel distance matrix I should get + | | 2 | + | 1 | 50 ~1% | + | 2 | 0 | + | c | 450 ~1% | diff --git a/features/testbot/zero-speed-updates.feature b/features/testbot/zero-speed-updates.feature index 6acb2b0c8..c2bc82c94 100644 --- a/features/testbot/zero-speed-updates.feature +++ b/features/testbot/zero-speed-updates.feature @@ -93,6 +93,31 @@ Feature: Check zero speed updates | 1 | 2 | NoRoute | + Scenario: Routing with alternatives on restricted way + Given the node map + """ + a-1-b-2-c + """ + + And the ways + | nodes | oneway | + | abc | no | + And the contract extra arguments "--segment-speed-file {speeds_file}" + And the customize extra arguments "--segment-speed-file {speeds_file}" + And the speed file + """ + 1,2,0 + 2,1,0 + """ + And the query options + | alternatives | true | + + + When I route I should get + | from | to | code | alternative | + | 1 | 2 | NoRoute | | + + Scenario: Routing on restricted oneway Given the node map """ diff --git a/include/contractor/contract_excludable_graph.hpp b/include/contractor/contract_excludable_graph.hpp index 6ae29282a..74ea8373b 100644 --- a/include/contractor/contract_excludable_graph.hpp +++ b/include/contractor/contract_excludable_graph.hpp @@ -94,7 +94,7 @@ inline auto contractExcludableGraph(ContractorGraph contractor_graph_, return GraphAndFilter{QueryGraph{num_nodes, std::move(edge_container.edges)}, edge_container.MakeEdgeFilters()}; } -} -} +} // namespace contractor +} // namespace osrm #endif diff --git a/include/contractor/contracted_edge_container.hpp b/include/contractor/contracted_edge_container.hpp index 8b37f5d4a..db3ae5cc9 100644 --- a/include/contractor/contracted_edge_container.hpp +++ b/include/contractor/contracted_edge_container.hpp @@ -164,7 +164,7 @@ struct ContractedEdgeContainer std::vector flags; std::vector edges; }; -} -} +} // namespace contractor +} // namespace osrm #endif diff --git a/include/contractor/contracted_metric.hpp b/include/contractor/contracted_metric.hpp index f44f49e83..c795a139a 100644 --- a/include/contractor/contracted_metric.hpp +++ b/include/contractor/contracted_metric.hpp @@ -15,11 +15,11 @@ template struct ContractedMetric detail::QueryGraph graph; std::vector> edge_filter; }; -} +} // namespace detail using ContractedMetric = detail::ContractedMetric; using ContractedMetricView = detail::ContractedMetric; -} -} +} // namespace contractor +} // namespace osrm #endif diff --git a/include/contractor/contractor.hpp b/include/contractor/contractor.hpp index ee1d2dd42..a0335d8ea 100644 --- a/include/contractor/contractor.hpp +++ b/include/contractor/contractor.hpp @@ -49,7 +49,7 @@ class Contractor private: ContractorConfig config; }; -} -} +} // namespace contractor +} // namespace osrm #endif // PROCESSING_CHAIN_HPP diff --git a/include/contractor/contractor_config.hpp b/include/contractor/contractor_config.hpp index 8f1455cce..c93d2e63d 100644 --- a/include/contractor/contractor_config.hpp +++ b/include/contractor/contractor_config.hpp @@ -73,7 +73,7 @@ struct ContractorConfig final : storage::IOConfig //(e.g. 0.8 contracts 80 percent of the hierarchy, leaving a core of 20%) double core_factor; }; -} -} +} // namespace contractor +} // namespace osrm #endif // EXTRACTOR_OPTIONS_HPP diff --git a/include/contractor/crc32_processor.hpp b/include/contractor/crc32_processor.hpp index 4130ed583..a441ae576 100644 --- a/include/contractor/crc32_processor.hpp +++ b/include/contractor/crc32_processor.hpp @@ -125,7 +125,7 @@ struct RangebasedCRC32 private: IteratorbasedCRC32 crc32; }; -} -} +} // namespace contractor +} // namespace osrm #endif /* ITERATOR_BASED_CRC32_H */ diff --git a/include/contractor/files.hpp b/include/contractor/files.hpp index 8dcade795..39ffa5b54 100644 --- a/include/contractor/files.hpp +++ b/include/contractor/files.hpp @@ -52,8 +52,8 @@ inline void writeGraph(const boost::filesystem::path &path, serialization::write(writer, "/ch/metrics/" + pair.first, pair.second); } } -} -} -} +} // namespace files +} // namespace contractor +} // namespace osrm #endif diff --git a/include/contractor/query_edge.hpp b/include/contractor/query_edge.hpp index 74d38e79e..351ecee24 100644 --- a/include/contractor/query_edge.hpp +++ b/include/contractor/query_edge.hpp @@ -77,7 +77,7 @@ struct QueryEdge data.distance == right.data.distance); } }; -} -} +} // namespace contractor +} // namespace osrm #endif // QUERYEDGE_HPP diff --git a/include/contractor/query_graph.hpp b/include/contractor/query_graph.hpp index e5758dcfe..b312a5403 100644 --- a/include/contractor/query_graph.hpp +++ b/include/contractor/query_graph.hpp @@ -19,7 +19,7 @@ using QueryGraph = util::StaticGraph; using QueryGraph = detail::QueryGraph; using QueryGraphView = detail::QueryGraph; -} -} +} // namespace contractor +} // namespace osrm #endif // QUERYEDGE_HPP diff --git a/include/contractor/serialization.hpp b/include/contractor/serialization.hpp index aa8659274..693216d6a 100644 --- a/include/contractor/serialization.hpp +++ b/include/contractor/serialization.hpp @@ -46,8 +46,8 @@ void read(storage::tar::FileReader &reader, metric.edge_filter[index]); } } -} -} -} +} // namespace serialization +} // namespace contractor +} // namespace osrm #endif diff --git a/include/customizer/cell_customizer.hpp b/include/customizer/cell_customizer.hpp index df5499579..9e27236d0 100644 --- a/include/customizer/cell_customizer.hpp +++ b/include/customizer/cell_customizer.hpp @@ -212,9 +212,8 @@ class CellCustomizer } const auto &data = graph.GetEdgeData(edge); - if (data.forward && - (first_level || - partition.GetCell(level - 1, node) != partition.GetCell(level - 1, to))) + if (data.forward && (first_level || partition.GetCell(level - 1, node) != + partition.GetCell(level - 1, to))) { const EdgeWeight to_weight = weight + data.weight; const EdgeDuration to_duration = duration + data.duration; @@ -237,7 +236,7 @@ class CellCustomizer const partitioner::MultiLevelPartition &partition; }; -} -} +} // namespace customizer +} // namespace osrm #endif // OSRM_CELLS_CUSTOMIZER_HPP diff --git a/include/customizer/cell_metric.hpp b/include/customizer/cell_metric.hpp index 7674174fe..a522facc3 100644 --- a/include/customizer/cell_metric.hpp +++ b/include/customizer/cell_metric.hpp @@ -22,11 +22,11 @@ template struct CellMetricImpl Vector durations; Vector distances; }; -} +} // namespace detail using CellMetric = detail::CellMetricImpl; using CellMetricView = detail::CellMetricImpl; -} -} +} // namespace customizer +} // namespace osrm #endif diff --git a/include/customizer/customizer_config.hpp b/include/customizer/customizer_config.hpp index 35ab1a356..4df629de5 100644 --- a/include/customizer/customizer_config.hpp +++ b/include/customizer/customizer_config.hpp @@ -39,7 +39,7 @@ struct CustomizationConfig final : storage::IOConfig updater::UpdaterConfig updater_config; }; -} -} +} // namespace customizer +} // namespace osrm #endif // OSRM_CUSTOMIZE_CUSTOMIZER_CONFIG_HPP diff --git a/include/customizer/edge_based_graph.hpp b/include/customizer/edge_based_graph.hpp index 840a84299..5ef3277f9 100644 --- a/include/customizer/edge_based_graph.hpp +++ b/include/customizer/edge_based_graph.hpp @@ -34,7 +34,7 @@ template void write(storage::tar::FileWriter &writer, const std::string &name, const MultiLevelGraph &graph); -} +} // namespace serialization template class MultiLevelGraph : public partitioner::MultiLevelGraph @@ -126,7 +126,7 @@ using MultiLevelEdgeBasedGraph = MultiLevelGraph; using MultiLevelEdgeBasedGraphView = MultiLevelGraph; -} -} +} // namespace customizer +} // namespace osrm #endif diff --git a/include/customizer/files.hpp b/include/customizer/files.hpp index 364a2572d..335b77a30 100644 --- a/include/customizer/files.hpp +++ b/include/customizer/files.hpp @@ -106,8 +106,8 @@ inline void writeGraph(const boost::filesystem::path &path, writer.WriteFrom("/mld/connectivity_checksum", connectivity_checksum); serialization::write(writer, "/mld/multilevelgraph", graph); } -} -} -} +} // namespace files +} // namespace customizer +} // namespace osrm #endif diff --git a/include/customizer/serialization.hpp b/include/customizer/serialization.hpp index afe23cf9b..c242f8ba3 100644 --- a/include/customizer/serialization.hpp +++ b/include/customizer/serialization.hpp @@ -65,8 +65,8 @@ inline void write(storage::tar::FileWriter &writer, storage::serialization::write(writer, name + "/is_backward_edge", graph.is_backward_edge); storage::serialization::write(writer, name + "/node_to_edge_offset", graph.node_to_edge_offset); } -} -} -} +} // namespace serialization +} // namespace customizer +} // namespace osrm #endif diff --git a/include/engine/algorithm.hpp b/include/engine/algorithm.hpp index 760f78e80..1d65cac04 100644 --- a/include/engine/algorithm.hpp +++ b/include/engine/algorithm.hpp @@ -16,14 +16,14 @@ namespace ch struct Algorithm final { }; -} +} // namespace ch // Multi-Level Dijkstra namespace mld { struct Algorithm final { }; -} +} // namespace mld // Algorithm names template const char *name(); @@ -111,8 +111,8 @@ template <> struct HasGetTileTurns final : std::true_type template <> struct HasExcludeFlags final : std::true_type { }; -} -} -} +} // namespace routing_algorithms +} // namespace engine +} // namespace osrm #endif diff --git a/include/engine/api/base_api.hpp b/include/engine/api/base_api.hpp index 702a7f15f..6cd1a6e48 100644 --- a/include/engine/api/base_api.hpp +++ b/include/engine/api/base_api.hpp @@ -128,8 +128,8 @@ class BaseAPI const BaseParameters ¶meters; }; -} // ns api -} // ns engine -} // ns osrm +} // namespace api +} // namespace engine +} // namespace osrm #endif diff --git a/include/engine/api/base_parameters.hpp b/include/engine/api/base_parameters.hpp index e7a49378d..e49f71157 100644 --- a/include/engine/api/base_parameters.hpp +++ b/include/engine/api/base_parameters.hpp @@ -92,21 +92,21 @@ struct BaseParameters SnappingType snapping = SnappingType::Default; - BaseParameters(const std::vector coordinates_ = {}, - const std::vector> hints_ = {}, + BaseParameters(std::vector coordinates_ = {}, + std::vector> hints_ = {}, std::vector> radiuses_ = {}, std::vector> bearings_ = {}, std::vector> approaches_ = {}, bool generate_hints_ = true, std::vector exclude = {}, const SnappingType snapping_ = SnappingType::Default) - : coordinates(coordinates_), hints(hints_), radiuses(radiuses_), bearings(bearings_), - approaches(approaches_), exclude(std::move(exclude)), generate_hints(generate_hints_), - snapping(snapping_) + : coordinates(std::move(coordinates_)), hints(std::move(hints_)), + radiuses(std::move(radiuses_)), bearings(std::move(bearings_)), + approaches(std::move(approaches_)), exclude(std::move(exclude)), + generate_hints(generate_hints_), snapping(snapping_) { } - // FIXME add validation for invalid bearing values bool IsValid() const { return (hints.empty() || hints.size() == coordinates.size()) && @@ -115,7 +115,7 @@ struct BaseParameters (approaches.empty() || approaches.size() == coordinates.size()) && std::all_of(bearings.begin(), bearings.end(), - [](const boost::optional bearing_and_range) { + [](const boost::optional &bearing_and_range) { if (bearing_and_range) { return bearing_and_range->IsValid(); @@ -124,8 +124,8 @@ struct BaseParameters }); } }; -} -} -} +} // namespace api +} // namespace engine +} // namespace osrm #endif // ROUTE_PARAMETERS_HPP diff --git a/include/engine/api/base_result.hpp b/include/engine/api/base_result.hpp index 65dd6aeeb..5dd63e7a9 100644 --- a/include/engine/api/base_result.hpp +++ b/include/engine/api/base_result.hpp @@ -16,8 +16,8 @@ namespace api { using ResultT = mapbox::util::variant; -} // ns api -} // ns engine -} // ns osrm +} // namespace api +} // namespace engine +} // namespace osrm #endif diff --git a/include/engine/api/json_factory.hpp b/include/engine/api/json_factory.hpp index 0ec505703..f92dba16a 100644 --- a/include/engine/api/json_factory.hpp +++ b/include/engine/api/json_factory.hpp @@ -112,8 +112,8 @@ util::json::Object makeRouteLeg(guidance::RouteLeg leg, util::json::Array steps) util::json::Array makeRouteLegs(std::vector legs, std::vector step_geometries, std::vector annotations); -} -} +} // namespace json +} // namespace api } // namespace engine } // namespace osrm diff --git a/include/engine/api/match_api.hpp b/include/engine/api/match_api.hpp index e1639794e..a93e49710 100644 --- a/include/engine/api/match_api.hpp +++ b/include/engine/api/match_api.hpp @@ -248,8 +248,8 @@ class MatchAPI final : public RouteAPI const tidy::Result &tidy_result; }; -} // ns api -} // ns engine -} // ns osrm +} // namespace api +} // namespace engine +} // namespace osrm #endif diff --git a/include/engine/api/match_parameters.hpp b/include/engine/api/match_parameters.hpp index b54076582..774a2c09d 100644 --- a/include/engine/api/match_parameters.hpp +++ b/include/engine/api/match_parameters.hpp @@ -68,8 +68,11 @@ struct MatchParameters : public RouteParameters } template - MatchParameters(std::vector timestamps_, GapsType gaps_, bool tidy_, Args... args_) - : MatchParameters(std::move(timestamps_), gaps_, tidy_, {}, std::forward(args_)...) + MatchParameters(const std::vector ×tamps_, + GapsType gaps_, + bool tidy_, + Args &&... args_) + : MatchParameters(timestamps_, gaps_, tidy_, {}, std::forward(args_)...) { } @@ -77,10 +80,11 @@ struct MatchParameters : public RouteParameters MatchParameters(std::vector timestamps_, GapsType gaps_, bool tidy_, - std::vector waypoints_, - Args... args_) - : RouteParameters{std::forward(args_)..., waypoints_}, - timestamps{std::move(timestamps_)}, gaps(gaps_), tidy(tidy_) + const std::vector &waypoints_, + Args &&... args_) + : RouteParameters{std::forward(args_)..., waypoints_}, timestamps{std::move( + timestamps_)}, + gaps(gaps_), tidy(tidy_) { } @@ -94,8 +98,8 @@ struct MatchParameters : public RouteParameters (timestamps.empty() || timestamps.size() == coordinates.size()); } }; -} -} -} +} // namespace api +} // namespace engine +} // namespace osrm #endif diff --git a/include/engine/api/match_parameters_tidy.hpp b/include/engine/api/match_parameters_tidy.hpp index ab4610c4f..198740afa 100644 --- a/include/engine/api/match_parameters_tidy.hpp +++ b/include/engine/api/match_parameters_tidy.hpp @@ -200,9 +200,9 @@ inline Result tidy(const MatchParameters ¶ms, Thresholds cfg = {15., 5}) return result; } -} // ns tidy -} // ns api -} // ns engine -} // ns osrm +} // namespace tidy +} // namespace api +} // namespace engine +} // namespace osrm #endif diff --git a/include/engine/api/nearest_api.hpp b/include/engine/api/nearest_api.hpp index 4cc01e41f..aff3c57dc 100644 --- a/include/engine/api/nearest_api.hpp +++ b/include/engine/api/nearest_api.hpp @@ -159,8 +159,8 @@ class NearestAPI final : public BaseAPI } }; -} // ns api -} // ns engine -} // ns osrm +} // namespace api +} // namespace engine +} // namespace osrm #endif diff --git a/include/engine/api/nearest_parameters.hpp b/include/engine/api/nearest_parameters.hpp index f24251b8c..576e75352 100644 --- a/include/engine/api/nearest_parameters.hpp +++ b/include/engine/api/nearest_parameters.hpp @@ -52,8 +52,8 @@ struct NearestParameters : public BaseParameters bool IsValid() const { return BaseParameters::IsValid() && number_of_results >= 1; } }; -} -} -} +} // namespace api +} // namespace engine +} // namespace osrm #endif // ENGINE_API_NEAREST_PARAMETERS_HPP diff --git a/include/engine/api/route_api.hpp b/include/engine/api/route_api.hpp index 1c8283fae..4990d37c9 100644 --- a/include/engine/api/route_api.hpp +++ b/include/engine/api/route_api.hpp @@ -988,8 +988,8 @@ class RouteAPI : public BaseAPI } }; -} // ns api -} // ns engine -} // ns osrm +} // namespace api +} // namespace engine +} // namespace osrm #endif diff --git a/include/engine/api/route_parameters.hpp b/include/engine/api/route_parameters.hpp index ba200050d..8d5dd9ae4 100644 --- a/include/engine/api/route_parameters.hpp +++ b/include/engine/api/route_parameters.hpp @@ -87,19 +87,13 @@ struct RouteParameters : public BaseParameters const GeometriesType geometries_, const OverviewType overview_, const boost::optional continue_straight_, - Args... args_) + Args &&... args_) // Once we perfectly-forward `args` (see #2990) this constructor can delegate to the one // below. - : BaseParameters{std::forward(args_)...}, - steps{steps_}, - alternatives{alternatives_}, - number_of_alternatives{alternatives_ ? 1u : 0u}, - annotations{false}, - annotations_type{AnnotationsType::None}, - geometries{geometries_}, - overview{overview_}, - continue_straight{continue_straight_}, - waypoints() + : BaseParameters{std::forward(args_)...}, steps{steps_}, alternatives{alternatives_}, + number_of_alternatives{alternatives_ ? 1u : 0u}, annotations{false}, + annotations_type{AnnotationsType::None}, geometries{geometries_}, overview{overview_}, + continue_straight{continue_straight_}, waypoints() { } @@ -111,7 +105,7 @@ struct RouteParameters : public BaseParameters const GeometriesType geometries_, const OverviewType overview_, const boost::optional continue_straight_, - Args... args_) + Args &&... args_) : BaseParameters{std::forward(args_)...}, steps{steps_}, alternatives{alternatives_}, number_of_alternatives{alternatives_ ? 1u : 0u}, annotations{annotations_}, annotations_type{annotations_ ? AnnotationsType::All : AnnotationsType::None}, @@ -129,12 +123,12 @@ struct RouteParameters : public BaseParameters const GeometriesType geometries_, const OverviewType overview_, const boost::optional continue_straight_, - Args... args_) + Args &&... args_) : BaseParameters{std::forward(args_)...}, steps{steps_}, alternatives{alternatives_}, number_of_alternatives{alternatives_ ? 1u : 0u}, - annotations{annotations_ == AnnotationsType::None ? false : true}, - annotations_type{annotations_}, geometries{geometries_}, overview{overview_}, - continue_straight{continue_straight_}, waypoints() + annotations{annotations_ != AnnotationsType::None}, annotations_type{annotations_}, + geometries{geometries_}, overview{overview_}, continue_straight{continue_straight_}, + waypoints() { } @@ -147,12 +141,12 @@ struct RouteParameters : public BaseParameters const OverviewType overview_, const boost::optional continue_straight_, std::vector waypoints_, - const Args... args_) + const Args &&... args_) : BaseParameters{std::forward(args_)...}, steps{steps_}, alternatives{alternatives_}, number_of_alternatives{alternatives_ ? 1u : 0u}, annotations{annotations_}, annotations_type{annotations_ ? AnnotationsType::All : AnnotationsType::None}, - geometries{geometries_}, overview{overview_}, continue_straight{continue_straight_}, - waypoints{waypoints_} + geometries{geometries_}, overview{overview_}, + continue_straight{continue_straight_}, waypoints{std::move(waypoints_)} { } @@ -165,12 +159,12 @@ struct RouteParameters : public BaseParameters const OverviewType overview_, const boost::optional continue_straight_, std::vector waypoints_, - Args... args_) + Args &&... args_) : BaseParameters{std::forward(args_)...}, steps{steps_}, alternatives{alternatives_}, - number_of_alternatives{alternatives_ ? 1u : 0u}, - annotations{annotations_ == AnnotationsType::None ? false : true}, + number_of_alternatives{alternatives_ ? 1u : 0u}, annotations{annotations_ != + AnnotationsType::None}, annotations_type{annotations_}, geometries{geometries_}, overview{overview_}, - continue_straight{continue_straight_}, waypoints{waypoints_} + continue_straight{continue_straight_}, waypoints{std::move(waypoints_)} { } @@ -217,8 +211,8 @@ inline RouteParameters::AnnotationsType operator|=(RouteParameters::AnnotationsT { return lhs = lhs | rhs; } -} // ns api -} // ns engine -} // ns osrm +} // namespace api +} // namespace engine +} // namespace osrm #endif diff --git a/include/engine/api/table_api.hpp b/include/engine/api/table_api.hpp index d3efe15d9..72cdea4e6 100644 --- a/include/engine/api/table_api.hpp +++ b/include/engine/api/table_api.hpp @@ -407,8 +407,8 @@ class TableAPI final : public BaseAPI const TableParameters ¶meters; }; -} // ns api -} // ns engine -} // ns osrm +} // namespace api +} // namespace engine +} // namespace osrm #endif diff --git a/include/engine/api/table_parameters.hpp b/include/engine/api/table_parameters.hpp index fbbf6831e..30e17900b 100644 --- a/include/engine/api/table_parameters.hpp +++ b/include/engine/api/table_parameters.hpp @@ -85,7 +85,7 @@ struct TableParameters : public BaseParameters template TableParameters(std::vector sources_, std::vector destinations_, - Args... args_) + Args &&... args_) : BaseParameters{std::forward(args_)...}, sources{std::move(sources_)}, destinations{std::move(destinations_)} { @@ -95,7 +95,7 @@ struct TableParameters : public BaseParameters TableParameters(std::vector sources_, std::vector destinations_, const AnnotationsType annotations_, - Args... args_) + Args &&... args_) : BaseParameters{std::forward(args_)...}, sources{std::move(sources_)}, destinations{std::move(destinations_)}, annotations{annotations_} { @@ -108,7 +108,7 @@ struct TableParameters : public BaseParameters double fallback_speed_, FallbackCoordinateType fallback_coordinate_type_, double scale_factor_, - Args... args_) + Args &&... args_) : BaseParameters{std::forward(args_)...}, sources{std::move(sources_)}, destinations{std::move(destinations_)}, fallback_speed{fallback_speed_}, fallback_coordinate_type{fallback_coordinate_type_}, annotations{annotations_}, @@ -122,7 +122,7 @@ struct TableParameters : public BaseParameters if (!BaseParameters::IsValid()) return false; - // Distance Table makes only sense with 2+ coodinates + // Distance Table makes only sense with 2+ coordinates if (coordinates.size() < 2) return false; @@ -166,8 +166,8 @@ inline TableParameters::AnnotationsType &operator|=(TableParameters::Annotations { return lhs = lhs | rhs; } -} -} -} +} // namespace api +} // namespace engine +} // namespace osrm #endif // ENGINE_API_TABLE_PARAMETERS_HPP diff --git a/include/engine/api/tile_parameters.hpp b/include/engine/api/tile_parameters.hpp index 137c4dac3..e5328e7c7 100644 --- a/include/engine/api/tile_parameters.hpp +++ b/include/engine/api/tile_parameters.hpp @@ -70,8 +70,8 @@ struct TileParameters final return valid_x && valid_y && valid_z; } }; -} -} -} +} // namespace api +} // namespace engine +} // namespace osrm #endif diff --git a/include/engine/api/trip_api.hpp b/include/engine/api/trip_api.hpp index 65f9381fc..90e5e1391 100644 --- a/include/engine/api/trip_api.hpp +++ b/include/engine/api/trip_api.hpp @@ -175,8 +175,8 @@ class TripAPI final : public RouteAPI const TripParameters ¶meters; }; -} // ns api -} // ns engine -} // ns osrm +} // namespace api +} // namespace engine +} // namespace osrm #endif diff --git a/include/engine/api/trip_parameters.hpp b/include/engine/api/trip_parameters.hpp index 0df38d6c9..84d6b861a 100644 --- a/include/engine/api/trip_parameters.hpp +++ b/include/engine/api/trip_parameters.hpp @@ -65,8 +65,8 @@ struct TripParameters : public RouteParameters DestinationType destination_, bool roundtrip_, Args &&... args_) - : RouteParameters{std::forward(args_)...}, source{source_}, destination{destination_}, - roundtrip{roundtrip_} + : RouteParameters{std::forward(args_)...}, source{source_}, + destination{destination_}, roundtrip{roundtrip_} { } @@ -76,8 +76,8 @@ struct TripParameters : public RouteParameters bool IsValid() const { return RouteParameters::IsValid(); } }; -} -} -} +} // namespace api +} // namespace engine +} // namespace osrm #endif diff --git a/include/engine/approach.hpp b/include/engine/approach.hpp index 5c6787f27..f7d671a9c 100644 --- a/include/engine/approach.hpp +++ b/include/engine/approach.hpp @@ -42,5 +42,5 @@ enum class Approach : std::uint8_t }; } -} +} // namespace osrm #endif diff --git a/include/engine/base64.hpp b/include/engine/base64.hpp index 024d04b29..d1fa8753c 100644 --- a/include/engine/base64.hpp +++ b/include/engine/base64.hpp @@ -38,7 +38,7 @@ using BinaryFromBase64 = boost::archive::iterators::transform_width< 8, // get a view of 8 bit 6 // from a sequence of 6 bit >; -} // ns detail +} // namespace detail namespace engine { @@ -135,7 +135,7 @@ template T decodeBase64Bytewise(const std::string &encoded) return x; } -} // ns engine -} // ns osrm +} // namespace engine +} // namespace osrm #endif /* OSRM_BASE64_HPP */ diff --git a/include/engine/bearing.hpp b/include/engine/bearing.hpp index eaabae781..54e24f57f 100644 --- a/include/engine/bearing.hpp +++ b/include/engine/bearing.hpp @@ -46,7 +46,7 @@ inline bool operator==(const Bearing lhs, const Bearing rhs) return lhs.bearing == rhs.bearing && lhs.range == rhs.range; } inline bool operator!=(const Bearing lhs, const Bearing rhs) { return !(lhs == rhs); } -} -} +} // namespace engine +} // namespace osrm #endif diff --git a/include/engine/data_watchdog.hpp b/include/engine/data_watchdog.hpp index b44274545..29fb93443 100644 --- a/include/engine/data_watchdog.hpp +++ b/include/engine/data_watchdog.hpp @@ -56,11 +56,14 @@ class DataWatchdogImpl( - std::make_shared( - std::vector{ - static_region.shm_key, updatable_region.shm_key})); + { + boost::unique_lock swap_lock(factory_mutex); + facade_factory = + DataFacadeFactory( + std::make_shared( + std::vector{ + static_region.shm_key, updatable_region.shm_key})); + } } watcher = std::thread(&DataWatchdogImpl::Run, this); @@ -75,10 +78,14 @@ class DataWatchdogImpl Get(const api::BaseParameters ¶ms) const { + // make sure facade_factory stays stable while we call Get() + boost::shared_lock swap_lock(factory_mutex); return facade_factory.Get(params); } std::shared_ptr Get(const api::TileParameters ¶ms) const { + // make sure facade_factory stays stable while we call Get() + boost::shared_lock swap_lock(factory_mutex); return facade_factory.Get(params); } @@ -111,16 +118,20 @@ class DataWatchdogImpl( - std::make_shared( - std::vector{ - static_region.shm_key, updatable_region.shm_key})); + { + boost::unique_lock swap_lock(factory_mutex); + facade_factory = + DataFacadeFactory( + std::make_shared( + std::vector{ + static_region.shm_key, updatable_region.shm_key})); + } } util::Log() << "DataWatchdog thread stopped"; } + mutable boost::shared_mutex factory_mutex; const std::string dataset_name; storage::SharedMonitor barrier; std::thread watcher; @@ -131,14 +142,14 @@ class DataWatchdogImpl facade_factory; }; -} +} // namespace detail // This class monitors the shared memory region that contains the pointers to // the data and layout regions that should be used. This region is updated // once a new dataset arrives. template class FacadeT> using DataWatchdog = detail::DataWatchdogImpl>; -} -} +} // namespace engine +} // namespace osrm #endif diff --git a/include/engine/datafacade.hpp b/include/engine/datafacade.hpp index 76068a472..f0f8e9e5b 100644 --- a/include/engine/datafacade.hpp +++ b/include/engine/datafacade.hpp @@ -11,7 +11,7 @@ namespace engine using DataFacadeBase = datafacade::ContiguousInternalMemoryDataFacadeBase; template using DataFacade = datafacade::ContiguousInternalMemoryDataFacade; -} -} +} // namespace engine +} // namespace osrm #endif diff --git a/include/engine/datafacade/algorithm_datafacade.hpp b/include/engine/datafacade/algorithm_datafacade.hpp index a83a5340c..38030511c 100644 --- a/include/engine/datafacade/algorithm_datafacade.hpp +++ b/include/engine/datafacade/algorithm_datafacade.hpp @@ -99,8 +99,8 @@ template <> class AlgorithmDataFacade // searches for a specific edge virtual EdgeID FindEdge(const NodeID from, const NodeID to) const = 0; }; -} -} -} +} // namespace datafacade +} // namespace engine +} // namespace osrm #endif diff --git a/include/engine/datafacade/contiguous_internalmem_datafacade.hpp b/include/engine/datafacade/contiguous_internalmem_datafacade.hpp index 63d4dbc3a..988678331 100644 --- a/include/engine/datafacade/contiguous_internalmem_datafacade.hpp +++ b/include/engine/datafacade/contiguous_internalmem_datafacade.hpp @@ -609,7 +609,7 @@ class ContiguousInternalMemoryDataFacadeBase : public BaseDataFacade auto found_range = std::equal_range( m_maneuver_overrides.begin(), m_maneuver_overrides.end(), edge_based_node_id, Comp{}); - std::for_each(found_range.first, found_range.second, [&](const auto & override) { + std::for_each(found_range.first, found_range.second, [&](const auto &override) { std::vector sequence( m_maneuver_override_node_sequences.begin() + override.node_sequence_offset_begin, m_maneuver_override_node_sequences.begin() + override.node_sequence_offset_end); @@ -760,8 +760,8 @@ class ContiguousInternalMemoryDataFacade final { } }; -} -} -} +} // namespace datafacade +} // namespace engine +} // namespace osrm #endif // CONTIGUOUS_INTERNALMEM_DATAFACADE_HPP diff --git a/include/engine/datafacade/datafacade_base.hpp b/include/engine/datafacade/datafacade_base.hpp index 77dab643f..b80c93b18 100644 --- a/include/engine/datafacade/datafacade_base.hpp +++ b/include/engine/datafacade/datafacade_base.hpp @@ -223,8 +223,8 @@ class BaseDataFacade virtual std::vector GetOverridesThatStartAt(const NodeID edge_based_node_id) const = 0; }; -} -} -} +} // namespace datafacade +} // namespace engine +} // namespace osrm #endif // DATAFACADE_BASE_HPP diff --git a/include/engine/datafacade/mmap_memory_allocator.hpp b/include/engine/datafacade/mmap_memory_allocator.hpp index 60df71e90..fc4b4e24a 100644 --- a/include/engine/datafacade/mmap_memory_allocator.hpp +++ b/include/engine/datafacade/mmap_memory_allocator.hpp @@ -33,7 +33,7 @@ class MMapMemoryAllocator : public ContiguousBlockAllocator private: storage::SharedDataIndex index; - std::vector mapped_memory_files; + std::vector mapped_memory_files; std::string rtree_filename; }; diff --git a/include/engine/datafacade_factory.hpp b/include/engine/datafacade_factory.hpp index a4ff57f38..853716be9 100644 --- a/include/engine/datafacade_factory.hpp +++ b/include/engine/datafacade_factory.hpp @@ -70,7 +70,7 @@ template