Compare commits

..

14 Commits

Author SHA1 Message Date
Moritz Kobitzsch 1ae2964b0f fix roundabout-intersection on immediate exit 2016-09-13 19:28:20 +02:00
Moritz Kobitzsch 237e8e02fd prepare 5.4.0-rc.2 2016-09-13 14:40:14 +02:00
Moritz Kobitzsch 865052352e fix false positives in sliproads 2016-09-13 14:37:25 +02:00
Moritz Kobitzsch 2064d6b2ce also reserve entry for refs 2016-09-13 14:01:13 +02:00
Daniel Patterson 6c9227d4d0 Update changelog for issue #2896 fix. 2016-09-12 15:15:04 -07:00
Michael Krasnyk ef66e271c1 Test for PR #2898
Test checks that osrm-extract terminates for
http://www.openstreetmap.org/way/198481519
2016-09-12 15:12:34 -07:00
Moritz Kobitzsch 7c3b587028 fix looping in sliproad handler for lanes 2016-09-12 18:34:28 +02:00
Daniel J. Hofmann d399014633 Adds a limit for number of results returned in Nearest service, resolves #2872 2016-09-12 12:08:49 +02:00
Daniel J. Hofmann e27ce0e518 Fixes issue where two ways with same name but different pronunciation where deduplicated, resolves #2860 2016-09-12 11:01:51 +02:00
Daniel J. Hofmann 1a1e16c5b4 We do duration based routing (also see #77); closes #2885 2016-09-09 16:27:58 +02:00
Daniel J. Hofmann 01e7232add Fixes compilation against newer Boost versions; seems like we were lucky before; closes #2889 2016-09-09 16:15:21 +02:00
Moritz Kobitzsch c69f99f282 make sure to reserve enough external memory 2016-09-09 15:55:57 +02:00
Daniel J. Hofmann 391163cba0 Fixes bearing range of zero exhaustive graph traversal 2016-09-08 17:38:40 +02:00
Moritz Kobitzsch 4cddec298f prepare 5.4.0-rc.1 2016-09-08 16:56:11 +02:00
1475 changed files with 20839 additions and 74846 deletions
-7
View File
@@ -1,7 +0,0 @@
{
"presets": [
"stage-0",
"es2015",
"react"
]
}
+2 -3
View File
@@ -1,13 +1,12 @@
# Issue
What issue is this PR targeting? If there is no issue that addresses the problem, please open a corresponding issue and link it here.
What issue is this PR targeting? Is there no issue that covers the problem addressed here? Please open a corresponding issue and link it from here.
## Tasklist
- [ ] ADD OWN TASKS HERE
- [ ] update relevant [Wiki pages](https://github.com/Project-OSRM/osrm-backend/wiki)
- [ ] add regression / cucumber cases (see docs/testing.md)
- [ ] review
- [ ] adjust for comments
- [ ] adjust for for comments
## Requirements / Relations
Link any requirements here. Other pull requests this PR is based on?
-5
View File
@@ -1,8 +1,3 @@
# mason #
#########
/.mason
/mason_packages
# pre compiled dependencies #
#############################
osrm-deps
+47 -74
View File
@@ -13,6 +13,7 @@ notifications:
branches:
only:
- master
- 5.4
cache:
ccache: true
@@ -25,8 +26,7 @@ env:
- CCACHE_TEMPDIR=/tmp/.ccache-temp
- CCACHE_COMPRESS=1
- CASHER_TIME_OUT=599 # one second less than 10m to avoid 10m timeout error: https://github.com/Project-OSRM/osrm-backend/issues/2742
- CCACHE_VERSION=3.3.1
- CMAKE_VERSION=3.6.2
- JOBS=4
matrix:
fast_finish: true
@@ -36,57 +36,38 @@ matrix:
# Debug Builds
- os: linux
compiler: "gcc-6-debug"
addons: &gcc6
compiler: "gcc-5-debug"
addons: &gcc5
apt:
sources: ['ubuntu-toolchain-r-test']
packages: ['g++-6', 'libbz2-dev', 'libstxxl-dev', 'libstxxl1', 'libxml2-dev', 'libzip-dev', 'lua5.1', 'liblua5.1-0-dev', 'libtbb-dev', 'libgdal-dev', 'libluabind-dev', 'libboost-all-dev']
env: CCOMPILER='gcc-6' CXXCOMPILER='g++-6' BUILD_TYPE='Debug' TARGET_ARCH='x86_64-asan' ENABLE_COVERAGE=ON ENABLE_SANITIZER=ON BUILD_COMPONENTS=ON
packages: ['g++-5', 'libbz2-dev', 'libstxxl-dev', 'libstxxl1', 'libxml2-dev', 'libzip-dev', 'lua5.1', 'liblua5.1-0-dev', 'libtbb-dev', 'libgdal-dev', 'libluabind-dev', 'libboost-all-dev', 'ccache']
env: CCOMPILER='gcc-5' CXXCOMPILER='g++-5' BUILD_TYPE='Debug' COVERAGE=ON
- os: linux
compiler: "clang-3.8-debug"
addons: &clang38
apt:
sources: ['ubuntu-toolchain-r-test']
packages: ['libstdc++-5-dev', 'libbz2-dev', 'libstxxl-dev', 'libstxxl1', 'libxml2-dev', 'libzip-dev', 'lua5.1', 'liblua5.1-0-dev', 'libtbb-dev', 'libgdal-dev', 'libluabind-dev', 'libboost-all-dev']
env: CLANG_VERSION='3.8.1' BUILD_TYPE='Debug' RUN_CLANG_FORMAT=ON BUILD_COMPONENTS=ON CUCUMBER_TIMEOUT=60000
packages: ['libstdc++-5-dev', 'libbz2-dev', 'libstxxl-dev', 'libstxxl1', 'libxml2-dev', 'libzip-dev', 'lua5.1', 'liblua5.1-0-dev', 'libtbb-dev', 'libgdal-dev', 'libluabind-dev', 'libboost-all-dev', 'ccache']
env: CLANG_VERSION='3.8.0' BUILD_TYPE='Debug' RUN_CLANG_FORMAT=ON
- os: osx
osx_image: xcode8.2
compiler: "mason-osx-release"
# 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
osx_image: xcode7.3
compiler: clang
env: CCOMPILER='clang' CXXCOMPILER='clang++' BUILD_TYPE='Debug' JOBS=1 CUCUMBER_TIMEOUT=60000
# Release Builds
- os: linux
compiler: "mason-linux-release"
addons:
compiler: "gcc-5-release"
addons: &gcc5
apt:
sources: ['ubuntu-toolchain-r-test']
packages: ['libstdc++-5-dev']
env: CLANG_VERSION='3.8.1' BUILD_TYPE='Release' ENABLE_MASON=ON
packages: ['g++-5', 'libbz2-dev', 'libstxxl-dev', 'libstxxl1', 'libxml2-dev', 'libzip-dev', 'lua5.1', 'liblua5.1-0-dev', 'libtbb-dev', 'libgdal-dev', 'libluabind-dev', 'libboost-all-dev', 'ccache']
env: CCOMPILER='gcc-5' CXXCOMPILER='g++-5' BUILD_TYPE='Release'
- os: linux
compiler: "gcc-6-release"
addons: &gcc6
apt:
sources: ['ubuntu-toolchain-r-test']
packages: ['g++-6', 'libbz2-dev', 'libstxxl-dev', 'libstxxl1', 'libxml2-dev', 'libzip-dev', 'lua5.1', 'liblua5.1-0-dev', 'libtbb-dev', 'libgdal-dev', 'libluabind-dev', 'libboost-all-dev']
env: CCOMPILER='gcc-6' CXXCOMPILER='g++-6' BUILD_TYPE='Release' BUILD_COMPONENTS=ON
- os: linux
compiler: "gcc-6-release-i686"
env: >
TARGET_ARCH='i686' CCOMPILER='gcc-6' CXXCOMPILER='g++-6' BUILD_TYPE='Release'
CFLAGS='-m32 -msse2 -mfpmath=sse' CXXFLAGS='-m32 -msse2 -mfpmath=sse'
- os: linux
compiler: "gcc-4.9-release"
addons: &gcc49
apt:
sources: ['ubuntu-toolchain-r-test']
packages: ['g++-4.9', 'libbz2-dev', 'libstxxl-dev', 'libstxxl1', 'libxml2-dev', 'libzip-dev', 'lua5.1', 'liblua5.1-0-dev', 'libtbb-dev', 'libgdal-dev', 'libluabind-dev', 'libboost-all-dev', 'ccache']
env: CCOMPILER='gcc-4.9' CXXCOMPILER='g++-4.9' BUILD_TYPE='Release'
compiler: "gcc-5-release-i686"
env: TARGET_ARCH='i686' CCOMPILER='gcc-5' CXXCOMPILER='g++-5' BUILD_TYPE='Release'
# Disabled because of CI slowness
#- os: linux
@@ -97,14 +78,20 @@ matrix:
#- packages: ['clang-3.8', 'libbz2-dev', 'libstxxl-dev', 'libstxxl1', 'libxml2-dev', 'libzip-dev', 'lua5.1', 'liblua5.1-0-dev', 'libtbb-dev', 'libgdal-dev', 'libluabind-dev', 'libboost-all-dev']
#- env: CCOMPILER='clang-3.8' CXXCOMPILER='clang++-3.8' BUILD_TYPE='Release'
# Disabled because of CI slowness
#- os: osx
#- osx_image: xcode7.3
#- compiler: clang
#- env: CCOMPILER='clang' CXXCOMPILER='clang++' BUILD_TYPE='Release'
# Shared Library
- os: linux
compiler: "gcc-6-release-shared"
addons: &gcc6
compiler: "gcc-5-release-shared"
addons: &gcc5
apt:
sources: ['ubuntu-toolchain-r-test']
packages: ['g++-6', 'libbz2-dev', 'libstxxl-dev', 'libstxxl1', 'libxml2-dev', 'libzip-dev', 'lua5.1', 'liblua5.1-0-dev', 'libtbb-dev', 'libgdal-dev', 'libluabind-dev', 'libboost-all-dev']
env: CCOMPILER='gcc-6' CXXCOMPILER='g++-6' BUILD_TYPE='Release' BUILD_SHARED_LIBS=ON BUILD_COMPONENTS=ON
packages: ['g++-5', 'libbz2-dev', 'libstxxl-dev', 'libstxxl1', 'libxml2-dev', 'libzip-dev', 'lua5.1', 'liblua5.1-0-dev', 'libtbb-dev', 'libgdal-dev', 'libluabind-dev', 'libboost-all-dev', 'ccache']
env: CCOMPILER='gcc-5' CXXCOMPILER='g++-5' BUILD_TYPE='Release' BUILD_SHARED_LIBS=ON
# Disabled because CI slowness
#- os: linux
@@ -117,49 +104,36 @@ matrix:
before_install:
- if [[ ! -z $TARGET_ARCH ]] ; then source ./scripts/travis/before_install.$TARGET_ARCH.sh ; fi
- if [[ $(uname -s) == 'Darwin' ]]; then sudo mdutil -i off /; fi;
- source ./scripts/install_node.sh 4
- npm install
- DEPS_DIR="${TRAVIS_BUILD_DIR}/deps"
- export PATH=${DEPS_DIR}/bin:${PATH} && mkdir -p ${DEPS_DIR}
- CMAKE_URL="https://mason-binaries.s3.amazonaws.com/${TRAVIS_OS_NAME}-x86_64/cmake/3.5.2.tar.gz"
- travis_retry wget --quiet -O - ${CMAKE_URL} | tar --strip-components=1 -xz -C ${DEPS_DIR} || exit 1
- |
if [[ "${TRAVIS_OS_NAME}" == "linux" ]]; then
export JOBS=$((`nproc` + 1))
if [[ ${CLANG_VERSION:-false} != false ]]; then
export CCOMPILER='clang'
export CXXCOMPILER='clang++'
CLANG_URL="https://mason-binaries.s3.amazonaws.com/${TRAVIS_OS_NAME}-x86_64/clang/${CLANG_VERSION}.tar.gz"
travis_retry wget --quiet -O - ${CLANG_URL} | tar --strip-components=1 -xz -C ${DEPS_DIR} || exit 1
fi
- |
if [[ "${TRAVIS_OS_NAME}" == "osx" ]]; then
export JOBS=$((`sysctl -n hw.ncpu` + 1))
sudo mdutil -i off /
# implicit deps, but seem to be installed by default with recent images: libxml2 GDAL boost
brew install libzip libstxxl lua51 luabind tbb md5sha1sum ccache
fi
- echo "Using ${JOBS} jobs"
- source ./scripts/install_node.sh 4
- npm install -g "npm@>=3" # Upgrade to npm >v2 to reduce size of downloaded dependencies
- npm install
- ./third_party/mason/mason install ccache ${CCACHE_VERSION}
- export PATH=$(./third_party/mason/mason prefix ccache ${CCACHE_VERSION})/bin:${PATH}
- ./third_party/mason/mason install cmake ${CMAKE_VERSION}
- export PATH=$(./third_party/mason/mason prefix cmake ${CMAKE_VERSION})/bin:${PATH}
- |
if [[ ! -z ${CLANG_VERSION} ]]; then
export CCOMPILER='clang'
export CXXCOMPILER='clang++'
./third_party/mason/mason install clang++ ${CLANG_VERSION}
export PATH=$(./third_party/mason/mason prefix clang++ ${CLANG_VERSION})/bin:${PATH}
# we only enable lto for release builds
# and therefore don't need to us ld.gold or llvm tools for linking
# for debug builds
if [[ ${BUILD_TYPE} == 'Release' ]]; then
./third_party/mason/mason install binutils 2.27
export PATH=$(./third_party/mason/mason prefix binutils 2.27)/bin:${PATH}
fi
fi
- ccache --max-size=256M # limiting the cache's size to roughly the previous job's object sizes
install:
- |
if [[ "${TRAVIS_OS_NAME}" == "linux" ]]; then
./scripts/check_taginfo.py taginfo.json profiles/car.lua
fi
- export OSRM_BUILD_DIR="$(pwd)/build-osrm"
- mkdir ${OSRM_BUILD_DIR} && pushd ${OSRM_BUILD_DIR}
- mkdir build && pushd build
- export CC=${CCOMPILER} CXX=${CXXCOMPILER}
- cmake .. -DCMAKE_BUILD_TYPE=${BUILD_TYPE} -DENABLE_MASON=${ENABLE_MASON:-OFF} -DENABLE_ASSERTIONS=${ENABLE_ASSERTIONS:-OFF} -DBUILD_SHARED_LIBS=${BUILD_SHARED_LIBS:-OFF} -DENABLE_COVERAGE=${ENABLE_COVERAGE:-OFF} -DENABLE_SANITIZER=${ENABLE_SANITIZER:-OFF} -DBUILD_TOOLS=ON -DBUILD_COMPONENTS=${BUILD_COMPONENTS:-OFF} -DENABLE_CCACHE=ON
- cmake .. -DCMAKE_BUILD_TYPE=${BUILD_TYPE} -DBUILD_SHARED_LIBS=${BUILD_SHARED_LIBS:-OFF} -DCOVERAGE=${COVERAGE:-OFF} -DBUILD_TOOLS=ON -DBUILD_COMPONENTS=ON -DENABLE_CCACHE=ON
- echo "travis_fold:start:MAKE"
- make osrm-extract --jobs=3
- make --jobs=${JOBS}
- make tests --jobs=${JOBS}
- make benchmarks --jobs=${JOBS}
@@ -173,9 +147,8 @@ install:
- popd
- mkdir example/build && pushd example/build
- cmake .. -DCMAKE_BUILD_TYPE=${BUILD_TYPE}
- make --jobs=${JOBS}
- make
- popd
- npm run build-api-docs
script:
- if [[ $TARGET_ARCH == armhf ]] ; then echo "Skip tests for $TARGET_ARCH" && exit 0 ; fi
@@ -184,7 +157,7 @@ script:
- echo "travis_fold:end:BENCHMARK"
- ./example/build/osrm-example test/data/monaco.osrm
# All tests assume to be run from the build directory
- pushd ${OSRM_BUILD_DIR}
- pushd build
- ./unit_tests/library-tests ../test/data/monaco.osrm
- ./unit_tests/extractor-tests
- ./unit_tests/engine-tests
@@ -199,6 +172,6 @@ after_success:
./scripts/format.sh # we don't want to fail just yet
fi
- |
if [ -n "${ENABLE_COVERAGE}" ]; then
if [ -n "${COVERAGE}" ]; then
bash <(curl -s https://codecov.io/bash)
fi
+13 -70
View File
@@ -1,79 +1,23 @@
# 5.5.1
- Changes from 5.5.0
# 5.4.0-rc.4
Changes from 5.4.0-rc.3
- Bugfixes
- Fixes #3455 where a deadlock could occur if re-loading new data under heavy load with multiple consumers osrm-datastore
- Fixed a bug where roundabout intersections could result in breaking assertions when immediately exited
# 5.5.0
- Changes from 5.4.0
- API:
- `osrm-datastore` now accepts the parameter `--max-wait` that specifies how long it waits before aquiring a shared memory lock by force
- Shared memory now allows for multiple clients (multiple instances of libosrm on the same segment)
- Polyline geometries can now be requested with precision 5 as well as with precision 6
- Profiles
- the car profile has been refactored into smaller functions
- get_value_by_key() is now guaranteed never to return empty strings, nil is returned instead.
- debug.lua was added to make it easier to test/develop profile code.
- `car.lua` now depends on lib/set.lua and lib/sequence.lua
- `restrictions` is now used for namespaced restrictions and restriction exceptions (e.g. `restriction:motorcar=` as well as `except=motorcar`)
- replaced lhs/rhs profiles by using test defined profiles
- Handle `oneway=alternating` (routed over with penalty) separately from `oneway=reversible` (not routed over due to time dependence)
- Handle `destination:forward`, `destination:backward`, `destination:ref:forward`, `destination:ref:backward` tags
- Properly handle destinations on `oneway=-1` roads
- Guidance
- Notifications are now exposed more prominently, announcing turns onto a ferry/pushing your bike more prominently
- Improved turn angle calculation, detecting offsets due to lanes / minor variations due to inaccuracies
- Corrected the bearings returned for intermediate steps - requires reprocessing
- Improved turn locations for collapsed turns
- Sliproad classification refinements: the situations we detect as Sliproads now resemble more closely the reality
- Trip Plugin
- changed internal behaviour to prefer the smallest lexicographic result over the largest one
# 5.4.0-rc.3
Changes from 5.4.0-rc.2
- Bugfixes
- fixed a bug where polyline decoding on a defective polyline could end up in out-of-bound access on a vector
- fixed compile errors in tile unit-test framework
- fixed a bug that could result in inconsistent behaviour when collapsing instructions
- fixed a bug that could result in crashes when leaving a ferry directly onto a motorway ramp
- fixed a bug in the tile plugin that resulted in discovering invalid edges for connections
- improved error messages when missing files during traffic updates (#3114)
- For single coordinate geometries the GeoJSON `Point` encoding was broken. We now always emit `LineString`s even in the one-coordinate-case (backwards compatible) (#3425)
- Debug Tiles
- Added support for turn penalties
- Internals
- Internal/Shared memory datafacades now share common memory layout and data loading code
- File reading now has much better error handling
- Misc
- Progress indicators now print newlines when stdout is not a TTY
- Prettier API documentation now generated via `npm run build-api-docs` output `build/docs`
# 5.4.3
- Changes from 5.4.2
- Bugfixes
- #3254 Fixed a bug that could end up hiding roundabout instructions
- #3260 fixed a bug that provided the wrong location in the arrival instruction
# 5.4.2
- Changes from 5.4.1
- Bugfixes
- #3032 Fixed a bug that could result in emitting `invalid` as an instruction type on sliproads with mode changes
- #3085 Fixed an outdated assertion that could throw without a cause for concern
- #3179 Fixed a bug that could trigger an assertion in TurnInstruciton generation
# 5.4.1
- Changes from 5.4.0
- Bugfixes
- #3016: Fixes shared memory updates while queries are running
- BREAKING: Fixed a bug where some roads could be falsly identified as sliproadsi This change requires reprocessing datasets with osrm-extract and osrm-contract
- BREAKING: Fixed a bug that resulted in false names/ref/destination/pronunciation This change requires reprocessing datasets with osrm-extract and osrm-contract
# 5.4.0
- Changes from 5.3.0
Changes from 5.3.0
- Profiles
- includes library guidance.lua that offers preliminary configuration on guidance.
- added left_hand_driving flag in global profile properties
- modified turn penalty function for car profile - better fit to real data
- return `ref` and `name` as separate fields. Do no use ref or destination as fallback for name value
- the default profile for car now ignores HOV only roads
- Guidance
- Handle Access tags for lanes, only considering valid lanes in lane-guidance (think car | car | bike | car)
- Improved the detection of non-noticeable name-changes
- Summaries have been improved to consider references as well
- API:
- `annotations=true` now returns the data source id for each segment as `datasources`
- Reduced semantic of merge to refer only to merges from a lane onto a motorway-like road
@@ -89,13 +33,12 @@
- Fixed a bug where post-processing instructions (e.g. left + left -> uturn) could result in false pronunciations
- Fixes a bug where a bearing range of zero would cause exhaustive graph traversals
- Fixes a bug where certain looped geometries could cause an infinite loop during extraction
- Fixed a bug where some roads could be falsly identified as sliproads
- Fixed a bug where roundabout intersections could result in breaking assertions when immediately exited
- Infrastructure:
- Adds a feature to limit results in nearest service with a default of 100 in `osrm-routed`
# 5.3.0
- Changes from 5.3.0-rc.3
Changes from 5.3.0-rc.3
- Guidance
- Only announce `use lane` on required turns (not using all lanes to go straight)
- Moved `lanes` to the intersection objects. This is BREAKING in relation to other Release Candidates but not with respect to other releases.
@@ -103,7 +46,7 @@
- Fix BREAKING: bug that could result in failure to load 'osrm.icd' files. This breaks the dataformat
- Fix: bug that results in segfaults when `use lane` instructions are suppressed
- Changes form 5.2.7
Changes form 5.2.7
- API
- Introduces new `TurnType` in the form of `use lane`. The type indicates that you have to stick to a lane without turning
- Introduces `lanes` to the `Intersection` object. The lane data contains both the markings at the intersection and a flag indicating if they can be chosen for the next turn
@@ -127,7 +70,7 @@
- Fix devide by zero on updating speed data using osrm-contract
# 5.3.0 RC3
- Changes from 5.3.0-rc.2
Changes from 5.3.0-rc.2
- Guidance
- Improved detection of obvious turns
- Improved turn lane detection
@@ -135,7 +78,7 @@
- Fix bug that didn't chose minimal weights on overlapping edges
# 5.3.0 RC2
- Changes from 5.3.0-rc.1
Changes from 5.3.0-rc.1
- Bugfixes
- Fixes invalid checks in the lane-extraction part of the car profile
+154 -355
View File
@@ -7,66 +7,20 @@ Please create a directory and run cmake from there, passing the path to this sou
This process created the file `CMakeCache.txt' and the directory `CMakeFiles'. Please delete them.")
endif()
# detect if this is included as subproject and if so expose
# some variables to its parent scope
get_directory_property(BUILD_AS_SUBPROJECT PARENT_DIRECTORY)
if(BUILD_AS_SUBPROJECT)
message(STATUS "Building libosrm as subproject.")
endif()
option(ENABLE_MASON "Use mason for dependencies" OFF)
option(ENABLE_CCACHE "Speed up incremental rebuilds via ccache" ON)
option(BUILD_TOOLS "Build OSRM tools" OFF)
option(BUILD_COMPONENTS "Build osrm-components" OFF)
option(ENABLE_ASSERTIONS "Use assertions in release mode" OFF)
option(ENABLE_COVERAGE "Build with coverage instrumentalisation" OFF)
option(ENABLE_SANITIZER "Use memory sanitizer for Debug build" OFF)
option(ENABLE_LTO "Use LTO if available" ON)
option(ENABLE_FUZZING "Fuzz testing using LLVM's libFuzzer" OFF)
option(ENABLE_GOLD_LINKER "Use GNU gold linker if available" ON)
if(ENABLE_MASON)
# versions in use
set(MASON_BOOST_VERSION "1.61.0")
set(MASON_STXXL_VERSION "1.4.1")
set(MASON_EXPAT_VERSION "2.2.0")
set(MASON_LUA_VERSION "5.2.4")
set(MASON_LUABIND_VERSION "e414c57bcb687bb3091b7c55bbff6947f052e46b")
set(MASON_BZIP2_VERSION "1.0.6")
set(MASON_TBB_VERSION "43_20150316")
message(STATUS "Enabling mason")
find_program(CURL_FOUND curl)
if(NOT CURL_FOUND)
message(FATAL_ERROR "curl command required with -DENABLE_MASON")
endif()
set(MASON_COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/third_party/mason/mason)
include(${CMAKE_CURRENT_SOURCE_DIR}/third_party/mason/mason.cmake)
endif()
# be compatible with version handling before cmake 3.x
if (POLICY CMP0048)
cmake_policy(SET CMP0048 OLD)
endif()
project(OSRM C CXX)
set(OSRM_VERSION_MAJOR 5)
set(OSRM_VERSION_MINOR 5)
set(OSRM_VERSION_PATCH 1)
set(OSRM_VERSION "${OSRM_VERSION_MAJOR}.${OSRM_VERSION_MINOR}.${OSRM_VERSION_PATCH}")
add_definitions(-DOSRM_PROJECT_DIR="${CMAKE_CURRENT_SOURCE_DIR}")
set(OSRM_VERSION_MINOR 4)
set(OSRM_VERSION_PATCH 0)
# these two functions build up custom variables:
# DEPENDENCIES_INCLUDE_DIRS and OSRM_DEFINES
# OSRM_INCLUDE_PATHS and OSRM_DEFINES
# These variables we want to pass to
# include_directories and add_definitions for both
# this build and for sharing externally via pkg-config
function(add_dependency_includes includes)
list(APPEND DEPENDENCIES_INCLUDE_DIRS "${includes}")
set(DEPENDENCIES_INCLUDE_DIRS "${DEPENDENCIES_INCLUDE_DIRS}" PARENT_SCOPE)
list(APPEND OSRM_INCLUDE_PATHS "${includes}")
set(OSRM_INCLUDE_PATHS "${OSRM_INCLUDE_PATHS}" PARENT_SCOPE)
endfunction(add_dependency_includes)
function(add_dependency_defines defines)
@@ -92,9 +46,20 @@ if(WIN32 AND MSVC_VERSION LESS 1900)
message(FATAL_ERROR "Building with Microsoft compiler needs Latest Visual Studio 2015 (Community or better)")
endif()
option(ENABLE_CCACHE "Speed up incremental rebuilds via ccache" ON)
option(ENABLE_JSON_LOGGING "Adds additional JSON debug logging to the response" OFF)
option(BUILD_TOOLS "Build OSRM tools" OFF)
option(BUILD_COMPONENTS "Build osrm-components" OFF)
option(ENABLE_ASSERTIONS OFF)
option(COVERAGE OFF)
option(SANITIZER OFF)
option(ENABLE_LTO "Use LTO if available" ON)
option(ENABLE_FUZZING "Fuzz testing using LLVM's libFuzzer" OFF)
option(ENABLE_GOLD_LINKER "Use GNU gold linker if available" ON)
include_directories(BEFORE ${CMAKE_CURRENT_BINARY_DIR}/include/)
include_directories(BEFORE ${CMAKE_CURRENT_SOURCE_DIR}/include/)
include_directories(SYSTEM ${CMAKE_CURRENT_SOURCE_DIR}/third_party/variant/include)
include_directories(SYSTEM ${CMAKE_CURRENT_SOURCE_DIR}/third_party/)
add_custom_target(FingerPrintConfigure ALL ${CMAKE_COMMAND}
"-DOUTPUT_DIR=${CMAKE_CURRENT_BINARY_DIR}"
@@ -103,7 +68,7 @@ add_custom_target(FingerPrintConfigure ALL ${CMAKE_COMMAND}
COMMENT "Configuring revision fingerprint"
VERBATIM)
set(BOOST_COMPONENTS date_time chrono filesystem iostreams program_options regex system thread unit_test_framework)
set(BOOST_COMPONENTS date_time filesystem iostreams program_options regex system thread)
configure_file(
${CMAKE_CURRENT_SOURCE_DIR}/include/util/version.hpp.in
@@ -135,18 +100,35 @@ add_library(osrm_extract $<TARGET_OBJECTS:EXTRACTOR> $<TARGET_OBJECTS:UTIL>)
add_library(osrm_contract $<TARGET_OBJECTS:CONTRACTOR> $<TARGET_OBJECTS:UTIL>)
add_library(osrm_store $<TARGET_OBJECTS:STORAGE> $<TARGET_OBJECTS:UTIL>)
# Check the release mode
if(NOT CMAKE_BUILD_TYPE MATCHES Debug)
set(CMAKE_BUILD_TYPE Release)
endif()
if(CMAKE_BUILD_TYPE MATCHES Debug)
message(STATUS "Configuring OSRM in debug mode")
set(ENABLE_ASSERTIONS ON)
if(NOT ${CMAKE_CXX_COMPILER_ID} STREQUAL "MSVC")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fno-inline -fno-omit-frame-pointer")
if("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Og -ggdb")
endif()
endif()
endif()
if(ENABLE_GOLD_LINKER)
execute_process(COMMAND ${CMAKE_C_COMPILER} -fuse-ld=gold -Wl,--version ERROR_QUIET OUTPUT_VARIABLE LD_VERSION)
if("${LD_VERSION}" MATCHES "GNU gold")
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -fuse-ld=gold -Wl,--disable-new-dtags")
set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -fuse-ld=gold -Wl,--disable-new-dtags")
set(OSRM_LDFLAGS "${OSRM_LDFLAGS} -fuse-ld=gold -Wl,--disable-new-dtags")
message(STATUS "Using GNU gold as linker.")
# Issue 2785: check gold binutils version and don't use gc-sections for versions prior 2.25
string(REGEX REPLACE ".*\\(GNU Binutils[^\\)0-9]+([0-9]+\\.[0-9]+)[^\\)]*\\).*" "\\1" GOLD_BINUTILS_VERSION "${LD_VERSION}")
if ("${GOLD_BINUTILS_VERSION}" VERSION_LESS "2.26")
message(STATUS "Disabling gc-sections on gold binutils < 2.26, see: https://sourceware.org/bugzilla/show_bug.cgi?id=17639")
if ("${GOLD_BINUTILS_VERSION}" VERSION_LESS "2.25")
message(STATUS "Disabling gc-sections on gold binutils < 2.25, see: https://sourceware.org/bugzilla/show_bug.cgi?id=17639")
set(LD_AVOID_GC_SECTIONS TRUE)
endif()
else()
@@ -155,48 +137,10 @@ if(ENABLE_GOLD_LINKER)
endif()
endif()
# Explicitly set the build type to Release if no other type is specified
# on the command line. Without this, cmake defaults to an unoptimized,
# non-debug build, which almost nobody wants.
if(NOT CMAKE_BUILD_TYPE)
message(STATUS "No build type specified, defaulting to Release")
set(CMAKE_BUILD_TYPE Release)
endif()
if(CMAKE_BUILD_TYPE MATCHES Debug)
message(STATUS "Configuring OSRM in debug mode")
elseif(CMAKE_BUILD_TYPE MATCHES Release)
if(CMAKE_BUILD_TYPE MATCHES Release)
message(STATUS "Configuring OSRM in release mode")
elseif(CMAKE_BUILD_TYPE MATCHES RelWithDebInfo)
message(STATUS "Configuring OSRM in release mode with debug flags")
elseif(CMAKE_BUILD_TYPE MATCHES MinRelSize)
message(STATUS "Configuring OSRM in release mode with minimized size")
else()
message(STATUS "Unrecognized build type - will use cmake defaults")
endif()
# Additional logic for the different build types
if(CMAKE_BUILD_TYPE MATCHES Debug OR CMAKE_BUILD_TYPE MATCHES RelWithDebInfo)
message(STATUS "Configuring debug mode flags")
set(ENABLE_ASSERTIONS ON)
if(NOT ${CMAKE_CXX_COMPILER_ID} STREQUAL "MSVC")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fno-inline -fno-omit-frame-pointer")
if("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU")
if (CMAKE_BUILD_TYPE MATCHES Debug)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Og -ggdb")
else()
# Don't override the -O parameter for RelWithDebInfo, we want an optimized build
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -ggdb")
endif()
endif()
endif()
endif()
if(CMAKE_BUILD_TYPE MATCHES Release OR CMAKE_BUILD_TYPE MATCHES MinRelSize OR CMAKE_BUILD_TYPE MATCHES RelWithDebInfo)
message(STATUS "Configuring release mode optimizations")
# Check if LTO is available
check_cxx_compiler_flag("-Wl,-flto" LTO_AVAILABLE)
check_cxx_compiler_flag("-flto" LTO_AVAILABLE)
if(ENABLE_LTO AND LTO_AVAILABLE)
set(OLD_CXX_FLAGS ${CMAKE_CXX_FLAGS})
# GCC in addition allows parallelizing LTO
@@ -211,78 +155,45 @@ if(CMAKE_BUILD_TYPE MATCHES Release OR CMAKE_BUILD_TYPE MATCHES MinRelSize OR CM
check_cxx_source_compiles("${CHECK_LTO_SRC}" LTO_WORKS)
if(LTO_WORKS)
message(STATUS "LTO working")
set(OSRM_CXXFLAGS "${OSRM_CXXFLAGS} -flto")
set(OSRM_LDFLAGS "${OSRM_LDFLAGS} -flto")
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -flto")
set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -flto")
set(CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS} -flto")
else()
message(STATUS "LTO broken")
set(CMAKE_CXX_FLAGS "${OLD_CXX_FLAGS}")
set(ENABLE_LTO Off)
endif()
# Since gcc 4.9 the LTO format is non-standart ('slim'), so we need to use the build-in tools
if("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU" AND
NOT "${CMAKE_CXX_COMPILER_VERSION}" VERSION_LESS "4.9.0" AND NOT MINGW)
find_program(GCC_AR gcc-ar)
find_program(GCC_RANLIB gcc-ranlib)
if ("${GCC_AR}" STREQUAL "GCC_AR-NOTFOUND" OR "${GCC_RANLIB}" STREQUAL "GCC_RANLIB-NOTFOUND")
message(WARNING "GCC specific binutils not found.")
else()
message(STATUS "Using GCC specific binutils for LTO:")
message(STATUS " ${GCC_AR}")
message(STATUS " ${GCC_RANLIB}")
set(CMAKE_AR ${GCC_AR})
set(CMAKE_RANLIB ${GCC_RANLIB})
endif()
endif()
# Same for clang LTO requires their own toolchain
if("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang")
find_program(LLVM_AR llvm-ar)
find_program(LLVM_RANLIB llvm-ranlib)
if ("${LLVM_AR}" STREQUAL "LLVM_AR-NOTFOUND" OR "${LLVM_RANLIB}" STREQUAL "LLVM_RANLIB-NOTFOUND")
message(WARNING "LLVM specific binutils not found.")
else()
message(STATUS "Using LLVM specific binutils for LTO:")
message(STATUS " ${LLVM_AR}")
message(STATUS " ${LLVM_RANLIB}")
set(CMAKE_AR ${LLVM_AR})
set(CMAKE_RANLIB ${LLVM_RANLIB})
endif()
message(STATUS "Using gcc specific binutils for LTO.")
set(CMAKE_AR "/usr/bin/gcc-ar")
set(CMAKE_RANLIB "/usr/bin/gcc-ranlib")
endif()
if("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU" AND "${CMAKE_CXX_COMPILER_VERSION}" VERSION_LESS "4.9.0")
message(STATUS "Disabling LTO on GCC < 4.9.0 since it is broken, see: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=57038")
set(CMAKE_CXX_FLAGS "${OLD_CXX_FLAGS}")
set(ENABLE_LTO Off)
endif()
endif()
endif()
if(UNIX AND NOT APPLE AND ENABLE_MASON AND (LTO_WORKS OR ENABLE_GOLD_LINKER))
message(WARNING "ENABLE_MASON and ENABLE_LTO/ENABLE_GOLD_LINKER may not work on all linux systems currently")
message(WARNING "For more details see: https://github.com/Project-OSRM/osrm-backend/issues/3202")
endif()
set(MAYBE_COVERAGE_LIBRARIES "")
if (ENABLE_COVERAGE)
if (COVERAGE)
if (NOT CMAKE_BUILD_TYPE MATCHES "Debug")
message(ERROR "ENABLE_COVERAGE=ON only make sense with a Debug build")
message(ERROR "COVERAGE=ON only make sense with a Debug build")
endif()
message(INFO "Enabling coverage")
set(MAYBE_COVERAGE_LIBRARIES "-lgcov")
set(MAYBE_COVERAGE_LIBRARIES "gcov")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -ftest-coverage -fprofile-arcs")
endif()
if (ENABLE_SANITIZER)
if (SANITIZER)
if (NOT CMAKE_BUILD_TYPE MATCHES "Debug")
message(ERROR "SANITIZER=ON only make sense with a Debug build")
endif()
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=address")
set(OSRM_CXXFLAGS "${OSRM_CXXFLAGS} -fsanitize=address")
endif()
# Configuring compilers
if(${CMAKE_CXX_COMPILER_ID} STREQUAL "Clang")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wextra -pedantic -Wuninitialized -Wunreachable-code -Wstrict-overflow=2 -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 -fPIC -fcolor-diagnostics")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wextra -pedantic -Wuninitialized -Wunreachable-code -Wstrict-overflow=2 -D_FORTIFY_SOURCE=2 -fPIC -fcolor-diagnostics")
elseif(${CMAKE_CXX_COMPILER_ID} STREQUAL "GNU")
set(COLOR_FLAG "-fdiagnostics-color=auto")
check_cxx_compiler_flag("-fdiagnostics-color=auto" HAS_COLOR_FLAG)
@@ -290,7 +201,7 @@ elseif(${CMAKE_CXX_COMPILER_ID} STREQUAL "GNU")
set(COLOR_FLAG "")
endif()
# using GCC
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wextra -pedantic -Wuninitialized -Wunreachable-code -Wstrict-overflow=1 -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 ${COLOR_FLAG} -fPIC")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wextra -pedantic -Wuninitialized -Wunreachable-code -Wstrict-overflow=1 -D_FORTIFY_SOURCE=2 ${COLOR_FLAG} -fPIC")
if(WIN32) # using mingw
add_dependency_defines(-DWIN32)
set(OPTIONAL_SOCKET_LIBS ws2_32 wsock32)
@@ -300,7 +211,7 @@ elseif(${CMAKE_CXX_COMPILER_ID} STREQUAL "Intel")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -static-intel -wd10237 -Wall -ipo -fPIC")
elseif(${CMAKE_CXX_COMPILER_ID} STREQUAL "MSVC")
# using Visual Studio C++
set(BOOST_COMPONENTS ${BOOST_COMPONENTS} zlib)
set(BOOST_COMPONENTS ${BOOST_COMPONENTS} date_time chrono zlib)
add_dependency_defines(-DBOOST_LIB_DIAGNOSTIC)
add_dependency_defines(-D_CRT_SECURE_NO_WARNINGS)
add_dependency_defines(-DNOMINMAX) # avoid min and max macros that can break compilation
@@ -324,11 +235,9 @@ if("${LINKER_VERSION}" MATCHES "GNU gold" OR "${LINKER_VERSION}" MATCHES "GNU ld
endif()
# Default linker optimization flags
set(LINKER_FLAGS "${LINKER_FLAGS} -Wl,-O1 -Wl,--hash-style=gnu -Wl,--sort-common")
else()
message(STATUS "Using unknown linker, not setting linker optimizations")
endif ()
set(OSRM_LDFLAGS "${OSRM_LDFLAGS} ${LINKER_FLAGS}")
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${LINKER_FLAGS}")
set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} ${LINKER_FLAGS}")
set(CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS} ${LINKER_FLAGS}")
@@ -336,13 +245,10 @@ set(CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS} ${LINKER_FLAGS}")
# Activate C++1y
if(NOT ${CMAKE_CXX_COMPILER_ID} STREQUAL "MSVC")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++1y")
set(OSRM_CXXFLAGS "${OSRM_CXXFLAGS} -std=c++1y")
endif()
# Configuring other platform dependencies
if(APPLE)
set(CMAKE_OSX_DEPLOYMENT_TARGET "10.10")
execute_process(COMMAND xcrun --sdk macosx --show-sdk-path OUTPUT_VARIABLE CMAKE_OSX_SYSROOT OUTPUT_STRIP_TRAILING_WHITESPACE)
set(CMAKE_OSX_ARCHITECTURES "x86_64")
message(STATUS "Set Architecture to x64 on OS X")
exec_program(uname ARGS -v OUTPUT_VARIABLE DARWIN_VERSION)
@@ -357,169 +263,61 @@ if(APPLE)
endif()
if(UNIX AND NOT APPLE)
set(MAYBE_RT_LIBRARY -lrt)
set(MAYBE_RT_LIBRARY rt)
endif()
# Disallow deprecated protozero APIs
add_definitions(-DPROTOZERO_STRICT_API)
find_package(Threads REQUIRED)
list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/third_party/libosmium/cmake")
set(OSMIUM_INCLUDE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/third_party/libosmium/include")
find_package(Osmium REQUIRED COMPONENTS io)
add_dependency_includes(${OSMIUM_INCLUDE_DIR})
# if mason is enabled no find_package calls are made
# to ensure that we are only compiling and linking against
# fully portable mason packages
if(ENABLE_MASON)
message(STATUS "Installing dependencies via mason")
set(Boost_USE_STATIC_LIBS ON)
mason_use(boost VERSION ${MASON_BOOST_VERSION} HEADER_ONLY)
add_dependency_includes(${MASON_PACKAGE_boost_INCLUDE_DIRS})
mason_use(boost_libfilesystem VERSION ${MASON_BOOST_VERSION})
set(Boost_FILESYSTEM_LIBRARY ${MASON_PACKAGE_boost_libfilesystem_STATIC_LIBS})
mason_use(boost_libiostreams VERSION ${MASON_BOOST_VERSION})
set(Boost_IOSTREAMS_LIBRARY ${MASON_PACKAGE_boost_libiostreams_STATIC_LIBS})
mason_use(boost_libprogram_options VERSION ${MASON_BOOST_VERSION})
set(Boost_PROGRAM_OPTIONS_LIBRARY ${MASON_PACKAGE_boost_libprogram_options_STATIC_LIBS})
mason_use(boost_libregex VERSION ${MASON_BOOST_VERSION})
set(Boost_REGEX_LIBRARY ${MASON_PACKAGE_boost_libregex_STATIC_LIBS})
mason_use(boost_libtest VERSION ${MASON_BOOST_VERSION})
set(Boost_UNIT_TEST_FRAMEWORK_LIBRARY ${MASON_PACKAGE_boost_libtest_STATIC_LIBS})
mason_use(boost_libdate_time VERSION ${MASON_BOOST_VERSION})
set(Boost_DATE_TIME_LIBRARY ${MASON_PACKAGE_boost_libdate_time_STATIC_LIBS})
mason_use(boost_libthread VERSION ${MASON_BOOST_VERSION})
set(Boost_THREAD_LIBRARY ${MASON_PACKAGE_boost_libthread_STATIC_LIBS})
mason_use(boost_libsystem VERSION ${MASON_BOOST_VERSION})
set(Boost_SYSTEM_LIBRARY ${MASON_PACKAGE_boost_libsystem_STATIC_LIBS})
find_package(Boost 1.49.0 REQUIRED COMPONENTS ${BOOST_COMPONENTS})
mason_use(stxxl VERSION ${MASON_STXXL_VERSION})
add_dependency_includes(${MASON_PACKAGE_stxxl_INCLUDE_DIRS})
set(STXXL_LIBRARY ${MASON_PACKAGE_stxxl_STATIC_LIBS})
mason_use(expat VERSION ${MASON_EXPAT_VERSION})
add_dependency_includes(${MASON_PACKAGE_expat_INCLUDE_DIRS})
set(EXPAT_LIBRARIES ${MASON_PACKAGE_expat_STATIC_LIBS})
mason_use(lua VERSION ${MASON_LUA_VERSION})
add_dependency_includes(${MASON_PACKAGE_lua_INCLUDE_DIRS})
set(USED_LUA_LIBRARIES ${MASON_PACKAGE_lua_STATIC_LIBS})
mason_use(luabind_lua524 VERSION ${MASON_LUABIND_VERSION})
add_dependency_includes(${MASON_PACKAGE_luabind_lua524_INCLUDE_DIRS})
set(LUABIND_LIBRARY ${MASON_PACKAGE_luabind_lua524_STATIC_LIBS})
mason_use(bzip2 VERSION ${MASON_BZIP2_VERSION})
add_dependency_includes(${MASON_PACKAGE_bzip2_INCLUDE_DIRS})
set(BZIP2_LIBRARIES ${MASON_PACKAGE_bzip2_STATIC_LIBS})
mason_use(tbb VERSION ${MASON_TBB_VERSION})
add_dependency_includes(${MASON_PACKAGE_tbb_INCLUDE_DIRS})
set(TBB_LIBRARIES ${MASON_PACKAGE_tbb_LDFLAGS})
if(NOT MASON_PACKAGE_tbb_LIBRARY_DIRS)
message(FATAL_ERROR "MASON_PACKAGE_tbb_LIBRARY_DIRS is empty, rpath will not work")
# collect a subset of the boost libraries needed
# by libosrm
foreach(lib ${Boost_LIBRARIES})
if(NOT WIN32)
if(lib MATCHES filesystem OR lib MATCHES thread OR lib MATCHES iostreams OR lib MATCHES system)
list(APPEND BOOST_ENGINE_LIBRARIES "${lib}")
endif()
else()
list(APPEND BOOST_ENGINE_LIBRARIES "${lib}")
endif()
set(TBB_LINKER_RPATHS "")
foreach(libpath ${MASON_PACKAGE_tbb_LIBRARY_DIRS})
set(TBB_LINKER_RPATHS "${TBB_LINKER_RPATHS} -Wl,-rpath -Wl,${libpath}")
file(GLOB TBBGlob ${libpath}/*.*)
install(FILES ${TBBGlob} DESTINATION lib)
endforeach()
if(APPLE)
set(LINKER_FLAGS "${TBB_LINKER_RPATHS} -Wl,-rpath -Wl,@executable_path")
elseif(UNIX)
set(LINKER_FLAGS "${TBB_LINKER_RPATHS} '-Wl,-rpath,$ORIGIN' -Wl,-z,origin")
endif()
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${LINKER_FLAGS}")
set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} ${LINKER_FLAGS}")
set(CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS} ${LINKER_FLAGS}")
if(BUILD_COMPONENTS)
message(FATAL_ERROR "BUILD_COMPONENTS is not supported with ENABLE_MASON")
endif()
# current mason packages target -D_GLIBCXX_USE_CXX11_ABI=0
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -D_GLIBCXX_USE_CXX11_ABI=0")
# note: we avoid calling find_package(Osmium ...) here to ensure that the
# expat and bzip2 are used from mason rather than the system
include_directories(SYSTEM ${CMAKE_CURRENT_SOURCE_DIR}/third_party/libosmium/include)
else()
find_package(Boost 1.49.0 REQUIRED COMPONENTS ${BOOST_COMPONENTS})
add_dependency_includes(${Boost_INCLUDE_DIRS})
find_package(TBB REQUIRED)
add_dependency_includes(${TBB_INCLUDE_DIR})
if(WIN32 AND CMAKE_BUILD_TYPE MATCHES Debug)
set(TBB_LIBRARIES ${TBB_DEBUG_LIBRARIES})
endif()
find_package(Luabind REQUIRED)
add_dependency_includes(${LUABIND_INCLUDE_DIR})
set(USED_LUA_LIBRARIES ${LUA_LIBRARY})
add_dependency_includes(${LUA_INCLUDE_DIR})
find_package(EXPAT REQUIRED)
add_dependency_includes(${EXPAT_INCLUDE_DIRS})
find_package(STXXL REQUIRED)
add_dependency_includes(${STXXL_INCLUDE_DIR})
find_package(BZip2 REQUIRED)
add_dependency_includes(${BZIP2_INCLUDE_DIR})
if(BUILD_COMPONENTS)
find_package(GDAL)
endif()
# add a target to generate API documentation with Doxygen
find_package(Doxygen)
if(DOXYGEN_FOUND)
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/Doxyfile.in ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile @ONLY)
add_custom_target(doc
${DOXYGEN_EXECUTABLE} ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
COMMENT "Generating API documentation with Doxygen" VERBATIM
)
endif()
# note libosmium depends on expat and bzip2
list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/third_party/libosmium/cmake")
set(OSMIUM_INCLUDE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/third_party/libosmium/include")
find_package(Osmium REQUIRED COMPONENTS io)
include_directories(SYSTEM ${OSMIUM_INCLUDE_DIR})
endif()
# prefix compilation with ccache by default if available and on clang or gcc
if(ENABLE_CCACHE AND (${CMAKE_CXX_COMPILER_ID} STREQUAL "Clang" OR ${CMAKE_CXX_COMPILER_ID} STREQUAL "GNU"))
find_program(CCACHE_FOUND ccache)
if(CCACHE_FOUND)
message(STATUS "Using ccache to speed up incremental builds")
set_property(GLOBAL PROPERTY RULE_LAUNCH_COMPILE ccache)
set_property(GLOBAL PROPERTY RULE_LAUNCH_LINK ccache)
set(ENV{CCACHE_CPP2} "true")
endif()
endif()
# even with mason builds we want to link to system zlib
# to ensure that osrm binaries play well with other binaries like nodejs
find_package(ZLIB REQUIRED)
add_dependency_includes(${ZLIB_INCLUDE_DIRS})
endforeach(lib)
if(NOT WIN32 AND NOT Boost_USE_STATIC_LIBS)
add_dependency_defines(-DBOOST_TEST_DYN_LINK)
endif()
if(NOT WIN32 AND NOT Boost_USE_STATIC_LIBS)
add_dependency_defines(-DBOOST_TEST_DYN_LINK)
endif()
add_dependency_defines(-DBOOST_SPIRIT_USE_PHOENIX_V3)
add_dependency_defines(-DBOOST_RESULT_OF_USE_DECLTYPE)
add_dependency_defines(-DBOOST_FILESYSTEM_NO_DEPRECATED)
add_dependency_includes(${Boost_INCLUDE_DIRS})
find_package(Threads REQUIRED)
find_package(TBB REQUIRED)
add_dependency_includes(${TBB_INCLUDE_DIR})
if(WIN32 AND CMAKE_BUILD_TYPE MATCHES Debug)
set(TBB_LIBRARIES ${TBB_DEBUG_LIBRARIES})
endif()
find_package(Luabind REQUIRED)
include(check_luabind)
add_dependency_includes(${LUABIND_INCLUDE_DIR})
set(USED_LUA_LIBRARIES ${LUA_LIBRARY})
if(LUAJIT_FOUND)
set(USED_LUA_LIBRARIES, LUAJIT_LIBRARIES)
endif()
add_dependency_includes(${LUA_INCLUDE_DIR})
find_package(EXPAT REQUIRED)
add_dependency_includes(${EXPAT_INCLUDE_DIRS})
find_package(STXXL REQUIRED)
add_dependency_includes(${STXXL_INCLUDE_DIR})
set(OpenMP_FIND_QUIETLY ON)
find_package(OpenMP)
@@ -528,32 +326,29 @@ if(OPENMP_FOUND)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OpenMP_CXX_FLAGS}")
endif()
find_package(BZip2 REQUIRED)
add_dependency_includes(${BZIP2_INCLUDE_DIR})
find_package(ZLIB REQUIRED)
add_dependency_includes(${ZLIB_INCLUDE_DIRS})
if (ENABLE_JSON_LOGGING)
message(STATUS "Enabling json logging")
add_dependency_defines(-DENABLE_JSON_LOGGING)
endif()
add_definitions(${OSRM_DEFINES})
include_directories(SYSTEM ${DEPENDENCIES_INCLUDE_DIRS})
set(BOOST_BASE_LIBRARIES
${Boost_DATE_TIME_LIBRARY}
${Boost_CHRONO_LIBRARY}
${Boost_FILESYSTEM_LIBRARY}
${Boost_IOSTREAMS_LIBRARY}
${Boost_THREAD_LIBRARY}
${Boost_SYSTEM_LIBRARY})
set(BOOST_ENGINE_LIBRARIES
${Boost_ZLIB_LIBRARY}
${Boost_REGEX_LIBRARY}
${BOOST_BASE_LIBRARIES})
include_directories(SYSTEM ${OSRM_INCLUDE_PATHS})
# Binaries
target_link_libraries(osrm-datastore osrm_store ${Boost_PROGRAM_OPTIONS_LIBRARY})
target_link_libraries(osrm-extract osrm_extract ${Boost_PROGRAM_OPTIONS_LIBRARY})
target_link_libraries(osrm-contract osrm_contract ${Boost_PROGRAM_OPTIONS_LIBRARY})
target_link_libraries(osrm-routed osrm ${Boost_PROGRAM_OPTIONS_LIBRARY} ${OPTIONAL_SOCKET_LIBS} ${ZLIB_LIBRARY})
target_link_libraries(osrm-datastore osrm_store ${Boost_LIBRARIES})
target_link_libraries(osrm-extract osrm_extract ${Boost_LIBRARIES})
target_link_libraries(osrm-contract ${Boost_LIBRARIES} ${TBB_LIBRARIES} osrm_contract)
target_link_libraries(osrm-routed osrm ${Boost_LIBRARIES} ${OPTIONAL_SOCKET_LIBS} ${ZLIB_LIBRARY})
set(EXTRACTOR_LIBRARIES
${BZIP2_LIBRARIES}
${Boost_REGEX_LIBRARY}
${BOOST_BASE_LIBRARIES}
${Boost_LIBRARIES}
${CMAKE_THREAD_LIBS_INIT}
${EXPAT_LIBRARIES}
${LUABIND_LIBRARY}
@@ -564,7 +359,7 @@ set(EXTRACTOR_LIBRARIES
${ZLIB_LIBRARY}
${MAYBE_COVERAGE_LIBRARIES})
set(CONTRACTOR_LIBRARIES
${BOOST_BASE_LIBRARIES}
${Boost_LIBRARIES}
${CMAKE_THREAD_LIBS_INIT}
${LUABIND_LIBRARY}
${USED_LUA_LIBRARIES}
@@ -580,13 +375,13 @@ set(ENGINE_LIBRARIES
${MAYBE_COVERAGE_LIBRARIES}
${ZLIB_LIBRARY})
set(STORAGE_LIBRARIES
${BOOST_BASE_LIBRARIES}
${Boost_LIBRARIES}
${CMAKE_THREAD_LIBS_INIT}
${TBB_LIBRARIES}
${MAYBE_RT_LIBRARY}
${MAYBE_COVERAGE_LIBRARIES})
set(UTIL_LIBRARIES
${BOOST_BASE_LIBRARIES}
${Boost_LIBRARIES}
${CMAKE_THREAD_LIBS_INIT}
${STXXL_LIBRARY}
${TBB_LIBRARIES}
@@ -598,11 +393,12 @@ target_link_libraries(osrm_extract ${EXTRACTOR_LIBRARIES})
target_link_libraries(osrm_store ${STORAGE_LIBRARIES})
if(BUILD_COMPONENTS)
find_package(GDAL)
if(GDAL_FOUND)
add_executable(osrm-components src/tools/components.cpp $<TARGET_OBJECTS:UTIL>)
target_link_libraries(osrm-components ${TBB_LIBRARIES})
include_directories(SYSTEM ${GDAL_INCLUDE_DIR})
target_link_libraries(osrm-components ${GDAL_LIBRARIES} ${BOOST_BASE_LIBRARIES})
target_link_libraries(osrm-components ${GDAL_LIBRARIES} ${Boost_LIBRARIES})
install(TARGETS osrm-components DESTINATION bin)
else()
message(WARNING "libgdal and/or development headers not found")
@@ -612,14 +408,14 @@ endif()
if(BUILD_TOOLS)
message(STATUS "Activating OSRM internal tools")
add_executable(osrm-io-benchmark src/tools/io-benchmark.cpp $<TARGET_OBJECTS:UTIL>)
target_link_libraries(osrm-io-benchmark ${BOOST_BASE_LIBRARIES})
target_link_libraries(osrm-io-benchmark ${Boost_LIBRARIES})
add_executable(osrm-unlock-all src/tools/unlock_all_mutexes.cpp $<TARGET_OBJECTS:UTIL>)
target_link_libraries(osrm-unlock-all ${BOOST_BASE_LIBRARIES} ${CMAKE_THREAD_LIBS_INIT})
target_link_libraries(osrm-unlock-all ${Boost_LIBRARIES} ${CMAKE_THREAD_LIBS_INIT})
if(UNIX AND NOT APPLE)
target_link_libraries(osrm-unlock-all rt)
endif()
add_executable(osrm-springclean src/tools/springclean.cpp $<TARGET_OBJECTS:UTIL>)
target_link_libraries(osrm-springclean ${BOOST_BASE_LIBRARIES})
target_link_libraries(osrm-springclean ${Boost_LIBRARIES})
install(TARGETS osrm-io-benchmark DESTINATION bin)
install(TARGETS osrm-unlock-all DESTINATION bin)
@@ -639,7 +435,7 @@ set_property(TARGET osrm-contract PROPERTY INSTALL_RPATH_USE_LINK_PATH TRUE)
set_property(TARGET osrm-datastore PROPERTY INSTALL_RPATH_USE_LINK_PATH TRUE)
set_property(TARGET osrm-routed PROPERTY INSTALL_RPATH_USE_LINK_PATH TRUE)
file(GLOB VariantGlob third_party/variant/include/mapbox/*.hpp)
file(GLOB VariantGlob third_party/variant/*.hpp)
file(GLOB LibraryGlob include/osrm/*.hpp)
file(GLOB ParametersGlob include/engine/api/*_parameters.hpp)
set(EngineHeader include/engine/status.hpp include/engine/engine_config.hpp include/engine/hint.hpp include/engine/bearing.hpp include/engine/phantom_node.hpp)
@@ -654,7 +450,7 @@ install(FILES ${ExtractorHeader} DESTINATION include/osrm/extractor)
install(FILES ${ContractorHeader} DESTINATION include/osrm/contractor)
install(FILES ${LibraryGlob} DESTINATION include/osrm)
install(FILES ${ParametersGlob} DESTINATION include/osrm/engine/api)
install(FILES ${VariantGlob} DESTINATION include/mapbox)
install(FILES ${VariantGlob} DESTINATION include/variant)
install(TARGETS osrm-extract DESTINATION bin)
install(TARGETS osrm-contract DESTINATION bin)
install(TARGETS osrm-datastore DESTINATION bin)
@@ -664,8 +460,14 @@ install(TARGETS osrm_extract DESTINATION lib)
install(TARGETS osrm_contract DESTINATION lib)
install(TARGETS osrm_store DESTINATION lib)
# Setup exporting variables for pkgconfig and subproject
#
list(GET ENGINE_LIBRARIES 1 ENGINE_LIBRARY_FIRST)
foreach(lib ${ENGINE_LIBRARIES})
get_filename_component(ENGINE_LIBRARY_PATH "${ENGINE_LIBRARY_FIRST}" PATH)
get_filename_component(ENGINE_LIBRARY_NAME "${lib}" NAME_WE)
string(REPLACE "lib" "" ENGINE_LIBRARY_NAME ${ENGINE_LIBRARY_NAME})
string(REPLACE "-l" "" ENGINE_LIBRARY_NAME ${ENGINE_LIBRARY_NAME})
set(ENGINE_LIBRARY_LISTING "${ENGINE_LIBRARY_LISTING} -L${ENGINE_LIBRARY_PATH} -l${ENGINE_LIBRARY_NAME}")
endforeach()
if(BUILD_DEBIAN_PACKAGE)
include(CPackDebianConfig)
@@ -677,37 +479,35 @@ function(JOIN VALUES GLUE OUTPUT)
set (${OUTPUT} "${_TMP_STR}" PARENT_SCOPE)
endfunction()
JOIN("${OSRM_DEFINES}" " " TMP_OSRM_DEFINES)
set(LibOSRM_CXXFLAGS "${OSRM_CXXFLAGS} ${TMP_OSRM_DEFINES}")
set(LibOSRM_LDFLAGS "${OSRM_LDFLAGS}")
if(BUILD_AS_SUBPROJECT)
set(LibOSRM_CXXFLAGS "${LibOSRM_CXXFLAGS}" PARENT_SCOPE)
set(LibOSRM_INCLUDE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/include" PARENT_SCOPE)
set(LibOSRM_LIBRARY_DIR "${CMAKE_CURRENT_BINARY_DIR}" PARENT_SCOPE)
set(LibOSRM_LIBRARIES "osrm" PARENT_SCOPE)
set(LibOSRM_DEPENDENT_LIBRARIES "${ENGINE_LIBRARIES}" PARENT_SCOPE)
set(LibOSRM_INCLUDE_DIRS "${CMAKE_CURRENT_SOURCE_DIR}/include"
"${CMAKE_CURRENT_SOURCE_DIR}/include/osrm"
"${CMAKE_CURRENT_SOURCE_DIR}/third_party"
"${DEPENDENCIES_INCLUDE_DIRS}" PARENT_SCOPE)
set(LibOSRM_LIBRARY_DIRS "${LibOSRM_LIBRARY_DIR}" PARENT_SCOPE)
endif()
# pkgconfig defines
set(PKGCONFIG_OSRM_CXXFLAGS "${LibOSRM_CXXFLAGS}")
set(PKGCONFIG_OSRM_LDFLAGS "${LibOSRM_LDFLAGS}")
set(PKGCONFIG_LIBRARY_DIR "${CMAKE_INSTALL_PREFIX}/lib")
set(PKGCONFIG_INCLUDE_DIR "${CMAKE_INSTALL_PREFIX}/include")
list(APPEND DEPENDENCIES_INCLUDE_DIRS "${PKGCONFIG_INCLUDE_DIR}")
list(APPEND DEPENDENCIES_INCLUDE_DIRS "${PKGCONFIG_INCLUDE_DIR}/osrm")
JOIN("-I${DEPENDENCIES_INCLUDE_DIRS}" " -I" PKGCONFIG_OSRM_INCLUDE_FLAGS)
JOIN("${ENGINE_LIBRARIES}" " " PKGCONFIG_OSRM_DEPENDENT_LIBRARIES)
# Set up variables, then write to pkgconfig file
JOIN("${OSRM_DEFINES}" " " OSRM_DEFINES_STRING)
JOIN("-I${OSRM_INCLUDE_PATHS}" " -I" OSRM_INCLUDE_PATHS_STRING)
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/cmake/pkgconfig.in libosrm.pc @ONLY)
install(FILES ${PROJECT_BINARY_DIR}/libosrm.pc DESTINATION lib/pkgconfig)
# add a target to generate API documentation with Doxygen
find_package(Doxygen)
if(DOXYGEN_FOUND)
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/Doxyfile.in ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile @ONLY)
add_custom_target(doc
${DOXYGEN_EXECUTABLE} ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
COMMENT "Generating API documentation with Doxygen" VERBATIM
)
endif()
# prefix compilation with ccache by default if available and on clang or gcc
if(ENABLE_CCACHE AND (${CMAKE_CXX_COMPILER_ID} STREQUAL "Clang" OR ${CMAKE_CXX_COMPILER_ID} STREQUAL "GNU"))
find_program(CCACHE_FOUND ccache)
if(CCACHE_FOUND)
message(STATUS "Using ccache to speed up incremental builds")
set_property(GLOBAL PROPERTY RULE_LAUNCH_COMPILE ccache)
set_property(GLOBAL PROPERTY RULE_LAUNCH_LINK ccache)
set(ENV{CCACHE_CPP2} "true")
endif()
endif()
# uninstall target
configure_file(
"${CMAKE_CURRENT_SOURCE_DIR}/cmake/cmake_uninstall.cmake.in"
@@ -729,7 +529,6 @@ if (ENABLE_FUZZING)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize-coverage=edge,indirect-calls,8bit-counters -fsanitize=address")
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -fsanitize=address")
set(OSRM_LDFLAGS "${OSRM_LDFLAGS} -fsanitize=address")
message(STATUS "Using -fsanitize=${FUZZ_SANITIZER} for Fuzz testing")
+7 -7
View File
@@ -8,18 +8,18 @@ SET PROJECT_DIR=%CD%
ECHO PROJECT_DIR^: %PROJECT_DIR%
ECHO NUMBER_OF_PROCESSORS^: %NUMBER_OF_PROCESSORS%
ECHO cmake^: && cmake --version
IF %ERRORLEVEL% NEQ 0 ECHO CMAKE not found && GOTO CMAKE_NOT_OK
IF %ERRORLEVEL% NEQ 0 ECHO CMAKE not found GOTO ERROR
cmake --version | findstr /C:"3.7.0" && GOTO CMAKE_OK
FOR /F %%G IN ("--version") DO cmake %%G 2>&1 | findstr /C:"3.5.0" > nul && goto CMAKE_NOT_OK
GOTO CMAKE_OK
:CMAKE_NOT_OK
SET CMAKE_VERSION=3.7.0-rc2
ECHO CMAKE NOT OK - downloading new CMake %CMAKE_VERSION%
IF NOT EXIST cm.zip powershell Invoke-WebRequest https://cmake.org/files/v3.7/cmake-%CMAKE_VERSION%-win32-x86.zip -OutFile $env:PROJECT_DIR\cm.zip
ECHO CMAKE NOT OK - downloading new CMake
IF NOT EXIST cm.zip powershell Invoke-WebRequest https://cmake.org/files/v3.5/cmake-3.5.1-win32-x86.zip -OutFile $env:PROJECT_DIR\cm.zip
IF %ERRORLEVEL% NEQ 0 GOTO ERROR
IF NOT EXIST cmake-%CMAKE_VERSION%-win32-x86 7z -y x cm.zip | %windir%\system32\FIND "ing archive"
IF NOT EXIST cmake-3.5.1-win32-x86 7z -y x cm.zip | %windir%\system32\FIND "ing archive"
IF %ERRORLEVEL% NEQ 0 GOTO ERROR
SET PATH=%PROJECT_DIR%\cmake-%CMAKE_VERSION%-win32-x86\bin;%PATH%
SET PATH=%PROJECT_DIR%\cmake-3.5.1-win32-x86\bin;%PATH%
:CMAKE_OK
ECHO CMAKE_OK
+2 -1
View File
@@ -11,7 +11,8 @@ SET CONFIGURATION=Release
FOR /F "tokens=*" %%i in ('git rev-parse --abbrev-ref HEAD') do SET APPVEYOR_REPO_BRANCH=%%i
ECHO APPVEYOR_REPO_BRANCH^: %APPVEYOR_REPO_BRANCH%
SET PATH=C:\mb\windows-builds-64\tmp-bin\cmake-3.7.0-rc2-win32-x86\bin;%PATH%
::SET PATH=C:\mb\windows-builds-64\tmp-bin\cmake-3.5.0-win32-x86\bin;%PATH%
SET PATH=C:\mb\windows-builds-64\tmp-bin\cmake-3.5.1-win32-x86\bin;%PATH%
SET PATH=C:\Program Files\7-Zip;%PATH%
powershell Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy Unrestricted -Force
-188
View File
@@ -1,188 +0,0 @@
# Distributed under the OSI-approved BSD 3-Clause License. See accompanying
# file Copyright.txt or https://cmake.org/licensing for details.
#.rst:
# FindLua
# -------
#
#
#
# Locate Lua library This module defines
#
# ::
#
# LUA_FOUND - if false, do not try to link to Lua
# LUA_LIBRARIES - both lua and lualib
# LUA_INCLUDE_DIR - where to find lua.h
# LUA_VERSION_STRING - the version of Lua found
# LUA_VERSION_MAJOR - the major version of Lua
# LUA_VERSION_MINOR - the minor version of Lua
# LUA_VERSION_PATCH - the patch version of Lua
#
#
#
# Note that the expected include convention is
#
# ::
#
# #include "lua.h"
#
# and not
#
# ::
#
# #include <lua/lua.h>
#
# This is because, the lua location is not standardized and may exist in
# locations other than lua/
unset(_lua_include_subdirs)
unset(_lua_library_names)
unset(_lua_append_versions)
# this is a function only to have all the variables inside go away automatically
function(_lua_set_version_vars)
set(LUA_VERSIONS5 5.3 5.2 5.1 5.0)
if (Lua_FIND_VERSION_EXACT)
if (Lua_FIND_VERSION_COUNT GREATER 1)
set(_lua_append_versions ${Lua_FIND_VERSION_MAJOR}.${Lua_FIND_VERSION_MINOR})
endif ()
elseif (Lua_FIND_VERSION)
# once there is a different major version supported this should become a loop
if (NOT Lua_FIND_VERSION_MAJOR GREATER 5)
if (Lua_FIND_VERSION_COUNT EQUAL 1)
set(_lua_append_versions ${LUA_VERSIONS5})
else ()
foreach (subver IN LISTS LUA_VERSIONS5)
if (NOT subver VERSION_LESS ${Lua_FIND_VERSION})
list(APPEND _lua_append_versions ${subver})
endif ()
endforeach ()
endif ()
endif ()
else ()
# once there is a different major version supported this should become a loop
set(_lua_append_versions ${LUA_VERSIONS5})
endif ()
list(APPEND _lua_include_subdirs "include/lua" "include")
foreach (ver IN LISTS _lua_append_versions)
string(REGEX MATCH "^([0-9]+)\\.([0-9]+)$" _ver "${ver}")
list(APPEND _lua_include_subdirs
include/lua${CMAKE_MATCH_1}${CMAKE_MATCH_2}
include/lua${CMAKE_MATCH_1}.${CMAKE_MATCH_2}
include/lua-${CMAKE_MATCH_1}.${CMAKE_MATCH_2}
)
list(APPEND _lua_library_names
lua${CMAKE_MATCH_1}${CMAKE_MATCH_2}
lua${CMAKE_MATCH_1}.${CMAKE_MATCH_2}
lua-${CMAKE_MATCH_1}.${CMAKE_MATCH_2}
lua.${CMAKE_MATCH_1}.${CMAKE_MATCH_2}
)
endforeach ()
set(_lua_include_subdirs "${_lua_include_subdirs}" PARENT_SCOPE)
set(_lua_library_names "${_lua_library_names}" PARENT_SCOPE)
set(_lua_append_versions "${_lua_append_versions}" PARENT_SCOPE)
endfunction(_lua_set_version_vars)
function(_lua_check_header_version _hdr_file)
# At least 5.[012] have different ways to express the version
# so all of them need to be tested. Lua 5.2 defines LUA_VERSION
# and LUA_RELEASE as joined by the C preprocessor, so avoid those.
file(STRINGS "${_hdr_file}" lua_version_strings
REGEX "^#define[ \t]+LUA_(RELEASE[ \t]+\"Lua [0-9]|VERSION([ \t]+\"Lua [0-9]|_[MR])).*")
string(REGEX REPLACE ".*;#define[ \t]+LUA_VERSION_MAJOR[ \t]+\"([0-9])\"[ \t]*;.*" "\\1" LUA_VERSION_MAJOR ";${lua_version_strings};")
if (LUA_VERSION_MAJOR MATCHES "^[0-9]+$")
string(REGEX REPLACE ".*;#define[ \t]+LUA_VERSION_MINOR[ \t]+\"([0-9])\"[ \t]*;.*" "\\1" LUA_VERSION_MINOR ";${lua_version_strings};")
string(REGEX REPLACE ".*;#define[ \t]+LUA_VERSION_RELEASE[ \t]+\"([0-9])\"[ \t]*;.*" "\\1" LUA_VERSION_PATCH ";${lua_version_strings};")
set(LUA_VERSION_STRING "${LUA_VERSION_MAJOR}.${LUA_VERSION_MINOR}.${LUA_VERSION_PATCH}")
else ()
string(REGEX REPLACE ".*;#define[ \t]+LUA_RELEASE[ \t]+\"Lua ([0-9.]+)\"[ \t]*;.*" "\\1" LUA_VERSION_STRING ";${lua_version_strings};")
if (NOT LUA_VERSION_STRING MATCHES "^[0-9.]+$")
string(REGEX REPLACE ".*;#define[ \t]+LUA_VERSION[ \t]+\"Lua ([0-9.]+)\"[ \t]*;.*" "\\1" LUA_VERSION_STRING ";${lua_version_strings};")
endif ()
string(REGEX REPLACE "^([0-9]+)\\.[0-9.]*$" "\\1" LUA_VERSION_MAJOR "${LUA_VERSION_STRING}")
string(REGEX REPLACE "^[0-9]+\\.([0-9]+)[0-9.]*$" "\\1" LUA_VERSION_MINOR "${LUA_VERSION_STRING}")
string(REGEX REPLACE "^[0-9]+\\.[0-9]+\\.([0-9]).*" "\\1" LUA_VERSION_PATCH "${LUA_VERSION_STRING}")
endif ()
foreach (ver IN LISTS _lua_append_versions)
if (ver STREQUAL "${LUA_VERSION_MAJOR}.${LUA_VERSION_MINOR}")
set(LUA_VERSION_MAJOR ${LUA_VERSION_MAJOR} PARENT_SCOPE)
set(LUA_VERSION_MINOR ${LUA_VERSION_MINOR} PARENT_SCOPE)
set(LUA_VERSION_PATCH ${LUA_VERSION_PATCH} PARENT_SCOPE)
set(LUA_VERSION_STRING ${LUA_VERSION_STRING} PARENT_SCOPE)
return()
endif ()
endforeach ()
endfunction(_lua_check_header_version)
_lua_set_version_vars()
if (LUA_INCLUDE_DIR AND EXISTS "${LUA_INCLUDE_DIR}/lua.h")
_lua_check_header_version("${LUA_INCLUDE_DIR}/lua.h")
endif ()
if (NOT LUA_VERSION_STRING)
foreach (subdir IN LISTS _lua_include_subdirs)
unset(LUA_INCLUDE_PREFIX CACHE)
find_path(LUA_INCLUDE_PREFIX ${subdir}/lua.h
HINTS
ENV LUA_DIR
PATHS
~/Library/Frameworks
/Library/Frameworks
/sw # Fink
/opt/local # DarwinPorts
/opt/csw # Blastwave
/opt
)
if (LUA_INCLUDE_PREFIX)
_lua_check_header_version("${LUA_INCLUDE_PREFIX}/${subdir}/lua.h")
if (LUA_VERSION_STRING)
set(LUA_INCLUDE_DIR "${LUA_INCLUDE_PREFIX}/${subdir}")
break()
endif ()
endif ()
endforeach ()
endif ()
unset(_lua_include_subdirs)
unset(_lua_append_versions)
find_library(LUA_LIBRARY
NAMES ${_lua_library_names} lua
HINTS
ENV LUA_DIR
PATH_SUFFIXES lib
PATHS
~/Library/Frameworks
/Library/Frameworks
/sw
/opt/local
/opt/csw
/opt
)
unset(_lua_library_names)
if (LUA_LIBRARY)
# include the math library for Unix
if (UNIX AND NOT APPLE AND NOT BEOS)
find_library(LUA_MATH_LIBRARY m)
set(LUA_LIBRARIES "${LUA_LIBRARY};${LUA_MATH_LIBRARY}")
# For Windows and Mac, don't need to explicitly include the math library
else ()
set(LUA_LIBRARIES "${LUA_LIBRARY}")
endif ()
endif ()
include(FindPackageHandleStandardArgs)
# handle the QUIETLY and REQUIRED arguments and set LUA_FOUND to TRUE if
# all listed variables are TRUE
FIND_PACKAGE_HANDLE_STANDARD_ARGS(Lua
REQUIRED_VARS LUA_LIBRARIES LUA_INCLUDE_DIR
VERSION_VAR LUA_VERSION_STRING)
mark_as_advanced(LUA_INCLUDE_DIR LUA_LIBRARY LUA_MATH_LIBRARY)
+82
View File
@@ -0,0 +1,82 @@
# Locate Lua library
# This module defines
# LUA52_FOUND, if false, do not try to link to Lua
# LUA_LIBRARIES
# LUA_INCLUDE_DIR, where to find lua.h
# LUA_VERSION_STRING, the version of Lua found (since CMake 2.8.8)
#
# Note that the expected include convention is
# #include "lua.h"
# and not
# #include <lua/lua.h>
# This is because, the lua location is not standardized and may exist
# in locations other than lua/
#=============================================================================
# Copyright 2007-2009 Kitware, Inc.
# Copyright 2016 for Project-OSRM, Lua5.1 => Lua5.2
#
# Distributed under the OSI-approved BSD License (the "License");
# see accompanying file Copyright.txt for details.
#
# This software is distributed WITHOUT ANY WARRANTY; without even the
# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
# See the License for more information.
#=============================================================================
# (To distribute this file outside of CMake, substitute the full
# License text for the above reference.)
find_path(LUA_INCLUDE_DIR lua.h
HINTS
ENV LUA_DIR
PATH_SUFFIXES include/lua52 include/lua5.2 include/lua-5.2 include/lua include
PATHS
~/Library/Frameworks
/Library/Frameworks
/sw # Fink
/opt/local # DarwinPorts
/opt/csw # Blastwave
/opt
)
find_library(LUA_LIBRARY
NAMES lua52 lua5.2 lua-5.2 lua
HINTS
ENV LUA_DIR
PATH_SUFFIXES lib
PATHS
~/Library/Frameworks
/Library/Frameworks
/sw
/opt/local
/opt/csw
/opt
)
if(LUA_LIBRARY)
# include the math library for Unix
if(UNIX AND NOT APPLE AND NOT BEOS)
find_library(LUA_MATH_LIBRARY m)
set( LUA_LIBRARIES "${LUA_LIBRARY};${LUA_MATH_LIBRARY}" CACHE STRING "Lua Libraries")
# For Windows and Mac, don't need to explicitly include the math library
else()
set( LUA_LIBRARIES "${LUA_LIBRARY}" CACHE STRING "Lua Libraries")
endif()
endif()
if(LUA_INCLUDE_DIR AND EXISTS "${LUA_INCLUDE_DIR}/lua.h")
file(STRINGS "${LUA_INCLUDE_DIR}/lua.h" lua_version_str REGEX "^#define[ \t]+LUA_RELEASE[ \t]+\"Lua .+\"")
string(REGEX REPLACE "^#define[ \t]+LUA_RELEASE[ \t]+\"Lua ([^\"]+)\".*" "\\1" LUA_VERSION_STRING "${lua_version_str}")
unset(lua_version_str)
endif()
include(FindPackageHandleStandardArgs)
# handle the QUIETLY and REQUIRED arguments and set LUA_FOUND to TRUE if
# all listed variables are TRUE
FIND_PACKAGE_HANDLE_STANDARD_ARGS(Lua52
REQUIRED_VARS LUA_LIBRARIES LUA_INCLUDE_DIR
VERSION_VAR LUA_VERSION_STRING)
mark_as_advanced(LUA_INCLUDE_DIR LUA_LIBRARIES LUA_LIBRARY LUA_MATH_LIBRARY)
+93
View File
@@ -0,0 +1,93 @@
# Locate Lua library
# This module defines
# LUAJIT_FOUND, if false, do not try to link to Lua
# LUAJIT_LIBRARIES
# LUAJIT_INCLUDE_DIR, where to find lua.h
#
# Note that the expected include convention is
# #include "lua.h"
# and not
# #include <lua/lua.h>
# This is because, the lua location is not standardized and may exist
# in locations other than lua/
#=============================================================================
# Copyright 2007-2009 Kitware, Inc.
#
# Distributed under the OSI-approved BSD License (the "License");
# see accompanying file Copyright.txt for details.
#
# This software is distributed WITHOUT ANY WARRANTY; without even the
# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
# See the License for more information.
#=============================================================================
# (To distributed this file outside of CMake, substitute the full
# License text for the above reference.)
#
# ################
# 2010 - modified for cronkite to find luajit instead of lua, as it was before.
#
if ( NOT LuaJIT_FIND_VERSION )
MESSAGE(FATAL_ERROR "You need to specify a version of libluajit to use")
ENDIF()
IF( NOT LUAJIT_FIND_QUIETLY )
MESSAGE(STATUS "Looking for LuaJIT ${LuaJIT_FIND_VERSION}")
ENDIF()
FIND_PATH(LUAJIT_INCLUDE_DIR lua.h
HINTS
$ENV{LUAJIT_DIR}
PATH_SUFFIXES include/luajit-2.0 include/luajit2.0 include/luajit include
PATHS
~/Library/Frameworks
/Library/Frameworks
/usr/local
/usr
/sw # Fink
/opt/local # DarwinPorts
/opt/csw # Blastwave
/opt
)
FIND_LIBRARY(LUAJIT_LIBRARY
NAMES luajit-${LuaJIT_FIND_VERSION_MAJOR}${LuaJIT_FIND_VERSION_MINOR} luajit-${LuaJIT_FIND_VERSION}
HINTS
$ENV{LUAJIT_DIR}
PATH_SUFFIXES lib64 lib
PATHS
~/Library/Frameworks
/Library/Frameworks
/usr/local
/usr
/sw
/opt/local
/opt/csw
/opt
)
IF(LUAJIT_LIBRARY)
# include the math library for Unix
IF(UNIX AND NOT APPLE)
FIND_LIBRARY(LUAJIT_MATH_LIBRARY m)
SET( LUAJIT_LIBRARIES "${LUAJIT_LIBRARY};${LUAJIT_MATH_LIBRARY}" CACHE STRING "Lua Libraries")
# For Windows and Mac, don't need to explicitly include the math library
ELSE(UNIX AND NOT APPLE)
SET( LUAJIT_LIBRARIES "${LUAJIT_LIBRARY}" CACHE STRING "Lua Libraries")
ENDIF(UNIX AND NOT APPLE)
ENDIF(LUAJIT_LIBRARY)
INCLUDE(FindPackageHandleStandardArgs)
# handle the QUIETLY and REQUIRED arguments and set LUAJIT_FOUND to TRUE if
# all listed variables are TRUE
FIND_PACKAGE_HANDLE_STANDARD_ARGS(LUAJIT DEFAULT_MSG LUAJIT_LIBRARIES LUAJIT_INCLUDE_DIR)
IF( NOT LUAJIT_FIND_QUIETLY )
IF( LUAJIT_FOUND AND LUAJIT_LIBRARIES)
MESSAGE(STATUS "Found LuaJIT: ${LUAJIT_LIBRARY}" )
MARK_AS_ADVANCED(LUAJIT_INCLUDE_DIR LUAJIT_LIBRARIES LUAJIT_LIBRARY LUAJIT_MATH_LIBRARY)
ELSE()
SET ( LUAJIT_FOUND FALSE )
ENDIF()
ENDIF()
+7 -25
View File
@@ -3,34 +3,16 @@
# LUABIND_FOUND, if false, do not try to link to Luabind
# LUABIND_LIBRARIES
# LUABIND_INCLUDE_DIR, where to find luabind.hpp
#
# Note that the expected include convention is
# #include <luabind/luabind.hpp>
# and not
# #include <luabind.hpp>
# First we try using EXACT but in some verison of
# cmake this would also match patch versions
FIND_PACKAGE(Lua 5.2 EXACT)
IF (LUA_FOUND)
MESSAGE(STATUS "Using Lua ${LUA_VERSION_STRING}")
ELSE()
FIND_PACKAGE(Lua 5.1 EXACT)
IF (LUA_FOUND)
MESSAGE(STATUS "Using Lua ${LUA_VERSION_STRING}")
ELSE()
# Now fall back to a lua verison without exact
# in case this cmake version also forces patch versions
FIND_PACKAGE(Lua 5.2)
IF (LUA_FOUND)
MESSAGE(STATUS "Using Lua ${LUA_VERSION_STRING}")
ELSE()
FIND_PACKAGE(Lua 5.1)
IF (LUA_FOUND)
MESSAGE(STATUS "Using Lua ${LUA_VERSION_STRING}")
ELSE()
MESSAGE(FATAL_ERROR "Lua 5.1 or 5.2 was not found.")
ENDIF()
ENDIF()
ENDIF()
IF( NOT LUABIND_FIND_QUIETLY )
MESSAGE(STATUS "Looking for Luabind...")
ENDIF()
FIND_PATH(LUABIND_INCLUDE_DIR luabind.hpp
HINTS
$ENV{LUABIND_DIR}
+1 -1
View File
@@ -4,7 +4,7 @@ set(INFILE ${SOURCE_DIR}/include/util/fingerprint_impl.hpp.in)
file(MD5 ${SOURCE_DIR}/src/tools/contract.cpp MD5PREPARE)
file(MD5 ${SOURCE_DIR}/include/util/static_rtree.hpp MD5RTREE)
file(MD5 ${SOURCE_DIR}/include/util/graph_loader.hpp MD5GRAPH)
file(MD5 ${SOURCE_DIR}/src/storage/storage.cpp MD5OBJECTS)
file(MD5 ${SOURCE_DIR}/include/engine/datafacade/internal_datafacade.hpp MD5OBJECTS)
CONFIGURE_FILE(${INFILE} ${NEWFILE})
+40
View File
@@ -0,0 +1,40 @@
INCLUDE (CheckCXXSourceCompiles)
unset(LUABIND_WORKS CACHE)
unset(LUABIND51_WORKS CACHE)
set (LUABIND_CHECK_SRC "extern \"C\" {\n#include \"lua.h\"\n#include \"lauxlib.h\"\n}\n#include <luabind/open.hpp>\nint main() { lua_State *x = luaL_newstate(); luabind::open(x); }")
set (CMAKE_TRY_COMPILE_CONFIGURATION ${CMAKE_BUILD_TYPE})
set (CMAKE_REQUIRED_INCLUDES "${Boost_INCLUDE_DIR};${LUABIND_INCLUDE_DIR};${LUA_INCLUDE_DIR}")
set (CMAKE_REQUIRED_LIBRARIES "${LUABIND_LIBRARY};${LUA_LIBRARY}")
find_package(Lua52)
if(NOT APPLE)
find_package(LuaJIT 5.2)
endif()
if(LUA52_FOUND)
set (CMAKE_REQUIRED_INCLUDES "${Boost_INCLUDE_DIR};${LUABIND_INCLUDE_DIR};${LUA_INCLUDE_DIR}")
set (CMAKE_REQUIRED_LIBRARIES "${LUABIND_LIBRARY};${LUA_LIBRARY}")
CHECK_CXX_SOURCE_COMPILES("${LUABIND_CHECK_SRC}" LUABIND_WORKS)
endif()
if(LUABIND_WORKS)
message(STATUS "Luabind/Lua5.2 combination working with ${LUA_LIBRARY}")
else()
message(STATUS "Luabind/Lua5.2 not feasible, falling back to Lua 5.1.")
unset(LUA_FOUND CACHE)
unset(LUA_INCLUDE_DIR CACHE)
unset(LUA_LIBRARY CACHE)
find_package(Lua51 REQUIRED)
if(NOT APPLE)
find_package(LuaJIT 5.1)
endif()
set (CMAKE_REQUIRED_INCLUDES "${Boost_INCLUDE_DIR};${LUABIND_INCLUDE_DIR};${LUA_INCLUDE_DIR}")
set (CMAKE_REQUIRED_LIBRARIES "${LUABIND_LIBRARY};${LUA_LIBRARY}")
CHECK_CXX_SOURCE_COMPILES("${LUABIND_CHECK_SRC}" LUABIND51_WORKS)
if(LUABIND51_WORKS)
message(STATUS "Luabind works with Lua 5.1 at ${LUA_LIBRARY}")
else()
message(FATAL_ERROR "Luabind does not work with Lua 5.1 at ${LUA_LIBRARY}, no working Luabind found")
endif()
endif()
+6 -6
View File
@@ -1,11 +1,11 @@
prefix=@CMAKE_INSTALL_PREFIX@
includedir=@PKGCONFIG_INCLUDE_DIR@
libdir=@PKGCONFIG_LIBRARY_DIR@
includedir=${prefix}/include
libdir=${prefix}/lib
Name: libOSRM
Description: Project OSRM library
Version: v@OSRM_VERSION@
Version: v@OSRM_VERSION_MAJOR@.@OSRM_VERSION_MINOR@.@OSRM_VERSION_PATCH@
Requires:
Libs: -L${libdir} -losrm @PKGCONFIG_OSRM_LDFLAGS@
Libs.private: @PKGCONFIG_OSRM_DEPENDENT_LIBRARIES@
Cflags: @PKGCONFIG_OSRM_INCLUDE_FLAGS@ @PKGCONFIG_OSRM_CXXFLAGS@
Libs: -L${libdir} -losrm
Libs.private: @ENGINE_LIBRARY_LISTING@
Cflags: -I${includedir} -I${includedir}/osrm @OSRM_INCLUDE_PATHS_STRING@ @OSRM_DEFINES_STRING@ @CMAKE_CXX_FLAGS@
+6 -4
View File
@@ -1,8 +1,10 @@
module.exports = {
default: '--strict --tags ~@stress --tags ~@todo --require features/support --require features/step_definitions',
verify: '--strict --tags ~@stress --tags ~@todo -f progress --require features/support --require features/step_definitions',
todo: '--strict --tags @todo --require features/support --require features/step_definitions',
all: '--strict --require features/support --require features/step_definitions'
default: '--require features --tags ~@stress --tags ~@todo',
verify: '--require features --tags ~@todo --tags ~@bug --tags ~@stress -f progress',
jenkins: '--require features --tags ~@todo --tags ~@bug --tags ~@stress --tags ~@options -f progress',
bugs: '--require features --tags @bug',
todo: '--require features --tags @todo',
all: '--require features'
}
-61
View File
@@ -1,61 +0,0 @@
# Developing / Debugging guidance code
When changing guidance code, it is easy to introduce problems somewhere in the network.
To get a better feeling of how your changes impact the OSRM experience, we offer ways of generating geojson output to inspect (e.g. with Mapbox Studio).
When you do changes, make sure to inspect a few areas for the impact of the changes.
## How to use GeoJson-Debugging
This is a short guide to describe usage of our GeoJson debug logging mechanism. It is synchronized to guarantee thread-safe logging.
## Outputting into a single file
To use it, the inclusion of `geojson_debug_logger.hpp` `geojson_debug_policies.hpp` from the `util` directory is required.
Geojson debugging requires a few simple steps to output data into a feature collection.
- Create a Scoped Guard that lives through the process and provide it with all required datastructures (it needs to span the lifetime of all your logging efforts)
- At the location of the output, simply call Write with your own parameters.
A guard (ScopedGeojsonLoggerGuard) requires a logging policy. Per default we provide a way of printing out node-ids as coordinates.
The initialisation to do so looks like this:
`util::ScopedGeojsonLoggerGuard<util::NodeIdVectorToLineString> geojson_guard( "debug.geojson", data-for-conversion);`
The field `data-for-conversion` can be an arbitrary long set of features and needs to match the parameters used for constructing our policy (in this case `util::NodeIdVectorToLineString`).
The policy itself offers a `operator()` accepting a `vector` of `NodeID`.
For outputting data into our file (debug.geojson), we simply need to call the matching logging routine of the guard: `util::ScioedGeojsonLoggerGuard<util::NodeIdVectorToLineString>::Write(list_of_node_ids);`
(or `guard.Write(list_of_node_ids)` if you created an instance).
### Possible Scopeguard Location
Think of the scopeguard as you would do of any reference. If you wan't to access to logging during a call, the guard object must be alive and valid.
As an example: a good location to create the a scopeguard to log decisions in the edge-based-graph-factory would be right before we run it ([here](https://github.com/Project-OSRM/osrm-backend/blob/a933b5d94943bf3edaf42c84a614a99650d23cba/src/extractor/extractor.cpp#L497)). If you put `util::ScopedGeojsonLoggerGuard<util::NodeIdVectorToLineString> geojson_guard( "debug.geojson", node_coordinate_vector);` at that location, you can then print `util::ScopedGeojsonLoggerGuard<util::NodeIdVectorToLineString>::Write(list_of_node_ids);` anywhere within the `edge-based-graph-factory`.
This location would enable call for all guidance related pre-processing which is called in the edge-based-graph-factory.
Logging any turn-handler decisions, for example, would now be possible.
## Limitations
GeoJson debugging requires a single GeoJsonGuard (ScopedGeojsonLoggerGuard) for each desired output file.
For each set of template parameters, only the most recent guard will actually produce output.
`util::ScopedGeojsonLoggerGuard<util::NodeIdVectorToLineString> geojson_guard( "debug.geojson", data-for-conversion);`
`util::ScopedGeojsonLoggerGuard<util::NodeIdVectorToLineString> geojson_guard( "debug-2.geojson", data-for-conversion);`
Will not provide a way to write into two files, but only `debug-2` will actually contain features.
We cannot nest-these calls.
If we want to use the same policy for multiple files, we need to use different template parameters both for the logger and the guard.
`util::ScopedGeojsonLoggerGuard<util::NodeIdVectorToLineString,0> geojson_guard( "debug.geojson", data-for-conversion);`
`util::ScopedGeojsonLoggerGuard<util::NodeIdVectorToLineString,1> geojson_guard( "debug-2.geojson", data-for-conversion);`
as well as,
`util::ScopedGeojsonLoggerGuardr<util::NodeIdVectorToLineString,0>::Write(list_of_node_ids);`
`util::ScopedGeojsonLoggerGuardr<util::NodeIdVectorToLineString,1>::Write(list_of_node_ids);`
+294 -352
View File
@@ -1,43 +1,50 @@
## General options
## Environent Variables
All OSRM HTTP requests use a common structure.
### SIGNAL_PARENT_WHEN_READY
The following syntax applies to all services, except as noted.
If the SIGNAL_PARENT_WHEN_READY environment variable is set osrm-routed will
send the USR1 signal to its parent when it will be running and waiting for
requests. This could be used to upgrade osrm-routed to a new binary on the fly
without any service downtime - no incoming requests will be lost.
### Requests
### DISABLE_ACCESS_LOGGING
```endpoint
GET /{service}/{version}/{profile}/{coordinates}[.{format}]?option=value&option=value
If the DISABLE_ACCESS_LOGGING environment variable is set osrm-routed will
**not** log any http requests to standard output. This can be useful in high
traffic setup.
## HTTP API
`osrm-routed` supports only `GET` requests of the form. If you your response size
exceeds the limits of a simple URL encoding, consider using our [NodeJS bindings](https://github.com/Project-OSRM/node-osrm)
or using the [C++ library directly](libosrm.md).
### Request
```
http://{server}/{service}/{version}/{profile}/{coordinates}[.{format}]?option=value&option=value
```
| Parameter | Description |
| --- | --- |
| `service` | One of the following values: [`route`](#route-service), [`nearest`](#nearest-service), [`table`](#table-service), [`match`](#match-service), [`trip`](#trip-service), [`tile`](#tile-service) |
| `version` | Version of the protocol implemented by the service. `v1` for all OSRM 5.x installations |
| `profile` | Mode of transportation, is determined statically by the Lua profile that is used to prepare the data using `osrm-extract`. Typically `car`, `bike` or `foot` if using one of the supplied profiles. |
| `coordinates`| String of format `{longitude},{latitude};{longitude},{latitude}[;{longitude},{latitude} ...]` or `polyline({polyline})`. |
| `format`| Only `json` is supported at the moment. This parameter is optional and defaults to `json`. |
Passing any `option=value` is optional. `polyline` follows Google's polyline format with precision 5 by default and can be generated using [this package](https://www.npmjs.com/package/polyline).
- `server`: location of the server. Example: `127.0.0.1:5000` (default)
- `service`: Name of the service to be used. Support are the following services:
| Service | Description |
|-------------|-----------------------------------------------------------|
| [`route`](#service-route) | fastest path between given coordinates |
| [`nearest`](#service-nearest) | returns the nearest street segment for a given coordinate |
| [`table`](#service-table) | computes distance tables for given coordinates |
| [`match`](#service-match) | matches given coordinates to the road network |
| [`trip`](#service-trip) | Compute the fastest round trip between given coordinates |
| [`tile`](#service-tile) | Return vector tiles containing debugging info |
- `version`: Version of the protocol implemented by the service.
- `profile`: Mode of transportation, is determined by the profile that is used to prepare the data
- `coordinates`: String of format `{longitude},{latitude};{longitude},{latitude}[;{longitude},{latitude} ...]` or `polyline({polyline})`.
- `format`: Only `json` is supported at the moment. This parameter is optional and defaults to `json`.
Passing any `option=value` is optional. `polyline` follows Google's polyline format with precision 5 and can be generated using [this package](https://www.npmjs.com/package/polyline).
To pass parameters to each location some options support an array like encoding:
**Request options**
| Option | Values | Description |
|------------|--------------------------------------------------------|-------------------------------------------------------------------------------------------------------|
|bearings |`{bearing};{bearing}[;{bearing} ...]` |Limits the search to segments with given bearing in degrees towards true north in clockwise direction. |
|radiuses |`{radius};{radius}[;{radius} ...]` |Limits the search to given radius in meters. |
|hints |`{hint};{hint}[;{hint} ...]` |Hint from previous request to derive position in street network. |
Where the elements follow the following format:
| Element | Values |
|------------|--------------------------------------------------------|
|bearing |`{value},{range}` `integer 0 .. 360,integer 0 .. 180` |
|radius |`double >= 0` or `unlimited` (default) |
|hint |Base64 `string` |
```
{option}={element};{element}[;{element} ... ]
```
@@ -50,19 +57,48 @@ Example: 2nd location use the default value for `option`:
{option}={element};;{element}
```
#### Example Requests
## General options
```curl
# Query on Berlin with three coordinates:
curl 'http://router.project-osrm.org/route/v1/driving/13.388860,52.517037;13.397634,52.529407;13.428555,52.523219?overview=false'
# Using polyline:
curl 'http://router.project-osrm.org/route/v1/driving/polyline(ofp_Ik_vpAilAyu@te@g`E)?overview=false'
| Option | Values | Description |
|------------|--------------------------------------------------------|--------------------------------------------------|
|bearings |`{bearing};{bearing}[;{bearing} ...]` |Limits the search to segments with given bearing in degrees towards true north in clockwise direction. |
|radiuses |`{radius};{radius}[;{radius} ...]` |Limits the search to given radius in meters. |
|hints |`{hint};{hint}[;{hint} ...]` |Hint to derive position in street network. |
Where the elements follow the following format:
| Element | Values |
|------------|--------------------------------------------------------|
|bearing |`{value},{range}` `integer 0 .. 360,integer 0 .. 180` |
|radius |`double >= 0` or `unlimited` (default) |
|hint |Base64 `string` |
#### Examples
Query on Berlin with three coordinates:
```
http://router.project-osrm.org/route/v1/driving/13.388860,52.517037;13.397634,52.529407;13.428555,52.523219?overview=false
```
### Responses
Using polyline:
Every response object has a `code` field containing one of the strings below or a service dependent code:
```
http://router.project-osrm.org/route/v1/driving/polyline(ofp_Ik_vpAilAyu@te@g`E)?overview=false
```
### Response
Every response object has a `code` field.
```json
{
"code": {code},
"message": {message}
}
```
Where `code` is on one of the strings below or service dependent:
| Type | Description |
|-------------------|----------------------------------------------------------------------------------|
@@ -71,32 +107,21 @@ Every response object has a `code` field containing one of the strings below or
| `InvalidService` | Service name is invalid. |
| `InvalidVersion` | Version is not found. |
| `InvalidOptions` | Options are invalid. |
| `InvalidQuery` | The query string is synctactically malformed. |
| `InvalidValue` | The successfully parsed query parameters are invalid. |
| `NoSegment` | One of the supplied input coordinates could not snap to street segment. |
| `TooBig` | The request size violates one of the service specific request size restrictions. |
- `message` is a **optional** human-readable error message. All other status types are service dependent.
- In case of an error the HTTP status code will be `400`. Otherwise the HTTP status code will be `200` and `code` will be `Ok`.
`message` is a **optional** human-readable error message. All other status types are service dependent.
#### Example response
In case of an error the HTTP status code will be `400`. Otherwise the HTTP status code will be `200` and `code` will be `Ok`.
## Service `nearest`
Snaps a coordinate to the street network and returns the nearest n matches.
### Request
```json
{
"code": "Ok",
"message": "Everything worked"
}
```
## Services
### Nearest service
Snaps a coordinate to the street network and returns the nearest `n` matches.
```endpoint
GET http://{server}/nearest/v1/{profile}/{coordinates}.json?number={number}
http://{server}/nearest/v1/{profile}/{coordinates}.json?number={number}
```
Where `coordinates` only supports a single `{longitude},{latitude}` entry.
@@ -107,78 +132,42 @@ In addition to the [general options](#general-options) the following options are
|------------|------------------------------|----------------------------------------------------|
|number |`integer >= 1` (default `1`) |Number of nearest segments that should be returned. |
**Response**
### Response
- `code` if the request was successful `Ok` otherwise see the service dependent and general status codes.
- `waypoints` array of `Waypoint` objects sorted by distance to the input coordinate. Each object has at least the following additional properties:
- `distance`: Distance in meters to the supplied input coordinate.
#### Example Requests
### Examples
```curl
# Querying nearest three snapped locations of `13.388860,52.517037` with a bearing between `20° - 340°`.
curl 'http://router.project-osrm.org/nearest/v1/driving/13.388860,52.517037?number=3&bearings=0,20'
Querying nearest three snapped locations of `13.388860,52.517037` with a bearing between `20° - 340°`.
```
http://router.project-osrm.org/nearest/v1/driving/13.388860,52.517037?number=3&bearings=0,20
```
#### Example Response
## Service `route`
### Request
```json
{
"waypoints" : [
{
"hint" : "KSoKADRYroqUBAEAEAAAABkAAAAGAAAAAAAAABhnCQCLtwAA_0vMAKlYIQM8TMwArVghAwEAAQH1a66g",
"distance" : 4.152629,
"name" : "Friedrichstraße",
"location" : [
13.388799,
52.517033
]
},
{
"hint" : "KSoKADRYroqUBAEABgAAAAAAAAAAAAAAKQAAABhnCQCLtwAA7kvMAAxZIQM8TMwArVghAwAAAQH1a66g",
"distance" : 11.811961,
"name" : "Friedrichstraße",
"location" : [
13.388782,
52.517132
]
},
{
"hint" : "KioKgDbbDgCUBAEAAAAAABoAAAAAAAAAPAAAABlnCQCLtwAA50vMADJZIQM8TMwArVghAwAAAQH1a66g",
"distance" : 15.872438,
"name" : "Friedrichstraße",
"location" : [
13.388775,
52.51717
],
}
],
"code" : "Ok"
}
```
### Route service
Finds the fastest route between coordinates in the supplied order.
```endpoint
GET /route/v1/{profile}/{coordinates}?alternatives={true|false}&steps={true|false}&geometries={polyline|polyline6|geojson}&overview={full|simplified|false}&annotations={true|false}
http://{server}/route/v1/{profile}/{coordinates}?alternatives={true|false}&steps={true|false}&geometries={polyline|geojson}&overview={full|simplified|false}&annotations={true|false}
```
In addition to the [general options](#general-options) the following options are supported for this service:
|Option |Values |Description |
|------------|---------------------------------------------|-------------------------------------------------------------------------------|
|alternatives|`true`, `false` (default) |Search for alternative routes and return as well.\* |
|steps |`true`, `false` (default) |Return route steps for each route leg |
|annotations |`true`, `false` (default) |Returns additional metadata for each coordinate along the route geometry. |
|geometries |`polyline` (default), `polyline6`, `geojson` |Returned route geometry format (influences overview and per step) |
|overview |`simplified` (default), `full`, `false` |Add overview geometry either full, simplified according to highest zoom level it could be display on, or not at all.|
|continue\_straight |`default` (default), `true`, `false` |Forces the route to keep going straight at waypoints constraining uturns there even if it would be faster. Default value depends on the profile. |
|Option |Values |Description |
|------------|------------------------------------------|-------------------------------------------------------------------------------|
|alternatives|`true`, `false` (default) |Search for alternative routes and return as well.\* |
|steps |`true`, `false` (default) |Return route steps for each route leg |
|annotations |`true`, `false` (default) |Returns additional metadata for each coordinate along the route geometry. |
|geometries |`polyline` (default), `geojson` |Returned route geometry format (influences overview and per step) |
|overview |`simplified` (default), `full`, `false` |Add overview geometry either full, simplified according to highest zoom level it could be display on, or not at all.|
|continue_straight |`default` (default), `true`, `false`|Forces the route to keep going straight at waypoints and don't do a uturn even if it would be faster. Default value depends on the profile. |
\* Please note that even if an alternative route is requested, a result cannot be guaranteed.
**Response**
### Response
- `code` if the request was successful `Ok` otherwise see the service dependent and general status codes.
- `waypoints`: Array of `Waypoint` objects representing all waypoints in order:
@@ -188,26 +177,27 @@ In case of error the following `code`s are supported in addition to the general
| Type | Description |
|-------------------|-----------------|
| `NoRoute` | No route found. |
| `NoRoute` | No route found. |
All other fields might be undefined.
#### Example Request
### Example
```curl
# Query on Berlin with three coordinates and no overview geometry returned:
curl 'http://router.project-osrm.org/route/v1/driving/13.388860,52.517037;13.397634,52.529407;13.428555,52.523219?overview=false'
Query on Berlin with three coordinates and no overview geometry returned:
```
http://router.project-osrm.org/route/v1/driving/13.388860,52.517037;13.397634,52.529407;13.428555,52.523219?overview=false
```
### Table service
Computes the duration of the fastest route between all pairs of supplied coordinates.
```endpoint
GET /table/v1/{profile}/{coordinates}?{sources}=[{elem}...];&destinations=[{elem}...]
## Service `table`
### Request
```
http://{server}/table/v1/{profile}/{coordinates}?{sources}=[{elem}...];&destinations=[{elem}...]`
```
**Coordinates**
This computes duration tables for the given locations. Allows for both symmetric and asymmetric tables.
### Coordinates
In addition to the [general options](#general-options) the following options are supported for this service:
@@ -219,7 +209,7 @@ In addition to the [general options](#general-options) the following options are
Unlike other array encoded options, the length of `sources` and `destinations` can be **smaller or equal**
to number of input locations;
**Example:**
Example:
```
sources=0;5;7&destinations=5;1;4;2;3;6
@@ -229,20 +219,7 @@ sources=0;5;7&destinations=5;1;4;2;3;6
|------------|-----------------------------|
|index |`0 <= integer < #locations` |
#### Example Request
```curl
# Returns a 3x3 matrix:
curl 'http://router.project-osrm.org/table/v1/driving/13.388860,52.517037;13.397634,52.529407;13.428555,52.523219'
# Returns a 1x3 matrix
curl 'http://router.project-osrm.org/table/v1/driving/13.388860,52.517037;13.397634,52.529407;13.428555,52.523219?sources=0'
# Returns a asymmetric 3x2 matrix with from the polyline encoded locations `qikdcB}~dpXkkHz`:
curl 'http://router.project-osrm.org/table/v1/driving/polyline(egs_Iq_aqAppHzbHulFzeMe`EuvKpnCglA)?sources=0;1;3&destinations=2;4'
```
**Response**
### Response
- `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
@@ -258,41 +235,55 @@ In case of error the following `code`s are supported in addition to the general
All other fields might be undefined.
### Match service
#### Examples
Map matching matches/snaps given GPS points to the road network in the most plausible way.
Please note the request might result multiple sub-traces. Large jumps in the timestamps (> 60s) or improbable transitions lead to trace splits if a complete matching could not be found.
Returns a `3x3` matrix:
```
http://router.project-osrm.org/table/v1/driving/13.388860,52.517037;13.397634,52.529407;13.428555,52.523219
```
Returns a `1x3` matrix:
```
http://router.project-osrm.org/table/v1/driving/13.388860,52.517037;13.397634,52.529407;13.428555,52.523219?sources=0
```
Returns a asymmetric 3x2 matrix with from the polyline encoded locations `qikdcB}~dpXkkHz`:
```
http://router.project-osrm.org/table/v1/driving/qikdcB}~dpXkkHz?sources=0;1;3&destinations=2;4
```
## Service `match`
Map matching matches given GPS points to the road network in the most plausible way.
Please note the request might result multiple sub-traces. Large jumps in the timestamps (>60s) or improbable transitions lead to trace splits if a complete matching could not be found.
The algorithm might not be able to match all points. Outliers are removed if they can not be matched successfully.
```endpoint
GET /match/v1/{profile}/{coordinates}?steps={true|false}&geometries={polyline|polyline6|geojson}&overview={simplified|full|false}&annotations={true|false}
### Request
```
http://{server}/match/v1/{profile}/{coordinates}?steps={true|false}&geometries={polyline|geojson}&overview={simplified|full|false}&annotations={true|false}
```
In addition to the [general options](#general-options) the following options are supported for this service:
|Option |Values |Description |
|------------|------------------------------------------------|------------------------------------------------------------------------------------------|
|steps |`true`, `false` (default) |Return route steps for each route |
|geometries |`polyline` (default), `polyline6`, `geojson` |Returned route geometry format (influences overview and per step) |
|annotations |`true`, `false` (default) |Returns additional metadata for each coordinate along the route geometry. |
|geometries |`polyline` (default), `geojson` |Returned route geometry format (influences overview and per step) |
|annotations |`true`, `false` (default) |Returns additional metadata for each coordinate along the route geometry. |
|overview |`simplified` (default), `full`, `false` |Add overview geometry either full, simplified according to highest zoom level it could be display on, or not at all.|
|timestamps |`{timestamp};{timestamp}[;{timestamp} ...]` |Timestamps for the input locations in seconds since UNIX epoch. Timestamps need to be monotonically increasing. |
|timestamps |`{timestamp};{timestamp}[;{timestamp} ...]` |Timestamp of the input location. |
|radiuses |`{radius};{radius}[;{radius} ...]` |Standard deviation of GPS precision used for map matching. If applicable use GPS accuracy.|
|Parameter |Values |
|------------|-----------------------------------|
|timestamp |`integer` seconds since UNIX epoch |
|radius |`double >= 0` (default 5m) |
The radius for each point should be the standard error of the location measured in meters from the true location.
Use `Location.getAccuracy()` on Android or `CLLocation.horizontalAccuracy` on iOS.
This value is used to determine which points should be considered as candidates (larger radius means more candidates) and how likely each candidate is (larger radius means far-away candidates are penalized less).
The area to search is chosen such that the correct candidate should be considered 99.9% of the time (for more details see [this ticket](https://github.com/Project-OSRM/osrm-backend/pull/3184)).
**Response**
|Parameter |Values |
|------------|------------------------------|
|timestamp |`integer` UNIX-like timestamp |
|radius |`double >= 0` (default 5m) |
### Response
- `code` if the request was successful `Ok` otherwise see the service dependent and general status codes.
- `tracepoints`: Array of `Waypoint` objects representing all points of the trace in order.
- `tracepoints`: Array of `aypoint` objects representing all points of the trace in order.
If the trace point was ommited by map matching because it is an outlier, the entry will be `null`.
Each `Waypoint` object has the following additional properties:
- `matchings_index`: Index to the `Route` object in `matchings` the sub-trace was matched to.
@@ -308,15 +299,17 @@ In case of error the following `code`s are supported in addition to the general
All other fields might be undefined.
### Trip service
## Service `trip`
The trip plugin solves the Traveling Salesman Problem using a greedy heuristic (farthest-insertion algorithm).
The returned path does not have to be the fastest path, as TSP is NP-hard it is only an approximation.
Note that if the input coordinates can not be joined by a single trip (e.g. the coordinates are on several disconnected islands)
multiple trips for each connected component are returned.
```endpoint
GET /trip/v1/{profile}/{coordinates}?steps={true|false}&geometries={polyline|polyline6|geojson}&overview={simplified|full|false}&annotations={true|false}'
### Request
```
http://{server}/trip/v1/{profile}/{coordinates}?steps={true|false}&geometries={polyline|geojson}&overview={simplified|full|false}&annotations={true|false}
```
In addition to the [general options](#general-options) the following options are supported for this service:
@@ -324,11 +317,11 @@ In addition to the [general options](#general-options) the following options are
|Option |Values |Description |
|------------|------------------------------------------------|---------------------------------------------------------------------------|
|steps |`true`, `false` (default) |Return route instructions for each trip |
|annotations |`true`, `false` (default) |Returns additional metadata for each coordinate along the route geometry. |
|geometries |`polyline` (default), `polyline6`, `geojson` |Returned route geometry format (influences overview and per step) |
|annotations |`true`, `false` (default) |Returns additional metadata for each coordinate along the route geometry. |
|geometries |`polyline` (default), `geojson` |Returned route geometry format (influences overview and per step) |
|overview |`simplified` (default), `full`, `false` |Add overview geometry either full, simplified according to highest zoom level it could be display on, or not at all.|
**Response**
### Response
- `code` if the request was successful `Ok` otherwise see the service dependent and general status codes.
- `waypoints`: Array of `Waypoint` objects representing all waypoints in input order. Each `Waypoint` object has the following additional properties:
@@ -340,72 +333,27 @@ In case of error the following `code`s are supported in addition to the general
| Type | Description |
|-------------------|---------------------|
| `NoTrips` | No trips found. |
| `NoTrips` | No trips found. |
All other fields might be undefined.
### Tile service
This service generates [Mapbox Vector Tiles](https://www.mapbox.com/developers/vector-tiles/) that can be viewed with a vector-tile capable slippy-map viewer. The tiles contain road geometries and metadata that can be used to examine the routing graph. The tiles are generated directly from the data in-memory, so are in sync with actual routing results, and let you examine which roads are actually routable, and what weights they have applied.
```endpoint
GET /tile/v1/{profile}/tile({x},{y},{zoom}).mvt
```
The `x`, `y`, and `zoom` values are the same as described at https://wiki.openstreetmap.org/wiki/Slippy_map_tilenames, and are supported by vector tile viewers like [Mapbox GL JS](https://www.mapbox.com/mapbox-gl-js/api/).
#### Example request
```curl
# This fetches a Z=13 tile for downtown San Francisco:
curl 'http://router.project-osrm.org/tile/v1/car/tile(1310,3166,13).mvt'
```
#### Example response
> ![example rendered tile](images/example-tile-response.png)
> http://map.project-osrm.org/debug/#14.33/52.5212/13.3919
The response object is either a binary encoded blob with a `Content-Type` of `application/x-protobuf`, or a `404` error. Note that OSRM is hard-coded to only return tiles from zoom level 12 and higher (to avoid accidentally returning extremely large vector tiles).
Vector tiles contain two layers:
`speeds` layer:
| Field | Type | Description |
| ------------ | --------- | ---------------------------------------- |
| `speed` | `integer` | the speed on that road segment, in km/h |
| `is_small` | `boolean` | whether this segment belongs to a small (< 1000 node) [strongly connected component](https://en.wikipedia.org/wiki/Strongly_connected_component) |
| `datasource` | `string` | the source for the speed value (normally `lua profile` unless you're using the [traffic update feature](https://github.com/Project-OSRM/osrm-backend/wiki/Traffic), in which case it contains the stem of the filename that supplied the speed value for this segment |
| `duration` | `float` | how long this segment takes to traverse, in seconds |
| `name` | `string` | the name of the road this segment belongs to |
`turns` layer:
| Field | Type | Description |
| ------------ | --------- | ---------------------------------------- |
| `bearing_in` | `integer` | the absolute bearing that approaches the intersection. -180 to +180, 0 = North, 90 = East |
| `turn_angle` | `integer` | the angle of the turn, relative to the `bearing_in`. -180 to +180, 0 = straight ahead, 90 = 90-degrees to the right |
| `cost` | `float` | the time we think it takes to make that turn, in seconds. May be negative, depending on how the data model is constructed (some turns get a "bonus"). |
## Result objects
### Route object
### Route
Represents a route through (potentially multiple) waypoints.
**Properties**
#### Properties
- `distance`: The distance traveled by the route, in `float` meters.
- `duration`: The estimated travel time, in `float` number of seconds.
- `geometry`: The whole geometry of the route value depending on `overview` parameter, format depending on the `geometries` parameter. See `RouteStep`'s `geometry` field for a parameter documentation.
| overview | Description |
|------------|-----------------------------|
| simplified | Geometry is simplified according to the highest zoom level it can still be displayed on full. |
| full | Geometry is not simplified. |
| false | Geometry is not added. |
| overview | Description |
|------------|-----------------------------|
| simplified | Geometry is simplified according to the highest zoom level it can still be displayed on full. |
| full | Geometry is not simplified. |
| false | Geometry is not added. |
- `legs`: The legs between the given waypoints, an array of `RouteLeg` objects.
@@ -433,34 +381,34 @@ Three input coordinates, `geometry=geojson`, `steps=false`:
}
```
### RouteLeg object
### RouteLeg
Represents a route between two waypoints.
**Properties**
#### Properties
- `distance`: The distance traveled by this route leg, in `float` meters.
- `duration`: The estimated travel time, in `float` number of seconds.
- `summary`: Summary of the route taken as `string`. Depends on the `steps` parameter:
| steps | |
|--------------|-----------------------------------------------------------------------|
| true | Names of the two major roads used. Can be empty if route is too short.|
| false | empty `string` |
| steps | |
|--------------|-----------------------------------------------------------------------|
| true | Names of the two major roads used. Can be empty if route is too short.|
| false | empty `string` |
- `steps`: Depends on the `steps` parameter.
| steps | |
|--------------|-----------------------------------------------------------------------|
| true | array of `RouteStep` objects describing the turn-by-turn instructions |
| false | empty array |
| steps | |
|--------------|-----------------------------------------------------------------------|
| true | array of `RouteStep` objects describing the turn-by-turn instructions |
| false | empty array |
- `annotation`: Additional details about each coordinate along the route geometry:
| annotations | |
|--------------|-----------------------------------------------------------------------|
| true | An `Annotation` object containing node ids, durations and distances |
| false | `undefined` |
| annotations | |
|--------------|-----------------------------------------------------------------------|
| true | An `Annotation` object containing node ids, durations and distances |
| false | `undefined` |
#### Example
@@ -480,11 +428,11 @@ With `steps=false` and `annotations=true`:
}
```
### Annotation object
### Annotation
Annotation of the whole route leg with fine-grained information about each segment or node id.
**Properties**
#### Properties
- `distance`: The distance, in metres, between each pair of coordinates
- `duration`: The duration between each pair of coordinates, in seconds
@@ -503,24 +451,23 @@ Annotation of the whole route leg with fine-grained information about each segme
```
### RouteStep object
### RouteStep
A step consists of a maneuver such as a turn or merge, followed
by a distance of travel along a single way to the subsequent
step.
**Properties**
#### Properties
- `distance`: The distance of travel from the maneuver to the subsequent step, in `float` meters.
- `duration`: The estimated travel time, in `float` number of seconds.
- `geometry`: The unsimplified geometry of the route segment, depending on the `geometries` parameter.
| `geometry` | |
|------------|--------------------------------------------------------------------|
| polyline | [polyline](https://www.npmjs.com/package/polyline) with precision 5 in [latitude,longitude] encoding |
| polyline6 | [polyline](https://www.npmjs.com/package/polyline) with precision 6 in [latitude,longitude] encoding |
| geojson | [GeoJSON `LineString`](http://geojson.org/geojson-spec.html#linestring) |
| geometries | |
|------------|--------------------------------------------------------------------|
| polyline | [polyline](https://www.npmjs.com/package/polyline) with precision 5 in [latitude,longitude] encoding |
| geojson | [GeoJSON `LineString`](http://geojson.org/geojson-spec.html#linestring) or [GeoJSON `Point`](http://geojson.org/geojson-spec.html#point) if it is only one coordinate (not wrapped by a GeoJSON feature)|
- `name`: The name of the way along which travel proceeds.
- `ref`: A reference number or code for the way. Optionally included, if ref data is available for the given way.
- `pronunciation`: The pronunciation hint of the way name. Will be `undefined` if there is no pronunciation hit.
@@ -531,49 +478,42 @@ step.
#### Example
```json
```
{
"geometry" : "{lu_IypwpAVrAvAdI",
"mode" : "driving",
"duration" : 15.6,
"intersections" : [
{ "bearings" : [ 10, 92, 184, 270 ],
"lanes" : [
{ "indications" : [ "left", "straight" ],
"valid" : "false" },
{ "valid" : "true",
"indications" : [ "right" ] }
],
"out" : 2,
"in" : 3,
"entry" : [ "true", "true", "true", "false" ],
"location" : [ 13.39677, 52.54366 ]
},
{ "out" : 1,
"lanes" : [
{ "indications" : [ "straight" ],
"valid" : "true" },
{ "indications" : [ "right" ],
"valid" : "false" }
],
"bearings" : [ 60, 240, 330 ],
"in" : 0,
"entry" : [ "false", "true", "true" ],
"location" : [ 13.394718, 52.543096 ]
}
],
"name" : "Lortzingstraße",
"distance" : 152.3,
"maneuver" : {
"modifier" : "right",
"type" : "turn"
}
}
"distance":152.3,
"duration":15.6,
"name":"Lortzingstraße",
"maneuver":{
"type":"turn",
"modifier":"right",
},
"geometry":"{lu_IypwpAVrAvAdI",
"mode":"driving",
"intersections":[
{"location":[13.39677,52.54366],
"in":3,
"out":2,
"bearings":[10,92,184,270],
"entry":["true","true","true","false"],
"lanes":[
{"indications":["left","straight"], "valid":"false"},
{"indications":["right"], "valid":"true"}
]},
{"location":[13.394718,52.543096],
"in":0,
"out":1,
"bearings":[60,240,330],
"entry":["false","true","true"]
"lanes":[
{"indications":["straight"], "valid":"true"},
{"indications":["right"], "valid":"false"}
]}
]}
```
### StepManeuver object
### StepManeuver
**Properties**
#### Properties
- `location`: A `[longitude, latitude]` pair describing the location of the turn.
- `bearing_before`: The clockwise angle from true north to the
@@ -583,79 +523,79 @@ step.
- `type` A string indicating the type of maneuver. **new identifiers might be introduced without API change**
Types unknown to the client should be handled like the `turn` type, the existance of correct `modifier` values is guranteed.
| `type` | Description |
|------------------|--------------------------------------------------------------|
| `turn` | a basic turn into direction of the `modifier` |
| `new name` | no turn is taken/possible, but the road name changes. The road can take a turn itself, following `modifier`. |
| `depart` | indicates the departure of the leg |
| `arrive` | indicates the destination of the leg |
| `merge` | merge onto a street (e.g. getting on the highway from a ramp, the `modifier specifies the direction of the merge`) |
| `ramp` | **Deprecated**. Replaced by `on_ramp` and `off_ramp`. |
| `on ramp` | take a ramp to enter a highway (direction given my `modifier`) |
| `off ramp` | take a ramp to exit a highway (direction given my `modifier`) |
| `fork` | take the left/right side at a fork depending on `modifier` |
| `end of road` | road ends in a T intersection turn in direction of `modifier`|
| `use lane` | going straight on a specific lane |
| `continue` | Turn in direction of `modifier` to stay on the same road |
| `roundabout` | traverse roundabout, has additional field `exit` with NR if the roundabout is left. `the modifier specifies the direction of entering the roundabout` |
| `rotary` | a traffic circle. While very similar to a larger version of a roundabout, it does not necessarily follow roundabout rules for right of way. It can offer `rotary_name/rotary_pronunciation` in addition to the `exit` parameter. |
| `roundabout turn`| Describes a turn at a small roundabout that should be treated as normal turn. The `modifier` indicates the turn direciton. Example instruction: `At the roundabout turn left`. |
| `notification` | not an actual turn but a change in the driving conditions. For example the travel mode. If the road takes a turn itself, the `modifier` describes the direction |
| `type` | Description |
|------------------|--------------------------------------------------------------|
| `turn` | a basic turn into direction of the `modifier` |
| `new name` | no turn is taken/possible, but the road name changes. The road can take a turn itself, following `modifier`. |
| `depart` | indicates the departure of the leg |
| `arrive` | indicates the destination of the leg |
| `merge` | merge onto a street (e.g. getting on the highway from a ramp, the `modifier specifies the direction of the merge`) |
| `ramp` | **Deprecated**. Replaced by `on_ramp` and `off_ramp`. |
| `on ramp` | take a ramp to enter a highway (direction given my `modifier`) |
| `off ramp` | take a ramp to exit a highway (direction given my `modifier`) |
| `fork` | take the left/right side at a fork depending on `modifier` |
| `end of road` | road ends in a T intersection turn in direction of `modifier`|
| `use lane` | going straight on a specific lane |
| `continue` | Turn in direction of `modifier` to stay on the same road |
| `roundabout` | traverse roundabout, has additional field `exit` with NR if the roundabout is left. `the modifier specifies the direction of entering the roundabout` |
| `rotary` | a larger version of a roundabout, can offer `rotary_name/rotary_pronunciation` in addition to the `exit` parameter. |
| `roundabout turn`| Describes a turn at a small roundabout that should be treated as normal turn. The `modifier` indicates the turn direciton. Example instruction: `At the roundabout turn left`. |
| `notification` | not an actual turn but a change in the driving conditions. For example the travel mode. If the road takes a turn itself, the `modifier` describes the direction |
Please note that even though there are `new name` and `notification` instructions, the `mode` and `name` can change
between all instructions. They only offer a fallback in case nothing else is to report.
- `modifier` An optional `string` indicating the direction change of the maneuver.
| `modifier` | Description |
|-------------------|-------------------------------------------|
| `uturn` | indicates reversal of direction |
| `sharp right` | a sharp right turn |
| `right` | a normal turn to the right |
| `slight right` | a slight turn to the right |
| `straight` | no relevant change in direction |
| `slight left` | a slight turn to the left |
| `left` | a normal turn to the left |
| `sharp left` | a sharp turn to the left |
| `modifier` | Description |
|-------------------|-------------------------------------------|
| `uturn` | indicates reversal of direction |
| `sharp right` | a sharp right turn |
| `right` | a normal turn to the right |
| `slight right` | a slight turn to the right |
| `straight` | no relevant change in direction |
| `slight left` | a slight turn to the left |
| `left` | a normal turn to the left |
| `sharp left` | a sharp turn to the left |
The list of turns without a modifier is limited to: `depart/arrive`. If the source/target location is close enough to the `depart/arrive` location, no modifier will be given.
The meaning depends on the `type` field.
| `type` | Description |
|------------------------|---------------------------------------------------------------------------------------------------------------------------|
| `turn` | `modifier` indicates the change in direction accomplished through the turn |
| `depart`/`arrive` | `modifier` indicates the position of departure point and arrival point in relation to the current direction of travel |
| `type` | Description |
|------------------------|---------------------------------------------------------------------------------------------------------------------------|
| `turn` | `modifier` indicates the change in direction accomplished through the turn |
| `depart`/`arrive` | `modifier` indicates the position of departure point and arrival point in relation to the current direction of travel |
- `exit` An optional `integer` indicating number of the exit to take. The field exists for the following `type` field:
| `type` | Description |
|------------------------|---------------------------------------------------------------------------------------------------------------------------|
| `roundabout`/`rotary` | Number of the roundabout exit to take. If exit is `undefined` the destination is on the roundabout. |
| else | Indicates the number of intersections passed until the turn. Example instruction: `at the fourth intersection, turn left` |
| `type` | Description |
|------------------------|---------------------------------------------------------------------------------------------------------------------------|
| `roundabout` | Number of the roundabout exit to take. If exit is `undefined` the destination is on the roundabout. |
| else | Indicates the number of intersections passed until the turn. Example instruction: `at the fourth intersection, turn left` |
New properties (potentially depending on `type`) may be introduced in the future without an API version change.
### Lane object
### Lane
A `Lane` represents a turn lane at the corresponding turn location.
**Properties**
#### Properties
- `indications`: a indication (e.g. marking on the road) specifying the turn lane. A road can have multiple indications (e.g. an arrow pointing straight and left). The indications are given in an array, each containing one of the following types. Further indications might be added on without an API version change.
| `value` | Description |
|------------------------|---------------------------------------------------------------------------------------------------------------------------|
| `none` | No dedicated indication is shown. |
| `uturn` | An indication signaling the possibility to reverse (i.e. fully bend arrow). |
| `sharp right` | An indication indicating a sharp right turn (i.e. strongly bend arrow). |
| `right` | An indication indicating a right turn (i.e. bend arrow). |
| `slight right` | An indication indicating a slight right turn (i.e. slightly bend arrow). |
| `straight` | No dedicated indication is shown (i.e. straight arrow). |
| `slight left` | An indication indicating a slight left turn (i.e. slightly bend arrow). |
| `left` | An indication indicating a left turn (i.e. bend arrow). |
| `sharp left` | An indication indicating a sharp left turn (i.e. strongly bend arrow). |
| `value` | Description |
|------------------------|---------------------------------------------------------------------------------------------------------------------------|
| `none` | No dedicated indication is shown. |
| `uturn` | An indication signaling the possibility to reverse (i.e. fully bend arrow). |
| `sharp right` | An indication indicating a sharp right turn (i.e. strongly bend arrow). |
| `right` | An indication indicating a right turn (i.e. bend arrow). |
| `slight right` | An indication indicating a slight right turn (i.e. slightly bend arrow). |
| `straight` | No dedicated indication is shown (i.e. straight arrow). |
| `slight left` | An indication indicating a slight left turn (i.e. slightly bend arrow). |
| `left` | An indication indicating a left turn (i.e. bend arrow). |
| `sharp left` | An indication indicating a sharp left turn (i.e. strongly bend arrow). |
- `valid`: a boolean flag indicating whether the lane is a valid choice in the current maneuver
@@ -668,12 +608,12 @@ A `Lane` represents a turn lane at the corresponding turn location.
}
```
### Intersection object
### Intersection
An intersection gives a full representation of any cross-way the path passes bay. For every step, the very first intersection (`intersections[0]`) corresponds to the
location of the StepManeuver. Further intersections are listed for every cross-way until the next turn instruction.
**Properties**
#### Properties
- `location`: A `[longitude, latitude]` pair describing the location of the turn.
- `bearings`: A list of bearing values (e.g. [0,90,180,270]) that are available at the intersection. The bearings describe all available roads at the intersection.
@@ -687,8 +627,7 @@ location of the StepManeuver. Further intersections are listed for every cross-w
- `lanes`: Array of `Lane` objects that denote the available turn lanes at the intersection. If no lane information is available for an intersection, the `lanes` property will not be present.
#### Example
```json
```
{
"location":[13.394718,52.543096],
"in":0,
@@ -699,32 +638,35 @@ location of the StepManeuver. Further intersections are listed for every cross-w
"indications": ["left", "straight"],
"valid": "false"
}
]}
}
```
### Waypoint object
### Waypoint
Object used to describe waypoint on a route.
**Properties**
#### Properties
- `name` Name of the street the coordinate snapped to
- `location` Array that contains the `[longitude, latitude]` pair of the snapped coordinate
- `distance` The distance of the snapped point from the original
- `hint` Unique internal identifier of the segment (ephemeral, not constant over data updates)
This can be used on subsequent request to significantly speed up the query and to connect multiple services.
E.g. you can use the `hint` value obtained by the `nearest` query as `hint` values for `route` inputs.
#### Example
## Service `tile`
```json
{
"hint" : "KSoKADRYroqUBAEAEAAAABkAAAAGAAAAAAAAABhnCQCLtwAA_0vMAKlYIQM8TMwArVghAwEAAQH1a66g",
"distance" : 4.152629,
"name" : "Friedrichstraße",
"location" : [
13.388799,
52.517033
]
}
This generates [Mapbox Vector Tiles](https://www.mapbox.com/developers/vector-tiles/) that can be viewed with a vector-tile capable slippy-map viewer. The tiles contain road geometries and metadata that can be used to examine the routing graph. The tiles are generated directly from the data in-memory, so are in sync with actual routing results, and let you examine which roads are actually routable, and what weights they have applied.
### Request
```
http://{server}/tile/v1/{profile}/tile({x},{y},{zoom}).mvt
```
The `x`, `y`, and `zoom` values are the same as described at https://wiki.openstreetmap.org/wiki/Slippy_map_tilenames, and are supported by vector tile viewers like [Mapbox GL JS](https://www.mapbox.com/mapbox-gl-js/api/).
### Response
The response object is either a binary encoded blob with a `Content-Type` of `application/x-protobuf`, or a `404` error. Note that OSRM is hard-coded to only return tiles from zoom level 12 and higher (to avoid accidentally returning extremely large vector tiles).
Vector tiles contain just a single layer named `speeds`. Within that layer, features can have `speed` (int) and `is_small` (boolean) attributes.
Binary file not shown.

Before

Width:  |  Height:  |  Size: 694 KiB

+6 -13
View File
@@ -1,11 +1,7 @@
## Introduction
OSRM can be used as a library (libosrm) via C++ instead of using it through the HTTP interface and `osrm-routed`. This allows for fine-tuning OSRM and has much less overhead. Here is a quick introduction into how to use `libosrm` in the upcoming v5 release.
Take a look at the example code that lives in the [example directory](https://github.com/Project-OSRM/osrm-backend/tree/master/example). Here is all you ever wanted to know about `libosrm`, that is a short description of what the types do and where to find documentation on it:
## Important interface objects
- [`EngineConfig`](https://github.com/Project-OSRM/osrm-backend/blob/master/include/engine/engine_config.hpp) - for initializing an OSRM instance we can configure certain properties and constraints. E.g. the storage config is the base path such as `france.osm.osrm` from which we derive and load `france.osm.osrm.*` auxiliary files. This also lets you set constraints such as the maximum number of locations allowed for specific services.
- [`OSRM`](https://github.com/Project-OSRM/osrm-backend/blob/master/include/osrm/osrm.hpp) - this is the main Routing Machine type with functions such as `Route` and `Table`. You initialize it with a `EngineConfig`. It does all the heavy lifting for you. Each function takes its own parameters, e.g. the `Route` function takes `RouteParameters`, and a out-reference to a JSON result that gets filled. The return value is a `Status`, indicating error or success.
@@ -20,14 +16,11 @@ Take a look at the example code that lives in the [example directory](https://gi
- [Parameters for other services](https://github.com/Project-OSRM/osrm-backend/tree/master/include/engine/api) - here are all other `*Parameters` you need for other Routing Machine services.
- [JSON](https://github.com/Project-OSRM/osrm-backend/blob/master/include/util/json_container.hpp) - this is a sum type resembling JSON. The Routing Machine service functions take a out-ref to a JSON result and fill it accordingly. It is currently implemented using [mapbox/variant](https://github.com/mapbox/variant) which is similar to [Boost.Variant](http://www.boost.org/doc/libs/1_55_0/doc/html/variant.html). There are two ways to work with this sum type: either provide a visitor that acts on each type on visitation or use the `get` function in case you're sure about the structure. The JSON structure is written down in the [HTTP API](#http-api).
- [JSON](https://github.com/Project-OSRM/osrm-backend/blob/master/include/util/json_container.hpp) - this is a sum type resembling JSON. The Routing Machine service functions take a out-ref to a JSON result and fill it accordingly. It is currently implemented using [mapbox/variant](https://github.com/mapbox/variant) which is similar to [Boost.Variant](http://www.boost.org/doc/libs/1_55_0/doc/html/variant.html) (Boost documentation is great). There are two ways to work with this sum type: either provide a visitor that acts on each type on visitation or use the `get` function in case you're sure about the structure. The JSON structure is written down in the [[v5 server API|Server-API-v5,-current]].
## Example
------------------------------------------------------------------------------------------------------------------
See [the example folder](https://github.com/Project-OSRM/osrm-backend/tree/master/example) in the OSRM repository.
## Workflow
- Create an `OSRM` instance initialized with a `EngineConfig`
- Call the service function on the `OSRM` object providing service specific `*Parameters`
- Check the return code and use the JSON result
To summarize:
- create an `OSRM` instance initialized with a `EngineConfig`
- call the service function on the `OSRM` object providing service specific `*Parameters`
- check the return code and use the JSON result
-2
View File
@@ -32,7 +32,6 @@ We may introduce forward-compatible changes: query parameters and response prope
- The `master` branch is for the bleeding edge development
- We create and maintain release branches `x.y` to control the release flow
- We create the release branch once we tagged the final version `x.y.0` version, RCs go on master
- No minor or major version will be released without a code-equal release candidates
- For quality assurance, release candidates will be run on the demo server for 24 hours before releaseing the version proper
- Patch versions may be released without a release candidate
@@ -45,7 +44,6 @@ We may introduce forward-compatible changes: query parameters and response prope
3. Make sure `CHANGELOG.md` is up to date.
4. Make sure the OSRM version in `CMakeLists.txt` is up to date
5. Use an annotated tag to mark the release: `git tag vx.y.z -a` Body of the tag description should be the changelog entries.
6. Use `npm run build-api-docs` to generate the API documentation. Copy `build/docs/*` to `https://github.com/Project-OSRM/project-osrm.github.com` in the `docs/vN.N.N/api` directory
6. Push tags and commits: `git push; git push --tags`
8. Proceede with the `node-osrm` release as [outlined in the repository](https://github.com/Project-OSRM/node-osrm/blob/master/docs/releasing.md).
9. If not a release-candidate: Write a mailing-list post to osrm-talk@openstreetmap.org to announce the release
-14
View File
@@ -1,14 +0,0 @@
## Environment Variables
### SIGNAL_PARENT_WHEN_READY
If the SIGNAL_PARENT_WHEN_READY environment variable is set osrm-routed will
send the USR1 signal to its parent when it will be running and waiting for
requests. This could be used to upgrade osrm-routed to a new binary on the fly
without any service downtime - no incoming requests will be lost.
### DISABLE_ACCESS_LOGGING
If the DISABLE_ACCESS_LOGGING environment variable is set osrm-routed will
**not** log any http requests to standard output. This can be useful in high
traffic setup.
-16
View File
@@ -1,16 +0,0 @@
var fs = require('fs');
/**
* This file exports the content of your website, as a bunch of concatenated
* Markdown files. By doing this explicitly, you can control the order
* of content without any level of abstraction.
*
* Using the brfs module, fs.readFileSync calls in this file are translated
* into strings of those files' content before the file is delivered to a
* browser: the content is read ahead-of-time and included in bundle.js.
*/
module.exports =
'# HTTP API\n' +
fs.readFileSync('./content/http.md', 'utf8') + '\n'+
'# libosrm C++ API\n' +
fs.readFileSync('./content/libosrm.md', 'utf8') + '\n';
-16
View File
@@ -1,16 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<meta charset='utf-8' />
<meta http-equiv='X-UA-Compatible' content='IE=11' />
<title>OSRM API Documentation</title>
<meta name='viewport' content='initial-scale=1,maximum-scale=1,user-scalable=no' />
<link href='css/base.css' rel='stylesheet' />
<link href='css/style.css' rel='stylesheet' />
<link href='css/railscasts.css' rel='stylesheet' />
</head>
<body>
<!--START--><div id='app'></div><!--STOP-->
<script src='bundle.js'></script>
</body>
</html>
-63
View File
@@ -1,63 +0,0 @@
'use strict';
/**
* Brand names, in order to decreasing length, for different
* media queries.
*/
module.exports.brandNames = {
desktop: 'OSRM API Documentation',
tablet: 'OSRM API Docs',
mobile: 'OSRM API'
};
/**
* Classes that define the top-left brand box.
*/
module.exports.brandClasses = 'fill-red';
/**
* Text for the link back to the linking website.
*/
module.exports.backLink = 'Back to project-osrm.org';
/**
* Runs after highlighting code samples. You can use this
* hook to, for instance, highlight a token and link it
* to some canonical part of documentation.
*/
module.exports.postHighlight = function(html) {
return html;
};
/**
* Highlight tokens in endpoint URLs, optionally linking to documentation
* or adding detail. This is the equivalent of postHighlight but it
* operates on endpoint URLs only.
*/
function highlightTokens(str) {
return str.replace(/{[\w_]+}/g,
(str) => '<span class="strong">' + str + '</span>');
}
/**
* Transform endpoints given as strings in a highlighted block like
*
* ```endpoint
* GET /foo/bar
* ```
*
* Into HTML nodes that format those endpoints in nice ways.
*/
module.exports.transformURL = function(value) {
let parts = value.split(/\s+/);
return {
type: 'html',
value: `<div class='endpoint dark fill-dark round '>
<div class='round-left pad0y pad1x fill-lighten0 code small endpoint-method'>${parts[0]}</div>
<div class='pad0 code small endpoint-url'>${highlightTokens(parts[1])}</div>
</div>`
};
};
module.exports.remarkPlugins = [];
+16 -166
View File
@@ -55,9 +55,7 @@ Background:
Scenario: Testbot - Straight Road
Given the node map
"""
a b c d
"""
| a | b | c | d |
And the ways
| nodes | highway |
@@ -94,9 +92,7 @@ Background:
Scenario: Testbot - Straight Road
Given the node map
"""
a b c d
"""
| a | b | c | d |
And the ways
| nodes | highway | name |
@@ -121,10 +117,8 @@ Background:
Scenario: Testbot - Straight Road
Given the node map
"""
a b
d c
"""
| a | b |
| d | c |
And the ways
| nodes | highway | name |
@@ -146,10 +140,8 @@ Background:
Scenario: Testbot - Straight Road
Given the node map
"""
a b e
d c
"""
| a | b | e |
| d | c | |
And the ways
| nodes | highway | name |
@@ -173,10 +165,8 @@ Scenario: Enter and Exit mini roundabout with sharp angle # features/guidance/
Given the profile "car" # features/step_definitions/data.js:8
Given a grid size of 10 meters # features/step_definitions/data.js:20
Given the node map # features/step_definitions/data.js:45
"""
a b
c d
"""
| a | b | |
| | c | d |
And the ways # features/step_definitions/data.js:128
| nodes | highway | name |
| ab | tertiary | MySt |
@@ -205,11 +195,9 @@ OSRM converts the grid into a so called edge-based graph.
```
Scenario: Testbot - Intersection
Given the node map
"""
e
b a d
c
"""
| | e | |
| b | a | d |
| | c | |
And the ways
| nodes | highway | oneway |
@@ -225,13 +213,11 @@ To guarantee discovery, use:
```
Scenario: Testbot - Intersection
Given the node map
"""
e
4
b 1 a 3 d
2
c
"""
| | | e | | |
| | | 4 | | |
| b | 1 | a | 3 | d |
| | | 2 | | |
| | | c | | |
And the ways
| nodes | highway | oneway |
@@ -251,139 +237,3 @@ If you are testing for a duration metric, allow for a tiny offset to ensure a pa
#### Don't Rely on Alternatives
Alternative route discovery is a random feature in itself. The discovery of routes depends on the contraction order of roads and cannot be assumed successful, ever.
### Understanding Turn Restrictions
Adding turn restrictions requires the restriction to follow a very specific format.
We specify them in a table with the header `| type | way:from | way:to | node:via | restriction |`.
It is important that turn restrictions require micro segmentation.
Consider the following scenario:
```
Given the node map:
"""
e
|
a - - b - - c
|
d
"""
And the ways
| nodes | oneway |
| abc | yes |
| ebd | yes |
And the relations
| type | way:from | way:to | node:via | restriction |
| restriction | abc | ebd | b | no_right_turn |
```
The setting looks perfectly fine at first glance. However, it is not well defined.
The forbidden right turn could be either a superfluous addition, forbidding the turn `cb` to `be`, or actually refer to the turn `ab` to `bd` to say that a turn is forbidden here.
To model turn-restrictions correctly and unique, we need to split segments that contribute to the restriction into the smallest possible parts.
E.g. the above scenario could correctly be expressed as:
```
Given the node map:
"""
e
|
a - - b - - c
|
d
"""
And the ways
| nodes | oneway | name |
| ab | yes | abc |
| bc | yes | abc |
| eb | yes | ebd |
| bd | yes | ebd |
And the relations
| type | way:from | way:to | node:via | restriction |
| restriction | ab | bd | b | no_right_turn |
```
Unless this format is used, OSRM will omit the (then ambiguous) turn restrictions and ignore them.
## My Guidance Tests are Failing - Understanding what you can change
If you change some stuff in guidance, you will easily see tests change their result. E.g. if you change the angles for which we report `right`, then obviously some tests might not report a `direction modifier` named `right` anymore.
This small section will try to guide you in making the correct decisions for changing the behaviour of tests.
The difficulty in guidance tests is that not all items can be translated 1:1 from the ascii art into turn-angles.
The turn-angle calculation tries to find turn angles that would represent perceived turn angles, not the exact angle at the connection.
This is necessary, since connections in OSM are always bound by the paradigm that the way is supposed to be in the middle of the actual road.
For broad streets, you will see stronger angles than the actual turns.
### Don't change the test, change the expected behaviour
If we have a test that looks like this:
```
Given a grid size of 5 m
Given the node map
"""
a - b - - - - - - c
\
d - - - - - e
"""
When I route I should get
| waypoints | route | turns |
| a,e | abc,bde,bde | depart,turn slight right,arrive|
```
And the test reports `turn right` for the route `a->e`, where before it said `slight right`.
If you changed the turn angles, obviously you can expect changes in the distinction between `slight right` and `right`.
In such a case it is, of course, reasonable to change the expected route to report `right` instead of `slight right`. You should consider inspecting the actual turn angles at `b` to see if you feel that change is justified.
However, you should never adjust the test itself.
If you look at a failure, the other way around
```
Given a grid size of 5 m
Given the node map
"""
a - b - - - - - - c
\
d - - - - - e
"""
When I route I should get
| waypoints | route | turns |
| a,e | abc,bde,bde | depart,turn right,arrive|
```
where we see a `slight right`, over the expected `right`.
We could be tempted to adjust the grid size (e.g. from `10 m` to `20` meters).
Such a change would fundamentally alter the tests, though.
Since the part `b-d` is a short offset, when we are looking at a grid of size `5 m`, the angle calculation will try and compensate for this offset.
In this case we would see a very slight turn angle. If your change now reports different turn angles, you can of course change the expected result. But you should not adjust the grid size. The test would be testing turn angles of `180` and `100` degrees, instead of `180` and `160`.
### Consider Post-Processing Impacts
Some changes you might see could look completely unrelated. To understand the impact of your changes, you can make use of the debugging utilities you can finde in `util/debug.hpp` (and potentially other related headers).
If your test is inspecting a series of turns (remember, a turn not necessarily equals an instruction), you could see interaction with post-processing.
To see the unprocessed turns, you should print the steps at the end of step assembly (`assembleSteps` in `engine/guidance/assemble_steps.hpp`).
If you see unexpected changes, you can consider adding the `locations` field to your test to study what location a turn is reported at.
To study a test without post-processing impacts, you can create a copy of the case on a very large grid (like 2000 meters). In such a grid, `turn collapsing` would be essentially disable.
Sadly, there is no general guideline.
### Use Caution
If in doubt, ask another person. Inspect as much of the data as possible (e.g. print un-collapsed steps, turn angles and so on) and use your best judgement, if the new result seems justified.
+2 -2
View File
@@ -19,7 +19,7 @@ if(CMAKE_SIZEOF_VOID_P EQUAL 8)
set(bitness 64)
message(STATUS "Building on a 64 bit system")
else()
message(STATUS "Building on a 32 bit system")
message(WARNING "Building on a 32 bit system is unsupported")
endif()
if(WIN32 AND MSVC_VERSION LESS 1900)
@@ -33,4 +33,4 @@ find_package(LibOSRM REQUIRED)
target_link_libraries(osrm-example ${LibOSRM_LIBRARIES} ${LibOSRM_DEPENDENT_LIBRARIES})
include_directories(SYSTEM ${LibOSRM_INCLUDE_DIRS})
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${LibOSRM_CXXFLAGS}")
set(CMAKE_CXX_FLAGS ${LibOSRM_CXXFLAGS})
+1 -1
View File
@@ -34,7 +34,7 @@ int main(int argc, const char *argv[])
config.use_shared_memory = false;
// Routing machine with several services (such as Route, Table, Nearest, Trip, Match)
const OSRM osrm{config};
OSRM osrm{config};
// The following shows how to use the Route service; configure this service
RouteParameters params;
-8
View File
@@ -174,11 +174,3 @@ Feature: Bike - Access tags on ways
| cycleway | | no | | x |
| runway | | | yes | |
| cycleway | | | no | x |
Scenario: Bike - Bridleways when access is explicit
Then routability should be
| highway | horse | foot | bicycle | bothw |
| bridleway | | | yes | x |
| bridleway | | yes | | x |
| bridleway | designated | | | |
| bridleway | | | | |
+11 -19
View File
@@ -7,11 +7,9 @@ Feature: Bike - Squares and other areas
@square
Scenario: Bike - Route along edge of a squares
Given the node map
"""
x
a b
d c
"""
| x | |
| a | b |
| d | c |
And the ways
| nodes | area | highway |
@@ -32,11 +30,9 @@ Feature: Bike - Squares and other areas
@building
Scenario: Bike - Don't route on buildings
Given the node map
"""
x
a b
d c
"""
| x | |
| a | b |
| d | c |
And the ways
| nodes | highway | area | building | access |
@@ -57,11 +53,9 @@ Feature: Bike - Squares and other areas
@parking
Scenario: Bike - parking areas
Given the node map
"""
e f
x a b y
d c
"""
| e | | | f |
| x | a | b | y |
| | d | c | |
And the ways
| nodes | highway | amenity |
@@ -87,10 +81,8 @@ Feature: Bike - Squares and other areas
@train @platform
Scenario: Bike - railway platforms
Given the node map
"""
x a b y
d c
"""
| x | a | b | y |
| | d | c | |
And the ways
| nodes | highway | railway |
+6 -10
View File
@@ -6,11 +6,9 @@ Feature: Bicycle - Handle cycling
Scenario: Bicycle - Use a ferry route
Given the node map
"""
a b c
d
e f g
"""
| a | b | c | | |
| | | d | | |
| | | e | f | g |
And the ways
| nodes | highway | bridge | bicycle |
@@ -31,11 +29,9 @@ Feature: Bicycle - Handle cycling
Scenario: Bicycle - Properly handle durations
Given the node map
"""
a b c
d
e f g
"""
| a | b | c | | |
| | | d | | |
| | | e | f | g |
And the ways
| nodes | highway | bridge | duration |
+11 -17
View File
@@ -6,12 +6,10 @@ Feature: Bike - Destination only, no passing through
Scenario: Bike - Destination only street
Given the node map
"""
a e
b c d
x y
"""
| a | | | | e |
| | b | c | d | |
| | | | | |
| x | | | | y |
And the ways
| nodes | access |
@@ -33,12 +31,10 @@ Feature: Bike - Destination only, no passing through
Scenario: Bike - Destination only street
Given the node map
"""
a e
b c d
x y
"""
| a | | | | e |
| | b | c | d | |
| | | | | |
| x | | | | y |
And the ways
| nodes | access |
@@ -61,11 +57,9 @@ Feature: Bike - Destination only, no passing through
Scenario: Bike - Routing inside a destination only area
Given the node map
"""
a c e
b d
x y
"""
| a | | c | | e |
| | b | | d | |
| x | | | | y |
And the ways
| nodes | access |
+9 -15
View File
@@ -6,11 +6,9 @@ Feature: Bike - Handle ferry routes
Scenario: Bike - Ferry route
Given the node map
"""
a b c
d
e f g
"""
| a | b | c | | |
| | | d | | |
| | | e | f | g |
And the ways
| nodes | highway | route | bicycle |
@@ -31,12 +29,10 @@ Feature: Bike - Handle ferry routes
Scenario: Bike - Ferry duration, single node
Given the node map
"""
a b c d
e f
g h
i j
"""
| a | b | c | d |
| | | e | f |
| | | g | h |
| | | i | j |
And the ways
| nodes | highway | route | bicycle | duration |
@@ -52,10 +48,8 @@ Feature: Bike - Handle ferry routes
Scenario: Bike - Ferry duration, multiple nodes
Given the node map
"""
x y
a b c d
"""
| x | | | | | y |
| | a | b | c | d | |
And the ways
| nodes | highway | route | bicycle | duration |
+15 -17
View File
@@ -7,15 +7,15 @@ Feature: Bike - Max speed restrictions
Scenario: Bicycle - Respect maxspeeds when lower that way type speed
Then routability should be
| highway | maxspeed | bothw |
| residential | | 15 km/h +- 1 |
| residential | 10 | 10 km/h +- 1 |
| highway | maxspeed | bothw |
| residential | | 15 km/h |
| residential | 10 | 10 km/h |
Scenario: Bicycle - Ignore maxspeed when higher than way speed
Then routability should be
| highway | maxspeed | bothw |
| residential | | 15 km/h +- 1 |
| residential | 80 | 15 km/h |
| highway | maxspeed | bothw |
| residential | | 15 km/h |
| residential | 80 | 15 km/h |
@todo
Scenario: Bicycle - Maxspeed formats
@@ -40,9 +40,7 @@ Feature: Bike - Max speed restrictions
Scenario: Bike - Do not use maxspeed when higher that way type speed
Given the node map
"""
a b c
"""
| a | b | c |
And the ways
| nodes | highway | maxspeed |
@@ -63,14 +61,14 @@ Feature: Bike - Max speed restrictions
| snail | 720s ~10% |
Then routability should be
| maxspeed | maxspeed:forward | maxspeed:backward | forw | backw |
| | | | 15 km/h +- 1 | 15 km/h +- 1 |
| 10 | | | 10 km/h +- 1 | 10 km/h +- 1 |
| | 10 | | 10 km/h +- 1 | 15 km/h +- 1 |
| | | 10 | 15 km/h | 10 km/h +- 1 |
| 2 | 10 | | 10 km/h +- 1 | 2 km/h |
| 2 | | 10 | 2 km/h | 10 km/h +- 1 |
| 2 | 5 | 10 | 5 km/h | 10 km/h +- 1 |
| maxspeed | maxspeed:forward | maxspeed:backward | forw | backw |
| | | | 15 km/h | 15 km/h |
| 10 | | | 10 km/h | 10 km/h |
| | 10 | | 10 km/h | 15 km/h |
| | | 10 | 15 km/h | 10 km/h |
| 2 | 10 | | 10 km/h | 2 km/h |
| 2 | | 10 | 2 km/h | 10 km/h |
| 2 | 5 | 10 | 5 km/h | 10 km/h |
Scenario: Bike - Maxspeed should not allow routing on unroutable ways
Then routability should be
+16 -34
View File
@@ -6,10 +6,8 @@ Feature: Bike - Mode flag
Scenario: Bike - Mode when using a ferry
Given the node map
"""
a b
c d
"""
| a | b | |
| | c | d |
And the ways
| nodes | highway | route | duration |
@@ -28,10 +26,8 @@ Feature: Bike - Mode flag
Scenario: Bike - Mode when using a train
Given the node map
"""
a b
c d
"""
| a | b | |
| | c | d |
And the ways
| nodes | highway | railway | bicycle |
@@ -50,10 +46,8 @@ Feature: Bike - Mode flag
Scenario: Bike - Mode when pushing bike against oneways
Given the node map
"""
a b e
f c d
"""
| a | b | e |
| f | c | d |
And the ways
| nodes | highway | oneway |
@@ -75,10 +69,8 @@ Feature: Bike - Mode flag
Scenario: Bike - Mode when pushing on pedestrain streets
Given the node map
"""
a b
c d
"""
| a | b | |
| | c | d |
And the ways
| nodes | highway |
@@ -97,10 +89,8 @@ Feature: Bike - Mode flag
Scenario: Bike - Mode when pushing on pedestrain areas
Given the node map
"""
a b
c d f
"""
| a | b | | |
| | c | d | f |
And the ways
| nodes | highway | area |
@@ -119,10 +109,8 @@ Feature: Bike - Mode flag
Scenario: Bike - Mode when pushing on steps
Given the node map
"""
a b
c d f
"""
| a | b | | |
| | c | d | f |
And the ways
| nodes | highway |
@@ -141,10 +129,8 @@ Feature: Bike - Mode flag
Scenario: Bike - Mode when bicycle=dismount
Given the node map
"""
a b
c d f
"""
| a | b | | |
| | c | d | f |
And the ways
| nodes | highway | bicycle |
@@ -163,9 +149,7 @@ Feature: Bike - Mode flag
Scenario: Bicycle - Modes when starting on forward oneway
Given the node map
"""
a b
"""
| a | b |
And the ways
| nodes | oneway |
@@ -178,9 +162,7 @@ Feature: Bike - Mode flag
Scenario: Bicycle - Modes when starting on reverse oneway
Given the node map
"""
a b
"""
| a | b |
And the ways
| nodes | oneway |
+6 -10
View File
@@ -6,10 +6,8 @@ Feature: Bike - Street names in instructions
Scenario: Bike - A named street
Given the node map
"""
a b
c
"""
| a | b |
| | c |
And the ways
| nodes | name | ref |
@@ -21,11 +19,9 @@ Feature: Bike - Street names in instructions
| a | c | My Way,Your Way,Your Way | A6,A7,A7 |
@unnamed
Scenario: Bike - No longer use way type to describe unnamed ways, see #3231
Scenario: Bike - Use way type to describe unnamed ways
Given the node map
"""
a b c d
"""
| a | b | c | d |
And the ways
| nodes | highway | name |
@@ -33,5 +29,5 @@ Feature: Bike - Street names in instructions
| bcd | track | |
When I route I should get
| from | to | route |
| a | d | , |
| from | to | route |
| a | d | {highway:cycleway},{highway:track},{highway:track} |
+3 -7
View File
@@ -18,10 +18,8 @@ Feature: Bike - Oneway streets
Scenario: Bike - Around the Block
Given the node map
"""
a b
f d c e
"""
| | a | b | |
| f | d | c | e |
And the ways
| nodes | oneway | foot |
@@ -119,9 +117,7 @@ Feature: Bike - Oneway streets
Scenario: Bike - Two consecutive oneways
Given the node map
"""
a b c
"""
| a | b | | c |
And the ways
| nodes | oneway |
+7 -14
View File
@@ -35,11 +35,9 @@ Feature: Bike - Accessability of different way types
@square
Scenario: Bike - Push bikes on pedestrian areas
Given the node map
"""
x
a b
d c
"""
| x | |
| a | b |
| d | c |
And the ways
| nodes | area | highway |
@@ -65,7 +63,6 @@ Feature: Bike - Accessability of different way types
| runway | | | |
| runway | yes | foot | foot |
@todo
Scenario: Bike - Pushing bikes on ways with foot=yes in one direction
Then routability should be
| highway | foot:forward | foot:backward | forw | backw |
@@ -90,10 +87,8 @@ Feature: Bike - Accessability of different way types
Scenario: Bike - Instructions when pushing bike on oneways
Given the node map
"""
a b e
f c d
"""
| a | b | e |
| f | c | d |
And the ways
| nodes | highway | oneway |
@@ -112,10 +107,8 @@ Feature: Bike - Accessability of different way types
Scenario: Bike - Instructions when pushing bike on footway/pedestrian, etc.
Given the node map
"""
a b
c d
"""
| a | b | |
| | c | d |
And the ways
| nodes | highway |
+5 -11
View File
@@ -6,9 +6,7 @@ Feature: Bike - Way ref
Scenario: Bike - Way with both name and ref
Given the node map
"""
a b
"""
| a | b |
And the ways
| nodes | name | ref |
@@ -20,23 +18,19 @@ Feature: Bike - Way ref
Scenario: Bike - Way with only ref
Given the node map
"""
a b
"""
| a | b |
And the ways
| nodes | name | ref |
| ab | | E7 |
When I route I should get
| from | to | route | ref |
| a | b | , | E7,E7 |
| from | to | route | ref |
| a | b | {highway:primary},{highway:primary} | E7,E7 |
Scenario: Bike - Way with only name
Given the node map
"""
a b
"""
| a | b |
And the ways
| nodes | name |
+36 -58
View File
@@ -9,11 +9,9 @@ Feature: Bike - Turn restrictions
@no_turning
Scenario: Bike - No left turn
Given the node map
"""
n
w j e
s
"""
| | n | |
| w | j | e |
| | s | |
And the ways
| nodes | oneway | foot |
@@ -35,11 +33,9 @@ Feature: Bike - Turn restrictions
@no_turning
Scenario: Bike - No right turn
Given the node map
"""
n
w j e
s
"""
| | n | |
| w | j | e |
| | s | |
And the ways
| nodes | oneway | foot |
@@ -61,11 +57,9 @@ Feature: Bike - Turn restrictions
@no_turning
Scenario: Bike - No u-turn
Given the node map
"""
n
w j e
s
"""
| | n | |
| w | j | e |
| | s | |
And the ways
| nodes | oneway | foot |
@@ -87,11 +81,9 @@ Feature: Bike - Turn restrictions
@no_turning
Scenario: Bike - Handle any no_* relation
Given the node map
"""
n
w j e
s
"""
| | n | |
| w | j | e |
| | s | |
And the ways
| nodes | oneway | foot |
@@ -113,11 +105,9 @@ Feature: Bike - Turn restrictions
@only_turning
Scenario: Bike - Only left turn
Given the node map
"""
n
w j e
s
"""
| | n | |
| w | j | e |
| | s | |
And the ways
| nodes | oneway | foot |
@@ -139,11 +129,9 @@ Feature: Bike - Turn restrictions
@only_turning
Scenario: Bike - Only right turn
Given the node map
"""
n
w j e
s
"""
| | n | |
| w | j | e |
| | s | |
And the ways
| nodes | oneway | foot |
@@ -165,11 +153,9 @@ Feature: Bike - Turn restrictions
@only_turning
Scenario: Bike - Only straight on
Given the node map
"""
n
w j e
s
"""
| | n | |
| w | j | e |
| | s | |
And the ways
| nodes | oneway | foot |
@@ -191,11 +177,9 @@ Feature: Bike - Turn restrictions
@no_turning
Scenario: Bike - Handle any only_* restriction
Given the node map
"""
n
w j e
s
"""
| | n | |
| w | j | e |
| | s | |
And the ways
| nodes | oneway | foot |
@@ -217,11 +201,9 @@ Feature: Bike - Turn restrictions
@except
Scenario: Bike - Except tag and on no_ restrictions
Given the node map
"""
b x c
a j d
s
"""
| b | x | c |
| a | j | d |
| | s | |
And the ways
| nodes | oneway | foot |
@@ -249,11 +231,9 @@ Feature: Bike - Turn restrictions
@except
Scenario: Bike - Except tag and on only_ restrictions
Given the node map
"""
a b
j
s
"""
| a | | b |
| | j | |
| | s | |
And the ways
| nodes | oneway | foot |
@@ -273,14 +253,12 @@ Feature: Bike - Turn restrictions
@except
Scenario: Bike - Multiple except tag values
Given the node map
"""
s j a
b
c
d
e
f
"""
| s | j | a |
| | | b |
| | | c |
| | | d |
| | | e |
| | | f |
And the ways
| nodes | oneway | foot |
+2 -4
View File
@@ -14,10 +14,8 @@ Feature: Bike - Stop areas for public transport
Scenario: Bike - railway platforms
Given the node map
"""
a b c d
s t
"""
| a | b | c | d |
| | s | t | |
And the nodes
| node | public_transport |
+23 -24
View File
@@ -7,43 +7,42 @@ Feature: Bike - Surfaces
Scenario: Bicycle - Slow surfaces
Then routability should be
| highway | surface | bothw |
| cycleway | | 48 s |
| cycleway | asphalt | 47.9 s|
| cycleway | cobblestone:flattened | 72 s |
| cycleway | paving_stones | 72 s |
| cycleway | compacted | 72 s |
| cycleway | cobblestone | 120 s |
| cycleway | fine_gravel | 120 s |
| cycleway | gravel | 120 s |
| cycleway | pebblestone | 120 s |
| cycleway | dirt | 120 s |
| cycleway | earth | 120 s |
| cycleway | grass | 120 s |
| cycleway | mud | 240 s |
| cycleway | sand | 240 s |
| cycleway | | 48s |
| cycleway | asphalt | 48s |
| cycleway | cobblestone:flattened | 72s |
| cycleway | paving_stones | 72s |
| cycleway | compacted | 72s |
| cycleway | cobblestone | 120s |
| cycleway | unpaved | 120s |
| cycleway | fine_gravel | 120s |
| cycleway | gravel | 120s |
| cycleway | pebblestone | 120s |
| cycleway | dirt | 120s |
| cycleway | earth | 120s |
| cycleway | grass | 120s |
| cycleway | mud | 240s |
| cycleway | sand | 240s |
Scenario: Bicycle - Good surfaces on small paths
Then routability should be
| highway | surface | bothw |
| cycleway | | 48 s |
| path | | 59.9 s|
| track | | 60 s |
| track | asphalt | 60 s |
| path | asphalt | 60 s |
| cycleway | | 48s |
| path | | 60s |
| track | | 60s |
| track | asphalt | 48s |
| path | asphalt | 48s |
Scenario: Bicycle - Surfaces should not make unknown ways routable
Then routability should be
| highway | surface | bothw |
| cycleway | | 48 s |
| cycleway | | 48s |
| nosense | | |
| nosense | asphalt | |
Scenario: Bicycle - Surfaces should not increase speed when pushing bikes
Given the node map
"""
a b
c d
"""
| a | b |
| c | d |
And the ways
| nodes | highway | oneway | surface |
+3 -5
View File
@@ -7,11 +7,9 @@ Feature: Turn Penalties
Scenario: Bike - turns should incur a delay that depend on the angle
Given the node map
"""
c d e
b j f
a s g
"""
| c | d | e |
| b | j | f |
| a | s | g |
And the ways
| nodes |
-64
View File
@@ -30,35 +30,6 @@ Feature: Car - Restricted access
| | | no | yes | x |
| | | yes | no | |
Scenario: Car - Access tag hierarchy and forward/backward
Then routability should be
| access | access:forward | access:backward | motorcar | motorcar:forward | motorcar:backward | forw | backw |
| | | | | | | x | x |
| yes | | | | | | x | x |
| yes | no | | | | | | x |
| yes | yes | | no | | | | |
| yes | yes | | yes | no | | | x |
| yes | | | | | | x | x |
| yes | | no | | | | x | |
| yes | | yes | no | | | | |
| yes | | yes | yes | | no | x | |
| no | | | | | | | |
| no | yes | | | | | x | |
| no | no | | yes | | | x | x |
| no | no | | no | yes | | x | |
| no | | | | | | | |
| no | | yes | | | | | x |
| no | | no | yes | | | x | x |
| no | | no | no | | yes | | x |
| | no | | | no | | | x |
| | | no | | | no | x | |
| | no | | | | no | | |
| | | no | no | | | | |
| | no | | | yes | | x | x |
| | | no | | | yes | x | x |
| | yes | | | no | | | x |
| | | yes | | | no | x | |
Scenario: Car - Access tag hierarchy on nodes
Then routability should be
| node/access | node/vehicle | node/motor_vehicle | node/motorcar | bothw |
@@ -178,7 +149,6 @@ Feature: Car - Restricted access
| runway | | | | yes | |
| primary | | | | no | x |
@hov
Scenario: Car - only designated HOV ways are ignored by default
Then routability should be
| highway | hov | bothw |
@@ -186,28 +156,6 @@ Feature: Car - Restricted access
| primary | yes | x |
| primary | no | x |
@hov
Scenario: Car - a way with all lanes HOV-designated is inaccessible by default (similar to hov=designated)
Then routability should be
| highway | hov:lanes:forward | hov:lanes:backward | hov:lanes | oneway | forw | backw |
| primary | designated | designated | | | | |
| primary | | designated | | | x | |
| primary | designated | | | | | x |
| primary | designated\|designated | designated\|designated | | | | |
| primary | designated\|no | designated\|no | | | x | x |
| primary | yes\|no | yes\|no | | | x | x |
| primary | | | | | x | x |
| primary | designated | | | -1 | | x |
| primary | | designated | | -1 | | |
| primary | | | designated | yes | | |
| primary | | | designated | -1 | | |
| primary | | | designated\| | yes | x | |
| primary | | | designated\| | -1 | | x |
| primary | | | designated\|designated | yes | | |
| primary | | | designated\|designated | -1 | | |
| primary | | | designated\|yes | yes | x | |
| primary | | | designated\|no | -1 | | x |
Scenario: Car - these toll roads always work
Then routability should be
| highway | toll | bothw |
@@ -220,15 +168,3 @@ Feature: Car - Restricted access
Then routability should be
| highway | toll | bothw |
| primary | yes | |
Scenario: Car - directional access tags
Then routability should be
| highway | access | access:forward | access:backward | forw | backw |
| primary | yes | yes | yes | x | x |
| primary | yes | | no | x | |
| primary | yes | no | | | x |
| primary | yes | no | no | | |
| primary | no | no | no | | |
| primary | no | | yes | | x |
| primary | no | yes | | x | |
| primary | no | yes | yes | x | x |
+17 -27
View File
@@ -8,9 +8,7 @@ OSRM will use 4/5 of the projected free-flow speed.
Scenario: Car - Advisory speed overwrites maxspeed
Given the node map
"""
a b c
"""
| a | b | c |
And the ways
| nodes | highway | maxspeed | maxspeed:advisory |
@@ -19,14 +17,12 @@ OSRM will use 4/5 of the projected free-flow speed.
When I route I should get
| from | to | route | speed |
| a | b | ab,ab | 36 km/h +- 1 |
| b | c | bc,bc | 36 km/h +- 1 |
| a | b | ab,ab | 47 km/h +- 1 |
| b | c | bc,bc | 47 km/h +- 1 |
Scenario: Car - Advisory speed overwrites forward maxspeed
Given the node map
"""
a b c
"""
| a | b | c |
And the ways
| nodes | highway | maxspeed:forward | maxspeed:advisory:forward |
@@ -35,14 +31,12 @@ OSRM will use 4/5 of the projected free-flow speed.
When I route I should get
| from | to | route | speed |
| a | b | ab,ab | 36 km/h +- 1 |
| b | c | bc,bc | 36 km/h +- 1 |
| a | b | ab,ab | 47 km/h +- 1 |
| b | c | bc,bc | 47 km/h +- 1 |
Scenario: Car - Advisory speed overwrites backwards maxspeed
Given the node map
"""
a b c
"""
| a | b | c |
And the ways
| nodes | highway | maxspeed:backward | maxspeed:advisory:backward |
@@ -51,14 +45,12 @@ OSRM will use 4/5 of the projected free-flow speed.
When I route I should get
| from | to | route | speed |
| b | a | ab,ab | 36 km/h +- 1 |
| c | b | bc,bc | 36 km/h +- 1 |
| b | a | ab,ab | 47 km/h +- 1 |
| c | b | bc,bc | 47 km/h +- 1 |
Scenario: Car - Advisory speed overwrites backwards maxspeed
Given the node map
"""
a b c d
"""
| a | b | c | d |
And the ways
| nodes | highway | maxspeed:backward | maxspeed:advisory:backward |
@@ -68,14 +60,12 @@ OSRM will use 4/5 of the projected free-flow speed.
When I route I should get
| from | to | route | speed |
| c | b | bc,bc | 36 km/h +- 1 |
| d | c | cd,cd | 36 km/h +- 1 |
| c | b | bc,bc | 47 km/h +- 1 |
| d | c | cd,cd | 47 km/h +- 1 |
Scenario: Car - Directional advisory speeds play nice with eachother
Given the node map
"""
a b c
"""
| a | b | c |
And the ways
| nodes | highway | maxspeed:advisory | maxspeed:advisory:forward | maxspeed:advisory:backward |
@@ -84,9 +74,9 @@ OSRM will use 4/5 of the projected free-flow speed.
When I route I should get
| from | to | route | speed |
| a | b | ab,ab | 36 km/h +- 1 |
| b | a | ab,ab | 48 km/h +- 1 |
| b | c | bc,bc | 48 km/h +- 1 |
| c | b | bc,bc | 36 km/h +- 1 |
| a | b | ab,ab | 47 km/h +- 1 |
| b | a | ab,ab | 59 km/h +- 1 |
| b | c | bc,bc | 59 km/h +- 1 |
| c | b | bc,bc | 47 km/h +- 1 |
+14 -18
View File
@@ -6,11 +6,9 @@ Feature: Car - Handle driving
Scenario: Car - Use a ferry route
Given the node map
"""
a b c
d
e f g
"""
| a | b | c | | |
| | | d | | |
| | | e | f | g |
And the ways
| nodes | highway | bridge | bicycle |
@@ -19,23 +17,21 @@ Feature: Car - Handle driving
| efg | primary | | |
When I route I should get
| from | to | route | modes |
| from | to | route | modes |
| a | g | abc,cde,efg,efg | driving,driving,driving,driving |
| b | f | abc,cde,efg,efg | driving,driving,driving,driving |
| e | c | cde,cde | driving,driving |
| e | c | cde,cde | driving,driving |
| e | b | cde,abc,abc | driving,driving,driving |
| e | a | cde,abc,abc | driving,driving,driving |
| c | e | cde,cde | driving,driving |
| c | e | cde,cde | driving,driving |
| c | f | cde,efg,efg | driving,driving,driving |
| c | g | cde,efg,efg | driving,driving,driving |
Scenario: Car - Properly handle durations
Given the node map
"""
a b c
d
e f g
"""
| a | b | c | | |
| | | d | | |
| | | e | f | g |
And the ways
| nodes | highway | bridge | duration |
@@ -44,8 +40,8 @@ Feature: Car - Handle driving
| efg | primary | | |
When I route I should get
| from | to | route | modes | speed |
| a | g | abc,cde,efg,efg | driving,driving,driving,driving | 6 km/h |
| b | f | abc,cde,efg,efg | driving,driving,driving,driving | 4 km/h |
| c | e | cde,cde | driving,driving | 2 km/h |
| e | c | cde,cde | driving,driving | 2 km/h |
| from | to | route | modes | speed |
| a | g | abc,cde,efg,efg | driving,driving,driving,driving | 7 km/h |
| b | f | abc,cde,efg,efg | driving,driving,driving,driving | 5 km/h |
| c | e | cde,cde | driving,driving | 2 km/h |
| e | c | cde,cde | driving,driving | 2 km/h |
+11 -17
View File
@@ -6,12 +6,10 @@ Feature: Car - Destination only, no passing through
Scenario: Car - Destination only street
Given the node map
"""
a e
b c d
x y
"""
| a | | | | e |
| | b | c | d | |
| | | | | |
| x | | | | y |
And the ways
| nodes | access |
@@ -33,12 +31,10 @@ Feature: Car - Destination only, no passing through
Scenario: Car - Destination only street
Given the node map
"""
a e
b c d
x y
"""
| a | | | | e |
| | b | c | d | |
| | | | | |
| x | | | | y |
And the ways
| nodes | access |
@@ -61,11 +57,9 @@ Feature: Car - Destination only, no passing through
Scenario: Car - Routing inside a destination only area
Given the node map
"""
a c e
b d
x y
"""
| a | | c | | e |
| | b | | d | |
| x | | | | y |
And the ways
| nodes | access |
+11 -17
View File
@@ -6,11 +6,9 @@ Feature: Car - Handle ferry routes
Scenario: Car - Use a ferry route
Given the node map
"""
a b c
d
e f g
"""
| a | b | c | | |
| | | d | | |
| | | e | f | g |
And the ways
| nodes | highway | route | bicycle |
@@ -31,11 +29,9 @@ Feature: Car - Handle ferry routes
Scenario: Car - Properly handle simple durations
Given the node map
"""
a b c
d
e f g
"""
| a | b | c | | |
| | | d | | |
| | | e | f | g |
And the ways
| nodes | highway | route | duration |
@@ -45,18 +41,16 @@ Feature: Car - Handle ferry routes
When I route I should get
| from | to | route | modes | speed |
| a | g | abc,cde,efg,efg | driving,ferry,driving,driving | 23 km/h |
| a | g | abc,cde,efg,efg | driving,ferry,driving,driving | 24 km/h |
| b | f | abc,cde,efg,efg | driving,ferry,driving,driving | 18 km/h |
| c | e | cde,cde | ferry,ferry | 11 km/h |
| e | c | cde,cde | ferry,ferry | 11 km/h |
Scenario: Car - Properly handle ISO 8601 durations
Given the node map
"""
a b c
d
e f g
"""
| a | b | c | | |
| | | d | | |
| | | e | f | g |
And the ways
| nodes | highway | route | duration |
@@ -66,7 +60,7 @@ Feature: Car - Handle ferry routes
When I route I should get
| from | to | route | modes | speed |
| a | g | abc,cde,efg,efg | driving,ferry,driving,driving | 23 km/h |
| a | g | abc,cde,efg,efg | driving,ferry,driving,driving | 24 km/h |
| b | f | abc,cde,efg,efg | driving,ferry,driving,driving | 18 km/h |
| c | e | cde,cde | ferry,ferry | 11 km/h |
| e | c | cde,cde | ferry,ferry | 11 km/h |
+10 -20
View File
@@ -9,10 +9,8 @@ Feature: Car - Speed on links
Scenario: Car - Use motorway_link when reasonable
Given the node map
"""
e f
x a b c d y
"""
| | | e | | | | f | | |
| x | a | b | | | | c | d | y |
And the ways
| nodes | highway |
@@ -32,10 +30,8 @@ Feature: Car - Speed on links
Scenario: Car - Use trunk_link when reasonable
Given the node map
"""
e f
x a b c d y
"""
| | | e | | | | f | | |
| x | a | b | | | | c | d | y |
And the ways
| nodes | highway |
@@ -54,10 +50,8 @@ Feature: Car - Speed on links
Scenario: Car - Use primary_link when reasonable
Given the node map
"""
e f
x a b c d y
"""
| | | e | | | | f | | |
| x | a | b | | | | c | d | y |
And the ways
| nodes | highway |
@@ -76,10 +70,8 @@ Feature: Car - Speed on links
Scenario: Car - Use secondary_link when reasonable
Given the node map
"""
e f
x a b c d y
"""
| | | e | | | | f | | |
| x | a | b | | | | c | d | y |
And the ways
| nodes | highway |
@@ -99,10 +91,8 @@ Feature: Car - Speed on links
Scenario: Car - Use tertiary_link when reasonable
Given the node map
"""
e f
x a b c d y
"""
| | | e | | | | f | | |
| x | a | b | | | | c | d | y |
And the ways
| nodes | highway |
+49 -64
View File
@@ -8,9 +8,7 @@ OSRM will use 4/5 of the projected free-flow speed.
Scenario: Car - Respect maxspeeds when lower that way type speed
Given the node map
"""
a b c d e f g
"""
| a | b | c | d | e | f | g |
And the ways
| nodes | highway | maxspeed |
@@ -22,19 +20,17 @@ OSRM will use 4/5 of the projected free-flow speed.
| fg | trunk | CH:motorway |
When I route I should get
| from | to | route | speed |
| a | b | ab,ab | 68 km/h |
| b | c | bc,bc | 48 km/h |
| c | d | cd,cd | 40 km/h |
| d | e | de,de | 64 km/h |
| e | f | ef,ef | 80 km/h |
| f | g | fg,fg | 96 km/h |
| from | to | route | speed |
| a | b | ab,ab | 79 km/h |
| b | c | bc,bc | 59 km/h +- 1 |
| c | d | cd,cd | 51 km/h |
| d | e | de,de | 75 km/h |
| e | f | ef,ef | 91 km/h |
| f | g | fg,fg | 107 km/h |
Scenario: Car - Do not ignore maxspeed when higher than way speed
Given the node map
"""
a b c d
"""
| a | b | c | d |
And the ways
| nodes | highway | maxspeed |
@@ -43,23 +39,23 @@ OSRM will use 4/5 of the projected free-flow speed.
| cd | living_street | FR:urban |
When I route I should get
| from | to | route | speed |
| a | b | ab,ab | 20 km/h |
| b | c | bc,bc | 72 km/h |
| c | d | cd,cd | 40 km/h |
| from | to | route | speed |
| a | b | ab,ab | 31 km/h |
| b | c | bc,bc | 83 km/h +- 1 |
| c | d | cd,cd | 51 km/h |
Scenario: Car - Forward/backward maxspeed
Given a grid size of 100 meters
Then routability should be
| highway | maxspeed | maxspeed:forward | maxspeed:backward | forw | backw |
| primary | | | | 52 km/h | 52 km/h |
| primary | 60 | | | 48 km/h | 48 km/h |
| primary | | 60 | | 48 km/h | 48 km/h +- 5 |
| primary | | | 60 | 52 km/h | 52 km/h +- 5 |
| primary | 15 | 60 | | 48 km/h | 12 km/h |
| primary | 15 | | 60 | 12 km/h | 48 km/h |
| primary | 15 | 30 | 60 | 24 km/h | 48 km/h |
| primary | | | | 65 km/h | 65 km/h |
| primary | 60 | | | 60 km/h | 60 km/h |
| primary | | 60 | | 60 km/h | 65 km/h |
| primary | | | 60 | 65 km/h | 60 km/h |
| primary | 15 | 60 | | 60 km/h | 23 km/h |
| primary | 15 | | 60 | 23 km/h | 60 km/h |
| primary | 15 | 30 | 60 | 34 km/h | 60 km/h |
Scenario: Car - Maxspeed should not allow routing on unroutable ways
Then routability should be
@@ -82,55 +78,44 @@ OSRM will use 4/5 of the projected free-flow speed.
Then routability should be
| highway | maxspeed | width | maxspeed:forward | maxspeed:backward | forw | backw |
| primary | | | | | 52 km/h | 52 km/h |
| primary | | | | | 63 km/h | 63 km/h |
| primary | | 3 | | | 32 km/h | 32 km/h |
| primary | 60 | | | | 47 km/h | 47 km/h |
| primary | 60 | 3 | | | 29 km/h | 29 km/h |
| primary | | | 60 | | 47 km/h | 52 km/h |
| primary | | 3 | 60 | | 29 km/h | 32 km/h |
| primary | | | | 60 | 52 km/h | 47 km/h |
| primary | | 3 | | 60 | 32 km/h | 29 km/h |
| primary | 15 | | 60 | | 47 km/h | 11 km/h |
| primary | 15 | 3 | 60 | | 29 km/h | 7 km/h |
| primary | 15 | | | 60 | 12 km/h | 47 km/h |
| primary | 15 | 3 | | 60 | 7 km/h | 29 km/h |
| primary | 15 | | 30 | 60 | 23 km/h | 47 km/h |
| primary | 15 | 3 | 30 | 60 | 14 km/h | 29 km/h |
| primary | 60 | | | | 59 km/h | 59 km/h |
| primary | 60 | 3 | | | 30 km/h | 30 km/h |
| primary | | | 60 | | 59 km/h | 63 km/h |
| primary | | 3 | 60 | | 30 km/h | 32 km/h |
| primary | | | | 60 | 63 km/h | 59 km/h |
| primary | | 3 | | 60 | 32 km/h | 30 km/h |
| primary | 15 | | 60 | | 59 km/h | 23 km/h |
| primary | 15 | 3 | 60 | | 30 km/h | 7 km/h |
| primary | 15 | | | 60 | 23 km/h | 59 km/h |
| primary | 15 | 3 | | 60 | 7 km/h | 30 km/h |
| primary | 15 | | 30 | 60 | 34 km/h | 59 km/h |
| primary | 15 | 3 | 30 | 60 | 15 km/h | 30 km/h |
Scenario: Car - Single lane streets be ignored or incur a penalty
Then routability should be
| highway | maxspeed | lanes | maxspeed:forward | maxspeed:backward | forw | backw |
| primary | | | | | 52 km/h | 52 km/h |
| primary | | | | | 63 km/h | 63 km/h |
| primary | | 1 | | | 32 km/h | 32 km/h |
| primary | 60 | | | | 47 km/h | 47 km/h |
| primary | 60 | 1 | | | 29 km/h | 29 km/h |
| primary | | | 60 | | 47 km/h | 52 km/h |
| primary | | 1 | 60 | | 29 km/h | 32 km/h |
| primary | | | | 60 | 52 km/h | 47 km/h |
| primary | | 1 | | 60 | 32 km/h | 29 km/h |
| primary | 15 | | 60 | | 47 km/h | 11 km/h |
| primary | 15 | 1 | 60 | | 29 km/h | 7 km/h |
| primary | 15 | | | 60 | 12 km/h | 47 km/h |
| primary | 15 | 1 | | 60 | 7 km/h | 29 km/h |
| primary | 15 | | 30 | 60 | 23 km/h | 47 km/h |
| primary | 15 | 1 | 30 | 60 | 14 km/h | 29 km/h |
| primary | 60 | | | | 59 km/h | 59 km/h |
| primary | 60 | 1 | | | 30 km/h | 30 km/h |
| primary | | | 60 | | 59 km/h | 63 km/h |
| primary | | 1 | 60 | | 30 km/h | 32 km/h |
| primary | | | | 60 | 63 km/h | 59 km/h |
| primary | | 1 | | 60 | 32 km/h | 30 km/h |
| primary | 15 | | 60 | | 59 km/h | 23 km/h |
| primary | 15 | 1 | 60 | | 30 km/h | 7 km/h |
| primary | 15 | | | 60 | 23 km/h | 59 km/h |
| primary | 15 | 1 | | 60 | 7 km/h | 30 km/h |
| primary | 15 | | 30 | 60 | 34 km/h | 59 km/h |
| primary | 15 | 1 | 30 | 60 | 15 km/h | 30 km/h |
Scenario: Car - Single lane streets only incure a penalty for two-way streets
Then routability should be
| highway | maxspeed | lanes | oneway | forw | backw |
| primary | 30 | 1 | yes | 23 km/h | |
| primary | 30 | 1 | -1 | | 23 km/h |
| primary | 30 | 1 | yes | 34 km/h | |
| primary | 30 | 1 | -1 | | 34 km/h |
| primary | 30 | 1 | | 15 km/h | 15 km/h |
| primary | 30 | 2 | | 23 km/h | 23 km/h |
Scenario: Car - Forwward/backward maxspeed on reverse oneways
Then routability should be
| highway | maxspeed | maxspeed:forward | maxspeed:backward | oneway | forw | backw |
| primary | | | | -1 | | 52 km/h |
| primary | 30 | | | -1 | | 23 km/h |
| primary | | 30 | | -1 | | 52 km/h |
| primary | | | 30 | -1 | | 23 km/h |
| primary | 20 | 30 | | -1 | | 16 km/h |
| primary | 20 | | 30 | -1 | | 23 km/h |
| primary | 30 | 2 | | 34 km/h | 34 km/h |
+3 -7
View File
@@ -5,10 +5,8 @@ Feature: Car - Mode flag
Scenario: Car - Mode when using a ferry
Given the node map
"""
a b
c d
"""
| a | b | |
| | c | d |
And the ways
| nodes | highway | route | duration |
@@ -27,9 +25,7 @@ Feature: Car - Mode flag
Scenario: Car - Snapping when using a ferry
Given the node map
"""
a b c d e f
"""
| a | b | | c | d | | e | f |
And the ways
| nodes | highway | route | duration |
+27 -38
View File
@@ -3,14 +3,11 @@ Feature: Car - Street names in instructions
Background:
Given the profile "car"
Given a grid size of 5 meters
Scenario: Car - A named street
Given the node map
"""
a b
c
"""
| a | b |
| | c |
And the ways
| nodes | name | ref |
@@ -23,11 +20,9 @@ Feature: Car - Street names in instructions
Scenario: Car - A named street with pronunciation
Given the node map
"""
a b d
1
c
"""
| a | b | d |
| | 1 | |
| | c | |
And the ways
| nodes | name |name:pronunciation | ref |
@@ -36,18 +31,16 @@ Feature: Car - Street names in instructions
| cd | Your Way | yourewaye | |
When I route I should get
| from | to | route | pronunciations | ref |
| a | d | My Way,My Way,My Way | ,meyeway,meyeway | ,A1,A1 |
| 1 | c | Your Way,Your Way | yourewaye,yourewaye | , |
| from | to | route | pronunciations | ref |
| a | d | My Way,My Way | ,meyeway | ,A1 |
| 1 | c | Your Way,Your Way | yourewaye,yourewaye | , |
# See #2860
Scenario: Car - same street name but different pronunciation
Given the node map
"""
a b c
d
e
"""
| a | b | c |
| | d | |
| | e | |
And the ways
| nodes | name | name:pronunciation |
@@ -62,9 +55,7 @@ Feature: Car - Street names in instructions
@todo
Scenario: Car - Use way type to describe unnamed ways
Given the node map
"""
a b c d
"""
| a | b | c | d |
And the ways
| nodes | highway | name |
@@ -77,25 +68,23 @@ Feature: Car - Street names in instructions
Scenario: Inner city expressway with on road
Given the node map
"""
a b . . . c g
`f .
`
.
.
d
.
.
.
e
"""
| a | b | | | | c | g |
| | | | | f | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | d | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | e | |
And the ways
| nodes | highway | name | name:pronunciation | oneway |
| abc | primary | road | roooaad | |
| cg | primary | road | roooaad | |
| bfd | trunk_link | sliproad | | yes |
| cde | trunk | trunk | truank | yes |
| nodes | highway | name | name:pronunciation |
| abc | primary | road | roooaad |
| cg | primary | road | roooaad |
| bfd | trunk_link | | |
| cde | trunk | trunk | truank |
And the relations
| type | way:from | way:to | node:via | restriction |
+3 -16
View File
@@ -35,10 +35,8 @@ Feature: Car - Oneway streets
Scenario: Car - Around the Block
Given the node map
"""
a b
f d c e
"""
| | a | b | |
| f | d | c | e |
And the ways
| nodes | oneway |
@@ -72,9 +70,7 @@ Feature: Car - Oneway streets
Scenario: Car - Two consecutive oneways
Given the node map
"""
a b c
"""
| a | b | | c |
And the ways
| nodes | oneway |
@@ -85,12 +81,3 @@ Feature: Car - Oneway streets
When I route I should get
| from | to | route |
| a | c | ab,bc,bc |
# Reversible oneways (low frequency) vs alternating oneways (high frequency).
# See: https://github.com/Project-OSRM/osrm-backend/issues/2837
Scenario: Car - Route over alternating but not reversible oneways
Then routability should be
| highway | oneway | forw | backw |
| primary | reversible | | |
| primary | alternating | x | x |
+63 -99
View File
@@ -10,11 +10,9 @@ Feature: Car - Turn restrictions
@no_turning
Scenario: Car - No left turn
Given the node map
"""
n
w j e
s
"""
| | n | |
| w | j | e |
| | s | |
And the ways
| nodes | oneway |
@@ -36,11 +34,9 @@ Feature: Car - Turn restrictions
@no_turning
Scenario: Car - No straight on
Given the node map
"""
a b j d e
v z
w x y
"""
| a | b | j | d | e |
| v | | | | z |
| | w | x | y | |
And the ways
| nodes | oneway |
@@ -66,11 +62,9 @@ Feature: Car - Turn restrictions
@no_turning
Scenario: Car - No right turn
Given the node map
"""
n
w j e
s
"""
| | n | |
| w | j | e |
| | s | |
And the ways
| nodes | oneway |
@@ -92,11 +86,9 @@ Feature: Car - Turn restrictions
@no_turning
Scenario: Car - No u-turn
Given the node map
"""
n
w j e
s
"""
| | n | |
| w | j | e |
| | s | |
And the ways
| nodes | oneway |
@@ -118,11 +110,9 @@ Feature: Car - Turn restrictions
@no_turning
Scenario: Car - Handle any no_* relation
Given the node map
"""
n
w j e
s
"""
| | n | |
| w | j | e |
| | s | |
And the ways
| nodes | oneway |
@@ -144,11 +134,9 @@ Feature: Car - Turn restrictions
@only_turning
Scenario: Car - Only left turn
Given the node map
"""
n
w j e
s
"""
| | n | |
| w | j | e |
| | s | |
And the ways
| nodes | oneway |
@@ -163,11 +151,9 @@ Feature: Car - Turn restrictions
Scenario: Car - Only right turn, invalid
Given the node map
"""
n
w j e r
s
"""
| | n | | |
| w | j | e | r |
| | s | | |
And the ways
| nodes | oneway |
@@ -188,11 +174,9 @@ Feature: Car - Turn restrictions
@only_turning
Scenario: Car - Only right turn
Given the node map
"""
n
w j e
s
"""
| | n | |
| w | j | e |
| | s | |
And the ways
| nodes | oneway |
@@ -214,11 +198,9 @@ Feature: Car - Turn restrictions
@only_turning
Scenario: Car - Only straight on
Given the node map
"""
n
w j e
s
"""
| | n | |
| w | j | e |
| | s | |
And the ways
| nodes | oneway |
@@ -240,11 +222,9 @@ Feature: Car - Turn restrictions
@no_turning
Scenario: Car - Handle any only_* restriction
Given the node map
"""
n
w j e
s
"""
| | n | |
| w | j | e |
| | s | |
And the ways
| nodes | oneway |
@@ -266,11 +246,9 @@ Feature: Car - Turn restrictions
@specific
Scenario: Car - :hgv-qualified on a standard turn restriction
Given the node map
"""
n
w j e
s
"""
| | n | |
| w | j | e |
| | s | |
And the ways
| nodes | oneway |
@@ -292,11 +270,9 @@ Feature: Car - Turn restrictions
@specific
Scenario: Car - :motorcar-qualified on a standard turn restriction
Given the node map
"""
n
w j e
s
"""
| | n | |
| w | j | e |
| | s | |
And the ways
| nodes | oneway |
@@ -318,11 +294,9 @@ Feature: Car - Turn restrictions
@except
Scenario: Car - Except tag and on no_ restrictions
Given the node map
"""
b x c
a j d
s
"""
| b | x | c |
| a | j | d |
| | s | |
And the ways
| nodes | oneway |
@@ -350,11 +324,9 @@ Feature: Car - Turn restrictions
@except
Scenario: Car - Except tag and on only_ restrictions
Given the node map
"""
a b
j
s
"""
| a | | b |
| | j | |
| | s | |
And the ways
| nodes | oneway |
@@ -374,12 +346,10 @@ Feature: Car - Turn restrictions
@except
Scenario: Car - Several only_ restrictions at the same segment
Given the node map
"""
y
i j f b x a e g h
c d
"""
| | | | | y | | | | |
| i | j | f | b | x | a | e | g | h |
| | | | | | | | | |
| | | | c | | d | | | |
And the ways
| nodes | oneway |
@@ -411,15 +381,13 @@ Feature: Car - Turn restrictions
@except
Scenario: Car - two only_ restrictions share same to-way
Given the node map
"""
e f
a
c x d
y
b
"""
| | | e | | | | f | | |
| | | | | a | | | | |
| | | | | | | | | |
| | | c | | x | | d | | |
| | | | | y | | | | |
| | | | | | | | | |
| | | | | b | | | | |
And the ways
| nodes | oneway |
@@ -447,15 +415,13 @@ Feature: Car - Turn restrictions
@except
Scenario: Car - two only_ restrictions share same from-way
Given the node map
"""
e f
a
c x d
y
b
"""
| | | e | | | | f | | |
| | | | | a | | | | |
| | | | | | | | | |
| | | c | | x | | d | | |
| | | | | y | | | | |
| | | | | | | | | |
| | | | | b | | | | |
And the ways
| nodes | oneway |
@@ -483,11 +449,9 @@ Feature: Car - Turn restrictions
@specific
Scenario: Car - Ignore unrecognized restriction
Given the node map
"""
n
w j e
s
"""
| | n | |
| w | j | e |
| | s | |
And the ways
| nodes | oneway |
+2 -3
View File
@@ -9,6 +9,5 @@ Feature: Car - Surfaces
| highway | service | forw | backw |
| service | alley | 5 km/h +-1 | 5 km/h +-1 |
| service | emergency_access | | |
| service | driveway | 5 km/h +-1 | 5 km/h +-1 |
| service | drive-through | 5 km/h +-1 | 5 km/h +-1 |
| service | parking | 5 km/h +-1 | 5 km/h +-1 |
| service | driveway | 15 km/h +-1| 15 km/h +-1 |
+3 -5
View File
@@ -6,11 +6,9 @@ Feature: Car - Handle ferryshuttle train routes
Scenario: Car - Use a ferry route
Given the node map
"""
a b c
d
e f g h
"""
| a | b | c | | | |
| | | d | | | |
| | | e | f | g | h |
And the ways
| nodes | highway | route | bicycle |
+15 -28
View File
@@ -7,31 +7,18 @@ Feature: Car - speeds
Scenario: Car - speed of various way types
Then routability should be
| highway | oneway | bothw |
| motorway | no | 71 km/h |
| motorway_link | no | 36 km/h |
| trunk | no | 68 km/h |
| trunk_link | no | 31 km/h |
| primary | no | 52 km/h |
| primary_link | no | 23 km/h |
| secondary | no | 44 km/h |
| secondary_link | no | 19 km/h |
| tertiary | no | 31 km/h |
| tertiary_link | no | 16 km/h |
| unclassified | no | 19 km/h |
| residential | no | 19 km/h |
| living_street | no | 8 km/h |
| service | no | 11 km/h |
# Alternating oneways have to take average waiting time into account.
Scenario: Car - scaled speeds for oneway=alternating
Then routability should be
| highway | oneway | junction | forw | backw | # |
| tertiary | | | 31 km/h | 31 km/h | |
| tertiary | alternating | | 12 km/h +- 1 | 12 km/h +- 1 | |
| motorway | | | 71 km/h | | implied oneway |
| motorway | alternating | | 28 km/h +- 1 | | implied oneway |
| motorway | reversible | | | | unroutable |
| primary | | roundabout | 52 km/h | | implied oneway |
| primary | alternating | roundabout | 20 km/h +- 1 | | implied oneway |
| primary | reversible | roundabout | | | unroutable |
| highway | oneway | bothw |
| motorway | no | 82 km/h |
| motorway_link | no | 47 km/h |
| trunk | no | 79 km/h +- 1 |
| trunk_link | no | 43 km/h +- 1 |
| primary | no | 63 km/h +- 1 |
| primary_link | no | 34 km/h |
| secondary | no | 54 km/h +- 1 |
| secondary_link | no | 31 km/h |
| tertiary | no | 43 km/h |
| tertiary_link | no | 26 km/h |
| unclassified | no | 31 km/h |
| residential | no | 31 km/h |
| living_street | no | 18 km/h |
| service | no | 23 km/h |
-109
View File
@@ -1,109 +0,0 @@
@routing @basic @car
Feature: Basic Routing
Background:
Given the profile "car"
Given a grid size of 500 meters
@smallest
Scenario: Summaries when routing on a simple network
Given the node map
"""
b f
c d g
a e
"""
And the ways
| nodes | name |
| acb | road |
| de | 1 st |
| cd | |
| dg | blvd |
| df | street |
When I route I should get
| waypoints | route | summary |
| a,e | road,,1 st,1 st | road, 1 st |
# The via node `d` belongs to `cd`, `de`, `df`, `dg` and depending on the edge
# summary can be "road;street", "road, 1 st;1 st, street", "road, blvd;blvd, street"
# The test must be fixed by #2287
#| a,d,f | road,,,street,street | road;street |
| a,e,f | road,,1 st,1 st,1 st,street,street | road, 1 st;1 st, street |
Scenario: Name Empty
Given the node map
"""
a b c
"""
And the ways
| nodes | name |
| ab | road |
| bc | |
When I route I should get
| waypoints | route | summary |
| a,c | road, | road |
Scenario: Name Empty But Ref
Given the node map
"""
a b c
"""
And the ways
| nodes | name | ref |
| ab | road | |
| bc | | 101 |
When I route I should get
| waypoints | route | summary |
| a,c | road, | road, 101 |
Scenario: Only Refs
Given the node map
"""
a b c
"""
And the ways
| nodes | name | ref |
| ab | | 100 |
| bc | | 101 |
When I route I should get
| waypoints | route | summary |
| a,c | , | 100, 101 |
Scenario: Single Ref
Given the node map
"""
a b c
"""
And the ways
| nodes | name | ref |
| ab | | |
| bc | | 101 |
When I route I should get
| waypoints | route | summary |
| a,c | ,, | 101 |
Scenario: Nothing
Given the node map
"""
a b c
"""
And the ways
| nodes | name |
| ab | |
| bc | |
When I route I should get
| waypoints | route | summary |
| a,c | , | |
+50 -49
View File
@@ -4,7 +4,7 @@ Feature: Car - Surfaces
Background:
Given the profile "car"
Scenario: Car - Routability of tracktype tags
Scenario: Car - Routeability of tracktype tags
Then routability should be
| highway | tracktype | bothw |
| trunk | grade1 | x |
@@ -26,8 +26,8 @@ Feature: Car - Surfaces
| trunk | very_horrible | x |
| trunk | impassable | |
| trunk | nonsense | x |
Scenario: Car - Routability of surface tags
Scenario: Car - Routabiliy of surface tags
Then routability should be
| highway | surface | bothw |
| trunk | asphalt | x |
@@ -64,64 +64,64 @@ Feature: Car - Surfaces
Scenario: Car - Surface should reduce speed
Then routability should be
| highway | oneway | surface | forw | backw |
| motorway | no | | 72 km/h | 72 km/h |
| motorway | no | asphalt | 72 km/h | 72 km/h +-1 |
| motorway | no | concrete | 72 km/h +-1 | 72 km/h +-1 |
| motorway | no | concrete:plates | 72 km/h +-1 | 72 km/h +-1 |
| motorway | no | concrete:lanes | 72 km/h +-1 | 72 km/h +-1 |
| motorway | no | paved | 72 km/h +-1 | 72 km/h +-1 |
| motorway | no | cement | 64 km/h +-1 | 64 km/h +-1 |
| motorway | no | compacted | 64 km/h +-1 | 64 km/h +-1 |
| motorway | no | fine_gravel | 64 km/h +-1 | 64 km/h +-1 |
| motorway | no | paving_stones | 48 km/h +-1 | 48 km/h +-1 |
| motorway | no | metal | 48 km/h +-1 | 48 km/h +-1 |
| motorway | no | bricks | 48 km/h +-1 | 48 km/h +-1 |
| motorway | no | grass | 32 km/h +-1 | 32 km/h +-1 |
| motorway | no | wood | 32 km/h +-1 | 32 km/h +-1 |
| motorway | no | sett | 32 km/h +-1 | 32 km/h +-1 |
| motorway | no | grass_paver | 32 km/h +-1 | 32 km/h +-1 |
| motorway | no | gravel | 32 km/h +-1 | 32 km/h +-1 |
| motorway | no | unpaved | 32 km/h +-1 | 32 km/h +-1 |
| motorway | no | ground | 32 km/h +-1 | 32 km/h +-1 |
| motorway | no | dirt | 32 km/h +-1 | 32 km/h +-1 |
| motorway | no | pebblestone | 32 km/h +-1 | 32 km/h +-1 |
| motorway | no | tartan | 32 km/h +-1 | 32 km/h +-1 |
| motorway | no | cobblestone | 24 km/h +-1 | 24 km/h +-1 |
| motorway | no | clay | 24 km/h +-1 | 24 km/h +-1 |
| motorway | no | earth | 16 km/h +-1 | 16 km/h +-1 |
| motorway | no | stone | 16 km/h +-1 | 16 km/h +-1 |
| motorway | no | rocky | 16 km/h +-1 | 16 km/h +-1 |
| motorway | no | sand | 16 km/h +-1 | 16 km/h +-1 |
| motorway | no | | 80 km/h +-1 | 80 km/h +-1 |
| motorway | no | asphalt | 80 km/h +-1 | 80 km/h +-1 |
| motorway | no | concrete | 80 km/h +-1 | 80 km/h +-1 |
| motorway | no | concrete:plates | 80 km/h +-1 | 80 km/h +-1 |
| motorway | no | concrete:lanes | 80 km/h +-1 | 80 km/h +-1 |
| motorway | no | paved | 80 km/h +-1 | 80 km/h +-1 |
| motorway | no | cement | 72 km/h +-1 | 72 km/h +-1 |
| motorway | no | compacted | 72 km/h +-1 | 72 km/h +-1 |
| motorway | no | fine_gravel | 72 km/h +-1 | 72 km/h +-1 |
| motorway | no | paving_stones | 60 km/h +-1 | 60 km/h +-1 |
| motorway | no | metal | 60 km/h +-1 | 60 km/h +-1 |
| motorway | no | bricks | 60 km/h +-1 | 60 km/h +-1 |
| motorway | no | grass | 42 km/h +-1 | 42 km/h +-1 |
| motorway | no | wood | 42 km/h +-1 | 42 km/h +-1 |
| motorway | no | sett | 42 km/h +-1 | 42 km/h +-1 |
| motorway | no | grass_paver | 42 km/h +-1 | 42 km/h +-1 |
| motorway | no | gravel | 42 km/h +-1 | 42 km/h +-1 |
| motorway | no | unpaved | 42 km/h +-1 | 42 km/h +-1 |
| motorway | no | ground | 42 km/h +-1 | 42 km/h +-1 |
| motorway | no | dirt | 42 km/h +-1 | 42 km/h +-1 |
| motorway | no | pebblestone | 42 km/h +-1 | 42 km/h +-1 |
| motorway | no | tartan | 42 km/h +-1 | 42 km/h +-1 |
| motorway | no | cobblestone | 34 km/h +-1 | 34 km/h +-1 |
| motorway | no | clay | 34 km/h +-1 | 34 km/h +-1 |
| motorway | no | earth | 26 km/h +-1 | 26 km/h +-1 |
| motorway | no | stone | 26 km/h +-1 | 26 km/h +-1 |
| motorway | no | rocky | 26 km/h +-1 | 26 km/h +-1 |
| motorway | no | sand | 26 km/h +-1 | 26 km/h +-1 |
Scenario: Car - Tracktypes should reduce speed
Then routability should be
| highway | oneway | tracktype | forw | backw |
| motorway | no | | 72 km/h | 72 km/h |
| motorway | no | grade1 | 48 km/h +-1 | 48 km/h +-1 |
| motorway | no | grade2 | 32 km/h +-1 | 32 km/h +-1 |
| motorway | no | grade3 | 24 km/h +-1 | 24 km/h +-1 |
| motorway | no | grade4 | 20 km/h +-1 | 20 km/h +-1 |
| motorway | no | grade5 | 16 km/h +-1 | 16 km/h +-1 |
| motorway | no | | 80 km/h +-1 | 80 km/h +-1 |
| motorway | no | grade1 | 60 km/h +-1 | 60 km/h +-1 |
| motorway | no | grade2 | 42 km/h +-1 | 42 km/h +-1 |
| motorway | no | grade3 | 34 km/h +-1 | 34 km/h +-1 |
| motorway | no | grade4 | 31 km/h +-1 | 31 km/h +-1 |
| motorway | no | grade5 | 26 km/h +-1 | 26 km/h +-1 |
Scenario: Car - Smoothness should reduce speed
Then routability should be
| highway | oneway | smoothness | forw | backw |
| motorway | no | | 72 km/h | 72 km/h |
| motorway | no | intermediate | 64 km/h | 64 km/h |
| motorway | no | bad | 32 km/h +-1 | 32 km/h +-1 |
| motorway | no | very_bad | 16 km/h +-1 | 16 km/h +-1 |
| motorway | no | horrible | 8 km/h +-1 | 8 km/h +-1 |
| motorway | no | very_horrible | 4 km/h +-1 | 4 km/h +-1 |
| motorway | no | | 80 km/h +-1 | 80 km/h +-1 |
| motorway | no | intermediate | 72 km/h +-1 | 72 km/h +-1 |
| motorway | no | bad | 42 km/h +-1 | 42 km/h +-1 |
| motorway | no | very_bad | 26 km/h +-1 | 26 km/h +-1 |
| motorway | no | horrible | 18 km/h +-1 | 18 km/h +-1 |
| motorway | no | very_horrible | 15 km/h +-1 | 15 km/h +-1 |
Scenario: Car - Combination of surface tags should use lowest speed
Then routability should be
| highway | oneway | tracktype | surface | smoothness | backw | forw |
| motorway | no | | | | 72 km/h | 72 km/h |
| service | no | grade1 | asphalt | excellent | 12 km/h | 12 km/h |
| motorway | no | grade5 | asphalt | excellent | 16 km/h | 16 km/h |
| motorway | no | grade1 | mud | excellent | 8 km/h | 8 km/h |
| motorway | no | grade1 | asphalt | very_horrible | 4 km/h | 4 km/h |
| service | no | grade5 | mud | very_horrible | 4 km/h | 4 km/h |
| motorway | no | | | | 80 km/h | 80 km/h |
| service | no | grade1 | asphalt | excellent | 23 km/h | 23 km/h |
| motorway | no | grade5 | asphalt | excellent | 26 km/h | 26 km/h |
| motorway | no | grade1 | mud | excellent | 18 km/h | 18 km/h |
| motorway | no | grade1 | asphalt | very_horrible | 15 km/h | 15 km/h |
| service | no | grade5 | mud | very_horrible | 15 km/h | 15 km/h |
Scenario: Car - Surfaces should not affect oneway direction
Then routability should be
@@ -138,3 +138,4 @@ Feature: Car - Surfaces
| primary | -1 | grade1 | excellent | asphalt | | x |
| primary | -1 | grade5 | very_bad | mud | | x |
| primary | -1 | nonsense | nonsense | nonsense | | x |
+20 -19
View File
@@ -7,12 +7,12 @@ Feature: Traffic - speeds
Given the node locations
| node | lat | lon |
| a | 0.1 | 0.1 |
| b | 0.05 | 0.1 |
| b | .05 | 0.1 |
| c | 0.0 | 0.1 |
| d | 0.05 | 0.03 |
| e | 0.05 | 0.066 |
| f | 0.075 | 0.066 |
| g | 0.075 | 0.1 |
| d | .05 | .03 |
| e | .05 | .066 |
| f | .075 | .066 |
| g | .075 | 0.1 |
And the ways
| nodes | highway |
| ab | primary |
@@ -25,7 +25,7 @@ Feature: Traffic - speeds
| fb | primary |
Given the profile "testbot"
Given the extract extra arguments "--generate-edge-lookup"
Given the contract extra arguments "--segment-speed-file {speeds_file}"
Given the contract extra arguments "--segment-speed-file speeds.csv"
Given the speed file
"""
1,2,0
@@ -50,12 +50,12 @@ Feature: Traffic - speeds
Given the node locations
| node | lat | lon |
| a | 0.1 | 0.1 |
| b | 0.05 | 0.1 |
| b | .05 | 0.1 |
| c | 0.0 | 0.1 |
| d | 0.05 | 0.03 |
| e | 0.05 | 0.066 |
| f | 0.075 | 0.066 |
| g | 0.075 | 0.1 |
| d | .05 | .03 |
| e | .05 | .066 |
| f | .075 | .066 |
| g | .075 | 0.1 |
| h | 2.075 | 19.1 |
And the ways
| nodes | highway |
@@ -69,7 +69,7 @@ Feature: Traffic - speeds
| fb | primary |
Given the profile "testbot"
Given the extract extra arguments "--generate-edge-lookup"
Given the contract extra arguments "--segment-speed-file {speeds_file}"
Given the contract extra arguments "--segment-speed-file speeds.csv"
Given the speed file
"""
1,2,0
@@ -93,12 +93,12 @@ Feature: Traffic - speeds
Given the node locations
| node | lat | lon |
| a | 0.1 | 0.1 |
| b | 0.05 | 0.1 |
| b | .05 | 0.1 |
| c | 0.0 | 0.1 |
| d | 0.05 | 0.03 |
| e | 0.05 | 0.066 |
| f | 0.075 | 0.066 |
| g | 0.075 | 0.1 |
| d | .05 | .03 |
| e | .05 | .066 |
| f | .075 | .066 |
| g | .075 | 0.1 |
| h | 1.075 | 10.1 |
And the ways
| nodes | highway |
@@ -112,6 +112,7 @@ Feature: Traffic - speeds
| fb | primary |
Given the profile "testbot"
Given the extract extra arguments "--generate-edge-lookup"
Given the contract extra arguments "--segment-speed-file speeds.csv"
Given the speed file
"""
1,2,-10
@@ -122,6 +123,6 @@ Feature: Traffic - speeds
4,1,-5
"""
And the data has been extracted
When I try to run "osrm-contract --segment-speed-file {speeds_file} {processed_file}"
When I run "osrm-contract --segment-speed-file speeds.csv {extracted_base}.osrm"
And stderr should contain "malformed"
And it should exit with an error
And it should exit with code not 0
+26 -50
View File
@@ -3,33 +3,11 @@ Feature: Traffic - turn penalties
Background: Evenly spaced grid with multiple intersections
Given the node map
"""
a b
c d e f g
h i
j k l m n
o p
"""
And the nodes
| node | id |
| a | 1 |
| b | 2 |
| c | 3 |
| d | 4 |
| e | 5 |
| f | 6 |
| g | 7 |
| h | 8 |
| i | 9 |
| j | 10 |
| k | 11 |
| l | 12 |
| m | 13 |
| n | 14 |
| o | 15 |
| p | 16 |
| | a:1 | | b:2 | |
| c:3 | d:4 | e:5 | f:6 | g:7 |
| | h:8 | | i:9 | |
| j:10 | k:11 | l:12 | m:13 | n:14 |
| | o:15 | | p:16 | |
And the ways
| nodes | highway |
| ad | primary |
@@ -53,21 +31,21 @@ Feature: Traffic - turn penalties
Scenario: Weighting not based on turn penalty file
When I route I should get
| from | to | route | speed | time |
| a | h | ad,dhk,dhk | 52 km/h | 14s +-1 |
| a | h | ad,dhk,dhk | 63 km/h | 11.5s +-1 |
# straight
| i | g | fim,fg,fg | 45 km/h | 16s +-1 |
| i | g | fim,fg,fg | 53 km/h | 13.5s +-1 |
# right
| a | e | ad,def,def | 38 km/h | 19s +-1 |
| a | e | ad,def,def | 43 km/h | 16.7s +-1 |
# left
| c | g | cd,def,fg,fg | 52 km/h | 27s +-1 |
| c | g | cd,def,fg,fg | 63 km/h | 23s +-1 |
# double straight
| p | g | mp,fim,fg,fg | 48 km/h | 29s +-1 |
| p | g | mp,fim,fg,fg | 58 km/h | 24.9s +-1 |
# straight-right
| a | l | ad,dhk,klm,klm | 44 km/h | 33s +-1 |
| a | l | ad,dhk,klm,klm | 51 km/h | 28.1s +-1 |
# straight-left
| l | e | klm,dhk,def,def | 45 km/h | 32s +-1 |
| l | e | klm,dhk,def,def | 53 km/h | 27s +-1 |
# double right
| g | n | fg,fim,mn,mn | 38 km/h | 38s +-1 |
| g | n | fg,fim,mn,mn | 43 km/h | 33.4s +-1 |
# double left
Scenario: Weighting based on turn penalty file
@@ -75,35 +53,35 @@ Feature: Traffic - turn penalties
"""
9,6,7,1.8
9,13,14,24.5
8,4,3,35
8,4,3,30
12,11,8,9
8,11,12,23
1,4,5,-0.2
"""
And the contract extra arguments "--turn-penalty-file {penalties_file}"
And the contract extra arguments "--turn-penalty-file penalties.csv"
When I route I should get
| from | to | route | speed | time |
| a | h | ad,dhk,dhk | 52 km/h | 14s +-1 |
| a | h | ad,dhk,dhk | 63 km/h | 11.5s +-1 |
# straight
| i | g | fim,fg,fg | 46 km/h | 15s +-1 |
| i | g | fim,fg,fg | 55 km/h | 13s +-1 |
# right - ifg penalty
| a | e | ad,def,def | 53 km/h | 14s +-1 |
| a | e | ad,def,def | 64 km/h | 11s +-1 |
# left - faster because of negative ade penalty
| c | g | cd,def,fg,fg | 52 km/h | 27s +-1 |
| c | g | cd,def,fg,fg | 63 km/h | 23s +-1 |
# double straight
| p | g | mp,fim,fg,fg | 49 km/h | 29s +-1 |
| p | g | mp,fim,fg,fg | 59 km/h | 24.5s +-1 |
# straight-right - ifg penalty
| a | l | ad,def,fim,klm,klm | 48 km/h | 45s +-1 |
| a | l | ad,def,fim,klm,klm | 57 km/h | 38.2s +-1 |
# was straight-left - forced around by hkl penalty
| l | e | klm,fim,def,def | 38 km/h | 38s +-1 |
| l | e | klm,fim,def,def | 43 km/h | 33.4s +-1 |
# double right - forced left by lkh penalty
| g | n | fg,fim,mn,mn | 25 km/h | 57s +-1 |
| g | n | fg,fim,mn,mn | 27 km/h | 52.6s +-1 |
# double left - imn penalty
| j | c | jk,klm,fim,def,cd,cd | 44 km/h | 65.8s +-1 |
| j | c | jk,klm,fim,def,cd,cd | 51 km/h | 56.2s +-1 |
# double left - hdc penalty ever so slightly higher than imn; forces all the way around
Scenario: Too-negative penalty clamps, but does not fail
Given the contract extra arguments "--turn-penalty-file {penalties_file}"
Given the contract extra arguments "--turn-penalty-file penalties.csv"
And the profile "testbot"
And the turn penalty file
"""
@@ -111,9 +89,7 @@ Feature: Traffic - turn penalties
"""
When I route I should get
| from | to | route | time |
# The target point `d` can be in `ad`, `cd`, `deh` and `dhk`
# The test must be fixed by #2287
#| a | d | ad,ad | 10s +-1 |
| a | d | ad,ad | 10s +-1 |
| a | e | ad,def,def | 10s +-1 |
| b | f | bf,bf | 10s +-1 |
| b | g | bf,fg,fg | 20s +-1 |
-8
View File
@@ -95,11 +95,3 @@ Feature: Foot - Access tags on ways
| footway | | no | | x |
| motorway | | | yes | |
| footway | | | no | x |
Scenario: Foot - Bridleways when access is explicit
Then routability should be
| highway | horse | bicycle | foot | bothw |
| bridleway | | | yes | x |
| bridleway | | yes | | |
| bridleway | designated | | | |
| bridleway | | | | |
+11 -19
View File
@@ -7,11 +7,9 @@ Feature: Foot - Squares and other areas
@square
Scenario: Foot - Route along edge of a squares
Given the node map
"""
x
a b
d c
"""
| x | |
| a | b |
| d | c |
And the ways
| nodes | area | highway |
@@ -32,11 +30,9 @@ Feature: Foot - Squares and other areas
@building
Scenario: Foot - Don't route on buildings
Given the node map
"""
x
a b
d c
"""
| x | |
| a | b |
| d | c |
And the ways
| nodes | highway | area | building | access |
@@ -57,11 +53,9 @@ Feature: Foot - Squares and other areas
@parking
Scenario: Foot - parking areas
Given the node map
"""
e f
x a b y
d c
"""
| e | | | f |
| x | a | b | y |
| | d | c | |
And the ways
| nodes | highway | amenity |
@@ -86,10 +80,8 @@ Feature: Foot - Squares and other areas
@train @platform
Scenario: Foot - railway platforms
Given the node map
"""
x a b y
d c
"""
| x | a | b | y |
| | d | c | |
And the ways
| nodes | highway | railway |
+9 -15
View File
@@ -6,11 +6,9 @@ Feature: Foot - Handle ferry routes
Scenario: Foot - Ferry route
Given the node map
"""
a b c
d
e f g
"""
| a | b | c | | |
| | | d | | |
| | | e | f | g |
And the ways
| nodes | highway | route | foot |
@@ -31,12 +29,10 @@ Feature: Foot - Handle ferry routes
Scenario: Foot - Ferry duration, single node
Given the node map
"""
a b c d
e f
g h
i j
"""
| a | b | c | d |
| | | e | f |
| | | g | h |
| | | i | j |
And the ways
| nodes | highway | route | foot | duration |
@@ -52,10 +48,8 @@ Feature: Foot - Handle ferry routes
Scenario: Foot - Ferry duration, multiple nodes
Given the node map
"""
x y
a b c d
"""
| x | | | | | y |
| | a | b | c | d | |
And the ways
| nodes | highway | route | foot | duration |
+11 -11
View File
@@ -6,14 +6,14 @@ Background: Use specific speeds
Scenario: Foot - Ignore maxspeed
Then routability should be
| highway | maxspeed | bothw |
| residential | | 145 s ~10% |
| residential | 1 | 145 s ~10% |
| residential | 100 | 145 s ~10% |
| residential | 1 | 145 s ~10% |
| residential | 1mph | 145 s ~10% |
| residential | 1 mph | 145 s ~10% |
| residential | 1unknown | 145 s ~10% |
| residential | 1 unknown | 145 s ~10% |
| residential | none | 145 s ~10% |
| residential | signals | 145 s ~10% |
| highway | maxspeed | bothw |
| residential | | 145s ~10% |
| residential | 1 | 145s ~10% |
| residential | 100 | 145s ~10% |
| residential | 1 | 145s ~10% |
| residential | 1mph | 145s ~10% |
| residential | 1 mph | 145s ~10% |
| residential | 1unknown | 145s ~10% |
| residential | 1 unknown | 145s ~10% |
| residential | none | 145s ~10% |
| residential | signals | 145s ~10% |
+6 -10
View File
@@ -6,10 +6,8 @@ Feature: Foot - Street names in instructions
Scenario: Foot - A named street
Given the node map
"""
a b
c
"""
| a | b |
| | c |
And the ways
| nodes | name | ref |
@@ -21,11 +19,9 @@ Feature: Foot - Street names in instructions
| a | c | My Way,Your Way,Your Way |
@unnamed
Scenario: Foot - No longer use way type to describe unnamed ways, see #3231
Scenario: Foot - Use way type to describe unnamed ways
Given the node map
"""
a b c d
"""
| a | b | c | d |
And the ways
| nodes | highway | name |
@@ -33,5 +29,5 @@ Feature: Foot - Street names in instructions
| bcd | track | |
When I route I should get
| from | to | route |
| a | d | , |
| from | to | route |
| a | d | {highway:footway},{highway:track},{highway:track} |
+7 -13
View File
@@ -6,37 +6,31 @@ Feature: Foot - Way ref
Scenario: Foot - Way with both name and ref
Given the node map
"""
a b
"""
| a | b |
And the ways
| nodes | name | ref |
| ab | Utopia Drive | E7 |
When I route I should get
| from | to | route | ref |
| a | b | Utopia Drive,Utopia Drive | E7,E7 |
| from | to | route |
| a | b | Utopia Drive,Utopia Drive |
Scenario: Foot - Way with only ref
Given the node map
"""
a b
"""
| a | b |
And the ways
| nodes | name | ref |
| ab | | E7 |
When I route I should get
| from | to | route | ref |
| a | b | , | E7,E7 |
| from | to | route |
| a | b | {highway:primary},{highway:primary} |
Scenario: Foot - Way with only name
Given the node map
"""
a b
"""
| a | b |
And the ways
| nodes | name |
+36 -58
View File
@@ -8,11 +8,9 @@ Feature: Foot - Turn restrictions
@no_turning
Scenario: Foot - No left turn
Given the node map
"""
n
w j e
s
"""
| | n | |
| w | j | e |
| | s | |
And the ways
| nodes | oneway |
@@ -34,11 +32,9 @@ Feature: Foot - Turn restrictions
@no_turning
Scenario: Foot - No right turn
Given the node map
"""
n
w j e
s
"""
| | n | |
| w | j | e |
| | s | |
And the ways
| nodes | oneway |
@@ -60,11 +56,9 @@ Feature: Foot - Turn restrictions
@no_turning
Scenario: Foot - No u-turn
Given the node map
"""
n
w j e
s
"""
| | n | |
| w | j | e |
| | s | |
And the ways
| nodes | oneway |
@@ -86,11 +80,9 @@ Feature: Foot - Turn restrictions
@no_turning
Scenario: Foot - Handle any no_* relation
Given the node map
"""
n
w j e
s
"""
| | n | |
| w | j | e |
| | s | |
And the ways
| nodes | oneway |
@@ -112,11 +104,9 @@ Feature: Foot - Turn restrictions
@only_turning
Scenario: Foot - Only left turn
Given the node map
"""
n
w j e
s
"""
| | n | |
| w | j | e |
| | s | |
And the ways
| nodes | oneway |
@@ -138,11 +128,9 @@ Feature: Foot - Turn restrictions
@only_turning
Scenario: Foot - Only right turn
Given the node map
"""
n
w j e
s
"""
| | n | |
| w | j | e |
| | s | |
And the ways
| nodes | oneway |
@@ -164,11 +152,9 @@ Feature: Foot - Turn restrictions
@only_turning
Scenario: Foot - Only straight on
Given the node map
"""
n
w j e
s
"""
| | n | |
| w | j | e |
| | s | |
And the ways
| nodes | oneway |
@@ -190,11 +176,9 @@ Feature: Foot - Turn restrictions
@no_turning
Scenario: Foot - Handle any only_* restriction
Given the node map
"""
n
w j e
s
"""
| | n | |
| w | j | e |
| | s | |
And the ways
| nodes | oneway |
@@ -216,11 +200,9 @@ Feature: Foot - Turn restrictions
@except
Scenario: Foot - Except tag and on no_ restrictions
Given the node map
"""
b x c
a j d
s
"""
| b | x | c |
| a | j | d |
| | s | |
And the ways
| nodes | oneway |
@@ -248,11 +230,9 @@ Feature: Foot - Turn restrictions
@except
Scenario: Foot - Except tag and on only_ restrictions
Given the node map
"""
a b
j
s
"""
| a | | b |
| | j | |
| | s | |
And the ways
| nodes | oneway |
@@ -272,14 +252,12 @@ Feature: Foot - Turn restrictions
@except
Scenario: Foot - Multiple except tag values
Given the node map
"""
s j a
b
c
d
e
f
"""
| s | j | a |
| | | b |
| | | c |
| | | d |
| | | e |
| | | f |
And the ways
| nodes | oneway |
+5 -7
View File
@@ -10,13 +10,11 @@ Feature: Roundabout Instructions
# make sense when you're going the opposite way around the roundabout.
Given the node map
"""
v
d
s a c u
b
t
"""
| | | v | | |
| | | d | | |
| s | a | | c | u |
| | | b | | |
| | | t | | |
And the ways
| nodes | junction |
+7 -7
View File
@@ -6,10 +6,10 @@ Feature: Foot - Surfaces
Scenario: Foot - Slow surfaces
Then routability should be
| highway | surface | bothw |
| footway | | 145 s ~10% |
| footway | fine_gravel | 193 s ~10% |
| footway | gravel | 193 s ~10% |
| footway | pebblestone | 193 s ~10% |
| footway | mud | 289 s ~10% |
| footway | sand | 289 s ~10% |
| highway | surface | bothw |
| footway | | 145s ~10% |
| footway | fine_gravel | 193s ~10% |
| footway | gravel | 193s ~10% |
| footway | pebblestone | 193s ~10% |
| footway | mud | 289s ~10% |
| footway | sand | 289s ~10% |
+62 -83
View File
@@ -5,19 +5,13 @@ Feature: Turn Lane Guidance
Given the profile "car"
Given a grid size of 3 meters
@sliproads
Scenario: Separate Turn Lanes
Given the node map
"""
e
.
a ... b ..... c . g
` .
`... d
.
f
"""
| | | | | | | | e | |
| a | | | b | | | | c | g |
| | | | | | | | d | |
| | | | | | | | f | |
And the ways
| nodes | turn:lanes:forward | name | oneway |
@@ -43,14 +37,10 @@ Feature: Turn Lane Guidance
@sliproads
Scenario: Separate Turn Lanes
Given the node map
"""
e
a . . b . . . c g
` .
` .
` d
f
"""
| | | | | | | | e | |
| a | | | b | | | | c | g |
| | | | | | | | d | |
| | | | | | | | f | |
And the ways
| nodes | turn:lanes:forward | name | oneway |
@@ -73,23 +63,20 @@ Feature: Turn Lane Guidance
| a,g | in,straight,straight | depart,new name straight,arrive | ,left:false straight:true right:false, |
| a,f | in,cross,cross | depart,turn right,arrive | ,left:false straight:false right:true, |
@sliproads
Scenario: Separate Turn Lanes Next to other turns
Given the node map
"""
. e
a . . b . . . c g
. ` .
. ` .
. d
. f
.
.
.
.
i . . h . . . j
"""
| | | | | | | | e | |
| a | | | b | | | | c | g |
| | | | | | | | d | |
| | | | | | | | f | |
| | | | | | | | | |
| | | | | | | | | |
| | | | | | | | | |
| | | | | | | | | |
| | | | | | | | | |
| | | | | | | | | |
| i | | | h | | | | j | |
And the ways
| nodes | turn:lanes:forward | name | oneway |
@@ -116,20 +103,17 @@ Feature: Turn Lane Guidance
| a,j | in,turn,other,other | depart,turn right,turn left,arrive | ,,left:true right:false, |
| a,i | in,turn,other,other | depart,turn right,turn right,arrive | ,,left:false right:true, |
@todo @2654 @none
@todo @bug @2654 @none
#https://github.com/Project-OSRM/osrm-backend/issues/2645
#http://www.openstreetmap.org/export#map=19/52.56054/13.32152
Scenario: Kurt-Schuhmacher-Damm
Given the node map
"""
g f
j h e
a b c
i d
"""
| | | | g | | f |
| | | | | | |
| j | | | h | | e |
| | | | | | |
| a | | | b | | c |
| | | | i | | d |
And the ways
| nodes | name | highway | oneway | turn:lanes |
@@ -147,30 +131,28 @@ Feature: Turn Lane Guidance
| a,f | ,ksd,ksd | depart,turn left,arrive | ,left:true none:true right:false, |
| a,i | ,ksd,ksd | depart,turn right,arrive | ,left:false none:true right:true, |
@todo @2650 @sliproads
@todo @bug @2650 @sliproads
#market and haight in SF, restricted turn
#http://www.openstreetmap.org/#map=19/37.77308/-122.42238
Scenario: Market/Haight without Through Street
Given the node map
"""
g j
f
e
d
a b c
l h i
"""
| | | | | | | | g | j | |
| | | | | | | | | | |
| | | | | | | | | | |
| | | | | | | | | | |
| | | | | | | | | | |
| | | | | | | | | | |
| | | | | | | | | | f |
| | | | | | | | | e | |
| | | | | | | | d | | |
| a | | | | | | b | c | | |
| | | | | | | | | | |
| | | | | | | | | | |
| | | | | | | | | | |
| | | | | | | | | | |
| | | | | | | | | | |
| | | | | | | | | | |
| | | | | l | | | h | i | |
And the ways
| nodes | name | highway | oneway | turn:lanes:forward |
@@ -195,30 +177,28 @@ Feature: Turn Lane Guidance
| a,j | ghough,market,market | depart,turn left,arrive | ,none:true straight:false straight:false straight:false, |
| a,f | ghough,ghough,ghough | depart,continue slight left,arrive | ,none:true straight:true straight:false straight:false, |
@todo @2650 @sliproads
@todo @2650 @bug @sliproads
#market and haight in SF, unrestricted
#http://www.openstreetmap.org/#map=19/37.77308/-122.42238
Scenario: Market/Haight without Through Street
Given the node map
"""
g j
f
e
d
a b c
l h i
"""
| | | | | | | | g | j | |
| | | | | | | | | | |
| | | | | | | | | | |
| | | | | | | | | | |
| | | | | | | | | | |
| | | | | | | | | | |
| | | | | | | | | | f |
| | | | | | | | | e | |
| | | | | | | | d | | |
| a | | | | | | b | c | | |
| | | | | | | | | | |
| | | | | | | | | | |
| | | | | | | | | | |
| | | | | | | | | | |
| | | | | | | | | | |
| | | | | | | | | | |
| | | | | l | | | h | i | |
And the ways
| nodes | name | highway | oneway | turn:lanes:forward |
@@ -239,7 +219,6 @@ Feature: Turn Lane Guidance
| a,j | ghough,market,market | depart,turn left,arrive | ,none:true straight:false straight:false straight:false, |
| a,f | ghough,ghough,ghough | depart,continue slight left,arrive | ,none:true straight:true straight:false straight:false, |
Scenario: Check sliproad handler loop's exit condition, Issue #2896
# http://www.openstreetmap.org/way/198481519
Given the node locations
+185 -253
View File
@@ -8,13 +8,11 @@ Feature: Turn Lane Guidance
@anticipate
Scenario: Anticipate Lane Change for subsequent multi-lane intersections
Given the node map
"""
a b x
|
c d z
| |
y e
"""
| a | | b | | x | | |
| | | | | | | |
| | | c | | d | | z |
| | | | | | | |
| | | y | | e | | |
And the ways
| nodes | turn:lanes:forward |
@@ -34,13 +32,11 @@ Feature: Turn Lane Guidance
@anticipate
Scenario: Anticipate Lane Change for quick same direction turns, staying on the same street
Given the node map
"""
a b x
|
c
|
e d y
"""
| a | | b | x |
| | | | |
| | | c | |
| | | | |
| e | | d | y |
And the ways
| nodes | turn:lanes:forward | turn:lanes:backward | name |
@@ -59,13 +55,11 @@ Feature: Turn Lane Guidance
@anticipate
Scenario: Anticipate Lane Change for quick same direction turns, changing between streets
Given the node map
"""
a b x
|
c
|
e d y
"""
| a | | b | x |
| | | | |
| | | c | |
| | | | |
| e | | d | y |
And the ways
| nodes | turn:lanes:forward | turn:lanes:backward | name |
@@ -85,13 +79,9 @@ Feature: Turn Lane Guidance
@anticipate
Scenario: Anticipate Lane Change for quick turns during a merge
Given the node map
"""
a
\
x b c y
|
d
"""
| a | | | | |
| x | b | | c | y |
| | | | | d |
And the ways
| nodes | turn:lanes:forward | name | highway | oneway |
@@ -110,12 +100,9 @@ Feature: Turn Lane Guidance
Scenario: Schoenefelder Kreuz
# https://www.openstreetmap.org/way/264306388#map=16/52.3202/13.5568
Given the node map
"""
a b x
\ / i
c d
\ j
"""
| a | b | x | | | i |
| | | c | d | | |
| | | | | | j |
And the ways
| nodes | turn:lanes:forward | lanes | highway | oneway | name |
@@ -136,11 +123,8 @@ Feature: Turn Lane Guidance
Scenario: Kreuz Oranienburg
# https://www.openstreetmap.org/way/4484007#map=18/52.70439/13.20269
Given the node map
"""
i a
' . . '
j c b x
"""
| i | | | | | a |
| j | | c | b | | x |
And the ways
| nodes | turn:lanes:forward | lanes | highway | oneway | name |
@@ -159,13 +143,11 @@ Feature: Turn Lane Guidance
@anticipate
Scenario: Lane anticipation for fan-in
Given the node map
"""
a b x
|
c d z
| |
y e
"""
| a | | b | | x | | |
| | | | | | | |
| | | c | | d | | z |
| | | | | | | |
| | | y | | e | | |
And the ways
| nodes | turn:lanes:forward | name |
@@ -184,13 +166,11 @@ Feature: Turn Lane Guidance
@anticipate
Scenario: Lane anticipation for fan-out
Given the node map
"""
a b x
|
c d z
| |
y e
"""
| a | | b | | x | | |
| | | | | | | |
| | | c | | d | | z |
| | | | | | | |
| | | y | | e | | |
And the ways
| nodes | turn:lanes:forward | name |
@@ -209,13 +189,11 @@ Feature: Turn Lane Guidance
@anticipate
Scenario: Lane anticipation for fan-in followed by fan-out
Given the node map
"""
a b x
|
c d z
| |
y e
"""
| a | | b | | x | | |
| | | | | | | |
| | | c | | d | | z |
| | | | | | | |
| | | y | | e | | |
And the ways
| nodes | turn:lanes:forward | name |
@@ -234,13 +212,11 @@ Feature: Turn Lane Guidance
@anticipate
Scenario: Lane anticipation for fan-out followed by fan-in
Given the node map
"""
a b x
|
c d z
| |
y e
"""
| a | | b | | x | | |
| | | | | | | |
| | | c | | d | | z |
| | | | | | | |
| | | y | | e | | |
And the ways
| nodes | turn:lanes:forward | name |
@@ -259,15 +235,13 @@ Feature: Turn Lane Guidance
@anticipate
Scenario: Lane anticipation for multiple hops with same number of lanes
Given the node map
"""
a b x
|
c d z
| |
y e f
|
w
"""
| a | | b | | x | | |
| | | | | | | |
| | | c | | d | | z |
| | | | | | | |
| | | y | | e | | f |
| | | | | | | |
| | | | | w | | |
And the ways
| nodes | turn:lanes:forward | name |
@@ -288,13 +262,11 @@ Feature: Turn Lane Guidance
@anticipate
Scenario: Anticipate Lanes for through, through with lanes
Given the node map
"""
f g
/ /
a b c d e
\ \
h i
"""
| | | | f | g | |
| | | | | | |
| a | b | c | d | | e |
| | | | | | |
| | | | h | i | |
And the ways
| nodes | turn:lanes:forward | name |
@@ -314,13 +286,11 @@ Feature: Turn Lane Guidance
@anticipate
Scenario: Anticipate Lanes for through and collapse multiple use lanes
Given the node map
"""
e f g
/ / /
a b c d
\ \ \
h i j
"""
| | | e | f | g |
| | | | | |
| a | b | c | d | |
| | | | | |
| | | h | i | j |
And the ways
| nodes | turn:lanes:forward | name |
@@ -342,13 +312,11 @@ Feature: Turn Lane Guidance
@anticipate
Scenario: Anticipate Lanes for through followed by left/right
Given the node map
"""
f g d
/ / /
a b c x
\ \ \
h i e
"""
| | | f | g | |
| | | | | d |
| a | b | c | x | |
| | | | | e |
| | | h | i | |
And the ways
| nodes | turn:lanes:forward | name |
@@ -370,11 +338,11 @@ Feature: Turn Lane Guidance
@anticipate
Scenario: Anticipate Lanes for through with turn before / after
Given the node map
"""
c g l
b d e h - i
a f j
"""
| a | b | c |
| | d | |
| f | e | g |
| | h | |
| j | i | l |
And the ways
| nodes | turn:lanes:forward | name | oneway |
@@ -402,33 +370,27 @@ Feature: Turn Lane Guidance
@anticipate
Scenario: Anticipate Lanes for turns with through before and after
Given a grid size of 10 meters
Given the node map
"""
a b q s h i
\ / /
e f g
/ \ \
c d r t j k
"""
| a | b | q | | s | h | i |
| | | e | f | g | | |
| c | d | r | | t | j | k |
And the ways
| nodes | turn:lanes:forward | name | highway | oneway |
| ab | through\|right\|right\|right | top | primary | yes |
| be | | top | primary | yes |
| bq | | off | primary | yes |
| ef | left\|through\|through\|through\|through\|right | main | primary | yes |
| fg | left\|left\|right\|right | main | primary | yes |
| fs | | off | primary | yes |
| ft | | off | primary | yes |
| gh | | top | primary | yes |
| hi | | top | primary | yes |
| cd | left\|left\|left\|through | bot | primary | yes |
| de | | bot | primary | yes |
| dr | | off | primary | yes |
| gj | | bot | primary | yes |
| jk | | bot | primary | yes |
| nodes | turn:lanes:forward | name |
| ab | through\|right\|right\|right | top |
| be | | top |
| bq | | off |
| ef | left\|through\|through\|through\|through\|right | main |
| fg | left\|left\|right\|right | main |
| fs | | off |
| ft | | off |
| gh | | top |
| hi | | top |
| cd | left\|left\|left\|through | bot |
| de | | bot |
| dr | | off |
| gj | | bot |
| jk | | bot |
When I route I should get
| waypoints | route | turns | lanes |
@@ -440,15 +402,10 @@ Feature: Turn Lane Guidance
@anticipate
Scenario: Anticipate Lanes for turn between throughs
Given the node map
"""
q
|
a b c s
| |
r d t
|
e
"""
| | q | | |
| a | b | c | s |
| | r | d | t |
| | | e | |
And the ways
| nodes | turn:lanes:forward | name |
@@ -465,18 +422,16 @@ Feature: Turn Lane Guidance
| waypoints | route | turns | lanes |
| a,e | main,main,main,main | depart,use lane straight,continue right,arrive | ,left:false straight:false straight:false straight:false straight:true straight:true right:false,straight:false straight:false right:false right:true right:true, |
@anticipate @todo @2661
@anticipate @todo @bug @2661
Scenario: Anticipate with lanes in roundabout: roundabouts as the unit of anticipation
Given the node map
"""
/e\
a b d f
\c/
|
/g\
k h j l
\i/
"""
| | | e | | |
| a | b | | d | f |
| | | c | | |
| | | | | |
| | | g | | |
| k | h | | j | l |
| | | i | | |
And the ways
| nodes | turn:lanes:forward | highway | junction | # |
@@ -504,11 +459,9 @@ Feature: Turn Lane Guidance
@anticipate @todo
Scenario: Roundabout with lanes only tagged on exit
Given the node map
"""
/e\
a b d f
\c/
"""
| | | e | | |
| a | b | | d | f |
| | | c | | |
And the ways
| nodes | turn:lanes:forward | highway | junction |
@@ -526,16 +479,13 @@ Feature: Turn Lane Guidance
@anticipate
Scenario: No Lanes for Roundabouts, see #2626
Given the node map
"""
a
|
/b\
c g h
/| |
| d f
|/ \e/ \
x \ y
"""
| | | a | | |
| | | b | | |
| | c | | g | h |
| | | | | |
| | d | | f | |
| | | e | | |
| x | | | | y |
And the ways
| nodes | turn:lanes:forward | highway | junction |
@@ -559,11 +509,9 @@ Feature: Turn Lane Guidance
@anticipate
Scenario: No Lanes for Roundabouts, see #2626
Given the node map
"""
/a\
x b d y
\c/
"""
| | | a | | |
| x | b | | d | y |
| | | c | | |
And the ways
| nodes | turn:lanes:forward | highway | junction | name |
@@ -582,21 +530,15 @@ Feature: Turn Lane Guidance
@anticipate
Scenario: No Lanes for Roundabouts, see #2626
Given the profile file "car" extended with
"""
properties.left_hand_driving = true
"""
Given the profile "lhs"
And the node map
"""
a
|
/b\
h c g
| |\
d f |
/ \e/ \|
x / y
"""
| | | a | | |
| | | b | | |
| h | c | | g | |
| | | | | |
| | d | | f | |
| | | e | | |
| x | | | | y |
And the ways
| nodes | turn:lanes:forward | highway | junction |
@@ -620,45 +562,43 @@ Feature: Turn Lane Guidance
@anticipate
Scenario: No Lanes for Roundabouts, see #2626
Given the node map
"""
/a\
x b d y
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
|
|
|
|
|
|
|
|
|
|
|
|
c
"""
| | | a | | |
| x | b | | d | y |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | c | | |
And the ways
| nodes | turn:lanes:forward | highway | junction | name |
@@ -678,15 +618,12 @@ Feature: Turn Lane Guidance
@anticipate @todo @2032
Scenario: No Lanes for Roundabouts, see #2626
Given the node map
"""
a b x
|
/c\
d f g z
\e/ |
| h
y
"""
| a | b | | | x |
| | c | | | |
| d | | f | g | z |
| | e | | h | |
| | | | | |
| | y | | | |
And the ways
| nodes | turn:lanes:forward | highway | junction | name |
@@ -709,11 +646,10 @@ Feature: Turn Lane Guidance
@anticipate
Scenario: Anticipate none tags
Given the node map
"""
c g l
b d e h - i
a f j
"""
| a | b | c |
| | d | |
| f | e | g |
| | h | |
And the ways
| nodes | turn:lanes:forward | highway | name |
@@ -731,18 +667,16 @@ Feature: Turn Lane Guidance
| a,f | abc,bdeh,feg,feg | depart,turn right,turn right,arrive | ,none:false none:false right:false right:true,left:false none:false none:false right:true, |
@anticipate
Scenario: Triple Right keeping Left
Scenario: Tripple Right keeping Left
Given the node map
"""
a b i
|
f e g |
| |
| |
j d c
|
h
"""
| a | | | | b | | i |
| | | | | | | |
| | | | | | | |
| f | | e | | | | g |
| | | | | | | |
| | | | | | | |
| | j | d | | c | | |
| | | | | h | | |
And the ways
| nodes | turn:lanes:forward | highway | name |
@@ -760,16 +694,14 @@ Feature: Turn Lane Guidance
@anticipate
Scenario: Tripple Left keeping Right
Given the node map
"""
i b a
|
| g e f
| |
| |
c d j
|
h
"""
| i | | b | | | | a |
| | | | | | | |
| | | | | | | |
| g | | | | e | | f |
| | | | | | | |
| | | | | | | |
| | | c | | d | j | |
| | | h | | | | |
And the ways
| nodes | turn:lanes:forward | highway | name |
@@ -1,33 +0,0 @@
@routing @bicycle @mode
Feature: Bike - Mode flag
Background:
Given the profile "bicycle"
Given a grid size of 5 meters
Scenario: Bike Sliproad
Given the node map
"""
i
a b - c-d
` |
g-e-h
|
|
f
"""
And the nodes
| node | highway |
| c | traffic_signals |
And the ways
| nodes | highway | name | oneway:bicycle |
| abcd | cycleway | street | |
| eb | path | | yes |
| icef | tertiary | road | |
| geh | secondary | street | |
When I route I should get
| waypoints | route | turns |
| a,f | street,,road,road | depart,turn right,turn right,arrive |
@@ -1,139 +0,0 @@
@routing @guidance @staggered-intersections
Feature: Staggered Intersections
Background:
Given the profile "bicycle"
Given a grid size of 1 meters
# Note the one meter grid size: staggered intersections make zig-zags of a couple of meters only
Scenario: Staggered Intersection - pushing in the middle
Given the node map
"""
j
a b c
d
e f g
h
i
"""
And the ways
| nodes | highway | name | oneway |
| abc | residential | Oak St | |
| efg | residential | Oak St | |
| ihedcj | residential | Cedar Dr | yes |
When I route I should get
| waypoints | route | turns | modes |
| a,g | Oak St,Cedar Dr,Oak St,Oak St | depart,turn right,turn left,arrive | cycling,pushing bike,cycling,cycling |
| g,a | Oak St,Oak St | depart,arrive | cycling,cycling |
Scenario: Staggered Intersection - pushing at start
Given the node map
"""
j
a b c
d
e f g
h
i
"""
And the ways
| nodes | highway | name | oneway |
| cba | residential | Oak St | yes |
| efg | residential | Oak St | |
| ihedcj | residential | Cedar Dr | |
When I route I should get
| waypoints | route | turns | modes |
| a,g | Oak St,Cedar Dr,Oak St,Oak St | depart,turn right,turn left,arrive | pushing bike,cycling,cycling,cycling |
| g,a | Oak St,Oak St | depart,arrive | cycling,cycling |
Scenario: Staggered Intersection - pushing at end
Given the node map
"""
j
a b c
d
e f g
h
i
"""
And the ways
| nodes | highway | name | oneway |
| abc | residential | Oak St | |
| gfe | residential | Oak St | yes |
| ihedcj | residential | Cedar Dr | |
When I route I should get
| waypoints | route | turns | modes |
| a,g | Oak St,Cedar Dr,Oak St,Oak St | depart,turn right,turn left,arrive | cycling,cycling,pushing bike,pushing bike |
| g,a | Oak St,Oak St | depart,arrive | cycling,cycling |
Scenario: Staggered Intersection - pushing at start and end
Given the node map
"""
j
a b c
d
e f g
h
i
"""
And the ways
| nodes | highway | name | oneway |
| cba | residential | Oak St | yes |
| gfe | residential | Oak St | yes |
| ihedcj | residential | Cedar Dr | |
When I route I should get
| waypoints | route | turns | modes |
| a,g | Oak St,Cedar Dr,Oak St,Oak St | depart,turn right,turn left,arrive | pushing bike,cycling,pushing bike,pushing bike |
| g,a | Oak St,Oak St | depart,arrive | cycling,cycling |
Scenario: Staggered Intersection - pushing at start and end
Given the node map
"""
j
a b c
d
e f g
h
i
"""
And the ways
| nodes | highway | name |
| cba | pedestrian | Oak St |
| gfe | pedestrian | Oak St |
| ihedcj | residential | Cedar Dr |
When I route I should get
| waypoints | route | turns | modes |
| a,g | Oak St,Cedar Dr,Oak St,Oak St | depart,turn right,turn left,arrive | pushing bike,cycling,pushing bike,pushing bike |
| g,a | Oak St,Cedar Dr,Oak St,Oak St | depart,turn right,turn left,arrive | pushing bike,cycling,pushing bike,pushing bike |
Scenario: Staggered Intersection - control, all cycling on staggered intersection
Given the node map
"""
j
a b c
d
e f g
h
i
"""
And the ways
| nodes | highway | name |
| cba | residential | Oak St |
| gfe | residential | Oak St |
| ihedcj | residential | Cedar Dr |
When I route I should get
| waypoints | route | turns | modes |
| a,g | Oak St,Oak St | depart,arrive | cycling,cycling |
| g,a | Oak St,Oak St | depart,arrive | cycling,cycling |
+42 -54
View File
@@ -6,9 +6,7 @@ Feature: Car - Guidance - Bridges and Tunnels
Scenario: Simple Bridge
Given the node map
"""
a b c d
"""
| a | b | c | d |
And the ways
| nodes | highway | bridge | name |
@@ -22,11 +20,9 @@ Feature: Car - Guidance - Bridges and Tunnels
Scenario: Bridge with Immediate Turn
Given the node map
"""
d
a b c
e
"""
| | | | d |
| a | | b | c |
| | | | e |
And the ways
| nodes | highway | bridge | name |
@@ -35,19 +31,17 @@ Feature: Car - Guidance - Bridges and Tunnels
| dce | primary | | Nebenstraße |
When I route I should get
| from | to | route | turns |
| a | d | Hauptstraße,Nebenstraße,Nebenstraße | depart,turn left,arrive |
| a | e | Hauptstraße,Nebenstraße,Nebenstraße | depart,turn right,arrive |
| e | a | Nebenstraße,Hauptstraßenbrücke,Hauptstraße | depart,turn left,arrive |
| d | a | Nebenstraße,Hauptstraßenbrücke,Hauptstraße | depart,turn right,arrive |
| from | to | route | turns |
| a | d | Hauptstraße,Nebenstraße,Nebenstraße | depart,end of road left,arrive |
| a | e | Hauptstraße,Nebenstraße,Nebenstraße | depart,end of road right,arrive |
| e | a | Nebenstraße,Hauptstraßenbrücke,Hauptstraße | depart,turn left,arrive |
| d | a | Nebenstraße,Hauptstraßenbrücke,Hauptstraße | depart,turn right,arrive |
Scenario: Bridge with Immediate Turn Front and Back
Given the node map
"""
f d
a b c
g e
"""
| f | | | d |
| a | | b | c |
| g | | | e |
And the ways
| nodes | highway | bridge | name |
@@ -57,21 +51,19 @@ Feature: Car - Guidance - Bridges and Tunnels
| gaf | primary | | Anderestraße |
When I route I should get
| from | to | route | turns |
| f | d | Anderestraße,Hauptstraße,Nebenstraße,Nebenstraße | depart,turn left,turn left,arrive |
| f | e | Anderestraße,Hauptstraße,Nebenstraße,Nebenstraße | depart,turn left,turn right,arrive |
| g | d | Anderestraße,Hauptstraße,Nebenstraße,Nebenstraße | depart,turn right,turn left,arrive |
| g | e | Anderestraße,Hauptstraße,Nebenstraße,Nebenstraße | depart,turn right,turn right,arrive |
| e | f | Nebenstraße,Hauptstraßenbrücke,Anderestraße,Anderestraße | depart,turn left,turn right,arrive |
| e | g | Nebenstraße,Hauptstraßenbrücke,Anderestraße,Anderestraße | depart,turn left,turn left,arrive |
| d | f | Nebenstraße,Hauptstraßenbrücke,Anderestraße,Anderestraße | depart,turn right,turn right,arrive |
| d | g | Nebenstraße,Hauptstraßenbrücke,Anderestraße,Anderestraße | depart,turn right,turn left,arrive |
| from | to | route | turns |
| f | d | Anderestraße,Hauptstraße,Nebenstraße,Nebenstraße | depart,turn left,end of road left,arrive |
| f | e | Anderestraße,Hauptstraße,Nebenstraße,Nebenstraße | depart,turn left,end of road right,arrive |
| g | d | Anderestraße,Hauptstraße,Nebenstraße,Nebenstraße | depart,turn right,end of road left,arrive |
| g | e | Anderestraße,Hauptstraße,Nebenstraße,Nebenstraße | depart,turn right,end of road right,arrive |
| e | f | Nebenstraße,Hauptstraßenbrücke,Anderestraße,Anderestraße | depart,turn left,end of road right,arrive |
| e | g | Nebenstraße,Hauptstraßenbrücke,Anderestraße,Anderestraße | depart,turn left,end of road left,arrive |
| d | f | Nebenstraße,Hauptstraßenbrücke,Anderestraße,Anderestraße | depart,turn right,end of road right,arrive |
| d | g | Nebenstraße,Hauptstraßenbrücke,Anderestraße,Anderestraße | depart,turn right,end of road left,arrive |
Scenario: Simple Tunnel
Given the node map
"""
a b c d
"""
| a | b | c | d |
And the ways
| nodes | highway | tunnel | name |
@@ -85,11 +77,9 @@ Feature: Car - Guidance - Bridges and Tunnels
Scenario: Tunnel with Immediate Turn
Given the node map
"""
d
a b c
e
"""
| | | | d |
| a | | b | c |
| | | | e |
And the ways
| nodes | highway | tunnel | name |
@@ -98,19 +88,17 @@ Feature: Car - Guidance - Bridges and Tunnels
| dce | primary | | Nebenstraße |
When I route I should get
| from | to | route | turns |
| a | d | Hauptstraße,Nebenstraße,Nebenstraße | depart,turn left,arrive |
| a | e | Hauptstraße,Nebenstraße,Nebenstraße | depart,turn right,arrive |
| e | a | Nebenstraße,Hauptstraßentunnel,Hauptstraße | depart,turn left,arrive |
| d | a | Nebenstraße,Hauptstraßentunnel,Hauptstraße | depart,turn right,arrive |
| from | to | route | turns |
| a | d | Hauptstraße,Nebenstraße,Nebenstraße | depart,end of road left,arrive |
| a | e | Hauptstraße,Nebenstraße,Nebenstraße | depart,end of road right,arrive |
| e | a | Nebenstraße,Hauptstraßentunnel,Hauptstraße | depart,turn left,arrive |
| d | a | Nebenstraße,Hauptstraßentunnel,Hauptstraße | depart,turn right,arrive |
Scenario: Tunnel with Immediate Turn Front and Back
Given the node map
"""
f d
a b c
g e
"""
| f | | | d |
| a | | b | c |
| g | | | e |
And the ways
| nodes | highway | bridge | name |
@@ -120,13 +108,13 @@ Feature: Car - Guidance - Bridges and Tunnels
| gaf | primary | | Anderestraße |
When I route I should get
| from | to | route | turns |
| f | d | Anderestraße,Hauptstraße,Nebenstraße,Nebenstraße | depart,turn left,turn left,arrive |
| f | e | Anderestraße,Hauptstraße,Nebenstraße,Nebenstraße | depart,turn left,turn right,arrive |
| g | d | Anderestraße,Hauptstraße,Nebenstraße,Nebenstraße | depart,turn right,turn left,arrive |
| g | e | Anderestraße,Hauptstraße,Nebenstraße,Nebenstraße | depart,turn right,turn right,arrive |
| e | f | Nebenstraße,Hauptstraßentunnel,Anderestraße,Anderestraße | depart,turn left,turn right,arrive |
| e | g | Nebenstraße,Hauptstraßentunnel,Anderestraße,Anderestraße | depart,turn left,turn left,arrive |
| d | f | Nebenstraße,Hauptstraßentunnel,Anderestraße,Anderestraße | depart,turn right,turn right,arrive |
| d | g | Nebenstraße,Hauptstraßentunnel,Anderestraße,Anderestraße | depart,turn right,turn left,arrive |
| from | to | route | turns |
| f | d | Anderestraße,Hauptstraße,Nebenstraße,Nebenstraße | depart,turn left,end of road left,arrive |
| f | e | Anderestraße,Hauptstraße,Nebenstraße,Nebenstraße | depart,turn left,end of road right,arrive |
| g | d | Anderestraße,Hauptstraße,Nebenstraße,Nebenstraße | depart,turn right,end of road left,arrive |
| g | e | Anderestraße,Hauptstraße,Nebenstraße,Nebenstraße | depart,turn right,end of road right,arrive |
| e | f | Nebenstraße,Hauptstraßentunnel,Anderestraße,Anderestraße | depart,turn left,end of road right,arrive |
| e | g | Nebenstraße,Hauptstraßentunnel,Anderestraße,Anderestraße | depart,turn left,end of road left,arrive |
| d | f | Nebenstraße,Hauptstraßentunnel,Anderestraße,Anderestraße | depart,turn right,end of road right,arrive |
| d | g | Nebenstraße,Hauptstraßentunnel,Anderestraße,Anderestraße | depart,turn right,end of road left,arrive |
+7 -24
View File
@@ -8,15 +8,13 @@ Feature: Features related to bugs
@2852
Scenario: Loop
Given the node map
"""
a 1 g b
e f
2
d h c
"""
| a | 1 | | g | | | b |
| | | | | | | |
| | | | | | | |
| e | | | | | | f |
| | | | | | | |
| | | | | | | 2 |
| d | | | h | | | c |
And the ways
| nodes | name | oneway |
@@ -35,18 +33,3 @@ Feature: Features related to bugs
When I route I should get
| waypoints | route | turns |
| 1,2 | top,right,right | depart,new name right,arrive |
@3156
Scenario: Incorrect lanes tag
Given the node map
"""
a b
"""
And the ways
| nodes | lanes |
| ab | 1; 2 |
And the data has been saved to disk
When I try to run "osrm-extract {osm_file} --profile {profile_file}"
Then it should exit successfully
-282
View File
@@ -1,282 +0,0 @@
@routing @guidance
Feature: Rotary
Background:
Given the profile "car"
Given a grid size of 30 meters
Scenario: Enter and Exit
Given the node map
"""
a
b
h g c d
e
f
"""
And the ways
| nodes | junction |
| ab | |
| cd | |
| ef | |
| gh | |
| bgecb | circular |
When I route I should get
| waypoints | route | turns |
| a,d | ab,cd,cd | depart,bgecb-exit-3,arrive |
| a,f | ab,ef,ef | depart,bgecb-exit-2,arrive |
| a,h | ab,gh,gh | depart,bgecb-exit-1,arrive |
| d,f | cd,ef,ef | depart,bgecb-exit-3,arrive |
| d,h | cd,gh,gh | depart,bgecb-exit-2,arrive |
| d,a | cd,ab,ab | depart,bgecb-exit-1,arrive |
| f,h | ef,gh,gh | depart,bgecb-exit-3,arrive |
| f,a | ef,ab,ab | depart,bgecb-exit-2,arrive |
| f,d | ef,cd,cd | depart,bgecb-exit-1,arrive |
| h,a | gh,ab,ab | depart,bgecb-exit-3,arrive |
| h,d | gh,cd,cd | depart,bgecb-exit-2,arrive |
| h,f | gh,ef,ef | depart,bgecb-exit-1,arrive |
Scenario: Only Enter
Given the node map
"""
a
b
d c g h
e
f
"""
And the ways
| nodes | junction |
| ab | |
| cd | |
| ef | |
| gh | |
| bcegb | circular |
When I route I should get
| waypoints | route | turns |
| a,c | ab,bcegb,bcegb | depart,bcegb-exit-undefined,arrive |
| a,e | ab,bcegb,bcegb | depart,bcegb-exit-undefined,arrive |
| a,g | ab,bcegb,bcegb | depart,bcegb-exit-undefined,arrive |
| d,e | cd,bcegb,bcegb | depart,bcegb-exit-undefined,arrive |
| d,g | cd,bcegb,bcegb | depart,bcegb-exit-undefined,arrive |
| d,b | cd,bcegb,bcegb | depart,bcegb-exit-undefined,arrive |
| f,g | ef,bcegb,bcegb | depart,bcegb-exit-undefined,arrive |
| f,b | ef,bcegb,bcegb | depart,bcegb-exit-undefined,arrive |
| f,c | ef,bcegb,bcegb | depart,bcegb-exit-undefined,arrive |
| h,b | gh,bcegb,bcegb | depart,bcegb-exit-undefined,arrive |
| h,c | gh,bcegb,bcegb | depart,bcegb-exit-undefined,arrive |
| h,e | gh,bcegb,bcegb | depart,bcegb-exit-undefined,arrive |
Scenario: Only Exit
Given the node map
"""
a
b
d c g h
e
f
"""
And the ways
| nodes | junction |
| ab | |
| cd | |
| ef | |
| gh | |
| bcegb | circular |
When I route I should get
| waypoints | route | turns |
| b,d | bcegb,cd,cd | depart,bcegb-exit-1,arrive |
| b,f | bcegb,ef,ef | depart,bcegb-exit-2,arrive |
| b,h | bcegb,gh,gh | depart,bcegb-exit-3,arrive |
| c,f | bcegb,ef,ef | depart,bcegb-exit-1,arrive |
| c,h | bcegb,gh,gh | depart,bcegb-exit-2,arrive |
| c,a | bcegb,ab,ab | depart,bcegb-exit-3,arrive |
| e,h | bcegb,gh,gh | depart,bcegb-exit-1,arrive |
| e,a | bcegb,ab,ab | depart,bcegb-exit-2,arrive |
| e,d | bcegb,cd,cd | depart,bcegb-exit-3,arrive |
| g,a | bcegb,ab,ab | depart,bcegb-exit-1,arrive |
| g,d | bcegb,cd,cd | depart,bcegb-exit-2,arrive |
| g,f | bcegb,ef,ef | depart,bcegb-exit-3,arrive |
#phantom node snapping can result in a full round-trip here, therefore we cannot test b->a and the other direct exits
Scenario: Drive Around
Given the node map
"""
a
b
d c g h
e
f
"""
And the ways
| nodes | junction |
| ab | |
| cd | |
| ef | |
| gh | |
| bcegb | circular |
When I route I should get
| waypoints | route | turns |
| b,c | bcegb,bcegb | depart,arrive |
| b,e | bcegb,bcegb | depart,arrive |
| b,g | bcegb,bcegb | depart,arrive |
| c,e | bcegb,bcegb | depart,arrive |
| c,g | bcegb,bcegb | depart,arrive |
| c,b | bcegb,bcegb | depart,arrive |
| e,g | bcegb,bcegb | depart,arrive |
| e,b | bcegb,bcegb | depart,arrive |
| e,c | bcegb,bcegb | depart,arrive |
| g,b | bcegb,bcegb | depart,arrive |
| g,c | bcegb,bcegb | depart,arrive |
| g,e | bcegb,bcegb | depart,arrive |
#needs to be adjusted when name-discovery works for entrys
Scenario: Mixed Entry and Exit
Given the node map
"""
c a
j b f
k e
l h d
g i
"""
And the ways
| nodes | junction | oneway |
| abc | | yes |
| def | | yes |
| ghi | | yes |
| jkl | | yes |
| bkheb | circular | yes |
When I route I should get
| waypoints | route | turns |
| a,c | abc,abc,abc | depart,rotary-exit-1,arrive |
| a,l | abc,jkl,jkl | depart,bkheb-exit-2,arrive |
| a,i | abc,ghi,ghi | depart,bkheb-exit-3,arrive |
| a,f | abc,def,def | depart,bkheb-exit-4,arrive |
| d,f | def,def,def | depart,rotary-exit-1,arrive |
| d,c | def,abc,abc | depart,bkheb-exit-2,arrive |
| d,l | def,jkl,jkl | depart,bkheb-exit-3,arrive |
| d,i | def,ghi,ghi | depart,bkheb-exit-4,arrive |
| g,i | ghi,ghi,ghi | depart,rotary-exit-1,arrive |
| g,f | ghi,def,def | depart,bkheb-exit-2,arrive |
| g,c | ghi,abc,abc | depart,bkheb-exit-3,arrive |
| g,l | ghi,jkl,jkl | depart,bkheb-exit-4,arrive |
| j,l | jkl,jkl,jkl | depart,rotary-exit-1,arrive |
| j,i | jkl,ghi,ghi | depart,bkheb-exit-2,arrive |
| j,f | jkl,def,def | depart,bkheb-exit-3,arrive |
| j,c | jkl,abc,abc | depart,bkheb-exit-4,arrive |
Scenario: Collinear in X,Y
Given the node map
"""
a
b
c d f
e
"""
And the ways
| nodes | junction |
| ab | |
| bcdb | circular |
| ce | |
| df | |
When I route I should get
| waypoints | route | turns |
| a,e | ab,ce,ce | depart,bcdb-exit-1,arrive |
| a,f | ab,df,df | depart,bcdb-exit-2,arrive |
Scenario: Collinear in X,Y
Given the node map
"""
a
d
b c f
e
"""
And the ways
| nodes | junction |
| ad | |
| bcdb | circular |
| be | |
| cf | |
When I route I should get
| waypoints | route | turns |
| a,e | ad,be,be | depart,bcdb-exit-1,arrive |
| a,f | ad,cf,cf | depart,bcdb-exit-2,arrive |
Scenario: Collinear in X,Y
Given the node map
"""
a
c
d b f
e
"""
And the ways
| nodes | junction |
| ac | |
| bcdb | circular |
| de | |
| bf | |
When I route I should get
| waypoints | route | turns |
| a,e | ac,de,de | depart,bcdb-exit-1,arrive |
| a,f | ac,bf,bf | depart,bcdb-exit-2,arrive |
Scenario: Collinear in X,Y
Given the node map
"""
f
d c e
b
a
"""
And the ways
| nodes | junction |
| ab | |
| bcdb | circular |
| ce | |
| df | |
When I route I should get
| waypoints | route | turns |
| a,e | ab,ce,ce | depart,bcdb-exit-1,arrive |
| a,f | ab,df,df | depart,bcdb-exit-2,arrive |
Scenario: Collinear in X,Y
Given the node map
"""
f
d c e
b
a
"""
And the ways
| nodes | junction |
| ab | |
| bcdb | circular |
| ce | |
| df | |
When I route I should get
| waypoints | route | turns |
| a,e | ab,ce,ce | depart,bcdb-exit-1,arrive |
| a,f | ab,df,df | depart,bcdb-exit-2,arrive |
+11 -50
View File
@@ -8,19 +8,17 @@ Feature: Collapse
@reverse
Scenario: Collapse U-Turn Triangle Intersection
Given the node map
"""
g f e d
a b c
"""
| g | | f | | e | | d |
| | | | | | | |
| | | | | | | |
| a | | | b | | | c |
And the ways
| nodes | highway | name | oneway |
| abc | primary | road | yes |
| defg | primary | road | yes |
| fb | primary_link | | yes |
| be | primary_link | | yes |
| fb | primary_link | | |
| be | primary_link | | |
When I route I should get
| waypoints | route | turns |
@@ -30,13 +28,11 @@ Feature: Collapse
@reverse @traffic-signals
Scenario: Collapse U-Turn Triangle Intersection
Given the node map
"""
g f j e d
h i
a b c
"""
| g | | f | | j | | e | | d |
| | | | | | | | | |
| | | | h | | i | | | |
| | | | | | | | | |
| a | | | | b | | | | c |
And the ways
| nodes | highway | name | oneway |
@@ -55,38 +51,3 @@ Feature: Collapse
| waypoints | route | turns |
| a,g | road,road,road | depart,continue uturn,arrive |
| d,c | road,road,road | depart,continue uturn,arrive |
Scenario: Forking before a turn (forky)
Given the node map
"""
g
.
c
a . . b .'
`d.
f e
"""
# note: check clooapse.feature for a similar test case where we do not
# classify the situation as Sliproad and therefore keep the fork inst.
And the ways
| nodes | name | oneway | highway |
| ab | road | yes | primary |
| bd | road | yes | primary |
| bc | road | yes | primary |
| de | road | yes | primary |
| fd | cross | no | secondary |
| dc | cross | no | secondary |
| cg | cross | no | secondary |
And the relations
| type | way:from | way:to | node:via | restriction |
| restriction | bd | dc | d | no_left_turn |
| restriction | bc | dc | c | no_right_turn |
When I route I should get
| waypoints | route | turns |
| a,g | road,cross,cross | depart,turn left,arrive |
| a,e | road,road,road | depart,continue right,arrive |
# We should discuss whether the next item should be collapsed to depart,turn right,arrive.
| a,f | road,road,cross,cross | depart,continue slight right,turn right,arrive |
+206 -394
View File
@@ -7,14 +7,12 @@ Feature: Collapse
Scenario: Segregated Intersection, Cross Belonging to Single Street
Given the node map
"""
i l
d c b a
e f g h
j k
"""
| | | i | l | | |
| | | | | | |
| d | | c | b | | a |
| e | | f | g | | h |
| | | | | | |
| | | j | k | | |
And the ways
| nodes | highway | name | oneway |
@@ -52,14 +50,12 @@ Feature: Collapse
Scenario: Segregated Intersection, Cross Belonging to Correct Street
Given the node map
"""
i l
d c b a
e f g h
j k
"""
| | | i | l | | |
| | | | | | |
| d | | c | b | | a |
| e | | f | g | | h |
| | | | | | |
| | | j | k | | |
And the ways
| nodes | highway | name | oneway |
@@ -97,14 +93,12 @@ Feature: Collapse
Scenario: Segregated Intersection, Cross Belonging to Mixed Streets
Given the node map
"""
i l
d c b a
e f g h
j k
"""
| | | i | l | | |
| | | | | | |
| d | | c | b | | a |
| e | | f | g | | h |
| | | | | | |
| | | j | k | | |
And the ways
| nodes | highway | name | oneway |
@@ -142,28 +136,26 @@ Feature: Collapse
Scenario: Partly Segregated Intersection, Two Segregated Roads
Given the node map
"""
n m
g h
c b a
d e f
j i
k l
"""
| | n | | m | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | g | | h | |
| | | | | |
| | | | | |
| c | | b | | a |
| d | | e | | f |
| | | | | |
| | | | | |
| | j | | i | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | k | | l | |
And the ways
| nodes | highway | name | oneway |
@@ -196,24 +188,22 @@ Feature: Collapse
Scenario: Partly Segregated Intersection, Two Segregated Roads, Intersection belongs to Second
Given the node map
"""
n m
g h
c b a
d e f
j i
k l
"""
| | n | | m | |
| | | | | |
| | | | | |
| | | | | |
| | g | | h | |
| | | | | |
| | | | | |
| c | | b | | a |
| d | | e | | f |
| | | | | |
| | | | | |
| | j | | i | |
| | | | | |
| | | | | |
| | | | | |
| | k | | l | |
And the ways
| nodes | highway | name | oneway |
@@ -246,14 +236,12 @@ Feature: Collapse
Scenario: Segregated Intersection, Cross Belonging to Mixed Streets - Slight Angles
Given the node map
"""
i l
a
c b h
d f g
e
j k
"""
| | | i | l | | |
| | | | | | a |
| | | c | b | | h |
| d | | f | g | | |
| e | | | | | |
| | | j | k | | |
And the ways
| nodes | highway | name | oneway |
@@ -291,14 +279,12 @@ Feature: Collapse
Scenario: Segregated Intersection, Cross Belonging to Mixed Streets - Slight Angles (2)
Given the node map
"""
i l
c b
d f g a
e h
j k
"""
| | | i | l | | |
| | | | | | |
| | | c | b | | |
| d | | f | g | | a |
| e | | | | | h |
| | | j | k | | |
And the ways
| nodes | highway | name | oneway |
@@ -336,14 +322,12 @@ Feature: Collapse
Scenario: Entering a segregated road
Given the node map
"""
a f g
| | . '
b-e '
/ /
/ /
c d
"""
| | a | f | | | | g |
| | | | | | | |
| | b | e | | | | |
| | | | | | | |
| | | | | | | |
| c | d | | | | | |
And the ways
| nodes | highway | name | oneway |
@@ -353,21 +337,19 @@ Feature: Collapse
| ge | primary | second | no |
When I route I should get
| waypoints | route | turns |
| d,c | first,first,first | depart,continue uturn,arrive |
| a,f | first,first,first | depart,continue uturn,arrive |
| a,g | first,second,second | depart,turn left,arrive |
| d,g | first,second,second | depart,turn right,arrive |
| g,f | second,first,first | depart,turn right,arrive |
| g,c | second,first,first | depart,turn left,arrive |
| waypoints | route | turns |
| d,c | first,first,first | depart,continue uturn,arrive |
| a,f | first,first,first | depart,continue uturn,arrive |
| a,g | first,second,second | depart,turn left,arrive |
| d,g | first,second,second | depart,turn right,arrive |
| g,f | second,first,first | depart,turn right,arrive |
| g,c | second,first,first | depart,end of road left,arrive |
Scenario: Do not collapse turning roads
Given the node map
"""
e
c d
a b f
"""
| | | e | | |
| | | c | | d |
| a | | b | f | |
And the ways
| nodes | highway | name | oneway |
@@ -385,9 +367,7 @@ Feature: Collapse
Scenario: Bridge on unnamed road
Given the node map
"""
a b c d
"""
| a | b | | | | c | d |
And the ways
| nodes | highway | name |
@@ -401,11 +381,9 @@ Feature: Collapse
Scenario: Crossing Bridge into Segregated Turn
Given the node map
"""
f
i h g e
a b c d
"""
| | | | | | f |
| i | h | | | g | e |
| a | b | | | c | d |
And the ways
| nodes | highway | oneway | name |
@@ -424,11 +402,9 @@ Feature: Collapse
Scenario: Pankenbruecke
Given the node map
"""
j h i
b c d e f g
k a
"""
| j | | | | h | | | | | | i | | | | | | |
| | | | | | | b | c | d | e | f | | | | | | g |
| k | | | | a | | | | | | | | | | | | |
And the ways
| nodes | highway | name | oneway |
@@ -445,13 +421,11 @@ Feature: Collapse
Scenario: Close Turns - Don't Collapse
Given the node map
"""
g d
e b c f
a h
"""
| | g | d | |
| | | | |
| e | b | c | f |
| | | | |
| | a | h | |
And the ways
| nodes | highway | name |
@@ -469,10 +443,8 @@ Feature: Collapse
Scenario: No Name During Turns
Given the node map
"""
a b
c d
"""
| a | b | |
| | c | d |
And the ways
| nodes | highway | name |
@@ -484,29 +456,10 @@ Feature: Collapse
| waypoints | route | turns |
| a,d | road,road | depart,arrive |
Scenario: No Name During Turns - Ferry
Given the node map
"""
a b
c d
"""
And the ways
| nodes | highway | name | route |
| ab | tertiary | road | |
| bc | tertiary | | ferry |
| cd | tertiary | road | |
When I route I should get
| waypoints | route | turns |
| a,d | road,,road,road | depart,notification right,notification left,arrive |
Scenario: No Name During Turns, Random Oneway
Given the node map
"""
a b
c d
"""
| a | b | |
| | c | d |
And the ways
| nodes | highway | name | oneway |
@@ -520,11 +473,9 @@ Feature: Collapse
Scenario: Pulled Back Turn
Given the node map
"""
d
a b c
e
"""
| | | d |
| a | b | c |
| | e | |
And the ways
| nodes | highway | name |
@@ -539,10 +490,8 @@ Feature: Collapse
Scenario: No Name During Turns, keep important turns
Given the node map
"""
a b e
c d
"""
| a | b | e |
| | c | d |
And the ways
| nodes | highway | name |
@@ -557,19 +506,17 @@ Feature: Collapse
Scenario: Segregated Intersection into Slight Turn
Given the node map
"""
h
a
g
b f
c
e
d
j i
"""
| h | | | | | | |
| a | | | | | | |
| | | | | | | |
| | | g | | | | |
| | | b | f | | | |
| | | | c | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | e |
| | | | | | | d |
| | | j | i | | | |
And the ways
| nodes | highway | name | oneway |
@@ -586,22 +533,20 @@ Feature: Collapse
Scenario: Segregated Intersection into Very Slight Turn
Given the node map
"""
h
a
g
b
f
c
e
d
j i
"""
| h | | | | | | |
| a | | | | | | |
| | | | | | | |
| | | | | | | |
| | | g | | | | |
| | | b | | | | |
| | | | f | | | |
| | | | c | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | e |
| | | | | | | d |
| | | j | i | | | |
And the ways
| nodes | highway | name | oneway |
@@ -618,11 +563,9 @@ Feature: Collapse
Scenario: Don't collapse everything to u-turn / too wide
Given the node map
"""
a b e
d c f
"""
| a | | b | | e |
| | | | | |
| d | | c | | f |
And the ways
| nodes | highway | name |
@@ -637,14 +580,12 @@ Feature: Collapse
Scenario: Forking before a turn
Given the node map
"""
g
c
a b d e
f
"""
| | | | g | |
| | | | | |
| | | | c | |
| a | | b | d | e |
| | | | | |
| | | | f | |
And the ways
| nodes | name | oneway | highway |
@@ -652,14 +593,12 @@ Feature: Collapse
| bd | road | yes | primary |
| bc | road | yes | primary |
| de | road | yes | primary |
| fd | cross | no | secondary |
| dc | cross | no | secondary |
| cg | cross | no | secondary |
| fdcg | cross | no | secondary |
And the relations
| type | way:from | way:to | node:via | restriction |
| restriction | bd | dc | d | no_left_turn |
| restriction | bc | dc | c | no_right_turn |
| restriction | bd | fdcg | d | no_left_turn |
| restriction | bc | fdcg | c | no_right_turn |
When I route I should get
| waypoints | route | turns |
@@ -668,14 +607,12 @@ Feature: Collapse
Scenario: Forking before a turn (narrow)
Given the node map
"""
g
c
a b d e
f
"""
| | | | g | |
| | | | | |
| | | | c | |
| a | b | | d | e |
| | | | | |
| | | | f | |
And the ways
| nodes | name | oneway | highway |
@@ -699,17 +636,12 @@ Feature: Collapse
Scenario: Forking before a turn (forky)
Given the node map
"""
g
.
c
a . . b .'
` d.
f e
"""
# as it is right now we don't classify this as a sliproad,
# check collapse-detail.feature for a similar test case
# which removes the fork here due to it being a Sliproad.
| | | | | | g | | |
| | | | | | | | |
| | | | | | c | | |
| a | | | b | | | | |
| | | | | | | d | |
| | | | | | | f | e |
And the ways
| nodes | name | oneway | highway |
@@ -727,18 +659,17 @@ Feature: Collapse
| restriction | bc | dc | c | no_right_turn |
When I route I should get
| waypoints | route | turns |
| a,g | road,cross,cross | depart,fork left,arrive |
| a,e | road,road,road | depart,fork slight right,arrive |
| a,f | road,road,cross,cross | depart,fork slight right,turn right,arrive |
| waypoints | route | turns |
| a,g | road,cross,cross | depart,turn left,arrive |
| a,e | road,road,road | depart,continue slight right,arrive |
# We should discuss whether the next item should be collapsed to depart,turn right,arrive.
| a,f | road,road,cross,cross | depart,continue slight right,turn right,arrive |
Scenario: On-Off on Highway
Given the node map
"""
f
a b c d
e
"""
| f | | | |
| a | b | c | d |
| | | | e |
And the ways
| nodes | name | highway | oneway |
@@ -756,16 +687,13 @@ Feature: Collapse
@negative @straight
Scenario: Don't collapse going straight if actual turn
Given the node map
"""
e
c |
\ d - - - f
\|
b
|
|
a
"""
| | c | e | | |
| | | d | | f |
| | | | | |
| | | b | | |
| | | | | |
| | | | | |
| | | a | | |
And the ways
| nodes | name | highway |
@@ -774,21 +702,19 @@ Feature: Collapse
| df | right | residential |
When I route I should get
| waypoints | route | turns | locations |
| a,c | main,main | depart,arrive | a,c |
| a,e | main,straight,straight | depart,turn straight,arrive | a,b,e |
| a,f | main,straight,right,right | depart,turn straight,turn right,arrive | a,b,d,f |
| waypoints | route | turns |
| a,c | main,main | depart,arrive |
| a,e | main,straight,straight | depart,turn straight,arrive |
| a,f | main,straight,right,right | depart,turn straight,turn right,arrive |
Scenario: Entering a segregated road
Given the node map
"""
a f
g
b e
c d
"""
| | a | f | | |
| | | | | g |
| | b | e | | |
| | | | | |
| | | | | |
| c | d | | | |
And the ways
| nodes | highway | name | oneway |
@@ -803,14 +729,12 @@ Feature: Collapse
Scenario: Entering a segregated road slight turn
Given the node map
"""
a f
g
b e
c d
"""
| | | a | f | |
| | | | | g |
| | b | e | | |
| | | | | |
| | | | | |
| c | d | | | |
And the ways
| nodes | highway | name | oneway |
@@ -825,13 +749,11 @@ Feature: Collapse
Scenario: Do not collapse UseLane step when lanes change
Given the node map
"""
f g
a b c d e
h i
"""
| | | | f | g | |
| | | | | | |
| a | b | c | d | | e |
| | | | | | |
| | | | h | i | |
And the ways
| nodes | turn:lanes:forward | name |
@@ -850,13 +772,11 @@ Feature: Collapse
Scenario: But _do_ collapse UseLane step when lanes stay the same
Given the node map
"""
f g
a b c d e
h i
"""
| | | | f | g | |
| | | | | | |
| a | b | c | d | | e |
| | | | | | |
| | | | h | i | |
And the ways
| nodes | turn:lanes:forward | name |
@@ -875,12 +795,10 @@ Feature: Collapse
Scenario: Don't collapse different travel modes
Given the node map
"""
g h
a b c e f
d
i j
"""
| g | | | | | | | h | |
| a | b | | c | | | | e | f |
| | | | | | d | | | |
| | | | i | j | | | | |
And the ways
| nodes | highway | route | name |
@@ -900,129 +818,23 @@ Feature: Collapse
Scenario: U-Turn onto a Ferry
Given the node map
"""
i
j e d c h
k g a b f
"""
| | | | | | | i | | |
| j | e | | | | | d | c | h |
| | | | | | | | | |
| | | | | | | | | |
| k | g | | | | | a | b | f |
And the ways
| nodes | highway | route | name | oneway |
| abf | primary | | road | yes |
| bf | primary | | road | yes |
| hcd | primary | | road | yes |
| bc | primary | | | yes |
| di | service | | serv | yes |
| ed | | ferry | ferry | |
| ga | | ferry | ferry | |
| gab | | ferry | ferry | |
| kg | primary | | on | yes |
| ej | primary | | off | yes |
When I route I should get
| waypoints | route | turns |
| k,j | on,ferry,road,road,ferry,off,off | depart,notification straight,notification straight,continue uturn,turn straight,notification straight,arrive |
# http://www.openstreetmap.org/#map=19/37.78090/-122.41251
Scenario: U-Turn onto unnamed-road
Given the node map
"""
d . _ h
' b . _ |
| ' e g
| f '
| 1 '
a '
"""
And the ways
| nodes | highway | turn:lanes | name | oneway |
| ab | secondary | | up | yes |
| gfa | secondary | | | yes |
| dbe | tertiary | | turn | no |
| he | secondary | through\|right | down | yes |
| ef | secondary | | down | yes |
When I route I should get
| waypoints | route | turns |
| a,1 | up,turn,, | depart,turn right,turn sharp right,arrive |
#http://www.openstreetmap.org/#map=19/52.48778/13.30024
Scenario: Hohenzollerdammbrücke
Given a grid size of 10 meters
Given the node map
"""
q s
p o
.. ..
. . . .
j - i - - - h - - - g - f
> k < > l <
a - b - - - c - - - d - e
. . . .
.. ..
m n
t r
"""
And the ways
| nodes | highway | name | oneway |
| ab | secondary | hohe | yes |
| bc | secondary | hohebruecke | yes |
| cd | secondary | hohebruecke | yes |
| bk | secondary | hohebruecke | yes |
| kh | secondary | hohebruecke | yes |
| ki | secondary | hohebruecke | yes |
| ck | secondary | hohebruecke | yes |
| de | secondary | hohe | yes |
| fg | secondary | hohe | yes |
| gh | secondary | hohebruecke | yes |
| hi | secondary | hohebruecke | yes |
| gl | secondary | hohebruecke | yes |
| lc | secondary | hohebruecke | yes |
| hl | secondary | hohebruecke | yes |
| ld | secondary | hohebruecke | yes |
| ij | secondary | hohe | yes |
| bm | motorway_link | a100 | yes |
| cm | motorway_link | a100 | yes |
| nc | motorway_link | a100 | yes |
| nd | motorway_link | a100 | yes |
| go | motorway_link | a100 | yes |
| ho | motorway_link | a100 | yes |
| ph | motorway_link | a100 | yes |
| pi | motorway_link | a100 | yes |
| qp | motorway_link | a100 | yes |
| mt | motorway_link | a100 | yes |
| rn | motorway_link | a100 | yes |
| os | motorway_link | a100 | yes |
And the relations
| type | way:from | way:to | node:via | restriction |
| restriction | ck | kh | k | no_right_turn |
| restriction | bk | ki | k | no_left_turn |
| restriction | hl | lc | l | no_right_turn |
| restriction | gl | ld | l | no_left_turn |
| restriction | bc | cm | c | no_right_turn |
| restriction | bc | ck | c | no_left_turn |
| restriction | nc | cm | c | no_left_turn |
| restriction | nc | cd | c | no_right_turn |
| restriction | lc | ck | c | no_left_turn |
| restriction | lc | cd | c | no_right_turn |
| restriction | gh | ho | h | no_right_turn |
| restriction | gh | hl | h | no_left_turn |
| restriction | kh | hi | h | no_left_turn |
| restriction | kh | hl | h | no_right_turn |
| restriction | ph | ho | h | no_left_turn |
| restriction | ph | hi | h | no_right_turn |
When I route I should get
| waypoints | route | turns | locations |
| a,e | hohe,hohe | depart,arrive | a,e |
| a,s | hohe,a100,a100 | depart,on ramp left,arrive | a,b,s |
| a,t | hohe,a100,a100 | depart,on ramp right,arrive | a,b,t |
| a,j | | | |
| f,j | hohe,hohe | depart,arrive | f,j |
| a,t | hohe,a100,a100 | depart,on ramp right,arrive | a,b,t |
| f,e | | | |
| q,j | a100,hohe,hohe | depart,turn right,arrive | q,p,j |
| q,e | a100,hohebruecke,hohe | depart,turn left,arrive | q,p,e |
| waypoints | route | turns |
| k,j | on,ferry,,ferry,off,off | depart,new name straight,continue uturn,turn straight,new name straight,arrive |
+23 -38
View File
@@ -7,10 +7,8 @@ Feature: Continue Instructions
Scenario: Road turning left
Given the node map
"""
c
a b d
"""
| | | c | |
| a | | b | d |
And the ways
| nodes | highway |
@@ -24,10 +22,8 @@ Feature: Continue Instructions
Scenario: Road turning left and straight
Given the node map
"""
c
a b d
"""
| | | c | |
| a | | b | d |
And the ways
| nodes | highway | name |
@@ -41,11 +37,9 @@ Feature: Continue Instructions
Scenario: Road turning left and straight
Given the node map
"""
c
a b d
e
"""
| | | c | |
| a | | b | d |
| | | e | |
And the ways
| nodes | highway | name |
@@ -61,10 +55,8 @@ Feature: Continue Instructions
Scenario: Road turning right
Given the node map
"""
a b d
c
"""
| a | | b | d |
| | | c | |
And the ways
| nodes | highway |
@@ -78,12 +70,10 @@ Feature: Continue Instructions
Scenario: Road turning slight left
Given the node map
"""
c
a b
d
"""
| | | | | c |
| | | | | |
| a | | b | | |
| | | | d | |
And the ways
| nodes | highway |
@@ -97,12 +87,10 @@ Feature: Continue Instructions
Scenario: Road turning slight right
Given the node map
"""
d
a b
c
"""
| | | | d | |
| a | | b | | |
| | | | | |
| | | | | c |
And the ways
| nodes | highway |
@@ -116,13 +104,11 @@ Feature: Continue Instructions
Scenario: Road Loop
Given the node map
"""
f e
a b g
c d
"""
| | | f | | e |
| | | | | |
| a | | b | g | |
| | | | | |
| | | c | | d |
And the ways
| nodes | highway |
@@ -134,5 +120,4 @@ Feature: Continue Instructions
| a,c | abcdefb,abcdefb,abcdefb | depart,continue right,arrive |
| a,f | abcdefb,abcdefb,abcdefb | depart,continue left,arrive |
| a,d | abcdefb,abcdefb,abcdefb | depart,continue right,arrive |
# continuing right here, since the turn to the left is more expensive
| a,e | abcdefb,abcdefb,abcdefb | depart,continue right,arrive |
| a,e | abcdefb,abcdefb,abcdefb | depart,continue left,arrive |
+149 -618
View File
@@ -7,85 +7,43 @@ Feature: Slipways and Dedicated Turn Lanes
Scenario: Turn Instead of Ramp
Given the node map
"""
e
a b . . c d
`h .
`
1 `
.
f
.
g
"""
| | | | | e | |
| a | b | | | c | d |
| | | | h | | |
| | | | | | |
| | | | 1 | | |
| | | | | | |
| | | | | f | |
| | | | | | |
| | | | | g | |
And the ways
| nodes | highway | name | oneway |
| abc | trunk | first | |
| cd | trunk | first | |
| bhf | trunk_link | | yes |
| cfg | primary | second | yes |
| ec | primary | second | |
| nodes | highway | name |
| abcd | trunk | first |
| bhf | trunk_link | |
| ecfg | primary | second |
And the relations
| type | way:from | way:to | node:via | restriction |
| restriction | abc | cfg | c | no_right_turn |
| restriction | abcd | ecfg | c | no_right_turn |
When I route I should get
| waypoints | route | turns |
| a,g | first,second,second | depart,turn right,arrive |
| a,1 | first,, | depart,turn right,arrive |
Scenario: Turn Instead of Ramp - Max-Speed
Given the node map
"""
e
a-b-----c-------------------------d
`h |
||
1||
`|
f
|
g
"""
And the ways
| nodes | highway | name | maxspeed | oneway |
| abc | trunk | first | 70 | |
| cd | trunk | first | 2 | |
| bhf | trunk_link | | 2 | yes |
| cfg | primary | second | 50 | yes |
| ec | primary | second | 50 | |
And the relations
| type | way:from | way:to | node:via | restriction |
| restriction | abc | cfg | c | no_right_turn |
When I route I should get
| waypoints | route | turns |
| a,g | first,second,second | depart,turn right,arrive |
| a,1 | first,, | depart,turn right,arrive |
| waypoints | route | turns |
| a,g | first,second,second | depart,turn right,arrive |
| a,1 | first,, | depart,turn slight right,arrive |
Scenario: Turn Instead of Ramp
Given the node map
"""
e
a b c d
h
f
g
"""
| | | | | e | |
| a | b | | | c | d |
| | | | h | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | f | |
| | | | | | |
| | | | | | |
| | | | | g | |
And the ways
| nodes | highway | name |
@@ -94,55 +52,28 @@ Feature: Slipways and Dedicated Turn Lanes
| efg | primary | second |
When I route I should get
| waypoints | route | turns |
| a,g | first,,second,second | depart,off ramp right,turn straight,arrive |
Scenario: Turn Instead of Ramp
Given the node map
"""
e
a b c d
h
f
g
"""
And the ways
| nodes | highway | name |
| abcd | motorway | first |
| bhf | motorway_link | |
| efg | primary | second |
When I route I should get
| waypoints | route | turns |
| a,g | first,,second,second | depart,off ramp right,turn straight,arrive |
| waypoints | route | turns |
| a,g | first,,second,second | depart,off ramp slight right,turn straight,arrive |
Scenario: Inner city expressway with on road
Given the node map
"""
a b . . . c g
`f .
`
.
.
d
.
.
.
e
"""
| a | b | | | | c | g |
| | | | | f | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | d | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | e | |
And the ways
| nodes | highway | name | oneway |
| abc | primary | road | |
| cg | primary | road | |
| bfd | trunk_link | | yes |
| cde | trunk | trunk | yes |
| nodes | highway | name |
| abc | primary | road |
| cg | primary | road |
| bfd | trunk_link | |
| cde | trunk | trunk |
And the relations
| type | way:from | way:to | node:via | restriction |
@@ -155,16 +86,14 @@ Feature: Slipways and Dedicated Turn Lanes
Scenario: Slipway Round U-Turn
Given the node map
"""
a f
b e
g
c d
"""
| a | | f |
| | | |
| b | | e |
| | | |
| | | |
| | g | |
| | | |
| c | | d |
And the ways
| nodes | highway | name | oneway |
@@ -178,15 +107,13 @@ Feature: Slipways and Dedicated Turn Lanes
Scenario: Slipway Steep U-Turn
Given the node map
"""
a f
b e
g
c d
"""
| a | | f |
| | | |
| b | | e |
| | g | |
| | | |
| | | |
| c | | d |
And the ways
| nodes | highway | name | oneway |
@@ -200,23 +127,21 @@ Feature: Slipways and Dedicated Turn Lanes
Scenario: Schwarzwaldstrasse Autobahn
Given the node map
"""
. i . . . . . h . . . . g
.j '. . '
a . k
' b . r c . d . e . . . . f
. . .
. . .
. . .
. . .
l . .
m . .
n q
. .
. .
. .
o p
"""
| | | | | i | | | | | | h | | | | | g |
| | | j | | | | | | | | | | | | | |
| a | | | | | | | k | | | | | | | | |
| | | | b | | r | c | | d | | e | | | | | f |
| | | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | | |
| | | | | | l | | | | | | | | | | |
| | | | | | m | | | | | | | | | | |
| | | | | | | n | | q | | | | | | | |
| | | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | | |
| | | | | | | o | | p | | | | | | | |
And the nodes
# the traffic light at `l` is not actually in the data, but necessary for the test to check everything
@@ -240,23 +165,21 @@ Feature: Slipways and Dedicated Turn Lanes
| qe | secondary_link | Ettlinger Allee | | yes |
When I route I should get
| waypoints | route | turns | ref |
| a,o | Schwarzwaldstrasse,Ettlinger Allee,Ettlinger Allee | depart,turn right,arrive | L561,L561, |
| waypoints | route | turns | ref |
| a,o | Schwarzwaldstrasse,Ettlinger Allee,Ettlinger Allee | depart,turn right,arrive | L561,, |
Scenario: Traffic Lights everywhere
#http://map.project-osrm.org/?z=18&center=48.995336%2C8.383813&loc=48.995467%2C8.384548&loc=48.995115%2C8.382761&hl=en&alt=0
Given the node map
"""
a k l j
d b c i
e g
1
h
f
"""
| a | | | k | l | | | j | |
| | | | | | d | b | c | i |
| | | | | | | | | |
| | | | | | | e | g | |
| | | | | | | | | |
| | | | | | | 1 | | |
| | | | | | | | h | |
| | | | | | | | | |
| | | | | | | | f | |
And the nodes
| node | highway |
@@ -280,25 +203,24 @@ Feature: Slipways and Dedicated Turn Lanes
#2839
Scenario: Self-Loop
Given the node map
"""
l k
j
m
i
h
n
g
o
f
p
e
a b c d
"""
# 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
| | | | | | | | | | | | | | | | | | | | | | l | | | k | | | | | | |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | j | | | |
| | | | | | | | | | | | | | | | | | | | m | | | | | | | | | | | |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | i | |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | h |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | | | | | n | | | | | | | | | | | | |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | g |
| | | | | | | | | | | | | | | | | | | o | | | | | | | | | | | | |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | f | |
| | | | | | | | | | | | | | | | | | p | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | e | | | |
| a | | | | | b | | | | | | | | | c | | | | | | | | | | d | | | | | | |
And the ways
| nodes | name | oneway | highway | lanes |
@@ -315,25 +237,24 @@ Feature: Slipways and Dedicated Turn Lanes
#has to remain as todo (see #https://github.com/Project-OSRM/osrm-backend/pull/2849)
Scenario: Self-Loop - Bidirectional
Given the node map
"""
l k
j
m
i
h
n
g
o
f
p
e
a b c d
"""
# 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
| | | | | | | | | | | | | | | | | | | | | | l | | | k | | | | | | |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | j | | | |
| | | | | | | | | | | | | | | | | | | | m | | | | | | | | | | | |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | i | |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | h |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | | | | | n | | | | | | | | | | | | |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | g |
| | | | | | | | | | | | | | | | | | | o | | | | | | | | | | | | |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | f | |
| | | | | | | | | | | | | | | | | | p | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | e | | | |
| a | | | | | b | | | | | | | | | c | | | | | | | | | | d | | | | | | |
And the ways
| nodes | name | oneway | highway | lanes |
@@ -347,35 +268,34 @@ Feature: Slipways and Dedicated Turn Lanes
#http://www.openstreetmap.org/#map=19/38.90597/-77.01276
Scenario: Don't falsly classify as sliproads
Given the node map
"""
j
a b c d
e
1
f g
i h
"""
# 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
| | | | | | | | | | | | | | | | | | | | | | | | j | | | | | | | |
| a | b | | | | | | | | | | | | | | | | | | | | | | c | | | | | | | d |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| | | | | e | | | | | | | | | | | | | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | | | | | | | | | | 1 | | | | | | | |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | | | | | f | | | | | g | | | | | | | |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | | | | | | | | | | i | | | | | | | h |
And the ways
| nodes | name | highway | oneway | maxspeed |
@@ -393,392 +313,3 @@ Feature: Slipways and Dedicated Turn Lanes
| a,d | new york,new york | depart,arrive | this is the sinatra route |
| a,j | new york,1st street,1st street | depart,turn left,arrive | |
| a,1 | new york,m street,1st street,1st street | depart,turn right,turn left,arrive | this can false be seen as a sliproad |
# Merging into degree two loop on dedicated turn detection / 2927
Scenario: Turn Instead of Ramp
Given the node map
"""
f
g h
d e
i c j
b
a
"""
And the ways
| nodes | highway | name | oneway |
| abi | primary | road | yes |
| bcjd | primary | loop | yes |
| dhgf | primary | loop | yes |
| fed | primary | loop | yes |
And the nodes
| node | highway |
| g | traffic_signals |
| c | traffic_signals |
# We don't actually care about routes here, this is all about endless loops in turn discovery
When I route I should get
| waypoints | route | turns |
| a,i | road,road,road | depart,fork slight left,arrive |
# The following tests are current false positives / false negatives #3199
@sliproads
# http://www.openstreetmap.org/#map=19/52.59847/13.14815
Scenario: Sliproad Detection
Given the node map
"""
a . . .
. .
b . . . . . . c . . . d
` . .
e . .
` . .
f . .
` . .
g i
` h .
"""
And the ways
| nodes | highway | name |
| abefgh | residential | Nachtigallensteig |
| bcd | residential | Kiebitzsteig |
| cg | residential | Haenflingsteig |
| hid | residential | Waldkauzsteig |
When I route I should get
| waypoints | route | turns |
| a,d | Nachtigallensteig,Kiebitzsteig,Kiebitzsteig | depart,turn left,arrive |
| a,h | Nachtigallensteig,Nachtigallensteig | depart,arrive |
@sliproads
Scenario: Not a obvious Sliproad
Given the node map
"""
d
.
s . a . . b . . c
` .
` e
.`
. `
f g
"""
And the ways
| nodes | highway | name | oneway |
| sabc | primary | sabc | |
| dbef | primary | dbef | yes |
| aeg | primary | aeg | yes |
When I route I should get
| waypoints | route | turns |
| s,f | sabc,aeg,dbef,dbef | depart,turn right,turn right,arrive |
@sliproads
Scenario: Through Street, not a Sliproad although obvious
Given the node map
"""
d
.
s . a . . b . . c
` .
` e
. `
. `
f g
"""
And the ways
| nodes | highway | name | oneway |
| sabc | primary | sabc | |
| dbef | primary | dbef | yes |
| aeg | primary | aeg | yes |
When I route I should get
| waypoints | route | turns |
| s,f | sabc,aeg,dbef,dbef | depart,turn right,turn right,arrive |
@sliproads
Scenario: Sliproad target turn is restricted
Given the node map
"""
d
.
s . a . . . . b . . c
` .
` .
` .
` .
`.
e
.`
f `
. ` g
"""
And the ways
| nodes | highway | name | oneway |
| sa | primary | sabc | |
| abc | primary | sabc | |
| dbe | primary | dbef | yes |
| ef | primary | dbef | |
| ae | primary | aeg | yes |
| eg | primary | aeg | |
# the reason we have to split ways at e is that otherwise we can't handle restrictions via e
And the relations
| type | way:from | way:to | node:via | restriction |
| restriction | ae | ef | e | no_right_turn |
When I route I should get
| waypoints | route | turns |
| s,f | sabc,dbef,dbef | depart,turn right,arrive |
| s,g | sabc,aeg,aeg | depart,turn right,arrive |
@sliproads
Scenario: Not a Sliproad, road not continuing straight
Given the node map
"""
d
.
s . a . . b . . c
` .
` e . . g
"""
And the ways
| nodes | highway | name | oneway |
| sabc | primary | sabc | |
| dbe | primary | dbe | yes |
| aeg | primary | aeg | yes |
When I route I should get
| waypoints | route | turns |
| s,c | sabc,sabc | depart,arrive |
| s,g | sabc,aeg,aeg | depart,turn right,arrive |
@sliproads
Scenario: Intersection too far away with Traffic Light shortly after initial split
Given the node map
"""
d
.
s . a . . . . . . . . . . . . . t . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . b . . c
` . . . . . . . . . . . .
` . . . . . . . . . . . .
` . . . . . . . . . . . .
` . . . . . . . . . . . .
` . . . . . . . . . . . .
` . . . . . . . . . . . .
` . . .
` e
.
f
.
"""
And the nodes
| node | highway |
| t | traffic_signals |
And the ways
| nodes | highway | name | oneway |
| satbc | primary | sabc | |
| dbef | primary | dbef | yes |
| ae | primary | ae | yes |
When I route I should get
| waypoints | route | turns |
| s,f | sabc,ae,dbef,dbef | depart,turn slight right,turn right,arrive |
@sliproads
Scenario: Traffic Signal on Sliproad
Given the node map
"""
d
.
s . a . . . . . b . . c
` .
` .
` .
t .
` .
e
.
.
f
"""
And the nodes
| node | highway |
| t | traffic_signals |
And the ways
| nodes | highway | name | oneway |
| sabc | primary | sabc | |
| dbe | primary | dbe | yes |
| ef | primary | ef | |
| ate | primary | ate | yes |
When I route I should get
| waypoints | route | turns |
| s,f | sabc,ef,ef | depart,turn right,arrive |
@sliproads
Scenario: Sliproad tagged as link
Given the node map
"""
d
.
s . a . . . . . b . . c
` .
` .
` .
` .
` .
e
.
.
f
"""
And the ways
| nodes | highway | name | oneway |
| sabc | motorway | sabc | |
| dbef | motorway | dbef | yes |
| ae | motorway_link | ae | yes |
When I route I should get
| waypoints | route | turns |
| s,f | sabc,dbef,dbef | depart,turn right,arrive |
@sliproads
Scenario: Sliproad with same-ish names
Given the node map
"""
d
.
s . a . . b . . c
` .
. e
..
.
f
.
t
"""
And the ways
| nodes | highway | name | ref | oneway |
| sabc | primary | main | | |
| dbe | primary | crossing | r0 | yes |
| eft | primary | crossing | r0;r1 | yes |
| af | primary | sliproad | | yes |
When I route I should get
| waypoints | route | turns |
| s,t | main,crossing,crossing | depart,turn right,arrive |
@sliproads
Scenario: Not a Sliproad, name mismatch
Given the node map
"""
d
.
s . a . . b . . c
` .
. e
. .
..
.
f
.
t
"""
And the ways
| nodes | highway | name | oneway |
| sabc | primary | main | |
| dbe | primary | top | yes |
| ef | primary | bottom | yes |
| ft | primary | away | yes |
| af | primary | sliproad | yes |
When I route I should get
| waypoints | route | turns |
| s,t | main,away,away | depart,turn right,arrive |
@sliproads
Scenario: Not a Sliproad, low road priority
Given the node map
"""
d
.
s . a . . b . . c
` .
. e
. .
..
.
f
.
t
"""
And the ways
# maxspeed otherwise service road will never be routed over and we won't see instructions
| nodes | highway | name | maxspeed | oneway |
| sabc | primary | main | 30 km/h | |
| dbe | primary | crossing | 30 km/h | yes |
| eft | primary | crossing | 30 km/h | yes |
| ft | primary | away | 30 km/h | yes |
| af | service | sliproad | 30 km/h | yes |
When I route I should get
| waypoints | route | turns |
| s,t | main,away,away | depart,turn right,arrive |
@sliproads
Scenario: Not a Sliproad, more than three roads at target intersection
Given the node map
"""
d
.
s . a . . b . . c
` .
. e
. .
..
. h
f .
. g
t
"""
And the ways
| nodes | highway | name | oneway |
| sabc | primary | main | |
| dbe | primary | top | yes |
| eft | primary | bottom | yes |
| fh | primary | another | |
| fg | primary | another | |
| af | primary | sliproad | yes |
When I route I should get
| waypoints | route | turns |
| s,g | main,sliproad,another,another | depart,turn right,turn left,arrive |
+19 -21
View File
@@ -6,17 +6,15 @@ Feature: Destination Signs
Scenario: Car - route name assembly with destination signs
Given the node map
"""
a b
c d
e f
g h
i j
k l
m n
o p
q r
"""
| a | b |
| c | d |
| e | f |
| g | h |
| i | j |
| k | l |
| m | n |
| o | p |
| q | r |
And the ways
| nodes | name | ref | destination | destination:ref | oneway | # |
@@ -31,13 +29,13 @@ Feature: Destination Signs
| qr | QR | | | A1;A2 | yes | |
When I route I should get
| from | to | route | destinations | ref | # |
| a | b | AB,AB | , | E1,E1 | |
| c | d | CD,CD | Berlin,Berlin | , | |
| e | f | EF,EF | A1: Berlin,A1: Berlin | , | |
| g | h | , | A1: Berlin,A1: Berlin | , | |
| i | j | , | Berlin,Berlin | , | |
| k | l | KL,KL | A1: Berlin,A1: Berlin | E1,E1 | |
| m | n | MN,MN | A1, A2: Berlin, Hamburg,A1, A2: Berlin, Hamburg | , | |
| o | p | OP,OP | , | , | guard against mis-tagging |
| q | r | QR,QR | A1, A2,A1, A2 | , | |
| from | to | route | destinations | ref | # |
| a | b | AB,AB | , | E1,E1 | |
| c | d | CD,CD | Berlin,Berlin | , | |
| e | f | EF,EF | A1: Berlin,A1: Berlin | , | |
| g | h | , | A1: Berlin,A1: Berlin | , | |
| i | j | , | Berlin,Berlin | , | |
| k | l | KL,KL | A1: Berlin,A1: Berlin | E1,E1 | |
| m | n | MN,MN | A1, A2: Berlin, Hamburg,A1, A2: Berlin, Hamburg | , | |
| o | p | OP,OP | , | , | guard against mis-tagging |
| q | r | QR,QR | A1, A2,A1, A2 | , | |
@@ -1,43 +0,0 @@
@routing @guidance
Feature: Destination Signs
Background:
Given the profile "car"
Scenario: Car - route name assembly with destination signs accounting for directional tags
Given the node map
"""
a b
c d
e f
g h
i j
k l
m n
o p
q r
"""
And the ways
| nodes | name | ref | destination | destination:ref | destination:forward | destination:backward | oneway | # |
| ab | AB | | Berlin | | | | yes | |
| cd | CD | | | | Berlin | | yes | |
| ef | EF | | | | Berlin | Hamburg | -1 | |
| gh | GH | | | A1 | | | yes | |
| ij | IJ | | Berlin | A1 | | | no | mis-tagged destination: not a oneway |
| kl | KL | | | A1 | Berlin | Hamburg | yes | |
| mn | MN | | Berlin | A1 | Berlin | Hamburg | yes | |
| op | OP | | Berlin | | | Hamburg | -1 | |
| qr | QR | | | | | Hamburg | -1 | |
When I route I should get
| from | to | route | destinations | ref | # |
| a | b | AB,AB | Berlin,Berlin | , | |
| c | d | CD,CD | Berlin,Berlin | , | |
| f | e | EF,EF | Hamburg,Hamburg | , | |
| g | h | GH,GH | A1,A1 | , | |
| i | j | IJ,IJ | , | , | guard against mis-tagging |
| k | l | KL,KL | A1: Berlin,A1: Berlin | , | |
| m | n | MN,MN | A1: Berlin,A1: Berlin | , | |
| p | o | OP,OP | Hamburg,Hamburg | , | |
| r | q | QR,QR | Hamburg,Hamburg | , | |
@@ -1,39 +0,0 @@
@routing @guidance
Feature: Destination Signs
Background:
Given the profile "car"
Scenario: Car - route name assembly with destination signs accounting for directional:ref tags
Given the node map
"""
a b
c d
e f
g h
i j
k l
m n
o p
q r
"""
And the ways
| nodes | name | destination | destination:ref | destination:ref:forward | destination:ref:backward | destination:forward | destination:backward | oneway | # |
| ab | AB | Berlin | A1 | A1 | A2 | | | yes | |
| cd | CD | | A1 | A1 | A2 | Berlin | Hamburg | -1 | |
| ef | EF | | | A1 | A2 | Berlin | Hamburg | yes | |
| gh | GH | | | A1 | A2 | Berlin | Hamburg | -1 | |
| ij | IJ | Berlin | A1 | | A2 | Berlin | Hamburg | yes | |
| kl | KL | | A1 | | A2 | Berlin | Hamburg | -1 | |
| mn | MN | Berlin | A1 | A1 | | Berlin | Hamburg | no | mis-tagged destination: not a oneway |
When I route I should get
| from | to | route | destinations | ref | # |
| a | b | AB,AB | A1: Berlin,A1: Berlin | , | |
| d | c | CD,CD | A2: Hamburg,A2: Hamburg | , | |
| e | f | EF,EF | A1: Berlin,A1: Berlin | , | |
| h | g | GH,GH | A2: Hamburg,A2: Hamburg | , | |
| i | j | IJ,IJ | A1: Berlin,A1: Berlin | , | |
| l | k | KL,KL | A2: Hamburg,A2: Hamburg | , | |
| m | n | MN,MN | , | , | guard against mis-tagging |
+34 -50
View File
@@ -7,11 +7,9 @@ Feature: End Of Road Instructions
Scenario: End of Road with through street
Given the node map
"""
c
a e b
f d
"""
| | | c |
| a | e | b |
| | f | d |
And the ways
| nodes | highway |
@@ -26,11 +24,9 @@ Feature: End Of Road Instructions
Scenario: End of Road with three streets
Given the node map
"""
c
a e b
f d
"""
| | | c |
| a | e | b |
| | f | d |
And the ways
| nodes | highway |
@@ -46,11 +42,9 @@ Feature: End Of Road Instructions
Scenario: End of Road with three streets, slightly angled
Given the node map
"""
a e c
f b
d
"""
| a | e | | | | c |
| | f | | | | b |
| | | | | | d |
And the ways
| nodes | highway |
@@ -66,11 +60,9 @@ Feature: End Of Road Instructions
Scenario: End of Road with three streets, slightly angled
Given the node map
"""
c
f b
a e d
"""
| | | | | | c |
| | f | | | | b |
| a | e | | | | d |
And the ways
| nodes | highway |
@@ -86,11 +78,9 @@ Feature: End Of Road Instructions
Scenario: End of Road with through street, slightly angled
Given the node map
"""
a e c
f b
d
"""
| a | e | | | | c |
| | f | | | | b |
| | | | | | d |
And the ways
| nodes | highway |
@@ -105,11 +95,9 @@ Feature: End Of Road Instructions
Scenario: End of Road with through street, slightly angled
Given the node map
"""
c
f b
a e d
"""
| | | | | | c |
| | f | | | | b |
| a | e | | | | d |
And the ways
| nodes | highway |
@@ -124,11 +112,9 @@ Feature: End Of Road Instructions
Scenario: End of Road with two ramps - prefer ramp over end of road
Given the node map
"""
c
a e b
f d
"""
| | | c |
| a | e | b |
| | f | d |
And the ways
| nodes | highway |
@@ -146,21 +132,19 @@ Feature: End Of Road Instructions
@end-of-road @negative
Scenario: Don't Handle Circles as End-Of-Road
Given the node map
"""
r q
a s
b
j
l c i k
h
m
d n
e g
f
o p
"""
| | r | | | | q | | | | | | |
| | | | | | a | s | | | | | |
| | | | b | | | | | | | | |
| | | | | | | | j | | | | |
| | | | | | | | | | | | |
| l | | c | | | | | i | | | | k |
| | | | | | | | | | | | |
| | | | | | | | h | | | | |
| m | | | | | | | | | | | |
| | | d | | | | | | | | | n |
| | | | e | | | g | | | | | |
| | | | | f | | | | | | | |
| | | | | o | | p | | | | | |
And the ways
| nodes | highway | name | oneway |
+54 -125
View File
@@ -7,11 +7,9 @@ Feature: Fork Instructions
Scenario: Fork Same Road Class
Given the node map
"""
c
a b
d
"""
| | | | | c |
| a | | b | | |
| | | | | d |
And the ways
| nodes | highway |
@@ -24,48 +22,11 @@ Feature: Fork Instructions
| a,c | ab,bc,bc | depart,fork slight left,arrive |
| a,d | ab,bd,bd | depart,fork slight right,arrive |
Scenario: Don't Fork On Single Road
Given the node map
"""
c
a b
d
"""
And the ways
| nodes | highway | oneway |
| ab | primary | no |
| cb | primary | yes |
| bd | primary | yes |
When I route I should get
| waypoints | route | turns |
| a,d | ab,bd,bd | depart,new name slight right,arrive |
Scenario: Don't Fork On Single Road
Given the node map
"""
c
a b d
"""
And the ways
| nodes | highway | oneway | name |
| ab | primary | no | road |
| cb | primary | yes | road |
| bd | primary | yes | turn |
When I route I should get
| waypoints | route | turns |
| a,d | road,turn,turn | depart,new name straight,arrive |
Scenario: Do not fork on link type
Given the node map
"""
c
a b
d
"""
| | | | | c |
| a | | b | | |
| | | | | d |
And the ways
| nodes | highway |
@@ -80,11 +41,9 @@ Feature: Fork Instructions
Scenario: Fork in presence of other roads
Given the node map
"""
c
a b
e d
"""
| | | | | c |
| a | | b | | |
| | e | | | d |
And the ways
| nodes | highway |
@@ -100,12 +59,10 @@ Feature: Fork Instructions
Scenario: Fork Turning Slight Left
Given the node map
"""
c
a b
d
"""
| | | | | | c |
| | | | | | |
| a | | b | | | |
| | | | | d | |
And the ways
| nodes | highway |
@@ -120,12 +77,10 @@ Feature: Fork Instructions
Scenario: Fork Turning Slight Right
Given the node map
"""
c
a b
d
"""
| | | | | c | |
| a | | b | | | |
| | | | | | |
| | | | | | d |
And the ways
| nodes | highway |
@@ -140,11 +95,9 @@ Feature: Fork Instructions
Scenario: Do not fork on service
Given the node map
"""
c
a b
d
"""
| | | | | c |
| a | | b | | |
| | | | | d |
And the ways
| nodes | highway |
@@ -158,11 +111,9 @@ Feature: Fork Instructions
Scenario: Fork Both Turning Slight Right
Given the node map
"""
a b
c
d
"""
| a | | b | | | |
| | | | | | c |
| | | | | | d |
And the ways
| nodes | highway |
@@ -177,11 +128,9 @@ Feature: Fork Instructions
Scenario: Fork Both Turning Slight Left
Given the node map
"""
c
d
a b
"""
| | | | | | c |
| | | | | | d |
| a | | b | | | |
And the ways
| nodes | highway |
@@ -196,11 +145,9 @@ Feature: Fork Instructions
Scenario: Fork Both Turning Slight Right - Unnamed
Given the node map
"""
a b
c
d
"""
| a | | b | | | |
| | | | | | c |
| | | | | | d |
And the ways
| nodes | highway | name |
@@ -215,11 +162,9 @@ Feature: Fork Instructions
Scenario: Fork Both Turning Slight Left - Unnamed
Given the node map
"""
c
d
a b
"""
| | | | | | c |
| | | | | | d |
| a | | b | | | |
And the ways
| nodes | highway | name |
@@ -234,11 +179,9 @@ Feature: Fork Instructions
Scenario: Fork Both Turning Very Slightly Right - Unnamed
Given the node map
"""
a b
c
d
"""
| a | | b | | | | | | | | | | | | | | | |
| | | | | | | | | | | | c | | | | | | |
| | | | | | | | | | | | | | | | | | d |
And the ways
| nodes | highway | name |
@@ -253,11 +196,9 @@ Feature: Fork Instructions
Scenario: Fork Both Turning Very Slightly Right - Unnamed Ramps
Given the node map
"""
a b
c
d
"""
| a | | b | | | | | | | | | | | | | | | |
| | | | | | | | | | | | c | | | | | | |
| | | | | | | | | | | | | | | | | | d |
And the ways
| nodes | highway | name |
@@ -272,11 +213,9 @@ Feature: Fork Instructions
Scenario: Non-Fork on complex intersection - left
Given the node map
"""
c
a b
e d
"""
| | | | | c |
| a | | b | | |
| | e | | | d |
And the ways
| nodes | highway |
@@ -291,11 +230,9 @@ Feature: Fork Instructions
Scenario: Non-Fork on complex intersection - right
Given the node map
"""
e c
a b
d
"""
| | e | | | c |
| a | | b | | |
| | | | | d |
And the ways
| nodes | highway |
@@ -310,11 +247,9 @@ Feature: Fork Instructions
Scenario: Tripple fork
Given the node map
"""
c
a b d
e
"""
| | | | | | | | | c |
| a | | b | | d | | | | |
| | | | | | | | | e |
And the ways
| nodes | highway |
@@ -331,11 +266,9 @@ Feature: Fork Instructions
Scenario: Tripple fork -- middle obvious
Given the node map
"""
c
a b d
e
"""
| | | | | c |
| a | | b | | d |
| | | | | e |
And the ways
| nodes | highway |
@@ -351,10 +284,8 @@ Feature: Fork Instructions
Scenario: Don't Fork when leaving Road
Given the node map
"""
a b c
d
"""
| a | | b | | c |
| | | | | d |
And the ways
| nodes | highway |
@@ -368,10 +299,8 @@ Feature: Fork Instructions
Scenario: Fork on motorway links - don't fork on through
Given the node map
"""
i a
j c b x
"""
| i | | | | | a |
| j | | c | b | | x |
And the ways
| nodes | name | highway |
+25 -39
View File
@@ -7,10 +7,8 @@ Feature: Intersections Data
Scenario: Passing Three Way South
Given the node map
"""
a b c
d
"""
| a | | b | | c |
| | | d | | |
And the ways
| nodes | name |
@@ -24,10 +22,8 @@ Feature: Intersections Data
Scenario: Passing Three Way North
Given the node map
"""
d
a b c
"""
| | | d | | |
| a | | b | | c |
And the ways
| nodes | name |
@@ -41,10 +37,8 @@ Feature: Intersections Data
Scenario: Passing Oneway Street In
Given the node map
"""
d
a b c
"""
| | | d | | |
| a | | b | | c |
And the ways
| nodes | name | oneway |
@@ -58,10 +52,8 @@ Feature: Intersections Data
Scenario: Passing Oneway Street Out
Given the node map
"""
d
a b c
"""
| | | d | | |
| a | | b | | c |
And the ways
| nodes | name | oneway |
@@ -75,11 +67,9 @@ Feature: Intersections Data
Scenario: Passing Two Intersections
Given the node map
"""
e
a b c d
f
"""
| | | e | | | | |
| a | | b | | c | | d |
| | | | | f | | |
And the ways
| nodes | name |
@@ -95,11 +85,9 @@ Feature: Intersections Data
Scenario: Passing Two Intersections, Collapsing
Given the node map
"""
e
a b c d
f
"""
| | | e | | | | |
| a | | b | | c | | d |
| | | | | f | | |
And the ways
| nodes | name |
@@ -116,19 +104,17 @@ Feature: Intersections Data
Scenario: Roundabouts
Given the node map
"""
e
a
1 4
f b d h
2 3
c
g
"""
| | | | | e | | | | |
| | | | | | | | | |
| | | | | a | | | | |
| | | | 1 | | 4 | | | |
| | | | | | | | | |
| f | | b | | | | d | | h |
| | | | | | | | | |
| | | | 2 | | 3 | | | |
| | | | | c | | | | |
| | | | | | | | | |
| | | | | g | | | | |
And the ways
| nodes | junction |
-119
View File
@@ -1,119 +0,0 @@
@routing @guidance
Feature: Exceptions for routing onto low-priority roads
Background:
Given the profile "car"
Given a grid size of 10 meters
Scenario: Straight onto low-priority: same name
Given the node map
"""
c
a b d
e
"""
And the ways
| nodes | highway | name |
| abd | residential | road |
| eb | service | service |
| bc | service | service |
When I route I should get
| waypoints | route | turns |
| c,e | service,service | depart,arrive |
| e,c | service,service | depart,arrive |
Scenario: Straight onto low-priority: onto and from unnamed
Given the node map
"""
c
a b d
e
"""
And the ways
| nodes | highway | name |
| abd | residential | road |
| eb | service | |
| bc | service | |
When I route I should get
| waypoints | route | turns |
| e,c | , | depart,arrive |
| c,e | , | depart,arrive |
Scenario: Straight onto low-priority: unnamed
Given the node map
"""
c
a b d
e
"""
And the ways
| nodes | highway | name |
| abd | residential | road |
| eb | service | service |
| bc | service | |
When I route I should get
| waypoints | route | turns |
| e,c | service, | depart,arrive |
| c,e | ,service,service | depart,turn straight,arrive |
Scenario: Straight onto low-priority
Given the node map
"""
a b c
"""
And the ways
| nodes | highway | name |
| ab | residential | road |
| bc | service | service |
When I route I should get
| waypoints | route | turns |
| a,c | road,service,service | depart,new name straight,arrive |
Scenario: Straight onto low-priority, with driveway
Given the node map
"""
f
a b c
"""
And the ways
| nodes | highway | name |
| ab | residential | road |
| bc | service | road |
| bf | driveway | |
When I route I should get
| waypoints | route | turns |
| a,c | road,road | depart,arrive |
Scenario: Straight onto low-priority, with driveway
Given the node map
"""
f
a b c
"""
And the ways
| nodes | highway | name |
| ab | residential | road |
| bc | service | |
| bf | driveway | |
When I route I should get
| waypoints | route | turns |
| a,c | road, | depart,arrive |
| c,a | ,road,road | depart,new name straight,arrive |
+28 -40
View File
@@ -8,11 +8,9 @@ Feature: Merging
@merge
Scenario: Merge on Four Way Intersection
Given the node map
"""
d
a b c
e
"""
| d | | | | | | | | | |
| a | | b | | | | | | | c |
| e | | | | | | | | | |
And the ways
| nodes | highway |
@@ -28,10 +26,8 @@ Feature: Merging
@merge
Scenario: Merge on Three Way Intersection Right
Given the node map
"""
d
a b c
"""
| d | | | | | | | | | |
| a | | b | | | | | | | c |
And the ways
| nodes | highway |
@@ -45,10 +41,8 @@ Feature: Merging
@merge @negative
Scenario: Don't Merge on Short-Three Way Intersection Right
Given the node map
"""
d
a b c
"""
| d | | | | | | | |
| a | | b | | | | | c |
And the ways
| nodes | highway |
@@ -63,10 +57,8 @@ Feature: Merging
@merge
Scenario: Merge on Three Way Intersection Right
Given the node map
"""
a b c
d
"""
| a | | b | | | | | | | c |
| d | | | | | | | | | |
And the ways
| nodes | highway |
@@ -80,25 +72,23 @@ Feature: Merging
@merge
Scenario: Merge onto a turning road
Given the node map
"""
e
d
c
b
a f
"""
| | | | | | | e |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | d | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| | | | | c | | |
| | | | b | | | |
| a | | | | | | f |
And the ways
| nodes | highway | name |
@@ -113,10 +103,8 @@ Feature: Merging
@merge
Scenario: Merge onto a motorway
Given the node map
"""
d
a b c
"""
| d | | | | | | | | | |
| a | | | b | | | | | | c |
And the ways
| nodes | name | highway | oneway |
+36 -64
View File
@@ -7,10 +7,8 @@ Feature: Motorway Guidance
Scenario: Ramp Exit Right
Given the node map
"""
a b c d e
f g
"""
| a | b | c | d | e |
| | | | f | g |
And the ways
| nodes | highway | oneway |
@@ -24,11 +22,9 @@ Feature: Motorway Guidance
Scenario: Ramp Exit Right Curved Right
Given the node map
"""
a b c
f d
g e
"""
| a | b | c | | |
| | | f | d | |
| | | | g | e |
And the ways
| nodes | highway | oneway |
@@ -42,11 +38,9 @@ Feature: Motorway Guidance
Scenario: Ramp Exit Right Curved Left
Given the node map
"""
e
d g
a b c f
"""
| | | | | e |
| | | | d | g |
| a | b | c | f | |
And the ways
@@ -62,10 +56,8 @@ Feature: Motorway Guidance
Scenario: Ramp Exit Left
Given the node map
"""
f g
a b c d e
"""
| | | | f | g |
| a | b | c | d | e |
And the ways
| nodes | highway | oneway |
@@ -79,11 +71,9 @@ Feature: Motorway Guidance
Scenario: Ramp Exit Left Curved Left
Given the node map
"""
g e
f d
a b c
"""
| | | | g | e |
| | | f | d | |
| a | b | c | | |
And the ways
| nodes | highway | oneway |
@@ -97,11 +87,9 @@ Feature: Motorway Guidance
Scenario: Ramp Exit Left Curved Right
Given the node map
"""
a b c f
d g
e
"""
| a | b | c | f | |
| | | | d | g |
| | | | | e |
And the ways
| nodes | highway | oneway |
@@ -115,10 +103,8 @@ Feature: Motorway Guidance
Scenario: On Ramp Right
Given the node map
"""
a b c d e
f g
"""
| a | b | c | d | e |
| f | g | | | |
And the ways
| nodes | highway | oneway |
@@ -132,10 +118,8 @@ Feature: Motorway Guidance
Scenario: On Ramp Left
Given the node map
"""
f g
a b c d e
"""
| f | g | | | |
| a | b | c | d | e |
And the ways
| nodes | highway | oneway |
@@ -149,11 +133,9 @@ Feature: Motorway Guidance
Scenario: Highway Fork
Given the node map
"""
d e
a b c
f g
"""
| | | | | d | e |
| a | b | c | | | |
| | | | | f | g |
And the ways
| nodes | highway |
@@ -167,11 +149,9 @@ Feature: Motorway Guidance
Scenario: Fork After Ramp
Given the node map
"""
d e
a b c
f g
"""
| | | | | d | e |
| a | b | c | | | |
| | | | | f | g |
And the ways
| nodes | highway | oneway |
@@ -186,10 +166,8 @@ Feature: Motorway Guidance
Scenario: On And Off Ramp Right
Given the node map
"""
a b c d e
f g h i
"""
| a | b | | c | | d | e |
| f | g | | | | h | i |
And the ways
| nodes | highway | oneway |
@@ -206,10 +184,8 @@ Feature: Motorway Guidance
Scenario: On And Off Ramp Left
Given the node map
"""
f g h i
a b c d e
"""
| f | g | | | | h | i |
| a | b | | c | | d | e |
And the ways
| nodes | highway | oneway |
@@ -226,11 +202,9 @@ Feature: Motorway Guidance
Scenario: Merging Motorways
Given the node map
"""
e
a b c
d
"""
| e | | |
| a | b | c |
| d | | |
And the ways
| nodes | highway |
@@ -245,11 +219,9 @@ Feature: Motorway Guidance
Scenario: Handle 90 degree off ramps correctly
Given the node map
"""
a
x b c y
d
"""
| a | | | | |
| x | b | | c | y |
| | | | d | |
And the ways
| nodes | name | highway | oneway |
+19 -266
View File
@@ -7,9 +7,7 @@ Feature: New-Name Instructions
Scenario: Undisturbed name Change
Given the node map
"""
a b c
"""
| a | | b | | c |
And the ways
| nodes |
@@ -23,10 +21,8 @@ Feature: New-Name Instructions
Scenario: Undisturbed Name Change with unannounced Turn Right
Given the node map
"""
a b
c
"""
| a | | b | | |
| | | | | c |
And the ways
| nodes |
@@ -39,10 +35,8 @@ Feature: New-Name Instructions
Scenario: Undisturbed Name Change with unannounced Turn Left
Given the node map
"""
c
a b
"""
| | | | | c |
| a | | b | | |
And the ways
| nodes |
@@ -55,10 +49,8 @@ Feature: New-Name Instructions
Scenario: Disturbed Name Change with Turn
Given the node map
"""
a b
d c
"""
| a | | b | | |
| | d | | | c |
And the ways
| nodes |
@@ -72,10 +64,8 @@ Feature: New-Name Instructions
Scenario: Undisturbed Name Change with announced Turn Left
Given the node map
"""
c
a b
"""
| | | c |
| a | | b |
And the ways
| nodes |
@@ -88,10 +78,8 @@ Feature: New-Name Instructions
Scenario: Undisturbed Name Change with announced Turn Sharp Left
Given the node map
"""
c
a b
"""
| c | | |
| a | | b |
And the ways
| nodes |
@@ -104,10 +92,8 @@ Feature: New-Name Instructions
Scenario: Undisturbed Name Change with announced Turn Right
Given the node map
"""
a b
c
"""
| a | | b |
| | | c |
And the ways
| nodes |
@@ -120,10 +106,8 @@ Feature: New-Name Instructions
Scenario: Undisturbed Name Change with announced Turn Sharp Right
Given the node map
"""
a b
c
"""
| a | | b |
| c | | |
And the ways
| nodes |
@@ -137,10 +121,8 @@ Feature: New-Name Instructions
Scenario: Disturbed Name Change with minor road class
Given the node map
"""
a b d
c
"""
| a | | b | | d |
| | | | | c |
And the ways
| nodes | highway | oneway |
@@ -154,9 +136,7 @@ Feature: New-Name Instructions
Scenario: Empty road names - Announce Change From, suppress Change To
Given the node map
"""
a b 1 c d
"""
| a | | b | 1 | c | | d |
And the ways
| nodes | name |
@@ -171,9 +151,7 @@ Feature: New-Name Instructions
Scenario: Empty road names - Loose name shortly
Given the node map
"""
a b c d e
"""
| a | | b | | c | | d | | e |
And the ways
| nodes | name |
@@ -186,228 +164,3 @@ Feature: New-Name Instructions
| waypoints | route | turns |
| a,e | name,with-name,with-name | depart,new name straight,arrive |
| b,e | with-name,with-name | depart,arrive |
Scenario: Both Name and Ref Empty
Given the node map
"""
a b c
"""
And the ways
| nodes | name | ref |
| ab | | |
| bc | | |
When I route I should get
| waypoints | route | turns |
| a,c | , | depart,arrive |
Scenario: Same Name, Ref Extended
Given the node map
"""
a b c
"""
And the ways
| nodes | name | ref |
| ab | A | B1 |
| bc | C | B1;B2 |
When I route I should get
| waypoints | route | turns |
| a,c | A,C,C | depart,new name straight,arrive |
Scenario: Same Name, Ref Removed
Given the node map
"""
a b c
"""
And the ways
| nodes | name | ref |
| ab | A | B1;B2 |
| bc | C | B1 |
When I route I should get
| waypoints | route | turns |
| a,c | A,C,C | depart,new name straight,arrive |
Scenario: Name Removed, Ref Extended
Given the node map
"""
a b c
"""
And the ways
| nodes | name | ref |
| ab | A | B1 |
| bc | | B1;B2 |
When I route I should get
| waypoints | route | turns |
| a,c | A, | depart,arrive |
Scenario: Name Added, Ref Removed
Given the node map
"""
a b c
"""
And the ways
| nodes | name | ref |
| ab | | B1 |
| bc | A | |
When I route I should get
| waypoints | route | turns |
| a,c | ,A,A | depart,new name straight,arrive |
Scenario: Prefix Change
Given the node map
"""
a b c
"""
And the ways
| nodes | name | ref | highway |
| ab | North Central Expressway | US 75 | motorway |
| bc | Central Expressway | US 75 | motorway |
When I route I should get
| waypoints | route | turns |
| a,c | North Central Expressway,Central Expressway,Central Expressway | depart,new name straight,arrive |
Scenario: Prefix Change
Given the node map
"""
a b c
"""
And the ways
| nodes | name | ref | highway |
| ba | North Central Expressway | US 75 | motorway |
| cb | Central Expressway | US 75 | motorway |
When I route I should get
| waypoints | route | turns |
| c,a | Central Expressway,North Central Expressway,North Central Expressway | depart,new name straight,arrive |
Scenario: No Name, Same Reference
Given the node map
"""
a b c
"""
And the ways
| nodes | name | ref | highway |
| ab | Central Expressway | US 75 | motorway |
| bc | | US 75 | motorway |
When I route I should get
| waypoints | route | turns |
| a,c | Central Expressway, | depart,arrive |
Scenario: No Name, Same Reference
Given the node map
"""
a b c
"""
And the ways
| nodes | name | ref | highway |
| ab | | US 75 | motorway |
| bc | Central Expressway | US 75 | motorway |
When I route I should get
| waypoints | route | turns |
| a,c | ,Central Expressway | depart,arrive |
Scenario: No Name, Same Reference
Given the node map
"""
a b c
"""
And the ways
| nodes | name | ref | highway |
| ab | | US 75;US 69 | motorway |
| bc | | US 75 | motorway |
When I route I should get
| waypoints | route | turns |
| a,c | , | depart,arrive |
Scenario: No Name, Same Reference
Given the node map
"""
a b c
"""
And the ways
| nodes | name | ref | highway |
| ab | | US 69;US 75 | motorway |
| bc | | US 75 | motorway |
When I route I should get
| waypoints | route | turns |
| a,c | , | depart,arrive |
Scenario: No Name, Same Reference
Given the node map
"""
a b c
"""
And the ways
| nodes | name | ref | highway |
| ab | | US 75 | motorway |
| bc | | US 75;US 69 | motorway |
When I route I should get
| waypoints | route | turns |
| a,c | , | depart,arrive |
Scenario: No Name, Same Reference
Given the node map
"""
a b c
"""
And the ways
| nodes | name | ref | highway |
| ab | | US 75 | motorway |
| bc | | US 69;US 75 | motorway |
When I route I should get
| waypoints | route | turns |
| a,c | , | depart,arrive |
Scenario: Spaces in refs for containment check, #3086
Given the node map
"""
a b c
"""
And the ways
| nodes | name | ref | highway |
| ab | Keystone | US 64;US 412;OK 151 Detour | motorway |
| bc | Keystone | US 64; US 412 | motorway |
When I route I should get
| waypoints | route | turns |
| a,c | Keystone,Keystone | depart,arrive |
Scenario: More spaces in refs for containment check, #3086
Given the node map
"""
a b c
"""
And the ways
| nodes | name | ref | highway |
| ab | Keystone | US 64; US 412 ; OK 151 Detour | motorway |
| bc | Keystone | US 64 ; US 412 | motorway |
When I route I should get
| waypoints | route | turns |
| a,c | Keystone,Keystone | depart,arrive |
-63
View File
@@ -1,63 +0,0 @@
@routing @guidance @mode-change
Feature: Notification on turn onto mode change
Background:
Given the profile "car"
Given a grid size of 400 meters
Scenario: Turn onto a Ferry
Given the node map
"""
f
b d
a e
"""
And the ways
| nodes | highway | route | name |
| abf | primary | | |
| bd | | ferry | ferry |
| de | primary | | |
When I route I should get
| waypoints | route | turns | modes |
| a,e | ,ferry,, | depart,turn right,notification right,arrive | driving,ferry,driving,driving |
Scenario: Turn onto a Ferry
Given the node map
"""
h g
a c e
b f
"""
And the ways
| nodes | highway | route | name |
| ac | primary | | |
| bah | primary | | |
| ec | | ferry | ferry |
| gef | primary | | |
When I route I should get
| waypoints | route | turns | modes |
| g,h | ,ferry,,, | depart,turn right,notification straight,turn right,arrive | driving,ferry,driving,driving,driving |
| b,g | ,,ferry,, | depart,turn right,notification straight,turn left,arrive | driving,driving,ferry,driving,driving |
Scenario: Straight onto a Ferry
Given the node map
"""
c d i
a
f
"""
And the ways
| nodes | highway | route | name |
| ac | primary | | |
| dc | | ferry | ferry |
| df | primary | | |
When I route I should get
| waypoints | route | turns | modes |
| a,f | ,ferry,, | depart,notification right,notification right,arrive | driving,ferry,driving,driving |
+46 -112
View File
@@ -7,17 +7,15 @@ Feature: Simple Turns
Scenario: Turning into splitting road
Given the node map
"""
a
b
^
/ \
c d
|\
| e
|
f
"""
| | a | | |
| | b | | |
| | | | |
| | | | |
| c | | d | |
| | | | |
| | | | e |
| | | | |
| | | f | |
And the ways
| nodes | name | highway | oneway |
@@ -31,52 +29,20 @@ Feature: Simple Turns
| f,a | depart,arrive | road,road |
| e,a | depart,turn slight right,arrive | turn,road,road |
Scenario: Turning into splitting road
Given the node map
"""
a
g-b
/\
/ \
c d
|\
| e
|
f
"""
And the ways
| nodes | name | highway | oneway |
| ab | road | primary | no |
| bc | road | primary | yes |
| fdb | road | primary | yes |
| de | turn | primary | no |
| bg | left | primary | yes |
When I route I should get
| waypoints | turns | route |
| f,a | depart,arrive | road,road |
| e,a | depart,turn slight right,arrive | turn,road,road |
| e,g | depart,turn slight right,turn left,arrive | turn,road,left,left |
| f,g | depart,turn left,arrive | road,left,left |
| f,c | depart,continue uturn,arrive | road,road,road |
Scenario: Middle Island
Given the node map
"""
a
b
c h
d g
e
f
"""
| | a | |
| | | |
| | b | |
| c | | h |
| | | |
| | | |
| | | |
| | | |
| d | | g |
| | e | |
| | | |
| | f | |
And the ways
| nodes | name | oneway |
@@ -94,20 +60,18 @@ Feature: Simple Turns
Scenario: Middle Island Over Bridge
Given the node map
"""
a
|
.b.
c h
| |
| |
1 2
| |
d g
'e'
|
f
"""
| | a | |
| | | |
| | b | |
| c | | h |
| | | |
| | | |
| 1 | | 2 |
| | | |
| d | | g |
| | e | |
| | | |
| | f | |
And the ways
| nodes | name | oneway |
@@ -132,21 +96,19 @@ Feature: Simple Turns
@negative
Scenario: Don't Collapse Places:
Given the node map
"""
h
g
a b e f
c
d
"""
| | | | | | | h | | | | | | |
| | | | | | | g | | | | | | |
| | | | | | | | | | | | | |
| | | | | | | | | | | | | |
| | | | | | | | | | | | | |
| | | | | | | | | | | | | |
| a | b | | | | | | | | | | e | f |
| | | | | | | | | | | | | |
| | | | | | | | | | | | | |
| | | | | | | | | | | | | |
| | | | | | | | | | | | | |
| | | | | | | c | | | | | | |
| | | | | | | d | | | | | | |
And the ways
| nodes | name | oneway |
@@ -162,31 +124,3 @@ Feature: Simple Turns
| a,f | depart,continue left,continue right,arrive | place,place,place,place |
| d,f | depart,turn right,continue right,arrive | bottom,place,place,place |
| d,h | depart,turn right,continue left,turn right,arrive | bottom,place,place,top,top |
@bug @not-sorted @3179
Scenario: Adjusting road angles to not be sorted
Given the node map
"""
g
|
|
|
_e - - - - - - - - - f
/
a - - - - -b <
i \ _
h c - - - - - - - - - d
"""
And the ways
| nodes | name | oneway |
| ab | road | no |
| febcd | road | yes |
| ge | in | yes |
| eh | right | yes |
| ei | left | yes |
When I route I should get
| waypoints | route |
| g,a | in,road,road |
+3 -5
View File
@@ -8,11 +8,9 @@ Feature: General Post-Processing related features
# this testcase used to crash geometry generation (at that time handled during intersection generation)
Scenario: Regression test #2424
Given the node map
"""
e i
a b c d h k m
f l
"""
| | | e | | | | | | i | | | | |
| a | | b | | c | | d | | h | | k | | m |
| | | | | f | | | | | | l | | |
And the ways
| nodes | name |
+38 -87
View File
@@ -7,10 +7,8 @@ Feature: Ramp Guidance
Scenario: Ramp On Through Street Right
Given the node map
"""
a b c
d
"""
| a | b | c |
| | d | |
And the ways
| nodes | highway |
@@ -23,10 +21,8 @@ Feature: Ramp Guidance
Scenario: Ramp On Through Street Left
Given the node map
"""
d
a b c
"""
| | d | |
| a | b | c |
And the ways
| nodes | highway |
@@ -39,11 +35,9 @@ Feature: Ramp Guidance
Scenario: Ramp On Through Street Left and Right
Given the node map
"""
e
a b c
d
"""
| | e | |
| a | b | c |
| | d | |
And the ways
| nodes | highway |
@@ -58,10 +52,8 @@ Feature: Ramp Guidance
Scenario: Ramp On Three Way Intersection Right
Given the node map
"""
a b c
d
"""
| a | b | c |
| | d | |
And the ways
| nodes | highway |
@@ -75,11 +67,9 @@ Feature: Ramp Guidance
Scenario: Ramp On Three Way Intersection Right
Given the node map
"""
c
a b
d
"""
| | | c |
| a | b | |
| | d | |
And the ways
| nodes | highway |
@@ -93,11 +83,9 @@ Feature: Ramp Guidance
Scenario: Ramp Off Though Street
Given the node map
"""
c
a b
d
"""
| | | | | c |
| a | | | b | |
| | | | d | |
And the ways
| nodes | highway | oneway |
@@ -111,10 +99,8 @@ Feature: Ramp Guidance
Scenario: Straight Ramp Off Turning Though Street
Given the node map
"""
c
a b d
"""
| | | c |
| a | b | d |
And the ways
| nodes | highway |
@@ -128,11 +114,9 @@ Feature: Ramp Guidance
Scenario: Fork Ramp Off Turning Though Street
Given the node map
"""
c
a b
d
"""
| | | c |
| a | b | |
| | | d |
And the ways
| nodes | highway |
@@ -146,11 +130,9 @@ Feature: Ramp Guidance
Scenario: Fork Ramp
Given the node map
"""
c
a b
d
"""
| | | c |
| a | b | |
| | | d |
And the ways
| nodes | highway |
@@ -165,11 +147,9 @@ Feature: Ramp Guidance
Scenario: Fork Slight Ramp
Given the node map
"""
c
a b
d
"""
| | | | c |
| a | b | | |
| | | | d |
And the ways
| nodes | highway |
@@ -184,11 +164,9 @@ Feature: Ramp Guidance
Scenario: Fork Slight Ramp on Through Street
Given the node map
"""
c
a b
d
"""
| | | | c |
| a | b | | |
| | | | d |
And the ways
| nodes | highway |
@@ -202,11 +180,9 @@ Feature: Ramp Guidance
Scenario: Fork Slight Ramp on Obvious Through Street
Given the node map
"""
c
a b
d
"""
| | | | c |
| a | b | | |
| | | | d |
And the ways
| nodes | highway |
@@ -220,11 +196,9 @@ Feature: Ramp Guidance
Scenario: Two Ramps Joining into common Motorway
Given the node map
"""
a
c d
b
"""
| a | | | |
| | | c | d |
| b | | | |
And the ways
| nodes | highway |
@@ -239,11 +213,9 @@ Feature: Ramp Guidance
Scenario: Two Ramps Joining into common Motorway Unnamed
Given the node map
"""
a
c d
b
"""
| a | | | |
| | | c | d |
| b | | | |
And the ways
| nodes | highway | name |
@@ -255,24 +227,3 @@ Feature: Ramp Guidance
| waypoints | route | turns |
| a,d | , | depart,arrive |
| b,d | , | depart,arrive |
Scenario: Ferry Onto A Ramp
Given the node map
"""
d - e - g
|
a - b ~ ~ ~ ~ ~ ~ ~ c
` f
"""
And the ways
| nodes | highway | route | name | ref |
| ab | primary | | boarding | |
| bc | | ferry | boaty mc boatface | m2 |
| cf | | ferry | boaty mc boatface | |
| cd | | ferry | boaty mc boatface's cousin | |
| de | motorway_link | | | |
When I route I should get
| waypoints | route |
| a,e | boarding,boaty mc boatface,boaty mc boatface's cousin,, |
+25 -35
View File
@@ -7,13 +7,11 @@ Feature: Rotary
Scenario: Enter and Exit
Given the node map
"""
a
b
h g c d
e
f
"""
| | | a | | |
| | | b | | |
| h | g | | c | d |
| | | e | | |
| | | f | | |
And the ways
| nodes | junction |
@@ -40,13 +38,11 @@ Feature: Rotary
Scenario: Only Enter
Given the node map
"""
a
b
d c g h
e
f
"""
| | | a | | |
| | | b | | |
| d | c | | g | h |
| | | e | | |
| | | f | | |
And the ways
| nodes | junction |
@@ -73,13 +69,11 @@ Feature: Rotary
Scenario: Only Exit
Given the node map
"""
a
b
d c g h
e
f
"""
| | | a | | |
| | | b | | |
| d | c | | g | h |
| | | e | | |
| | | f | | |
And the ways
| nodes | junction |
@@ -107,13 +101,11 @@ Feature: Rotary
Scenario: Drive Around
Given the node map
"""
a
b
d c g h
e
f
"""
| | | a | | |
| | | b | | |
| d | c | | g | h |
| | | e | | |
| | | f | | |
And the ways
| nodes | junction |
@@ -141,13 +133,11 @@ Feature: Rotary
#needs to be adjusted when name-discovery works for entrys
Scenario: Mixed Entry and Exit
Given the node map
"""
c a
j b f
k e
l h d
g i
"""
| | c | | a | |
| j | | b | | f |
| | k | | e | |
| l | | h | | d |
| | g | | i | |
And the ways
| nodes | junction | oneway |
+45 -65
View File
@@ -7,13 +7,11 @@ Feature: Rotary
Scenario: Enter and Exit
Given the node map
"""
a
b
h g c d
e
f
"""
| | | a | | |
| | | b | | |
| h | g | | c | d |
| | | e | | |
| | | f | | |
And the ways
| nodes | junction |
@@ -40,13 +38,11 @@ Feature: Rotary
Scenario: Only Enter
Given the node map
"""
a
b
d c g h
e
f
"""
| | | a | | |
| | | b | | |
| d | c | | g | h |
| | | e | | |
| | | f | | |
And the ways
| nodes | junction |
@@ -73,13 +69,11 @@ Feature: Rotary
Scenario: Only Exit
Given the node map
"""
a
b
d c g h
e
f
"""
| | | a | | |
| | | b | | |
| d | c | | g | h |
| | | e | | |
| | | f | | |
And the ways
| nodes | junction |
@@ -107,13 +101,11 @@ Feature: Rotary
Scenario: Drive Around
Given the node map
"""
a
b
d c g h
e
f
"""
| | | a | | |
| | | b | | |
| d | c | | g | h |
| | | e | | |
| | | f | | |
And the ways
| nodes | junction |
@@ -141,13 +133,11 @@ Feature: Rotary
#needs to be adjusted when name-discovery works for entrys
Scenario: Mixed Entry and Exit
Given the node map
"""
c a
j b f
k e
l h d
g i
"""
| | c | | a | |
| j | | b | | f |
| | k | | e | |
| l | | h | | d |
| | g | | i | |
And the ways
| nodes | junction | oneway |
@@ -178,12 +168,10 @@ Feature: Rotary
Scenario: Collinear in X,Y
Given the node map
"""
a
b
c d f
e
"""
| a | | |
| b | | |
| c | d | f |
| e | | |
And the ways
| nodes | junction |
@@ -199,12 +187,10 @@ Feature: Rotary
Scenario: Collinear in X,Y
Given the node map
"""
a
d
b c f
e
"""
| a | | |
| d | | |
| b | c | f |
| e | | |
And the ways
| nodes | junction |
@@ -220,12 +206,10 @@ Feature: Rotary
Scenario: Collinear in X,Y
Given the node map
"""
a
c
d b f
e
"""
| a | | |
| c | | |
| d | b | f |
| e | | |
And the ways
| nodes | junction |
@@ -241,12 +225,10 @@ Feature: Rotary
Scenario: Collinear in X,Y
Given the node map
"""
f
d c e
b
a
"""
| f | | |
| d | c | e |
| | b | |
| | a | |
And the ways
| nodes | junction |
@@ -262,12 +244,10 @@ Feature: Rotary
Scenario: Collinear in X,Y
Given the node map
"""
f
d c e
b
a
"""
| f | | |
| d | c | e |
| b | | |
| a | | |
And the ways
| nodes | junction |
+20 -28
View File
@@ -7,13 +7,11 @@ Feature: Basic Roundabout
Scenario: Only Enter
Given the node map
"""
a
b
d c g h
e
f
"""
| | | a | | |
| | | b | | |
| d | c | | g | h |
| | | e | | |
| | | f | | |
And the ways
| nodes | junction |
@@ -40,13 +38,11 @@ Feature: Basic Roundabout
Scenario: Only Exit
Given the node map
"""
a
b
d c g h
e
f
"""
| | | a | | |
| | | b | | |
| d | c | | g | h |
| | | e | | |
| | | f | | |
And the ways
| nodes | junction |
@@ -74,13 +70,11 @@ Feature: Basic Roundabout
Scenario: Drive Around
Given the node map
"""
a
b
d c g h
e
f
"""
| | | a | | |
| | | b | | |
| d | c | | g | h |
| | | e | | |
| | | f | | |
And the ways
| nodes | junction |
@@ -107,13 +101,11 @@ Feature: Basic Roundabout
Scenario: Mixed Entry and Exit
Given the node map
"""
c a
j b f
k e
l h d
g i
"""
| | c | | a | |
| j | | b | | f |
| | k | | e | |
| l | | h | | d |
| | g | | i | |
And the ways
| nodes | junction | oneway |
@@ -1,59 +0,0 @@
@routing @guidance @left-handed
Feature: Basic Roundabout
Background:
Given a grid size of 10 meters
Given the profile file
"""
require 'car'
properties.left_hand_driving = true
"""
Scenario: Roundabout exit counting for left sided driving
And a grid size of 10 meters
And the node map
"""
a
b
h g c d
e
f
"""
And the ways
| nodes | junction |
| ab | |
| cd | |
| ef | |
| gh | |
| bcegb | roundabout |
When I route I should get
| waypoints | route | turns |
| a,d | ab,cd,cd | depart,roundabout turn left exit-1,arrive |
| a,f | ab,ef,ef | depart,roundabout turn straight exit-2,arrive |
| a,h | ab,gh,gh | depart,roundabout turn right exit-3,arrive |
Scenario: Mixed Entry and Exit
And a grid size of 10 meters
And the node map
"""
c a
j b f
k e
l h d
g i
"""
And the ways
| nodes | junction | oneway |
| cba | | yes |
| fed | | yes |
| ihg | | yes |
| lkj | | yes |
| behkb | roundabout | yes |
When I route I should get
| waypoints | route | turns |
| c,a | cba,cba,cba | depart,roundabout-exit-1,arrive |
| l,a | lkj,cba,cba | depart,roundabout-exit-2,arrive |
| i,a | ihg,cba,cba | depart,roundabout-exit-3,arrive |
@@ -7,13 +7,11 @@ Feature: Basic Roundabout
Scenario: Enter and Exit
Given the node map
"""
a
b
h g c d
e
f
"""
| | | a | | |
| | | b | | |
| h | g | | c | d |
| | | e | | |
| | | f | | |
And the ways
| nodes | junction |

Some files were not shown because too many files have changed in this diff Show More