Compare commits
35 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| cc0c28f366 | |||
| 66cc99703c | |||
| f7fbca3e5e | |||
| 9695eaa28a | |||
| 0d7546a510 | |||
| 9dc8136240 | |||
| a02a83f8bd | |||
| 9b18f55d29 | |||
| a3434e7ae9 | |||
| 64b15028e4 | |||
| d8e466fdaa | |||
| 43bbe8f2ae | |||
| b5c10b1fbf | |||
| 57d93fc5dc | |||
| 3aba2bc2d0 | |||
| c42478f0ee | |||
| ea583a77ff | |||
| dd999e112e | |||
| 69c54bef72 | |||
| cfee0f1109 | |||
| c7ce758e1c | |||
| 3ac4fb5933 | |||
| 2afe5e971b | |||
| 519b744502 | |||
| d3c2ac671f | |||
| 07a1a907f8 | |||
| 062cae82a0 | |||
| 316c7781a3 | |||
| e11bcfece5 | |||
| cb8dee3e60 | |||
| a1abe71d9f | |||
| d54c837e51 | |||
| 106d17541d | |||
| ad29b237e3 | |||
| febefb4684 |
+1
-8
@@ -7,8 +7,6 @@
|
|||||||
#############################
|
#############################
|
||||||
osrm-deps
|
osrm-deps
|
||||||
|
|
||||||
.ycm_extra_conf.py
|
|
||||||
|
|
||||||
# Compiled source #
|
# Compiled source #
|
||||||
###################
|
###################
|
||||||
*.com
|
*.com
|
||||||
@@ -49,9 +47,6 @@ Thumbs.db
|
|||||||
/build/
|
/build/
|
||||||
/example/build/
|
/example/build/
|
||||||
/test/data/monaco*
|
/test/data/monaco*
|
||||||
/test/data/ch
|
|
||||||
/test/data/corech
|
|
||||||
/test/data/mld
|
|
||||||
/cmake/postinst
|
/cmake/postinst
|
||||||
|
|
||||||
# Eclipse related files #
|
# Eclipse related files #
|
||||||
@@ -91,6 +86,7 @@ stxxl.errlog
|
|||||||
/test/cache
|
/test/cache
|
||||||
/test/speeds.csv
|
/test/speeds.csv
|
||||||
/test/penalties.csv
|
/test/penalties.csv
|
||||||
|
/test/data/monaco.*
|
||||||
node_modules
|
node_modules
|
||||||
|
|
||||||
# Deprecated config file #
|
# Deprecated config file #
|
||||||
@@ -101,6 +97,3 @@ node_modules
|
|||||||
|
|
||||||
# local lua debugging file
|
# local lua debugging file
|
||||||
debug.lua
|
debug.lua
|
||||||
|
|
||||||
# node-osrm artifacts
|
|
||||||
lib/binding
|
|
||||||
|
|||||||
+49
-193
@@ -7,22 +7,15 @@ git:
|
|||||||
sudo: required
|
sudo: required
|
||||||
dist: trusty
|
dist: trusty
|
||||||
|
|
||||||
node_js:
|
|
||||||
- "4"
|
|
||||||
- "6"
|
|
||||||
|
|
||||||
notifications:
|
notifications:
|
||||||
email: false
|
email: false
|
||||||
|
|
||||||
branches:
|
branches:
|
||||||
only:
|
only:
|
||||||
- master
|
- master
|
||||||
- "5.7"
|
- "5.6"
|
||||||
# enable building tags
|
|
||||||
- /^v\d+\.\d+(\.\d+)?(-\S*)?$/
|
|
||||||
|
|
||||||
cache:
|
cache:
|
||||||
yarn: true
|
|
||||||
ccache: true
|
ccache: true
|
||||||
apt: true
|
apt: true
|
||||||
directories:
|
directories:
|
||||||
@@ -30,16 +23,12 @@ cache:
|
|||||||
|
|
||||||
env:
|
env:
|
||||||
global:
|
global:
|
||||||
- secure: "hk+32aXXF5t1ApaM2Wjqooz3dx1si907L87WRMkO47WlpJmUUU/Ye+MJk9sViH8MdhOcceocVAmdYl5/WFWOIbDWNlBya9QvXDZyIu2KIre/0QyOCTZbrsif8paBXKIO5O/R4OTvIZ8rvWZsadBdmAT9GSbDhih6FzqXAEgeIYQ="
|
|
||||||
- secure: "VE+cFkseFwW4jK6XwkP0yW3h4DixPJ8+Eb3yKcchGZ5iIJxlZ/8i1vKHYxadgPRwSYwPSB14tF70xj2OmiT2keGzZUfphmPXinBaLEhYk+Bde+GZZkoSl5ND109I/LcyNr0nG9dDgtV6pkvFchgchpyP9JnVOOS0+crEZlAz0RE="
|
|
||||||
- CCACHE_TEMPDIR=/tmp/.ccache-temp
|
- CCACHE_TEMPDIR=/tmp/.ccache-temp
|
||||||
- CCACHE_COMPRESS=1
|
- 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
|
- 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
|
- CCACHE_VERSION=3.3.1
|
||||||
- CMAKE_VERSION=3.7.2
|
- CMAKE_VERSION=3.6.2
|
||||||
- MASON="$(pwd)/scripts/mason.sh"
|
- MASON="$(pwd)/third_party/mason/mason"
|
||||||
- ENABLE_NODE_BINDINGS=On
|
|
||||||
- NODE="4"
|
|
||||||
|
|
||||||
matrix:
|
matrix:
|
||||||
fast_finish: true
|
fast_finish: true
|
||||||
@@ -49,30 +38,26 @@ matrix:
|
|||||||
|
|
||||||
# Debug Builds
|
# Debug Builds
|
||||||
- os: linux
|
- os: linux
|
||||||
compiler: "gcc-6-debug-cov-asan"
|
compiler: "gcc-6-debug"
|
||||||
addons: &gcc6
|
addons: &gcc6
|
||||||
apt:
|
apt:
|
||||||
sources: ['ubuntu-toolchain-r-test']
|
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']
|
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
|
env: CCOMPILER='gcc-6' CXXCOMPILER='g++-6' BUILD_TYPE='Debug' TARGET_ARCH='x86_64-asan' ENABLE_COVERAGE=ON ENABLE_SANITIZER=ON BUILD_COMPONENTS=ON
|
||||||
after_success:
|
|
||||||
- bash <(curl -s https://codecov.io/bash)
|
|
||||||
|
|
||||||
- os: linux
|
- os: linux
|
||||||
compiler: "clang-4.0-debug"
|
compiler: "clang-3.9-debug"
|
||||||
addons: &clang40
|
addons: &clang38
|
||||||
apt:
|
apt:
|
||||||
sources: ['ubuntu-toolchain-r-test']
|
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']
|
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='4.0.0' BUILD_TYPE='Debug' CUCUMBER_TIMEOUT=60000
|
env: CLANG_VERSION='3.9.1' BUILD_TYPE='Debug' BUILD_COMPONENTS=ON CUCUMBER_TIMEOUT=60000
|
||||||
|
|
||||||
- os: linux
|
- os: osx
|
||||||
compiler: "mason-linux-debug-asan"
|
osx_image: xcode8.2
|
||||||
addons:
|
compiler: "mason-osx-release"
|
||||||
apt:
|
# we use the xcode provides clang and don't install our own
|
||||||
sources: ['ubuntu-toolchain-r-test']
|
env: ENABLE_MASON=ON BUILD_TYPE='Release' CUCUMBER_TIMEOUT=60000 CCOMPILER='clang' CXXCOMPILER='clang++' ENABLE_ASSERTIONS=ON
|
||||||
packages: ['libstdc++-5-dev']
|
|
||||||
env: CLANG_VERSION='4.0.0' BUILD_TYPE='Release' ENABLE_MASON=ON ENABLE_SANITIZER=ON
|
|
||||||
|
|
||||||
# Release Builds
|
# Release Builds
|
||||||
- os: linux
|
- os: linux
|
||||||
@@ -81,7 +66,7 @@ matrix:
|
|||||||
apt:
|
apt:
|
||||||
sources: ['ubuntu-toolchain-r-test']
|
sources: ['ubuntu-toolchain-r-test']
|
||||||
packages: ['libstdc++-5-dev']
|
packages: ['libstdc++-5-dev']
|
||||||
env: CLANG_VERSION='4.0.0' BUILD_TYPE='Release' ENABLE_MASON=ON RUN_CLANG_FORMAT=ON ENABLE_LTO=ON
|
env: CLANG_VERSION='3.9.1' BUILD_TYPE='Release' ENABLE_MASON=ON RUN_CLANG_FORMAT=ON
|
||||||
|
|
||||||
- os: linux
|
- os: linux
|
||||||
compiler: "gcc-6-release"
|
compiler: "gcc-6-release"
|
||||||
@@ -89,13 +74,13 @@ matrix:
|
|||||||
apt:
|
apt:
|
||||||
sources: ['ubuntu-toolchain-r-test']
|
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']
|
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'
|
env: CCOMPILER='gcc-6' CXXCOMPILER='g++-6' BUILD_TYPE='Release' BUILD_COMPONENTS=ON
|
||||||
|
|
||||||
- os: linux
|
- os: linux
|
||||||
compiler: "gcc-6-release-i686"
|
compiler: "gcc-6-release-i686"
|
||||||
env: >
|
env: >
|
||||||
TARGET_ARCH='i686' CCOMPILER='gcc-6' CXXCOMPILER='g++-6' BUILD_TYPE='Release'
|
TARGET_ARCH='i686' CCOMPILER='gcc-6' CXXCOMPILER='g++-6' BUILD_TYPE='Release'
|
||||||
CFLAGS='-m32 -msse2 -mfpmath=sse' CXXFLAGS='-m32 -msse2 -mfpmath=sse'
|
CFLAGS='-m32 -msse2 -mfpmath=sse' CXXFLAGS='-m32 -msse2 -mfpmath=sse' CHECK_HEADERS=yes
|
||||||
|
|
||||||
- os: linux
|
- os: linux
|
||||||
compiler: "gcc-4.9-release"
|
compiler: "gcc-4.9-release"
|
||||||
@@ -105,22 +90,14 @@ matrix:
|
|||||||
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']
|
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'
|
env: CCOMPILER='gcc-4.9' CXXCOMPILER='g++-4.9' BUILD_TYPE='Release'
|
||||||
|
|
||||||
- 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 ENABLE_LTO=ON
|
|
||||||
after_success:
|
|
||||||
- ./scripts/travis/publish.sh
|
|
||||||
|
|
||||||
# Disabled because of CI slowness
|
# Disabled because of CI slowness
|
||||||
#- os: linux
|
#- os: linux
|
||||||
#- compiler: clang
|
#- compiler: clang
|
||||||
#- addons: &clang40
|
#- addons: &clang38
|
||||||
#- apt:
|
#- apt:
|
||||||
#- sources: ['llvm-toolchain-trusty-4.0', 'ubuntu-toolchain-r-test']
|
#- sources: ['llvm-toolchain-precise-3.8', 'ubuntu-toolchain-r-test']
|
||||||
#- packages: ['clang-4.0', 'libbz2-dev', 'libstxxl-dev', 'libstxxl1', 'libxml2-dev', 'libzip-dev', 'lua5.1', 'liblua5.1-0-dev', 'libtbb-dev', 'libgdal-dev', 'libluabind-dev', 'libboost-all-dev']
|
#- 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-4.0' CXXCOMPILER='clang++-4.0' BUILD_TYPE='Release'
|
#- env: CCOMPILER='clang-3.8' CXXCOMPILER='clang++-3.8' BUILD_TYPE='Release'
|
||||||
|
|
||||||
# Shared Library
|
# Shared Library
|
||||||
- os: linux
|
- os: linux
|
||||||
@@ -129,123 +106,22 @@ matrix:
|
|||||||
apt:
|
apt:
|
||||||
sources: ['ubuntu-toolchain-r-test']
|
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']
|
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
|
env: CCOMPILER='gcc-6' CXXCOMPILER='g++-6' BUILD_TYPE='Release' BUILD_SHARED_LIBS=ON BUILD_COMPONENTS=ON
|
||||||
|
|
||||||
# Disabled because CI slowness
|
# Disabled because CI slowness
|
||||||
#- os: linux
|
#- os: linux
|
||||||
#- compiler: clang
|
#- compiler: clang
|
||||||
#- addons: &clang40
|
#- addons: &clang38
|
||||||
#- apt:
|
#- apt:
|
||||||
#- sources: ['llvm-toolchain-trusty-4.0', 'ubuntu-toolchain-r-test']
|
#- sources: ['llvm-toolchain-precise-3.8', 'ubuntu-toolchain-r-test']
|
||||||
#- packages: ['clang-4.0', 'libbz2-dev', 'libstxxl-dev', 'libstxxl1', 'libxml2-dev', 'libzip-dev', 'lua5.1', 'liblua5.1-0-dev', 'libtbb-dev', 'libgdal-dev', 'libluabind-dev', 'libboost-all-dev']
|
#- 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-4.0' CXXCOMPILER='clang++-4.0' BUILD_TYPE='Release' BUILD_SHARED_LIBS=ON
|
#- env: CCOMPILER='clang-3.8' CXXCOMPILER='clang++-3.8' BUILD_TYPE='Release' BUILD_SHARED_LIBS=ON
|
||||||
|
|
||||||
# Node build jobs. These skip running the tests.
|
|
||||||
- os: linux
|
|
||||||
sudo: false
|
|
||||||
compiler: "node-4-mason-linux-release"
|
|
||||||
addons:
|
|
||||||
apt:
|
|
||||||
sources: ['ubuntu-toolchain-r-test']
|
|
||||||
packages: ['libstdc++-5-dev']
|
|
||||||
env: CLANG_VERSION='4.0.0' BUILD_TYPE='Release' ENABLE_MASON=ON ENABLE_LTO=ON PUBLISH_NODE_BINDINGS=On JOBS=3
|
|
||||||
install:
|
|
||||||
- pushd ${OSRM_BUILD_DIR}
|
|
||||||
- |
|
|
||||||
cmake .. -DCMAKE_BUILD_TYPE=${BUILD_TYPE} \
|
|
||||||
-DENABLE_MASON=${ENABLE_MASON:-OFF} \
|
|
||||||
-DENABLE_NODE_BINDINGS=${ENABLE_NODE_BINDINGS:-OFF} \
|
|
||||||
-DENABLE_CCACHE=ON \
|
|
||||||
-DCMAKE_INSTALL_PREFIX=${OSRM_INSTALL_DIR}
|
|
||||||
- make --jobs=${JOBS}
|
|
||||||
- popd
|
|
||||||
script:
|
|
||||||
- npm run nodejs-tests
|
|
||||||
after_success:
|
|
||||||
- ./scripts/travis/publish.sh
|
|
||||||
|
|
||||||
- os: linux
|
|
||||||
sudo: false
|
|
||||||
compiler: "node-4-mason-linux-release"
|
|
||||||
addons:
|
|
||||||
apt:
|
|
||||||
sources: ['ubuntu-toolchain-r-test']
|
|
||||||
packages: ['libstdc++-5-dev']
|
|
||||||
env: CLANG_VERSION='4.0.0' BUILD_TYPE='Debug' ENABLE_MASON=ON ENABLE_LTO=ON PUBLISH_NODE_BINDINGS=On JOBS=3
|
|
||||||
install:
|
|
||||||
- pushd ${OSRM_BUILD_DIR}
|
|
||||||
- |
|
|
||||||
cmake .. -DCMAKE_BUILD_TYPE=${BUILD_TYPE} \
|
|
||||||
-DENABLE_MASON=${ENABLE_MASON:-OFF} \
|
|
||||||
-DENABLE_NODE_BINDINGS=${ENABLE_NODE_BINDINGS:-OFF} \
|
|
||||||
-DENABLE_CCACHE=ON \
|
|
||||||
-DCMAKE_INSTALL_PREFIX=${OSRM_INSTALL_DIR}
|
|
||||||
- make --jobs=${JOBS}
|
|
||||||
- popd
|
|
||||||
script:
|
|
||||||
- npm run nodejs-tests
|
|
||||||
after_success:
|
|
||||||
- ./scripts/travis/publish.sh
|
|
||||||
|
|
||||||
- os: linux
|
|
||||||
sudo: false
|
|
||||||
compiler: "node-6-mason-linux-release"
|
|
||||||
addons:
|
|
||||||
apt:
|
|
||||||
sources: ['ubuntu-toolchain-r-test']
|
|
||||||
packages: ['libstdc++-5-dev']
|
|
||||||
env: CLANG_VERSION='4.0.0' BUILD_TYPE='Release' ENABLE_MASON=ON ENABLE_LTO=ON PUBLISH_NODE_BINDINGS=On JOBS=3 NODE="6"
|
|
||||||
install:
|
|
||||||
- pushd ${OSRM_BUILD_DIR}
|
|
||||||
- |
|
|
||||||
cmake .. -DCMAKE_BUILD_TYPE=${BUILD_TYPE} \
|
|
||||||
-DENABLE_MASON=${ENABLE_MASON:-OFF} \
|
|
||||||
-DENABLE_NODE_BINDINGS=${ENABLE_NODE_BINDINGS:-OFF} \
|
|
||||||
-DENABLE_CCACHE=ON \
|
|
||||||
-DCMAKE_INSTALL_PREFIX=${OSRM_INSTALL_DIR}
|
|
||||||
- make --jobs=${JOBS}
|
|
||||||
- popd
|
|
||||||
script:
|
|
||||||
- npm run nodejs-tests
|
|
||||||
after_success:
|
|
||||||
- ./scripts/travis/publish.sh
|
|
||||||
|
|
||||||
- os: linux
|
|
||||||
sudo: false
|
|
||||||
compiler: "node-6-mason-linux-release"
|
|
||||||
addons:
|
|
||||||
apt:
|
|
||||||
sources: ['ubuntu-toolchain-r-test']
|
|
||||||
packages: ['libstdc++-5-dev']
|
|
||||||
env: CLANG_VERSION='4.0.0' BUILD_TYPE='Debug' ENABLE_MASON=ON ENABLE_LTO=ON PUBLISH_NODE_BINDINGS=On JOBS=3 NODE="6"
|
|
||||||
install:
|
|
||||||
- pushd ${OSRM_BUILD_DIR}
|
|
||||||
- |
|
|
||||||
cmake .. -DCMAKE_BUILD_TYPE=${BUILD_TYPE} \
|
|
||||||
-DENABLE_MASON=${ENABLE_MASON:-OFF} \
|
|
||||||
-DENABLE_NODE_BINDINGS=${ENABLE_NODE_BINDINGS:-OFF} \
|
|
||||||
-DENABLE_CCACHE=ON \
|
|
||||||
-DCMAKE_INSTALL_PREFIX=${OSRM_INSTALL_DIR}
|
|
||||||
- make --jobs=${JOBS}
|
|
||||||
- popd
|
|
||||||
script:
|
|
||||||
- npm run nodejs-tests
|
|
||||||
after_success:
|
|
||||||
- ./scripts/travis/publish.sh
|
|
||||||
|
|
||||||
before_install:
|
before_install:
|
||||||
- source $NVM_DIR/nvm.sh
|
|
||||||
- nvm install $NODE
|
|
||||||
- nvm use $NODE
|
|
||||||
- node --version
|
|
||||||
- if [[ ! -z $TARGET_ARCH ]] ; then source ./scripts/travis/before_install.$TARGET_ARCH.sh ; fi
|
- if [[ ! -z $TARGET_ARCH ]] ; then source ./scripts/travis/before_install.$TARGET_ARCH.sh ; fi
|
||||||
- |
|
- |
|
||||||
if [[ -z $JOBS ]]; then
|
if [[ "${TRAVIS_OS_NAME}" == "linux" ]]; then
|
||||||
if [[ "${TRAVIS_OS_NAME}" == "linux" ]]; then
|
export JOBS=$((`nproc` + 1))
|
||||||
export JOBS=$((`nproc` + 1))
|
|
||||||
elif [[ "${TRAVIS_OS_NAME}" == "osx" ]]; then
|
|
||||||
export JOBS=$((`sysctl -n hw.ncpu` + 1))
|
|
||||||
fi
|
|
||||||
fi
|
fi
|
||||||
- |
|
- |
|
||||||
if [ -n "${RUN_CLANG_FORMAT}" ]; then
|
if [ -n "${RUN_CLANG_FORMAT}" ]; then
|
||||||
@@ -253,24 +129,15 @@ before_install:
|
|||||||
fi
|
fi
|
||||||
- |
|
- |
|
||||||
if [[ "${TRAVIS_OS_NAME}" == "osx" ]]; then
|
if [[ "${TRAVIS_OS_NAME}" == "osx" ]]; then
|
||||||
|
export JOBS=$((`sysctl -n hw.ncpu` + 1))
|
||||||
sudo mdutil -i off /
|
sudo mdutil -i off /
|
||||||
fi
|
fi
|
||||||
- |
|
|
||||||
if [[ ! -f $(which yarn) ]]; then
|
|
||||||
npm install -g yarn
|
|
||||||
fi
|
|
||||||
- export PACKAGE_JSON_VERSION=$(node -e "console.log(require('./package.json').version)")
|
|
||||||
- export PUBLISH=$([[ "${TRAVIS_TAG:-}" == "v${PACKAGE_JSON_VERSION}" ]] && echo "On" || echo "Off")
|
|
||||||
- echo "Using ${JOBS} jobs"
|
- echo "Using ${JOBS} jobs"
|
||||||
- yarn install --ignore-scripts
|
- source ./scripts/install_node.sh 4
|
||||||
# Bootstrap cmake to be able to run mason
|
- npm install -g "npm@>=3" # Upgrade to npm >v2 to reduce size of downloaded dependencies
|
||||||
- CMAKE_URL="https://mason-binaries.s3.amazonaws.com/${TRAVIS_OS_NAME}-x86_64/cmake/${CMAKE_VERSION}.tar.gz"
|
- npm install
|
||||||
- CMAKE_DIR="mason_packages/${TRAVIS_OS_NAME}-x86_64/cmake/${CMAKE_VERSION}"
|
|
||||||
- mkdir -p ${CMAKE_DIR}
|
|
||||||
- travis_retry wget --quiet -O - ${CMAKE_URL} | tar --strip-components=1 -xz -C ${CMAKE_DIR} || exit 1
|
|
||||||
- export PATH=${CMAKE_DIR}/bin:${PATH}
|
|
||||||
- ${MASON} install tbb 2017_20161128 && export LD_LIBRARY_PATH=$(${MASON} prefix tbb 2017_20161128)/lib/:${LD_LIBRARY_PATH}
|
|
||||||
- ${MASON} install ccache ${CCACHE_VERSION} && export PATH=$(${MASON} prefix ccache ${CCACHE_VERSION})/bin:${PATH}
|
- ${MASON} install ccache ${CCACHE_VERSION} && export PATH=$(${MASON} prefix ccache ${CCACHE_VERSION})/bin:${PATH}
|
||||||
|
- ${MASON} install cmake ${CMAKE_VERSION} && export PATH=$(${MASON} prefix cmake ${CMAKE_VERSION})/bin:${PATH}
|
||||||
- |
|
- |
|
||||||
if [[ ! -z ${CLANG_VERSION} ]]; then
|
if [[ ! -z ${CLANG_VERSION} ]]; then
|
||||||
export CCOMPILER='clang'
|
export CCOMPILER='clang'
|
||||||
@@ -284,28 +151,16 @@ before_install:
|
|||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
- ccache --max-size=256M # limiting the cache's size to roughly the previous job's object sizes
|
- ccache --max-size=256M # limiting the cache's size to roughly the previous job's object sizes
|
||||||
- export OSRM_INSTALL_DIR="$(pwd)/install-osrm"
|
|
||||||
- export OSRM_BUILD_DIR="$(pwd)/build-osrm"
|
|
||||||
- export CC=${CCOMPILER} CXX=${CXXCOMPILER}
|
|
||||||
- mkdir ${OSRM_BUILD_DIR}
|
|
||||||
|
|
||||||
install:
|
install:
|
||||||
- |
|
- |
|
||||||
if [[ "${TRAVIS_OS_NAME}" == "linux" ]]; then
|
if [[ "${TRAVIS_OS_NAME}" == "linux" ]]; then
|
||||||
./scripts/check_taginfo.py taginfo.json profiles/car.lua
|
./scripts/check_taginfo.py taginfo.json profiles/car.lua
|
||||||
fi
|
fi
|
||||||
- pushd ${OSRM_BUILD_DIR}
|
- export OSRM_BUILD_DIR="$(pwd)/build-osrm"
|
||||||
- |
|
- mkdir ${OSRM_BUILD_DIR} && pushd ${OSRM_BUILD_DIR}
|
||||||
cmake .. -DCMAKE_BUILD_TYPE=${BUILD_TYPE} \
|
- export CC=${CCOMPILER} CXX=${CXXCOMPILER}
|
||||||
-DENABLE_MASON=${ENABLE_MASON:-OFF} \
|
- 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
|
||||||
-DENABLE_ASSERTIONS=${ENABLE_ASSERTIONS:-OFF} \
|
|
||||||
-DBUILD_SHARED_LIBS=${BUILD_SHARED_LIBS:-OFF} \
|
|
||||||
-DENABLE_COVERAGE=${ENABLE_COVERAGE:-OFF} \
|
|
||||||
-DENABLE_NODE_BINDINGS=${ENABLE_NODE_BINDINGS:-OFF} \
|
|
||||||
-DENABLE_SANITIZER=${ENABLE_SANITIZER:-OFF} \
|
|
||||||
-DBUILD_TOOLS=ON \
|
|
||||||
-DENABLE_CCACHE=ON \
|
|
||||||
-DCMAKE_INSTALL_PREFIX=${OSRM_INSTALL_DIR}
|
|
||||||
- echo "travis_fold:start:MAKE"
|
- echo "travis_fold:start:MAKE"
|
||||||
- make --jobs=${JOBS}
|
- make --jobs=${JOBS}
|
||||||
- make tests --jobs=${JOBS}
|
- make tests --jobs=${JOBS}
|
||||||
@@ -315,33 +170,34 @@ install:
|
|||||||
- sudo make install
|
- sudo make install
|
||||||
- |
|
- |
|
||||||
if [[ "${TRAVIS_OS_NAME}" == "linux" ]]; then
|
if [[ "${TRAVIS_OS_NAME}" == "linux" ]]; then
|
||||||
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:${OSRM_INSTALL_DIR}/lib
|
sudo ldconfig
|
||||||
fi
|
fi
|
||||||
|
- if [[ ${CHECK_HEADERS} == yes ]] ; then make check-headers ; fi
|
||||||
- popd
|
- popd
|
||||||
- mkdir example/build && pushd example/build
|
- mkdir example/build && pushd example/build
|
||||||
- export PKG_CONFIG_PATH=${OSRM_INSTALL_DIR}/lib/pkgconfig
|
|
||||||
- cmake .. -DCMAKE_BUILD_TYPE=${BUILD_TYPE}
|
- cmake .. -DCMAKE_BUILD_TYPE=${BUILD_TYPE}
|
||||||
- make --jobs=${JOBS}
|
- make --jobs=${JOBS}
|
||||||
- popd
|
- popd
|
||||||
# building docs only works with npm3+ not with yarn or npm2
|
- npm run build-api-docs
|
||||||
#- yarn run docs
|
|
||||||
|
|
||||||
script:
|
script:
|
||||||
- if [[ $TARGET_ARCH == armhf ]] ; then echo "Skip tests for $TARGET_ARCH" && exit 0 ; fi
|
- if [[ $TARGET_ARCH == armhf ]] ; then echo "Skip tests for $TARGET_ARCH" && exit 0 ; fi
|
||||||
|
- echo "travis_fold:start:BENCHMARK"
|
||||||
- make -C test/data benchmark
|
- make -C test/data benchmark
|
||||||
- ./example/build/osrm-example test/data/ch/monaco.osrm
|
- echo "travis_fold:end:BENCHMARK"
|
||||||
|
- ./example/build/osrm-example test/data/monaco.osrm
|
||||||
# All tests assume to be run from the build directory
|
# All tests assume to be run from the build directory
|
||||||
- pushd ${OSRM_BUILD_DIR}
|
- pushd ${OSRM_BUILD_DIR}
|
||||||
- ./unit_tests/library-tests
|
- ./unit_tests/library-tests ../test/data/monaco.osrm
|
||||||
- ./unit_tests/extractor-tests
|
- ./unit_tests/extractor-tests
|
||||||
- ./unit_tests/engine-tests
|
- ./unit_tests/engine-tests
|
||||||
- ./unit_tests/util-tests
|
- ./unit_tests/util-tests
|
||||||
- ./unit_tests/server-tests
|
- ./unit_tests/server-tests
|
||||||
- ./unit_tests/partition-tests
|
|
||||||
- |
|
|
||||||
if [ -z "${ENABLE_SANITIZER}" ] && [ "$TARGET_ARCH" != "i686" ]; then
|
|
||||||
npm run nodejs-tests
|
|
||||||
fi
|
|
||||||
- popd
|
- popd
|
||||||
- yarn test
|
- npm test
|
||||||
|
|
||||||
|
after_success:
|
||||||
|
- |
|
||||||
|
if [ -n "${ENABLE_COVERAGE}" ]; then
|
||||||
|
bash <(curl -s https://codecov.io/bash)
|
||||||
|
fi
|
||||||
|
|||||||
+2
-59
@@ -1,61 +1,3 @@
|
|||||||
# 5.7.4
|
|
||||||
- Changes from 5.7.3:
|
|
||||||
- Bug fixes:
|
|
||||||
- Fixes 4100: Fix steps collapsing after non-closed roundabouts
|
|
||||||
- Fixes 4129: Fix invalid roundabout instructions for different driving modes
|
|
||||||
|
|
||||||
# 5.7.3
|
|
||||||
- Changes from 5.7.2:
|
|
||||||
- Bug fixes:
|
|
||||||
- Fixes 4097: .ramIndex files was able to be truncated siliently
|
|
||||||
|
|
||||||
# 5.7.2
|
|
||||||
- Changes from 5.7.1:
|
|
||||||
- Bug fixes:
|
|
||||||
- Fixes segmentation fault caused by the fix for 3977
|
|
||||||
|
|
||||||
# 5.7.1
|
|
||||||
- Changes from 5.7.0:
|
|
||||||
- Bug fixes:
|
|
||||||
- Fixes 3995: Negative duration caused by rounding issues.
|
|
||||||
- Fixes 3977: Fixes exit number in roundabout if starting inside the roundabout
|
|
||||||
- Fixes 3981: The NodeJS documentation was outdated and incomplete.
|
|
||||||
- Fixes 4010: Performance regression while parsing CSV files. Now 5x faster.
|
|
||||||
- Fixes 3919: Turn penalties on the cyclabilty metric were disabled.
|
|
||||||
- Fixes 3992: Table plugin not checking for valid phantom nodes
|
|
||||||
- Fixes 4013: `continue_straight` interaction with bearing constraints
|
|
||||||
- Fixes 4063: Potential overflow in custom profiles for restricted ways
|
|
||||||
- Fixes 4030: Roundabout edge-case crashes post-processing
|
|
||||||
|
|
||||||
# 5.7.0
|
|
||||||
- Changes from 5.6
|
|
||||||
- Bug fixes:
|
|
||||||
- Fixed 505: Invalid distance value for distance as routing weight.
|
|
||||||
- Fixed 3958: Fix traffic light penalties for non-turns
|
|
||||||
- Fixed 3933: crash when collapsing instructions
|
|
||||||
- Algorithm:
|
|
||||||
- OSRM object has new option `algorithm` that allows the selection of a routing algorithm.
|
|
||||||
- New experimental algorithm: Multi-Level Dijkstra with new toolchain:
|
|
||||||
- Allows for fast metric updates in below a minute on continental sized networks (osrm-customize)
|
|
||||||
- Plugins supported: `match` and `route`
|
|
||||||
- Quickstart: `osrm-extract data.osm.pbf`, `osrm-partition data.osrm`, `osrm-customize data.osrm`, `osrm-routed --algorithm=MLD data.osrm`
|
|
||||||
- NodeJs Bindings
|
|
||||||
- Merged https://github.com/Project-OSRM/node-osrm into repository. Build via `cmake .. -DCMAKE_BUILD_TYPE=Release -DENABLE_NODE_BINDINGS=On -DENABLE_MASON=On`.
|
|
||||||
- `OSRM` object has new option `algorihtm="CH","CoreCH","MLD"`
|
|
||||||
- Internals
|
|
||||||
- Shared memory notification via conditional variables on Linux or semaphore queue on OS X and Windows with a limit of 128 OSRM Engine instances
|
|
||||||
- Files
|
|
||||||
- .osrm.datasource_index file was removed. Data is now part of .osrm.geometries.
|
|
||||||
- .osrm.edge_lookup was removed. The option `--generate-edge-lookup` does nothing now.
|
|
||||||
- `osrm-contract` does not depend on the `.osrm.fileIndex` file anymore
|
|
||||||
- `osrm-extract` creates new file `.osrm.cnbg` and `.cnbg_to_ebg`
|
|
||||||
- `osrm-partition` creates new file `.osrm.partition` and `.osrm.cells`
|
|
||||||
- `osrm-customize` creates new file `.osrm.mldgr`
|
|
||||||
- Profiles
|
|
||||||
- Added `force_split_edges` flag to global properties. True value guarantees that segment_function will be called for all segments, but also could double memory consumption
|
|
||||||
- Map Matching:
|
|
||||||
- new option `gaps=split|ignore` to enable/disbale track splitting
|
|
||||||
- new option `tidy=true|false` to simplify traces automatically
|
|
||||||
|
|
||||||
# 5.6.3
|
# 5.6.3
|
||||||
- Changes from 5.6.0
|
- Changes from 5.6.0
|
||||||
@@ -66,11 +8,12 @@
|
|||||||
- Changes from 5.6.0
|
- Changes from 5.6.0
|
||||||
- Bugfixes
|
- Bugfixes
|
||||||
- Fix incorrect forward datasources getter in facade
|
- Fix incorrect forward datasources getter in facade
|
||||||
|
- Fix include `access=private` non-car roads in the car profile
|
||||||
|
|
||||||
# 5.6.1
|
# 5.6.1
|
||||||
- Changes from 5.6.0
|
- Changes from 5.6.0
|
||||||
- Bugfixes
|
- Bugfixes
|
||||||
- Fix #3754 add restricted penalty on NoTurn turns
|
- Fix #3754 restricted access roads not penalized if restriction begins non at an intersection
|
||||||
|
|
||||||
# 5.6.0
|
# 5.6.0
|
||||||
- Changes from 5.5
|
- Changes from 5.5
|
||||||
|
|||||||
+32
-109
@@ -24,19 +24,15 @@ option(ENABLE_SANITIZER "Use memory sanitizer for Debug build" OFF)
|
|||||||
option(ENABLE_LTO "Use LTO if available" OFF)
|
option(ENABLE_LTO "Use LTO if available" OFF)
|
||||||
option(ENABLE_FUZZING "Fuzz testing using LLVM's libFuzzer" OFF)
|
option(ENABLE_FUZZING "Fuzz testing using LLVM's libFuzzer" OFF)
|
||||||
option(ENABLE_GOLD_LINKER "Use GNU gold linker if available" ON)
|
option(ENABLE_GOLD_LINKER "Use GNU gold linker if available" ON)
|
||||||
option(ENABLE_NODE_BINDINGS "Build NodeJs bindings" OFF)
|
|
||||||
|
|
||||||
list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake")
|
|
||||||
|
|
||||||
if(ENABLE_MASON)
|
if(ENABLE_MASON)
|
||||||
# versions in use
|
# versions in use
|
||||||
set(MASON_BOOST_VERSION "1.63.0")
|
set(MASON_BOOST_VERSION "1.63.0")
|
||||||
set(MASON_STXXL_VERSION "1.4.1-1")
|
set(MASON_STXXL_VERSION "1.4.1")
|
||||||
set(MASON_EXPAT_VERSION "2.2.0")
|
set(MASON_EXPAT_VERSION "2.2.0")
|
||||||
set(MASON_LUA_VERSION "5.2.4")
|
set(MASON_LUA_VERSION "5.2.4")
|
||||||
set(MASON_BZIP2_VERSION "1.0.6")
|
set(MASON_BZIP2_VERSION "1.0.6")
|
||||||
set(MASON_TBB_VERSION "2017_20161128")
|
set(MASON_TBB_VERSION "2017_20161128")
|
||||||
set(MASON_LIBSHP_VERSION "1.3.0")
|
|
||||||
|
|
||||||
message(STATUS "Enabling mason")
|
message(STATUS "Enabling mason")
|
||||||
|
|
||||||
@@ -45,7 +41,8 @@ if(ENABLE_MASON)
|
|||||||
message(FATAL_ERROR "curl command required with -DENABLE_MASON")
|
message(FATAL_ERROR "curl command required with -DENABLE_MASON")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
include(mason)
|
set(MASON_COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/third_party/mason/mason)
|
||||||
|
include(${CMAKE_CURRENT_SOURCE_DIR}/third_party/mason/mason.cmake)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
# be compatible with version handling before cmake 3.x
|
# be compatible with version handling before cmake 3.x
|
||||||
@@ -54,8 +51,8 @@ if (POLICY CMP0048)
|
|||||||
endif()
|
endif()
|
||||||
project(OSRM C CXX)
|
project(OSRM C CXX)
|
||||||
set(OSRM_VERSION_MAJOR 5)
|
set(OSRM_VERSION_MAJOR 5)
|
||||||
set(OSRM_VERSION_MINOR 7)
|
set(OSRM_VERSION_MINOR 5)
|
||||||
set(OSRM_VERSION_PATCH 4)
|
set(OSRM_VERSION_PATCH 0)
|
||||||
set(OSRM_VERSION "${OSRM_VERSION_MAJOR}.${OSRM_VERSION_MINOR}.${OSRM_VERSION_PATCH}")
|
set(OSRM_VERSION "${OSRM_VERSION_MAJOR}.${OSRM_VERSION_MINOR}.${OSRM_VERSION_PATCH}")
|
||||||
|
|
||||||
add_definitions(-DOSRM_PROJECT_DIR="${CMAKE_CURRENT_SOURCE_DIR}")
|
add_definitions(-DOSRM_PROJECT_DIR="${CMAKE_CURRENT_SOURCE_DIR}")
|
||||||
@@ -66,11 +63,9 @@ add_definitions(-DOSRM_PROJECT_DIR="${CMAKE_CURRENT_SOURCE_DIR}")
|
|||||||
# include_directories and add_definitions for both
|
# include_directories and add_definitions for both
|
||||||
# this build and for sharing externally via pkg-config
|
# this build and for sharing externally via pkg-config
|
||||||
|
|
||||||
function(add_dependency_includes)
|
function(add_dependency_includes includes)
|
||||||
if(${ARGC} GREATER 0)
|
list(APPEND DEPENDENCIES_INCLUDE_DIRS "${includes}")
|
||||||
list(APPEND DEPENDENCIES_INCLUDE_DIRS "${ARGV}")
|
set(DEPENDENCIES_INCLUDE_DIRS "${DEPENDENCIES_INCLUDE_DIRS}" PARENT_SCOPE)
|
||||||
set(DEPENDENCIES_INCLUDE_DIRS "${DEPENDENCIES_INCLUDE_DIRS}" PARENT_SCOPE)
|
|
||||||
endif()
|
|
||||||
endfunction(add_dependency_includes)
|
endfunction(add_dependency_includes)
|
||||||
|
|
||||||
function(add_dependency_defines defines)
|
function(add_dependency_defines defines)
|
||||||
@@ -83,6 +78,8 @@ include(CheckCXXCompilerFlag)
|
|||||||
include(FindPackageHandleStandardArgs)
|
include(FindPackageHandleStandardArgs)
|
||||||
include(GNUInstallDirs)
|
include(GNUInstallDirs)
|
||||||
|
|
||||||
|
list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake")
|
||||||
|
|
||||||
set(bitness 32)
|
set(bitness 32)
|
||||||
if(CMAKE_SIZEOF_VOID_P EQUAL 8)
|
if(CMAKE_SIZEOF_VOID_P EQUAL 8)
|
||||||
set(bitness 64)
|
set(bitness 64)
|
||||||
@@ -119,20 +116,14 @@ configure_file(
|
|||||||
)
|
)
|
||||||
file(GLOB UtilGlob src/util/*.cpp src/util/*/*.cpp)
|
file(GLOB UtilGlob src/util/*.cpp src/util/*/*.cpp)
|
||||||
file(GLOB ExtractorGlob src/extractor/*.cpp src/extractor/*/*.cpp)
|
file(GLOB ExtractorGlob src/extractor/*.cpp src/extractor/*/*.cpp)
|
||||||
file(GLOB PartitionerGlob src/partition/*.cpp)
|
|
||||||
file(GLOB CustomizerGlob src/customize/*.cpp)
|
|
||||||
file(GLOB ContractorGlob src/contractor/*.cpp)
|
file(GLOB ContractorGlob src/contractor/*.cpp)
|
||||||
file(GLOB UpdaterGlob src/updater/*.cpp)
|
|
||||||
file(GLOB StorageGlob src/storage/*.cpp)
|
file(GLOB StorageGlob src/storage/*.cpp)
|
||||||
file(GLOB ServerGlob src/server/*.cpp src/server/**/*.cpp)
|
file(GLOB ServerGlob src/server/*.cpp src/server/**/*.cpp)
|
||||||
file(GLOB EngineGlob src/engine/*.cpp src/engine/**/*.cpp)
|
file(GLOB EngineGlob src/engine/*.cpp src/engine/**/*.cpp)
|
||||||
|
|
||||||
add_library(UTIL OBJECT ${UtilGlob})
|
add_library(UTIL OBJECT ${UtilGlob})
|
||||||
add_library(EXTRACTOR OBJECT ${ExtractorGlob})
|
add_library(EXTRACTOR OBJECT ${ExtractorGlob})
|
||||||
add_library(PARTITIONER OBJECT ${PartitionerGlob})
|
|
||||||
add_library(CUSTOMIZER OBJECT ${CustomizerGlob})
|
|
||||||
add_library(CONTRACTOR OBJECT ${ContractorGlob})
|
add_library(CONTRACTOR OBJECT ${ContractorGlob})
|
||||||
add_library(UPDATER OBJECT ${UpdaterGlob})
|
|
||||||
add_library(STORAGE OBJECT ${StorageGlob})
|
add_library(STORAGE OBJECT ${StorageGlob})
|
||||||
add_library(ENGINE OBJECT ${EngineGlob})
|
add_library(ENGINE OBJECT ${EngineGlob})
|
||||||
add_library(SERVER OBJECT ${ServerGlob})
|
add_library(SERVER OBJECT ${ServerGlob})
|
||||||
@@ -140,17 +131,12 @@ add_library(SERVER OBJECT ${ServerGlob})
|
|||||||
set_target_properties(UTIL PROPERTIES LINKER_LANGUAGE CXX)
|
set_target_properties(UTIL PROPERTIES LINKER_LANGUAGE CXX)
|
||||||
|
|
||||||
add_executable(osrm-extract src/tools/extract.cpp)
|
add_executable(osrm-extract src/tools/extract.cpp)
|
||||||
add_executable(osrm-partition src/tools/partition.cpp)
|
|
||||||
add_executable(osrm-customize src/tools/customize.cpp)
|
|
||||||
add_executable(osrm-contract src/tools/contract.cpp)
|
add_executable(osrm-contract src/tools/contract.cpp)
|
||||||
add_executable(osrm-routed src/tools/routed.cpp $<TARGET_OBJECTS:SERVER> $<TARGET_OBJECTS:UTIL>)
|
add_executable(osrm-routed src/tools/routed.cpp $<TARGET_OBJECTS:SERVER> $<TARGET_OBJECTS:UTIL>)
|
||||||
add_executable(osrm-datastore src/tools/store.cpp $<TARGET_OBJECTS:UTIL>)
|
add_executable(osrm-datastore src/tools/store.cpp $<TARGET_OBJECTS:UTIL>)
|
||||||
add_library(osrm src/osrm/osrm.cpp $<TARGET_OBJECTS:ENGINE> $<TARGET_OBJECTS:UTIL> $<TARGET_OBJECTS:STORAGE>)
|
add_library(osrm src/osrm/osrm.cpp $<TARGET_OBJECTS:ENGINE> $<TARGET_OBJECTS:UTIL> $<TARGET_OBJECTS:STORAGE>)
|
||||||
add_library(osrm_contract src/osrm/contractor.cpp $<TARGET_OBJECTS:CONTRACTOR> $<TARGET_OBJECTS:UTIL>)
|
add_library(osrm_extract $<TARGET_OBJECTS:EXTRACTOR> $<TARGET_OBJECTS:UTIL>)
|
||||||
add_library(osrm_extract src/osrm/extractor.cpp $<TARGET_OBJECTS:EXTRACTOR> $<TARGET_OBJECTS:UTIL>)
|
add_library(osrm_contract $<TARGET_OBJECTS:CONTRACTOR> $<TARGET_OBJECTS:UTIL>)
|
||||||
add_library(osrm_partition $<TARGET_OBJECTS:PARTITIONER> $<TARGET_OBJECTS:UTIL>)
|
|
||||||
add_library(osrm_customize $<TARGET_OBJECTS:CUSTOMIZER> $<TARGET_OBJECTS:UTIL>)
|
|
||||||
add_library(osrm_update $<TARGET_OBJECTS:UPDATER> $<TARGET_OBJECTS:UTIL>)
|
|
||||||
add_library(osrm_store $<TARGET_OBJECTS:STORAGE> $<TARGET_OBJECTS:UTIL>)
|
add_library(osrm_store $<TARGET_OBJECTS:STORAGE> $<TARGET_OBJECTS:UTIL>)
|
||||||
|
|
||||||
if(ENABLE_GOLD_LINKER)
|
if(ENABLE_GOLD_LINKER)
|
||||||
@@ -173,13 +159,6 @@ if(ENABLE_GOLD_LINKER)
|
|||||||
endif()
|
endif()
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
# Disable LTO when mason+gcc is detected before testing for / setting any flags.
|
|
||||||
# Mason builds libraries with Clang, mixing does not work in the context of lto.
|
|
||||||
if(ENABLE_MASON AND CMAKE_CXX_COMPILER_ID STREQUAL "GNU" AND ENABLE_LTO)
|
|
||||||
set(ENABLE_LTO OFF)
|
|
||||||
message(WARNING "Mason and GCC's LTO not work together. Disabling LTO.")
|
|
||||||
endif()
|
|
||||||
|
|
||||||
# Explicitly set the build type to Release if no other type is specified
|
# Explicitly set the build type to Release if no other type is specified
|
||||||
# on the command line. Without this, cmake defaults to an unoptimized,
|
# on the command line. Without this, cmake defaults to an unoptimized,
|
||||||
# non-debug build, which almost nobody wants.
|
# non-debug build, which almost nobody wants.
|
||||||
@@ -303,13 +282,11 @@ endif()
|
|||||||
if (ENABLE_SANITIZER)
|
if (ENABLE_SANITIZER)
|
||||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=address")
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=address")
|
||||||
set(OSRM_CXXFLAGS "${OSRM_CXXFLAGS} -fsanitize=address")
|
set(OSRM_CXXFLAGS "${OSRM_CXXFLAGS} -fsanitize=address")
|
||||||
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -fsanitize=address")
|
|
||||||
set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -fsanitize=address")
|
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
# Configuring compilers
|
# Configuring compilers
|
||||||
if(${CMAKE_CXX_COMPILER_ID} STREQUAL "Clang")
|
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 -ftemplate-depth=1024 -Wno-unused-command-line-argument")
|
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 -ftemplate-depth=1024")
|
||||||
elseif(${CMAKE_CXX_COMPILER_ID} STREQUAL "GNU")
|
elseif(${CMAKE_CXX_COMPILER_ID} STREQUAL "GNU")
|
||||||
set(COLOR_FLAG "-fdiagnostics-color=auto")
|
set(COLOR_FLAG "-fdiagnostics-color=auto")
|
||||||
check_cxx_compiler_flag("-fdiagnostics-color=auto" HAS_COLOR_FLAG)
|
check_cxx_compiler_flag("-fdiagnostics-color=auto" HAS_COLOR_FLAG)
|
||||||
@@ -322,21 +299,12 @@ elseif(${CMAKE_CXX_COMPILER_ID} STREQUAL "GNU")
|
|||||||
add_dependency_defines(-DWIN32)
|
add_dependency_defines(-DWIN32)
|
||||||
set(OPTIONAL_SOCKET_LIBS ws2_32 wsock32)
|
set(OPTIONAL_SOCKET_LIBS ws2_32 wsock32)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
# -fpermissive is required for parallel_do Intel TBB internal issue with GCC < 5
|
|
||||||
# https://github.com/Project-OSRM/osrm-backend/pull/3603#issuecomment-277688589
|
|
||||||
if(CMAKE_CXX_COMPILER_VERSION VERSION_LESS 5.0)
|
|
||||||
message(STATUS "Adding -fpermissive for GCC version < 5 bug (https://gcc.gnu.org/bugzilla/show_bug.cgi?id=51048). See #3603.")
|
|
||||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fpermissive")
|
|
||||||
endif()
|
|
||||||
|
|
||||||
elseif(${CMAKE_CXX_COMPILER_ID} STREQUAL "Intel")
|
elseif(${CMAKE_CXX_COMPILER_ID} STREQUAL "Intel")
|
||||||
# using Intel C++
|
# using Intel C++
|
||||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -static-intel -wd10237 -Wall -ipo -fPIC")
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -static-intel -wd10237 -Wall -ipo -fPIC")
|
||||||
elseif(${CMAKE_CXX_COMPILER_ID} STREQUAL "MSVC")
|
elseif(${CMAKE_CXX_COMPILER_ID} STREQUAL "MSVC")
|
||||||
# using Visual Studio C++
|
# using Visual Studio C++
|
||||||
set(BOOST_COMPONENTS ${BOOST_COMPONENTS} zlib)
|
set(BOOST_COMPONENTS ${BOOST_COMPONENTS} zlib)
|
||||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /bigobj") # avoid compiler error C1128 from scripting_environment_lua.cpp
|
|
||||||
add_dependency_defines(-DBOOST_LIB_DIAGNOSTIC)
|
add_dependency_defines(-DBOOST_LIB_DIAGNOSTIC)
|
||||||
add_dependency_defines(-D_CRT_SECURE_NO_WARNINGS)
|
add_dependency_defines(-D_CRT_SECURE_NO_WARNINGS)
|
||||||
add_dependency_defines(-DNOMINMAX) # avoid min and max macros that can break compilation
|
add_dependency_defines(-DNOMINMAX) # avoid min and max macros that can break compilation
|
||||||
@@ -447,10 +415,6 @@ if(ENABLE_MASON)
|
|||||||
add_dependency_includes(${MASON_PACKAGE_tbb_INCLUDE_DIRS})
|
add_dependency_includes(${MASON_PACKAGE_tbb_INCLUDE_DIRS})
|
||||||
set(TBB_LIBRARIES ${MASON_PACKAGE_tbb_LDFLAGS})
|
set(TBB_LIBRARIES ${MASON_PACKAGE_tbb_LDFLAGS})
|
||||||
|
|
||||||
mason_use(libshp2 VERSION ${MASON_LIBSHP_VERSION})
|
|
||||||
set(LIBSHAPEFILE_INCLUDE_DIR ${MASON_PACKAGE_libshp2_INCLUDE_DIRS})
|
|
||||||
set(LIBSHAPEFILE_LIBRARY ${MASON_PACKAGE_libshp2_LDFLAGS})
|
|
||||||
|
|
||||||
if(NOT MASON_PACKAGE_tbb_LIBRARY_DIRS)
|
if(NOT MASON_PACKAGE_tbb_LIBRARY_DIRS)
|
||||||
message(FATAL_ERROR "MASON_PACKAGE_tbb_LIBRARY_DIRS is empty, rpath will not work")
|
message(FATAL_ERROR "MASON_PACKAGE_tbb_LIBRARY_DIRS is empty, rpath will not work")
|
||||||
endif()
|
endif()
|
||||||
@@ -540,9 +504,7 @@ else()
|
|||||||
|
|
||||||
# note libosmium depends on expat and bzip2
|
# note libosmium depends on expat and bzip2
|
||||||
list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/third_party/libosmium/cmake")
|
list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/third_party/libosmium/cmake")
|
||||||
if(NOT OSMIUM_INCLUDE_DIR)
|
set(OSMIUM_INCLUDE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/third_party/libosmium/include")
|
||||||
set(OSMIUM_INCLUDE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/third_party/libosmium/include")
|
|
||||||
endif()
|
|
||||||
find_package(Osmium REQUIRED COMPONENTS io)
|
find_package(Osmium REQUIRED COMPONENTS io)
|
||||||
include_directories(SYSTEM ${OSMIUM_INCLUDE_DIR})
|
include_directories(SYSTEM ${OSMIUM_INCLUDE_DIR})
|
||||||
|
|
||||||
@@ -602,8 +564,6 @@ set(BOOST_ENGINE_LIBRARIES
|
|||||||
# Binaries
|
# Binaries
|
||||||
target_link_libraries(osrm-datastore osrm_store ${Boost_PROGRAM_OPTIONS_LIBRARY})
|
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-extract osrm_extract ${Boost_PROGRAM_OPTIONS_LIBRARY})
|
||||||
target_link_libraries(osrm-partition osrm_partition ${Boost_PROGRAM_OPTIONS_LIBRARY})
|
|
||||||
target_link_libraries(osrm-customize osrm_customize ${Boost_PROGRAM_OPTIONS_LIBRARY})
|
|
||||||
target_link_libraries(osrm-contract osrm_contract ${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-routed osrm ${Boost_PROGRAM_OPTIONS_LIBRARY} ${OPTIONAL_SOCKET_LIBS} ${ZLIB_LIBRARY})
|
||||||
|
|
||||||
@@ -619,25 +579,6 @@ set(EXTRACTOR_LIBRARIES
|
|||||||
${TBB_LIBRARIES}
|
${TBB_LIBRARIES}
|
||||||
${ZLIB_LIBRARY}
|
${ZLIB_LIBRARY}
|
||||||
${MAYBE_COVERAGE_LIBRARIES})
|
${MAYBE_COVERAGE_LIBRARIES})
|
||||||
set(PARTITIONER_LIBRARIES
|
|
||||||
${BOOST_ENGINE_LIBRARIES}
|
|
||||||
${CMAKE_THREAD_LIBS_INIT}
|
|
||||||
${TBB_LIBRARIES}
|
|
||||||
${MAYBE_RT_LIBRARY}
|
|
||||||
${MAYBE_COVERAGE_LIBRARIES}
|
|
||||||
${ZLIB_LIBRARY})
|
|
||||||
set(CUSTOMIZER_LIBRARIES
|
|
||||||
${BOOST_ENGINE_LIBRARIES}
|
|
||||||
${CMAKE_THREAD_LIBS_INIT}
|
|
||||||
${TBB_LIBRARIES}
|
|
||||||
${MAYBE_RT_LIBRARY}
|
|
||||||
${MAYBE_COVERAGE_LIBRARIES})
|
|
||||||
set(UPDATER_LIBRARIES
|
|
||||||
${BOOST_BASE_LIBRARIES}
|
|
||||||
${CMAKE_THREAD_LIBS_INIT}
|
|
||||||
${TBB_LIBRARIES}
|
|
||||||
${MAYBE_RT_LIBRARY}
|
|
||||||
${MAYBE_COVERAGE_LIBRARIES})
|
|
||||||
set(CONTRACTOR_LIBRARIES
|
set(CONTRACTOR_LIBRARIES
|
||||||
${BOOST_BASE_LIBRARIES}
|
${BOOST_BASE_LIBRARIES}
|
||||||
${CMAKE_THREAD_LIBS_INIT}
|
${CMAKE_THREAD_LIBS_INIT}
|
||||||
@@ -667,11 +608,8 @@ set(UTIL_LIBRARIES
|
|||||||
${MAYBE_COVERAGE_LIBRARIES})
|
${MAYBE_COVERAGE_LIBRARIES})
|
||||||
# Libraries
|
# Libraries
|
||||||
target_link_libraries(osrm ${ENGINE_LIBRARIES})
|
target_link_libraries(osrm ${ENGINE_LIBRARIES})
|
||||||
target_link_libraries(osrm_update ${UPDATER_LIBRARIES})
|
target_link_libraries(osrm_contract ${CONTRACTOR_LIBRARIES})
|
||||||
target_link_libraries(osrm_contract ${CONTRACTOR_LIBRARIES} osrm_update)
|
|
||||||
target_link_libraries(osrm_extract ${EXTRACTOR_LIBRARIES})
|
target_link_libraries(osrm_extract ${EXTRACTOR_LIBRARIES})
|
||||||
target_link_libraries(osrm_partition ${PARTITIONER_LIBRARIES})
|
|
||||||
target_link_libraries(osrm_customize ${CUSTOMIZER_LIBRARIES} osrm_update)
|
|
||||||
target_link_libraries(osrm_store ${STORAGE_LIBRARIES})
|
target_link_libraries(osrm_store ${STORAGE_LIBRARIES})
|
||||||
|
|
||||||
# BUILD_COMPONENTS
|
# BUILD_COMPONENTS
|
||||||
@@ -687,11 +625,10 @@ if(BUILD_TOOLS)
|
|||||||
install(TARGETS osrm-io-benchmark DESTINATION bin)
|
install(TARGETS osrm-io-benchmark DESTINATION bin)
|
||||||
|
|
||||||
find_package(Shapefile) # package libshp-dev
|
find_package(Shapefile) # package libshp-dev
|
||||||
if(SHAPEFILE_FOUND AND (Boost_VERSION VERSION_GREATER 106000 OR ENABLE_MASON))
|
if(Shapefile_FOUND)
|
||||||
add_executable(osrm-extract-conditionals src/tools/extract-conditionals.cpp $<TARGET_OBJECTS:UTIL>)
|
add_executable(osrm-extract-conditionals src/tools/extract-conditionals.cpp $<TARGET_OBJECTS:UTIL>)
|
||||||
target_include_directories(osrm-extract-conditionals PRIVATE ${LIBSHAPEFILE_INCLUDE_DIR})
|
target_include_directories(osrm-extract-conditionals PRIVATE ${LIBSHAPEFILE_INCLUDE_DIR})
|
||||||
target_link_libraries(osrm-extract-conditionals ${OSMIUM_LIBRARIES} ${BOOST_BASE_LIBRARIES} ${Boost_PROGRAM_OPTIONS_LIBRARY}
|
target_link_libraries(osrm-extract-conditionals ${OSMIUM_LIBRARIES} ${BOOST_BASE_LIBRARIES} ${Boost_PROGRAM_OPTIONS_LIBRARY} ${LIBSHAPEFILE_LIBRARY})
|
||||||
${LIBSHAPEFILE_LIBRARY} ${BZIP2_LIBRARIES} ${ZLIB_LIBRARY} ${EXPAT_LIBRARIES} ${CMAKE_THREAD_LIBS_INIT})
|
|
||||||
install(TARGETS osrm-extract-conditionals DESTINATION bin)
|
install(TARGETS osrm-extract-conditionals DESTINATION bin)
|
||||||
endif()
|
endif()
|
||||||
endif()
|
endif()
|
||||||
@@ -705,7 +642,6 @@ endif()
|
|||||||
# (i.e., from /usr/local/bin/) the linker can find library dependencies. For
|
# (i.e., from /usr/local/bin/) the linker can find library dependencies. For
|
||||||
# more info see http://www.cmake.org/Wiki/CMake_RPATH_handling
|
# more info see http://www.cmake.org/Wiki/CMake_RPATH_handling
|
||||||
set_property(TARGET osrm-extract PROPERTY INSTALL_RPATH_USE_LINK_PATH TRUE)
|
set_property(TARGET osrm-extract PROPERTY INSTALL_RPATH_USE_LINK_PATH TRUE)
|
||||||
set_property(TARGET osrm-partition PROPERTY INSTALL_RPATH_USE_LINK_PATH TRUE)
|
|
||||||
set_property(TARGET osrm-contract PROPERTY INSTALL_RPATH_USE_LINK_PATH TRUE)
|
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-datastore PROPERTY INSTALL_RPATH_USE_LINK_PATH TRUE)
|
||||||
set_property(TARGET osrm-routed PROPERTY INSTALL_RPATH_USE_LINK_PATH TRUE)
|
set_property(TARGET osrm-routed PROPERTY INSTALL_RPATH_USE_LINK_PATH TRUE)
|
||||||
@@ -716,27 +652,22 @@ 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)
|
set(EngineHeader include/engine/status.hpp include/engine/engine_config.hpp include/engine/hint.hpp include/engine/bearing.hpp include/engine/phantom_node.hpp)
|
||||||
set(UtilHeader include/util/coordinate.hpp include/util/json_container.hpp include/util/typedefs.hpp include/util/strong_typedef.hpp include/util/exception.hpp)
|
set(UtilHeader include/util/coordinate.hpp include/util/json_container.hpp include/util/typedefs.hpp include/util/strong_typedef.hpp include/util/exception.hpp)
|
||||||
set(ExtractorHeader include/extractor/extractor.hpp include/extractor/extractor_config.hpp include/extractor/travel_mode.hpp)
|
set(ExtractorHeader include/extractor/extractor.hpp include/extractor/extractor_config.hpp include/extractor/travel_mode.hpp)
|
||||||
set(PartitionerHeader include/partition/partitioner.hpp include/partition/partition_config.hpp)
|
|
||||||
set(ContractorHeader include/contractor/contractor.hpp include/contractor/contractor_config.hpp)
|
set(ContractorHeader include/contractor/contractor.hpp include/contractor/contractor_config.hpp)
|
||||||
set(StorageHeader include/storage/storage.hpp include/storage/storage_config.hpp)
|
set(StorageHeader include/storage/storage.hpp include/storage/storage_config.hpp)
|
||||||
install(FILES ${EngineHeader} DESTINATION include/osrm/engine)
|
install(FILES ${EngineHeader} DESTINATION include/osrm/engine)
|
||||||
install(FILES ${UtilHeader} DESTINATION include/osrm/util)
|
install(FILES ${UtilHeader} DESTINATION include/osrm/util)
|
||||||
install(FILES ${StorageHeader} DESTINATION include/osrm/storage)
|
install(FILES ${StorageHeader} DESTINATION include/osrm/storage)
|
||||||
install(FILES ${ExtractorHeader} DESTINATION include/osrm/extractor)
|
install(FILES ${ExtractorHeader} DESTINATION include/osrm/extractor)
|
||||||
install(FILES ${PartitionerHeader} DESTINATION include/osrm/partition)
|
|
||||||
install(FILES ${ContractorHeader} DESTINATION include/osrm/contractor)
|
install(FILES ${ContractorHeader} DESTINATION include/osrm/contractor)
|
||||||
install(FILES ${LibraryGlob} DESTINATION include/osrm)
|
install(FILES ${LibraryGlob} DESTINATION include/osrm)
|
||||||
install(FILES ${ParametersGlob} DESTINATION include/osrm/engine/api)
|
install(FILES ${ParametersGlob} DESTINATION include/osrm/engine/api)
|
||||||
install(FILES ${VariantGlob} DESTINATION include/mapbox)
|
install(FILES ${VariantGlob} DESTINATION include/mapbox)
|
||||||
install(TARGETS osrm-extract DESTINATION bin)
|
install(TARGETS osrm-extract DESTINATION bin)
|
||||||
install(TARGETS osrm-partition DESTINATION bin)
|
|
||||||
install(TARGETS osrm-contract DESTINATION bin)
|
install(TARGETS osrm-contract DESTINATION bin)
|
||||||
install(TARGETS osrm-datastore DESTINATION bin)
|
install(TARGETS osrm-datastore DESTINATION bin)
|
||||||
install(TARGETS osrm-routed DESTINATION bin)
|
install(TARGETS osrm-routed DESTINATION bin)
|
||||||
install(TARGETS osrm DESTINATION lib)
|
install(TARGETS osrm DESTINATION lib)
|
||||||
install(TARGETS osrm_extract DESTINATION lib)
|
install(TARGETS osrm_extract DESTINATION lib)
|
||||||
install(TARGETS osrm_partition DESTINATION lib)
|
|
||||||
install(TARGETS osrm_update DESTINATION lib)
|
|
||||||
install(TARGETS osrm_contract DESTINATION lib)
|
install(TARGETS osrm_contract DESTINATION lib)
|
||||||
install(TARGETS osrm_store DESTINATION lib)
|
install(TARGETS osrm_store DESTINATION lib)
|
||||||
|
|
||||||
@@ -803,11 +734,6 @@ add_custom_target(uninstall
|
|||||||
add_subdirectory(unit_tests)
|
add_subdirectory(unit_tests)
|
||||||
add_subdirectory(src/benchmarks)
|
add_subdirectory(src/benchmarks)
|
||||||
|
|
||||||
if (ENABLE_NODE_BINDINGS)
|
|
||||||
add_subdirectory(src/nodejs)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
|
|
||||||
if (ENABLE_FUZZING)
|
if (ENABLE_FUZZING)
|
||||||
# Requires libosrm being built with sanitizers; make configurable and default to ubsan
|
# Requires libosrm being built with sanitizers; make configurable and default to ubsan
|
||||||
set(FUZZ_SANITIZER "undefined" CACHE STRING "Sanitizer to be used for Fuzz testing")
|
set(FUZZ_SANITIZER "undefined" CACHE STRING "Sanitizer to be used for Fuzz testing")
|
||||||
@@ -823,21 +749,18 @@ if (ENABLE_FUZZING)
|
|||||||
endif ()
|
endif ()
|
||||||
|
|
||||||
|
|
||||||
# add headers sanity check target that includes all headers independently
|
## add headers sanity check target that includes all headers independently
|
||||||
# make sure we have all deps for the nodejs sub project's includes (nan, node)
|
set(check_headers_dir "${PROJECT_BINARY_DIR}/check-headers")
|
||||||
if (ENABLE_NODE_BINDINGS)
|
file(GLOB_RECURSE headers_to_check
|
||||||
set(check_headers_dir "${PROJECT_BINARY_DIR}/check-headers")
|
${PROJECT_BINARY_DIR}/*.hpp
|
||||||
file(GLOB_RECURSE headers_to_check
|
${PROJECT_SOURCE_DIR}/include/*.hpp)
|
||||||
${PROJECT_BINARY_DIR}/*.hpp
|
foreach(header ${headers_to_check})
|
||||||
${PROJECT_SOURCE_DIR}/include/*.hpp)
|
get_filename_component(filename ${header} NAME_WE)
|
||||||
foreach(header ${headers_to_check})
|
set(filename "${check_headers_dir}/${filename}.cpp")
|
||||||
get_filename_component(filename ${header} NAME_WE)
|
if (NOT EXISTS ${filename})
|
||||||
set(filename "${check_headers_dir}/${filename}.cpp")
|
file(WRITE ${filename} "#include \"${header}\"\n")
|
||||||
if (NOT EXISTS ${filename})
|
endif()
|
||||||
file(WRITE ${filename} "#include \"${header}\"\n")
|
list(APPEND sources ${filename})
|
||||||
endif()
|
endforeach()
|
||||||
list(APPEND sources ${filename})
|
add_library(check-headers STATIC EXCLUDE_FROM_ALL ${sources})
|
||||||
endforeach()
|
set_target_properties(check-headers PROPERTIES ARCHIVE_OUTPUT_DIRECTORY ${check_headers_dir})
|
||||||
add_library(check-headers STATIC EXCLUDE_FROM_ALL ${sources})
|
|
||||||
set_target_properties(check-headers PROPERTIES ARCHIVE_OUTPUT_DIRECTORY ${check_headers_dir})
|
|
||||||
endif()
|
|
||||||
|
|||||||
@@ -20,15 +20,6 @@ Related [Project-OSRM](https://github.com/Project-OSRM) repositories:
|
|||||||
- [node-osrm](https://github.com/Project-OSRM/node-osrm) - Production-ready NodeJs bindings for the routing engine
|
- [node-osrm](https://github.com/Project-OSRM/node-osrm) - Production-ready NodeJs bindings for the routing engine
|
||||||
- [osrm-frontend](https://github.com/Project-OSRM/osrm-frontend) - User-facing frontend with map. The demo server runs this on top of the backend
|
- [osrm-frontend](https://github.com/Project-OSRM/osrm-frontend) - User-facing frontend with map. The demo server runs this on top of the backend
|
||||||
- [osrm-text-instructions](https://github.com/Project-OSRM/osrm-text-instructions) - Text instructions from OSRM route response
|
- [osrm-text-instructions](https://github.com/Project-OSRM/osrm-text-instructions) - Text instructions from OSRM route response
|
||||||
- [osrm-backend-docker](https://hub.docker.com/r/osrm/osrm-backend/) - Ready to use Docker images
|
|
||||||
|
|
||||||
## Documentation
|
|
||||||
|
|
||||||
### Full documentation
|
|
||||||
|
|
||||||
- [Hosted documentation](http://project-osrm.org)
|
|
||||||
- [osrm-routed HTTP API documentation](docs/http.md)
|
|
||||||
- [libosrm API documentation](docs/libosrm.md)
|
|
||||||
|
|
||||||
## Contact
|
## Contact
|
||||||
|
|
||||||
@@ -37,45 +28,10 @@ Related [Project-OSRM](https://github.com/Project-OSRM) repositories:
|
|||||||
|
|
||||||
## Quick Start
|
## Quick Start
|
||||||
|
|
||||||
The easiest and quickest way to setup your own routing engine is to use Docker images we provide.
|
|
||||||
|
|
||||||
### Using Docker
|
|
||||||
|
|
||||||
We base our Docker images ([backend](https://hub.docker.com/r/osrm/osrm-backend/), [frontend](https://hub.docker.com/r/osrm/osrm-frontend/)) on Alpine Linux and make sure they are as lightweight as possible.
|
|
||||||
|
|
||||||
Download OpenStreetMap extracts for example from [Geofabrik](http://download.geofabrik.de/)
|
|
||||||
|
|
||||||
wget http://download.geofabrik.de/europe/germany/berlin-latest.osm.pbf
|
|
||||||
|
|
||||||
Pre-process the extract with the car profile and start a routing engine HTTP server on port 5000
|
|
||||||
|
|
||||||
docker run -t -v $(pwd):/data osrm/osrm-backend osrm-extract -p /opt/car.lua /data/berlin-latest.osm.pbf
|
|
||||||
docker run -t -v $(pwd):/data osrm/osrm-backend osrm-contract /data/berlin-latest.osrm
|
|
||||||
|
|
||||||
docker run -t -i -p 5000:5000 -v $(pwd):/data osrm/osrm-backend osrm-routed /data/berlin-latest.osrm
|
|
||||||
|
|
||||||
Make requests against the HTTP server
|
|
||||||
|
|
||||||
curl "http://127.0.0.1:5000/route/v1/driving/13.388860,52.517037;13.385983,52.496891?steps=true"
|
|
||||||
|
|
||||||
Optionally start a user-friendly frontend on port 9966, and open it up in your browser
|
|
||||||
|
|
||||||
docker run -p 9966:9966 osrm/osrm-frontend
|
|
||||||
xdg-open 'http://127.0.0.1:9966'
|
|
||||||
|
|
||||||
In case Docker complains about not being able to connect to the Docker daemon make sure you are in the `docker` group.
|
|
||||||
|
|
||||||
sudo usermod -aG docker $USER
|
|
||||||
|
|
||||||
After adding yourself to the `docker` group make sure to log out and back in again with your terminal.
|
|
||||||
|
|
||||||
|
|
||||||
### Building from Source
|
|
||||||
|
|
||||||
The following targets Ubuntu 16.04.
|
The following targets Ubuntu 16.04.
|
||||||
For instructions how to build on different distributions, macOS or Windows see our [Wiki](https://github.com/Project-OSRM/osrm-backend/wiki).
|
For instructions how to build on different distributions, macOS or Windows see our [Wiki](https://github.com/Project-OSRM/osrm-backend/wiki).
|
||||||
|
|
||||||
Install dependencies
|
#### Install dependencies
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
sudo apt install build-essential git cmake pkg-config \
|
sudo apt install build-essential git cmake pkg-config \
|
||||||
@@ -83,7 +39,7 @@ libbz2-dev libstxxl-dev libstxxl1v5 libxml2-dev \
|
|||||||
libzip-dev libboost-all-dev lua5.2 liblua5.2-dev libtbb-dev
|
libzip-dev libboost-all-dev lua5.2 liblua5.2-dev libtbb-dev
|
||||||
```
|
```
|
||||||
|
|
||||||
Compile and install OSRM binaries
|
#### Compile and install OSRM binaries:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
mkdir -p build
|
mkdir -p build
|
||||||
@@ -93,13 +49,13 @@ cmake --build .
|
|||||||
sudo cmake --build . --target install
|
sudo cmake --build . --target install
|
||||||
```
|
```
|
||||||
|
|
||||||
Grab a `.osm.pbf` extract from [Geofabrik](http://download.geofabrik.de/index.html) or [Mapzen's Metro Extracts](https://mapzen.com/data/metro-extracts/)
|
#### Grab a `.osm.pbf` extract from [Geofabrik](http://download.geofabrik.de/index.html) or [Mapzen's Metro Extracts](https://mapzen.com/data/metro-extracts/)
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
wget http://download.geofabrik.de/europe/germany/berlin-latest.osm.pbf
|
wget http://download.geofabrik.de/europe/germany/berlin-latest.osm.pbf
|
||||||
```
|
```
|
||||||
|
|
||||||
Pre-process the extract and start the HTTP server
|
#### Pre-process the extract and start the HTTP server
|
||||||
|
|
||||||
```
|
```
|
||||||
osrm-extract berlin-latest.osm.pbf -p profiles/car.lua
|
osrm-extract berlin-latest.osm.pbf -p profiles/car.lua
|
||||||
@@ -107,13 +63,22 @@ osrm-contract berlin-latest.osrm
|
|||||||
osrm-routed berlin-latest.osrm
|
osrm-routed berlin-latest.osrm
|
||||||
```
|
```
|
||||||
|
|
||||||
Running Queries
|
#### Running Queries
|
||||||
|
|
||||||
```
|
```
|
||||||
curl http://127.0.0.1:5000/route/v1/driving/13.388860,52.517037;13.385983,52.496891?steps=true
|
curl http://127.0.0.1:5000/route/v1/driving/13.388860,52.517037;13.385983,52.496891?steps=true
|
||||||
```
|
```
|
||||||
|
|
||||||
### Request Against the Demo Server
|
## Documentation
|
||||||
|
|
||||||
|
### Full documentation
|
||||||
|
|
||||||
|
- [Hosted documentation](http://project-osrm.org)
|
||||||
|
- [osrm-routed HTTP API documentation](docs/http.md)
|
||||||
|
- [libosrm API documentation](docs/libosrm.md)
|
||||||
|
|
||||||
|
|
||||||
|
### Running a request against the Demo Server
|
||||||
|
|
||||||
Read the [API usage policy](https://github.com/Project-OSRM/osrm-backend/wiki/Api-usage-policy).
|
Read the [API usage policy](https://github.com/Project-OSRM/osrm-backend/wiki/Api-usage-policy).
|
||||||
Simple query with instructions and alternatives on Berlin:
|
Simple query with instructions and alternatives on Berlin:
|
||||||
|
|||||||
+2
-20
@@ -134,29 +134,11 @@ IF %ERRORLEVEL% NEQ 0 GOTO ERROR
|
|||||||
|
|
||||||
ECHO running library-tests.exe ...
|
ECHO running library-tests.exe ...
|
||||||
SET test_region=monaco
|
SET test_region=monaco
|
||||||
SET test_region_ch=ch\monaco
|
|
||||||
SET test_region_corech=corech\monaco
|
|
||||||
SET test_region_mld=mld\monaco
|
|
||||||
SET test_osm=%test_region%.osm.pbf
|
SET test_osm=%test_region%.osm.pbf
|
||||||
IF NOT EXIST %test_osm% powershell Invoke-WebRequest https://s3.amazonaws.com/mapbox/osrm/testing/monaco.osm.pbf -OutFile %test_osm%
|
IF NOT EXIST %test_osm% powershell Invoke-WebRequest https://s3.amazonaws.com/mapbox/osrm/testing/monaco.osm.pbf -OutFile %test_osm%
|
||||||
%Configuration%\osrm-extract.exe -p ../profiles/car.lua %test_osm%
|
%Configuration%\osrm-extract.exe -p ../profiles/car.lua %test_osm%
|
||||||
MKDIR ch
|
%Configuration%\osrm-contract.exe %test_region%.osrm
|
||||||
XCOPY %test_region%.osrm.* ch\
|
unit_tests\%Configuration%\library-tests.exe %test_region%.osrm
|
||||||
XCOPY %test_region%.osrm ch\
|
|
||||||
MKDIR corech
|
|
||||||
XCOPY %test_region%.osrm.* corech\
|
|
||||||
XCOPY %test_region%.osrm corech\
|
|
||||||
MKDIR mld
|
|
||||||
XCOPY %test_region%.osrm.* mld\
|
|
||||||
XCOPY %test_region%.osrm mld\
|
|
||||||
%Configuration%\osrm-contract.exe %test_region_ch%.osrm
|
|
||||||
%Configuration%\osrm-contract.exe --core 0.8 %test_region_corech%.osrm
|
|
||||||
%Configuration%\osrm-partition.exe %test_region_mld%.osrm
|
|
||||||
%Configuration%\osrm-customize.exe %test_region_mld%.osrm
|
|
||||||
XCOPY /Y ch\*.* ..\test\data\ch\
|
|
||||||
XCOPY /Y corech\*.* ..\test\data\corech\
|
|
||||||
XCOPY /Y mld\*.* ..\test\data\mld\
|
|
||||||
unit_tests\%Configuration%\library-tests.exe
|
|
||||||
|
|
||||||
IF NOT "%APPVEYOR_REPO_BRANCH%"=="master" GOTO DONE
|
IF NOT "%APPVEYOR_REPO_BRANCH%"=="master" GOTO DONE
|
||||||
ECHO ========= CREATING PACKAGES ==========
|
ECHO ========= CREATING PACKAGES ==========
|
||||||
|
|||||||
+2
-2
@@ -23,8 +23,8 @@ build_script:
|
|||||||
before_test:
|
before_test:
|
||||||
- node --version
|
- node --version
|
||||||
- npm --version
|
- npm --version
|
||||||
- npm install --ignore-scripts
|
- npm install
|
||||||
- npm link --ignore-scripts
|
- npm link
|
||||||
- SET PATH=%CD%\osrm-deps\libs\bin;%PATH%
|
- SET PATH=%CD%\osrm-deps\libs\bin;%PATH%
|
||||||
- SET OSRM_BUILD_DIR=build\%Configuration%
|
- SET OSRM_BUILD_DIR=build\%Configuration%
|
||||||
- npm test
|
- npm test
|
||||||
|
|||||||
@@ -1,59 +0,0 @@
|
|||||||
var cf = require('@mapbox/cloudfriend');
|
|
||||||
var package_json = require('../package.json')
|
|
||||||
|
|
||||||
module.exports = {
|
|
||||||
AWSTemplateFormatVersion: '2010-09-09',
|
|
||||||
Description: 'user for publishing to s3://mapbox-node-binary/' + package_json.name,
|
|
||||||
Resources: {
|
|
||||||
User: {
|
|
||||||
Type: 'AWS::IAM::User',
|
|
||||||
Properties: {
|
|
||||||
Policies: [
|
|
||||||
{
|
|
||||||
PolicyName: 'list',
|
|
||||||
PolicyDocument: {
|
|
||||||
Statement: [
|
|
||||||
{
|
|
||||||
Action: ['s3:ListBucket'],
|
|
||||||
Effect: 'Allow',
|
|
||||||
Resource: 'arn:aws:s3:::mapbox-node-binary',
|
|
||||||
Condition : {
|
|
||||||
StringLike : {
|
|
||||||
"s3:prefix": [ package_json.name + "/*"]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
PolicyName: 'publish',
|
|
||||||
PolicyDocument: {
|
|
||||||
Statement: [
|
|
||||||
{
|
|
||||||
Action: ['s3:DeleteObject', 's3:GetObject', 's3:GetObjectAcl', 's3:PutObject', 's3:PutObjectAcl'],
|
|
||||||
Effect: 'Allow',
|
|
||||||
Resource: 'arn:aws:s3:::mapbox-node-binary/' + package_json.name + '/*'
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
},
|
|
||||||
AccessKey: {
|
|
||||||
Type: 'AWS::IAM::AccessKey',
|
|
||||||
Properties: {
|
|
||||||
UserName: cf.ref('User')
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
Outputs: {
|
|
||||||
AccessKeyId: {
|
|
||||||
Value: cf.ref('AccessKey')
|
|
||||||
},
|
|
||||||
SecretAccessKey: {
|
|
||||||
Value: cf.getAtt('AccessKey', 'SecretAccessKey')
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
+10
-12
@@ -57,7 +57,7 @@
|
|||||||
if (WIN32)
|
if (WIN32)
|
||||||
# has em64t/vc8 em64t/vc9
|
# has em64t/vc8 em64t/vc9
|
||||||
# has ia32/vc7.1 ia32/vc8 ia32/vc9
|
# has ia32/vc7.1 ia32/vc8 ia32/vc9
|
||||||
set(_TBB_DEFAULT_INSTALL_DIR "C:/Program Files/Intel/TBB")
|
set(_TBB_DEFAULT_INSTALL_DIR "C:/Program Files/Intel/TBB" "C:/Program Files (x86)/Intel/TBB")
|
||||||
set(_TBB_LIB_NAME "tbb")
|
set(_TBB_LIB_NAME "tbb")
|
||||||
set(_TBB_LIB_MALLOC_NAME "${_TBB_LIB_NAME}malloc")
|
set(_TBB_LIB_MALLOC_NAME "${_TBB_LIB_NAME}malloc")
|
||||||
set(_TBB_LIB_DEBUG_NAME "${_TBB_LIB_NAME}_debug")
|
set(_TBB_LIB_DEBUG_NAME "${_TBB_LIB_NAME}_debug")
|
||||||
@@ -102,7 +102,7 @@ if (UNIX)
|
|||||||
endif(NOT TBB_ARCHITECTURE)
|
endif(NOT TBB_ARCHITECTURE)
|
||||||
else (APPLE)
|
else (APPLE)
|
||||||
# LINUX
|
# LINUX
|
||||||
set(_TBB_DEFAULT_INSTALL_DIR "/usr")
|
set(_TBB_DEFAULT_INSTALL_DIR "/opt/intel/tbb" "/usr/local/include" "/usr/include")
|
||||||
set(_TBB_LIB_NAME "tbb")
|
set(_TBB_LIB_NAME "tbb")
|
||||||
set(_TBB_LIB_MALLOC_NAME "${_TBB_LIB_NAME}malloc")
|
set(_TBB_LIB_MALLOC_NAME "${_TBB_LIB_NAME}malloc")
|
||||||
set(_TBB_LIB_DEBUG_NAME "${_TBB_LIB_NAME}_debug")
|
set(_TBB_LIB_DEBUG_NAME "${_TBB_LIB_NAME}_debug")
|
||||||
@@ -185,10 +185,11 @@ set (TBB_INC_SEARCH_DIR ${_TBB_INSTALL_DIR}/include)
|
|||||||
# containing the headers.
|
# containing the headers.
|
||||||
find_path(TBB_INCLUDE_DIR
|
find_path(TBB_INCLUDE_DIR
|
||||||
tbb/task_scheduler_init.h
|
tbb/task_scheduler_init.h
|
||||||
HINTS ${TBB_INC_SEARCH_DIR} ENV CPATH
|
PATHS ${TBB_INC_SEARCH_DIR} ENV CPATH
|
||||||
)
|
)
|
||||||
mark_as_advanced(TBB_INCLUDE_DIR)
|
mark_as_advanced(TBB_INCLUDE_DIR)
|
||||||
|
|
||||||
|
|
||||||
#-- Look for libraries
|
#-- Look for libraries
|
||||||
# GvdB: $ENV{TBB_ARCH_PLATFORM} is set by the build script tbbvars[.bat|.sh|.csh]
|
# GvdB: $ENV{TBB_ARCH_PLATFORM} is set by the build script tbbvars[.bat|.sh|.csh]
|
||||||
if (NOT $ENV{TBB_ARCH_PLATFORM} STREQUAL "")
|
if (NOT $ENV{TBB_ARCH_PLATFORM} STREQUAL "")
|
||||||
@@ -212,11 +213,6 @@ endif ((NOT ${TBB_ARCHITECTURE} STREQUAL "") AND (NOT ${TBB_COMPILER} STREQUAL "
|
|||||||
# GvdB: Mac OS X distribution places libraries directly in lib directory.
|
# GvdB: Mac OS X distribution places libraries directly in lib directory.
|
||||||
list(APPEND _TBB_LIBRARY_DIR ${_TBB_INSTALL_DIR}/lib)
|
list(APPEND _TBB_LIBRARY_DIR ${_TBB_INSTALL_DIR}/lib)
|
||||||
|
|
||||||
if(EXISTS ${_TBB_INSTALL_DIR}/build)
|
|
||||||
file(GLOB _TBB_BUILD_DIR_RELEASE ${_TBB_INSTALL_DIR}/build/*_release)
|
|
||||||
file(GLOB _TBB_BUILD_DIR_DEBUG ${_TBB_INSTALL_DIR}/build/*_debug)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
# Jiri: No reason not to check the default paths. From recent versions,
|
# Jiri: No reason not to check the default paths. From recent versions,
|
||||||
# tbbvars has started exporting the LIBRARY_PATH and LD_LIBRARY_PATH
|
# tbbvars has started exporting the LIBRARY_PATH and LD_LIBRARY_PATH
|
||||||
# variables, which now point to the directories of the lib files.
|
# variables, which now point to the directories of the lib files.
|
||||||
@@ -226,8 +222,10 @@ endif()
|
|||||||
# and LD_LIBRARY_PATH environment variables is now even more important
|
# and LD_LIBRARY_PATH environment variables is now even more important
|
||||||
# that tbbvars doesn't export TBB_ARCH_PLATFORM and it facilitates
|
# that tbbvars doesn't export TBB_ARCH_PLATFORM and it facilitates
|
||||||
# the use of TBB built from sources.
|
# the use of TBB built from sources.
|
||||||
find_library(TBB_LIBRARY ${_TBB_LIB_NAME} HINTS ${_TBB_BUILD_DIR_RELEASE} ${_TBB_LIBRARY_DIR})
|
find_library(TBB_LIBRARY ${_TBB_LIB_NAME} HINTS ${_TBB_LIBRARY_DIR}
|
||||||
find_library(TBB_MALLOC_LIBRARY ${_TBB_LIB_MALLOC_NAME} HINTS ${_TBB_BUILD_DIR_RELEASE} ${_TBB_LIBRARY_DIR})
|
PATHS ENV LIBRARY_PATH ENV LD_LIBRARY_PATH)
|
||||||
|
find_library(TBB_MALLOC_LIBRARY ${_TBB_LIB_MALLOC_NAME} HINTS ${_TBB_LIBRARY_DIR}
|
||||||
|
PATHS ENV LIBRARY_PATH ENV LD_LIBRARY_PATH)
|
||||||
|
|
||||||
#Extract path from TBB_LIBRARY name
|
#Extract path from TBB_LIBRARY name
|
||||||
get_filename_component(TBB_LIBRARY_DIR ${TBB_LIBRARY} PATH)
|
get_filename_component(TBB_LIBRARY_DIR ${TBB_LIBRARY} PATH)
|
||||||
@@ -238,9 +236,9 @@ mark_as_advanced(TBB_LIBRARY TBB_MALLOC_LIBRARY)
|
|||||||
|
|
||||||
#-- Look for debug libraries
|
#-- Look for debug libraries
|
||||||
# Jiri: Changed the same way as for the release libraries.
|
# Jiri: Changed the same way as for the release libraries.
|
||||||
find_library(TBB_LIBRARY_DEBUG ${_TBB_LIB_DEBUG_NAME} HINTS ${_TBB_BUILD_DIR_DEBUG} ${_TBB_LIBRARY_DIR}
|
find_library(TBB_LIBRARY_DEBUG ${_TBB_LIB_DEBUG_NAME} HINTS ${_TBB_LIBRARY_DIR}
|
||||||
PATHS ENV LIBRARY_PATH ENV LD_LIBRARY_PATH)
|
PATHS ENV LIBRARY_PATH ENV LD_LIBRARY_PATH)
|
||||||
find_library(TBB_MALLOC_LIBRARY_DEBUG ${_TBB_LIB_MALLOC_DEBUG_NAME} HINTS ${_TBB_BUILD_DIR_DEBUG} ${_TBB_LIBRARY_DIR}
|
find_library(TBB_MALLOC_LIBRARY_DEBUG ${_TBB_LIB_MALLOC_DEBUG_NAME} HINTS ${_TBB_LIBRARY_DIR}
|
||||||
PATHS ENV LIBRARY_PATH ENV LD_LIBRARY_PATH)
|
PATHS ENV LIBRARY_PATH ENV LD_LIBRARY_PATH)
|
||||||
|
|
||||||
# Jiri: Self-built TBB stores the debug libraries in a separate directory.
|
# Jiri: Self-built TBB stores the debug libraries in a separate directory.
|
||||||
|
|||||||
@@ -1,627 +0,0 @@
|
|||||||
# Vendored NodeJs.cmake to bootstrap our C++ build without
|
|
||||||
# having the user to install Node modules via `npm install`.
|
|
||||||
#
|
|
||||||
# Update via: ../node_modules/.bin/ncmake update
|
|
||||||
|
|
||||||
|
|
||||||
# Defaults for standard Node.js builds
|
|
||||||
set(NODEJS_DEFAULT_URL https://nodejs.org/download/release)
|
|
||||||
set(NODEJS_DEFAULT_VERSION installed)
|
|
||||||
set(NODEJS_VERSION_FALLBACK latest)
|
|
||||||
set(NODEJS_DEFAULT_NAME node)
|
|
||||||
set(NODEJS_DEFAULT_CHECKSUM SHASUMS256.txt)
|
|
||||||
set(NODEJS_DEFAULT_CHECKTYPE SHA256)
|
|
||||||
|
|
||||||
include(CMakeParseArguments)
|
|
||||||
|
|
||||||
# Find a path by walking upward from a base directory until the path is
|
|
||||||
# found. Sets the variable ${PATH} to False if the path can't
|
|
||||||
# be determined
|
|
||||||
function(find_path_parent NAME BASE PATH)
|
|
||||||
set(ROOT ${BASE})
|
|
||||||
set(${PATH} ${ROOT}/${NAME} PARENT_SCOPE)
|
|
||||||
set(DRIVE "^[A-Za-z]?:?/$")
|
|
||||||
while(NOT ROOT MATCHES ${DRIVE} AND NOT EXISTS ${ROOT}/${NAME})
|
|
||||||
get_filename_component(ROOT ${ROOT} DIRECTORY)
|
|
||||||
set(${PATH} ${ROOT}/${NAME} PARENT_SCOPE)
|
|
||||||
endwhile()
|
|
||||||
if(ROOT MATCHES ${DRIVE})
|
|
||||||
set(${PATH} False PARENT_SCOPE)
|
|
||||||
endif()
|
|
||||||
endfunction()
|
|
||||||
|
|
||||||
# Shortcut for finding standard node module locations
|
|
||||||
macro(find_nodejs_module NAME BASE PATH)
|
|
||||||
find_path_parent(node_modules/${NAME} ${BASE} ${PATH})
|
|
||||||
endmacro()
|
|
||||||
|
|
||||||
# Download with a bit of nice output (without spewing progress)
|
|
||||||
function(download_file URL)
|
|
||||||
message(STATUS "Downloading: ${URL}")
|
|
||||||
file(DOWNLOAD
|
|
||||||
${URL}
|
|
||||||
${ARGN}
|
|
||||||
)
|
|
||||||
endfunction()
|
|
||||||
|
|
||||||
# Embedded win_delay_load_hook file so that this file can be copied
|
|
||||||
# into projects directly (recommended practice)
|
|
||||||
function(nodejs_generate_delayload_hook OUTPUT)
|
|
||||||
file(WRITE ${OUTPUT} "")
|
|
||||||
file(APPEND ${OUTPUT} "/*\n")
|
|
||||||
file(APPEND ${OUTPUT} " * When this file is linked to a DLL, it sets up a delay-load hook that\n")
|
|
||||||
file(APPEND ${OUTPUT} " * intervenes when the DLL is trying to load 'node.exe' or 'iojs.exe'\n")
|
|
||||||
file(APPEND ${OUTPUT} " * dynamically. Instead of trying to locate the .exe file it'll just return\n")
|
|
||||||
file(APPEND ${OUTPUT} " * a handle to the process image.\n")
|
|
||||||
file(APPEND ${OUTPUT} " *\n")
|
|
||||||
file(APPEND ${OUTPUT} " * This allows compiled addons to work when node.exe or iojs.exe is renamed.\n")
|
|
||||||
file(APPEND ${OUTPUT} " */\n")
|
|
||||||
file(APPEND ${OUTPUT} "\n")
|
|
||||||
file(APPEND ${OUTPUT} "#ifdef _MSC_VER\n")
|
|
||||||
file(APPEND ${OUTPUT} "\n")
|
|
||||||
file(APPEND ${OUTPUT} "#ifndef DELAYIMP_INSECURE_WRITABLE_HOOKS\n")
|
|
||||||
file(APPEND ${OUTPUT} "#define DELAYIMP_INSECURE_WRITABLE_HOOKS\n")
|
|
||||||
file(APPEND ${OUTPUT} "#endif\n")
|
|
||||||
file(APPEND ${OUTPUT} "\n")
|
|
||||||
file(APPEND ${OUTPUT} "#ifndef WIN32_LEAN_AND_MEAN\n")
|
|
||||||
file(APPEND ${OUTPUT} "#define WIN32_LEAN_AND_MEAN\n")
|
|
||||||
file(APPEND ${OUTPUT} "#endif\n")
|
|
||||||
file(APPEND ${OUTPUT} "\n")
|
|
||||||
file(APPEND ${OUTPUT} "#include <windows.h>\n")
|
|
||||||
file(APPEND ${OUTPUT} "#include <Shlwapi.h>\n")
|
|
||||||
file(APPEND ${OUTPUT} "#include <delayimp.h>\n")
|
|
||||||
file(APPEND ${OUTPUT} "#include <string.h>\n")
|
|
||||||
file(APPEND ${OUTPUT} "\n")
|
|
||||||
file(APPEND ${OUTPUT} "static FARPROC WINAPI load_exe_hook(unsigned int event, DelayLoadInfo* info) {\n")
|
|
||||||
file(APPEND ${OUTPUT} " if (event != dliNotePreLoadLibrary) return NULL;\n")
|
|
||||||
file(APPEND ${OUTPUT} "\n")
|
|
||||||
file(APPEND ${OUTPUT} " if (_stricmp(info->szDll, \"iojs.exe\") != 0 &&\n")
|
|
||||||
file(APPEND ${OUTPUT} " _stricmp(info->szDll, \"node.exe\") != 0 &&\n")
|
|
||||||
file(APPEND ${OUTPUT} " _stricmp(info->szDll, \"node.dll\") != 0)\n")
|
|
||||||
file(APPEND ${OUTPUT} " return NULL;\n")
|
|
||||||
file(APPEND ${OUTPUT} "\n")
|
|
||||||
file(APPEND ${OUTPUT} " // Get a handle to the current process executable.\n")
|
|
||||||
file(APPEND ${OUTPUT} " HMODULE processModule = GetModuleHandle(NULL);\n")
|
|
||||||
file(APPEND ${OUTPUT} "\n")
|
|
||||||
file(APPEND ${OUTPUT} " // Get the path to the executable.\n")
|
|
||||||
file(APPEND ${OUTPUT} " TCHAR processPath[_MAX_PATH];\n")
|
|
||||||
file(APPEND ${OUTPUT} " GetModuleFileName(processModule, processPath, _MAX_PATH);\n")
|
|
||||||
file(APPEND ${OUTPUT} "\n")
|
|
||||||
file(APPEND ${OUTPUT} " // Get the name of the current executable.\n")
|
|
||||||
file(APPEND ${OUTPUT} " LPSTR processName = PathFindFileName(processPath);\n")
|
|
||||||
file(APPEND ${OUTPUT} "\n")
|
|
||||||
file(APPEND ${OUTPUT} " // If the current process is node or iojs, then just return the proccess \n")
|
|
||||||
file(APPEND ${OUTPUT} " // module.\n")
|
|
||||||
file(APPEND ${OUTPUT} " if (_stricmp(processName, \"node.exe\") == 0 ||\n")
|
|
||||||
file(APPEND ${OUTPUT} " _stricmp(processName, \"iojs.exe\") == 0) {\n")
|
|
||||||
file(APPEND ${OUTPUT} " return (FARPROC) processModule;\n")
|
|
||||||
file(APPEND ${OUTPUT} " }\n")
|
|
||||||
file(APPEND ${OUTPUT} "\n")
|
|
||||||
file(APPEND ${OUTPUT} " // If it is another process, attempt to load 'node.dll' from the same \n")
|
|
||||||
file(APPEND ${OUTPUT} " // directory.\n")
|
|
||||||
file(APPEND ${OUTPUT} " PathRemoveFileSpec(processPath);\n")
|
|
||||||
file(APPEND ${OUTPUT} " PathAppend(processPath, \"node.dll\");\n")
|
|
||||||
file(APPEND ${OUTPUT} "\n")
|
|
||||||
file(APPEND ${OUTPUT} " HMODULE nodeDllModule = GetModuleHandle(processPath);\n")
|
|
||||||
file(APPEND ${OUTPUT} " if(nodeDllModule != NULL) {\n")
|
|
||||||
file(APPEND ${OUTPUT} " // This application has a node.dll in the same directory as the executable,\n")
|
|
||||||
file(APPEND ${OUTPUT} " // use that.\n")
|
|
||||||
file(APPEND ${OUTPUT} " return (FARPROC) nodeDllModule;\n")
|
|
||||||
file(APPEND ${OUTPUT} " }\n")
|
|
||||||
file(APPEND ${OUTPUT} "\n")
|
|
||||||
file(APPEND ${OUTPUT} " // Fallback to the current executable, which must statically link to \n")
|
|
||||||
file(APPEND ${OUTPUT} " // node.lib\n")
|
|
||||||
file(APPEND ${OUTPUT} " return (FARPROC) processModule;\n")
|
|
||||||
file(APPEND ${OUTPUT} "}\n")
|
|
||||||
file(APPEND ${OUTPUT} "\n")
|
|
||||||
file(APPEND ${OUTPUT} "PfnDliHook __pfnDliNotifyHook2 = load_exe_hook;\n")
|
|
||||||
file(APPEND ${OUTPUT} "\n")
|
|
||||||
file(APPEND ${OUTPUT} "#endif\n")
|
|
||||||
endfunction()
|
|
||||||
|
|
||||||
# Sets up a project to build Node.js native modules
|
|
||||||
# - Downloads required dependencies and unpacks them to the build directory.
|
|
||||||
# Internet access is required the first invocation but not after (
|
|
||||||
# provided the download is successful)
|
|
||||||
# - Sets up several variables for building against the downloaded
|
|
||||||
# dependencies
|
|
||||||
# - Guarded to prevent multiple executions, so a single project hierarchy
|
|
||||||
# will only call this once
|
|
||||||
function(nodejs_init)
|
|
||||||
# Prevents this function from executing more than once
|
|
||||||
if(NODEJS_INIT)
|
|
||||||
return()
|
|
||||||
endif()
|
|
||||||
|
|
||||||
# Regex patterns used by the init function for component extraction
|
|
||||||
set(HEADERS_MATCH "^([A-Fa-f0-9]+)[ \t]+([^-]+)-(headers|v?[0-9.]+)-(headers|v?[0-9.]+)([.]tar[.]gz)$")
|
|
||||||
set(LIB32_MATCH "(^[0-9A-Fa-f]+)[\t ]+(win-x86)?(/)?([^/]*)(.lib)$")
|
|
||||||
set(LIB64_MATCH "(^[0-9A-Fa-f]+)[\t ]+(win-)?(x64/)(.*)(.lib)$")
|
|
||||||
|
|
||||||
# Parse function arguments
|
|
||||||
cmake_parse_arguments(nodejs_init
|
|
||||||
"" "URL;NAME;VERSION;CHECKSUM;CHECKTYPE" "" ${ARGN}
|
|
||||||
)
|
|
||||||
|
|
||||||
# Allow the download URL to be overridden by command line argument
|
|
||||||
# NODEJS_URL
|
|
||||||
if(NODEJS_URL)
|
|
||||||
set(URL ${NODEJS_URL})
|
|
||||||
else()
|
|
||||||
# Use the argument if specified, falling back to the default
|
|
||||||
set(URL ${NODEJS_DEFAULT_URL})
|
|
||||||
if(nodejs_init_URL)
|
|
||||||
set(URL ${nodejs_init_URL})
|
|
||||||
endif()
|
|
||||||
endif()
|
|
||||||
|
|
||||||
# Allow name to be overridden by command line argument NODEJS_NAME
|
|
||||||
if(NODEJS_NAME)
|
|
||||||
set(NAME ${NODEJS_NAME})
|
|
||||||
else()
|
|
||||||
# Use the argument if specified, falling back to the default
|
|
||||||
set(NAME ${NODEJS_DEFAULT_NAME})
|
|
||||||
if(nodejs_init_NAME)
|
|
||||||
set(NAME ${nodejs_init_NAME})
|
|
||||||
endif()
|
|
||||||
endif()
|
|
||||||
|
|
||||||
# Allow the checksum file to be overridden by command line argument
|
|
||||||
# NODEJS_CHECKSUM
|
|
||||||
if(NODEJS_CHECKSUM)
|
|
||||||
set(CHECKSUM ${NODEJS_CHECKSUM})
|
|
||||||
else()
|
|
||||||
# Use the argument if specified, falling back to the default
|
|
||||||
set(CHECKSUM ${NODEJS_DEFAULT_CHECKSUM})
|
|
||||||
if(nodejs_init_CHECKSUM)
|
|
||||||
set(CHECKSUM ${nodejs_init_CHECKSUM})
|
|
||||||
endif()
|
|
||||||
endif()
|
|
||||||
|
|
||||||
# Allow the checksum type to be overriden by the command line argument
|
|
||||||
# NODEJS_CHECKTYPE
|
|
||||||
if(NODEJS_CHECKTYPE)
|
|
||||||
set(CHECKTYPE ${NODEJS_CHECKTYPE})
|
|
||||||
else()
|
|
||||||
# Use the argument if specified, falling back to the default
|
|
||||||
set(CHECKTYPE ${NODEJS_DEFAULT_CHECKTYPE})
|
|
||||||
if(nodejs_init_CHECKTYPE)
|
|
||||||
set(CHECKTYPE ${nodejs_init_CHECKTYPE})
|
|
||||||
endif()
|
|
||||||
endif()
|
|
||||||
|
|
||||||
# Allow the version to be overridden by the command line argument
|
|
||||||
# NODEJS_VERSION
|
|
||||||
if(NODEJS_VERSION)
|
|
||||||
set(VERSION ${NODEJS_VERSION})
|
|
||||||
else()
|
|
||||||
# Use the argument if specified, falling back to the default
|
|
||||||
set(VERSION ${NODEJS_DEFAULT_VERSION})
|
|
||||||
if(nodejs_init_VERSION)
|
|
||||||
set(VERSION ${nodejs_init_VERSION})
|
|
||||||
endif()
|
|
||||||
endif()
|
|
||||||
|
|
||||||
# "installed" is a special version that tries to use the currently
|
|
||||||
# installed version (determined by running node)
|
|
||||||
set(NODEJS_INSTALLED False CACHE BOOL "Node.js install status" FORCE)
|
|
||||||
if(VERSION STREQUAL "installed")
|
|
||||||
if(NOT NAME STREQUAL ${NODEJS_DEFAULT_NAME})
|
|
||||||
message(FATAL_ERROR
|
|
||||||
"'Installed' version identifier can only be used with"
|
|
||||||
"the core Node.js library"
|
|
||||||
)
|
|
||||||
endif()
|
|
||||||
# Fall back to the "latest" version if node isn't installed
|
|
||||||
set(VERSION ${NODEJS_VERSION_FALLBACK})
|
|
||||||
find_program(NODEJS_BINARY NAMES node nodejs)
|
|
||||||
if(NODEJS_BINARY)
|
|
||||||
execute_process(
|
|
||||||
COMMAND ${NODEJS_BINARY} --version
|
|
||||||
RESULT_VARIABLE INSTALLED_VERSION_RESULT
|
|
||||||
OUTPUT_VARIABLE INSTALLED_VERSION
|
|
||||||
OUTPUT_STRIP_TRAILING_WHITESPACE
|
|
||||||
)
|
|
||||||
if(INSTALLED_VERSION_RESULT STREQUAL "0")
|
|
||||||
set(NODEJS_INSTALLED True CACHE BOOL
|
|
||||||
"Node.js install status" FORCE
|
|
||||||
)
|
|
||||||
set(VERSION ${INSTALLED_VERSION})
|
|
||||||
endif()
|
|
||||||
endif()
|
|
||||||
endif()
|
|
||||||
|
|
||||||
# Create a temporary download directory
|
|
||||||
set(TEMP ${CMAKE_CURRENT_BINARY_DIR}/temp)
|
|
||||||
if(EXISTS ${TEMP})
|
|
||||||
file(REMOVE_RECURSE ${TEMP})
|
|
||||||
endif()
|
|
||||||
file(MAKE_DIRECTORY ${TEMP})
|
|
||||||
|
|
||||||
# Unless the target is special version "latest", the parameters
|
|
||||||
# necessary to construct the root path are known
|
|
||||||
if(NOT VERSION STREQUAL "latest")
|
|
||||||
set(ROOT ${CMAKE_CURRENT_BINARY_DIR}/${NAME}/${VERSION})
|
|
||||||
# Extract checksums from the existing checksum file
|
|
||||||
set(CHECKSUM_TARGET ${ROOT}/CHECKSUM)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
# If we're trying to determine the version or we haven't saved the
|
|
||||||
# checksum file for this version, download it from the specified server
|
|
||||||
if(VERSION STREQUAL "latest" OR
|
|
||||||
(DEFINED ROOT AND NOT EXISTS ${ROOT}/CHECKSUM))
|
|
||||||
if(DEFINED ROOT)
|
|
||||||
# Clear away the old checksum in case the new one is different
|
|
||||||
# and/or it fails to download
|
|
||||||
file(REMOVE ${ROOT}/CHECKSUM)
|
|
||||||
endif()
|
|
||||||
file(REMOVE ${TEMP}/CHECKSUM)
|
|
||||||
download_file(
|
|
||||||
${URL}/${VERSION}/${CHECKSUM}
|
|
||||||
${TEMP}/CHECKSUM
|
|
||||||
INACTIVITY_TIMEOUT 10
|
|
||||||
STATUS CHECKSUM_STATUS
|
|
||||||
)
|
|
||||||
list(GET CHECKSUM_STATUS 0 CHECKSUM_STATUS)
|
|
||||||
if(CHECKSUM_STATUS GREATER 0)
|
|
||||||
file(REMOVE ${TEMP}/CHECKSUM)
|
|
||||||
message(FATAL_ERROR
|
|
||||||
"Unable to download checksum file"
|
|
||||||
)
|
|
||||||
endif()
|
|
||||||
# Extract checksums from the temporary file
|
|
||||||
set(CHECKSUM_TARGET ${TEMP}/CHECKSUM)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
# Extract the version, name, header archive and archive checksum
|
|
||||||
# from the file. This first extract is what defines / specifies the
|
|
||||||
# actual version number and name.
|
|
||||||
file(STRINGS
|
|
||||||
${CHECKSUM_TARGET} HEADERS_CHECKSUM
|
|
||||||
REGEX ${HEADERS_MATCH}
|
|
||||||
LIMIT_COUNT 1
|
|
||||||
)
|
|
||||||
if(NOT HEADERS_CHECKSUM)
|
|
||||||
file(REMOVE ${TEMP}/CHECKSUM)
|
|
||||||
if(DEFINED ROOT)
|
|
||||||
file(REMOVE ${ROOT}/CHECKSUM)
|
|
||||||
endif()
|
|
||||||
message(FATAL_ERROR "Unable to extract header archive checksum")
|
|
||||||
endif()
|
|
||||||
string(REGEX MATCH ${HEADERS_MATCH} HEADERS_CHECKSUM ${HEADERS_CHECKSUM})
|
|
||||||
set(HEADERS_CHECKSUM ${CMAKE_MATCH_1})
|
|
||||||
set(NAME ${CMAKE_MATCH_2})
|
|
||||||
if(CMAKE_MATCH_3 STREQUAL "headers")
|
|
||||||
set(VERSION ${CMAKE_MATCH_4})
|
|
||||||
else()
|
|
||||||
set(VERSION ${CMAKE_MATCH_3})
|
|
||||||
endif()
|
|
||||||
set(HEADERS_ARCHIVE
|
|
||||||
${CMAKE_MATCH_2}-${CMAKE_MATCH_3}-${CMAKE_MATCH_4}${CMAKE_MATCH_5}
|
|
||||||
)
|
|
||||||
# Make sure that the root directory exists, and that the checksum
|
|
||||||
# file has been moved over from temp
|
|
||||||
if(DEFINED ROOT)
|
|
||||||
set(OLD_ROOT ${ROOT})
|
|
||||||
endif()
|
|
||||||
set(ROOT ${CMAKE_CURRENT_BINARY_DIR}/${NAME}/${VERSION})
|
|
||||||
if(DEFINED OLD_ROOT AND NOT ROOT STREQUAL "${OLD_ROOT}")
|
|
||||||
file(REMOVE ${TEMP}/CHECKSUM)
|
|
||||||
file(REMOVE ${ROOT}/CHECKSUM)
|
|
||||||
message(FATAL_ERROR "Version/Name mismatch")
|
|
||||||
endif()
|
|
||||||
file(MAKE_DIRECTORY ${ROOT})
|
|
||||||
if(EXISTS ${TEMP}/CHECKSUM)
|
|
||||||
file(REMOVE ${ROOT}/CHECKSUM)
|
|
||||||
file(RENAME ${TEMP}/CHECKSUM ${ROOT}/CHECKSUM)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
# Now that its fully resolved, report the name and version of Node.js being
|
|
||||||
# used
|
|
||||||
message(STATUS "NodeJS: Using ${NAME}, version ${VERSION}")
|
|
||||||
|
|
||||||
# Download the headers for the version being used
|
|
||||||
# Theoretically, these could be found by searching the installed
|
|
||||||
# system, but in practice, this can be error prone. They're provided
|
|
||||||
# on the download servers, so just use the ones there.
|
|
||||||
if(NOT EXISTS ${ROOT}/include)
|
|
||||||
file(REMOVE ${TEMP}/${HEADERS_ARCHIVE})
|
|
||||||
download_file(
|
|
||||||
${URL}/${VERSION}/${HEADERS_ARCHIVE}
|
|
||||||
${TEMP}/${HEADERS_ARCHIVE}
|
|
||||||
INACTIVITY_TIMEOUT 10
|
|
||||||
EXPECTED_HASH ${CHECKTYPE}=${HEADERS_CHECKSUM}
|
|
||||||
STATUS HEADERS_STATUS
|
|
||||||
)
|
|
||||||
list(GET HEADERS_STATUS 0 HEADERS_STATUS)
|
|
||||||
if(HEADER_STATUS GREATER 0)
|
|
||||||
file(REMOVE ${TEMP}/${HEADERS_ARCHIVE})
|
|
||||||
message(FATAL_ERROR "Unable to download Node.js headers")
|
|
||||||
endif()
|
|
||||||
execute_process(
|
|
||||||
COMMAND ${CMAKE_COMMAND} -E tar xfz ${TEMP}/${HEADERS_ARCHIVE}
|
|
||||||
WORKING_DIRECTORY ${TEMP}
|
|
||||||
)
|
|
||||||
|
|
||||||
# This adapts the header extraction to support a number of different
|
|
||||||
# header archive contents in addition to the one used by the
|
|
||||||
# default Node.js library
|
|
||||||
unset(NODEJS_HEADERS_PATH CACHE)
|
|
||||||
find_path(NODEJS_HEADERS_PATH
|
|
||||||
NAMES src include
|
|
||||||
PATHS
|
|
||||||
${TEMP}/${NAME}-${VERSION}-headers
|
|
||||||
${TEMP}/${NAME}-${VERSION}
|
|
||||||
${TEMP}/${NODEJS_DEFAULT_NAME}-${VERSION}-headers
|
|
||||||
${TEMP}/${NODEJS_DEFAULT_NAME}-${VERSION}
|
|
||||||
${TEMP}/${NODEJS_DEFAULT_NAME}
|
|
||||||
${TEMP}
|
|
||||||
NO_DEFAULT_PATH
|
|
||||||
)
|
|
||||||
if(NOT NODEJS_HEADERS_PATH)
|
|
||||||
message(FATAL_ERROR "Unable to find extracted headers folder")
|
|
||||||
endif()
|
|
||||||
|
|
||||||
# Move the headers into a standard location with a standard layout
|
|
||||||
file(REMOVE ${TEMP}/${HEADERS_ARCHIVE})
|
|
||||||
file(REMOVE_RECURSE ${ROOT}/include)
|
|
||||||
if(EXISTS ${NODEJS_HEADERS_PATH}/include/node)
|
|
||||||
file(RENAME ${NODEJS_HEADERS_PATH}/include/node ${ROOT}/include)
|
|
||||||
elseif(EXISTS ${NODEJS_HEADERS_PATH}/src)
|
|
||||||
file(MAKE_DIRECTORY ${ROOT}/include)
|
|
||||||
if(NOT EXISTS ${NODEJS_HEADERS_PATH}/src)
|
|
||||||
file(REMOVE_RECURSE ${ROOT}/include)
|
|
||||||
message(FATAL_ERROR "Unable to find core headers")
|
|
||||||
endif()
|
|
||||||
file(COPY ${NODEJS_HEADERS_PATH}/src/
|
|
||||||
DESTINATION ${ROOT}/include
|
|
||||||
)
|
|
||||||
if(NOT EXISTS ${NODEJS_HEADERS_PATH}/deps/uv/include)
|
|
||||||
file(REMOVE_RECURSE ${ROOT}/include)
|
|
||||||
message(FATAL_ERROR "Unable to find libuv headers")
|
|
||||||
endif()
|
|
||||||
file(COPY ${NODEJS_HEADERS_PATH}/deps/uv/include/
|
|
||||||
DESTINATION ${ROOT}/include
|
|
||||||
)
|
|
||||||
if(NOT EXISTS ${NODEJS_HEADERS_PATH}/deps/v8/include)
|
|
||||||
file(REMOVE_RECURSE ${ROOT}/include)
|
|
||||||
message(FATAL_ERROR "Unable to find v8 headers")
|
|
||||||
endif()
|
|
||||||
file(COPY ${NODEJS_HEADERS_PATH}/deps/v8/include/
|
|
||||||
DESTINATION ${ROOT}/include
|
|
||||||
)
|
|
||||||
if(NOT EXISTS ${NODEJS_HEADERS_PATH}/deps/zlib)
|
|
||||||
file(REMOVE_RECURSE ${ROOT}/include)
|
|
||||||
message(FATAL_ERROR "Unable to find zlib headers")
|
|
||||||
endif()
|
|
||||||
file(COPY ${NODEJS_HEADERS_PATH}/deps/zlib/
|
|
||||||
DESTINATION ${ROOT}/include
|
|
||||||
)
|
|
||||||
endif()
|
|
||||||
file(REMOVE_RECURSE ${NODEJS_HEADERS_PATH})
|
|
||||||
unset(NODEJS_HEADERS_PATH CACHE)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
# Only download the libraries on windows, since its the only place
|
|
||||||
# its necessary. Note, this requires rerunning CMake if moving
|
|
||||||
# a module from one platform to another (should happen automatically
|
|
||||||
# with most generators)
|
|
||||||
if(WIN32)
|
|
||||||
# Download the win32 library for linking
|
|
||||||
file(STRINGS
|
|
||||||
${ROOT}/CHECKSUM LIB32_CHECKSUM
|
|
||||||
LIMIT_COUNT 1
|
|
||||||
REGEX ${LIB32_MATCH}
|
|
||||||
)
|
|
||||||
if(NOT LIB32_CHECKSUM)
|
|
||||||
message(FATAL_ERROR "Unable to extract x86 library checksum")
|
|
||||||
endif()
|
|
||||||
string(REGEX MATCH ${LIB32_MATCH} LIB32_CHECKSUM ${LIB32_CHECKSUM})
|
|
||||||
set(LIB32_CHECKSUM ${CMAKE_MATCH_1})
|
|
||||||
set(LIB32_PATH win-x86)
|
|
||||||
set(LIB32_NAME ${CMAKE_MATCH_4}${CMAKE_MATCH_5})
|
|
||||||
set(LIB32_TARGET ${CMAKE_MATCH_2}${CMAKE_MATCH_3}${LIB32_NAME})
|
|
||||||
if(NOT EXISTS ${ROOT}/${LIB32_PATH})
|
|
||||||
file(REMOVE_RECURSE ${TEMP}/${LIB32_PATH})
|
|
||||||
download_file(
|
|
||||||
${URL}/${VERSION}/${LIB32_TARGET}
|
|
||||||
${TEMP}/${LIB32_PATH}/${LIB32_NAME}
|
|
||||||
INACTIVITY_TIMEOUT 10
|
|
||||||
EXPECTED_HASH ${CHECKTYPE}=${LIB32_CHECKSUM}
|
|
||||||
STATUS LIB32_STATUS
|
|
||||||
)
|
|
||||||
list(GET LIB32_STATUS 0 LIB32_STATUS)
|
|
||||||
if(LIB32_STATUS GREATER 0)
|
|
||||||
message(FATAL_ERROR
|
|
||||||
"Unable to download Node.js windows library (32-bit)"
|
|
||||||
)
|
|
||||||
endif()
|
|
||||||
file(REMOVE_RECURSE ${ROOT}/${LIB32_PATH})
|
|
||||||
file(MAKE_DIRECTORY ${ROOT}/${LIB32_PATH})
|
|
||||||
file(RENAME
|
|
||||||
${TEMP}/${LIB32_PATH}/${LIB32_NAME}
|
|
||||||
${ROOT}/${LIB32_PATH}/${LIB32_NAME}
|
|
||||||
)
|
|
||||||
file(REMOVE_RECURSE ${TEMP}/${LIB32_PATH})
|
|
||||||
endif()
|
|
||||||
|
|
||||||
# Download the win64 library for linking
|
|
||||||
file(STRINGS
|
|
||||||
${ROOT}/CHECKSUM LIB64_CHECKSUM
|
|
||||||
LIMIT_COUNT 1
|
|
||||||
REGEX ${LIB64_MATCH}
|
|
||||||
)
|
|
||||||
if(NOT LIB64_CHECKSUM)
|
|
||||||
message(FATAL_ERROR "Unable to extract x64 library checksum")
|
|
||||||
endif()
|
|
||||||
string(REGEX MATCH ${LIB64_MATCH} LIB64_CHECKSUM ${LIB64_CHECKSUM})
|
|
||||||
set(LIB64_CHECKSUM ${CMAKE_MATCH_1})
|
|
||||||
set(LIB64_PATH win-x64)
|
|
||||||
set(LIB64_NAME ${CMAKE_MATCH_4}${CMAKE_MATCH_5})
|
|
||||||
set(LIB64_TARGET ${CMAKE_MATCH_2}${CMAKE_MATCH_3}${LIB64_NAME})
|
|
||||||
if(NOT EXISTS ${ROOT}/${LIB64_PATH})
|
|
||||||
file(REMOVE_RECURSE ${TEMP}/${LIB64_PATH})
|
|
||||||
download_file(
|
|
||||||
${URL}/${VERSION}/${LIB64_TARGET}
|
|
||||||
${TEMP}/${LIB64_PATH}/${LIB64_NAME}
|
|
||||||
INACTIVITY_TIMEOUT 10
|
|
||||||
EXPECTED_HASH ${CHECKTYPE}=${LIB64_CHECKSUM}
|
|
||||||
STATUS LIB64_STATUS
|
|
||||||
)
|
|
||||||
list(GET LIB64_STATUS 0 LIB64_STATUS)
|
|
||||||
if(LIB64_STATUS GREATER 0)
|
|
||||||
message(FATAL_ERROR
|
|
||||||
"Unable to download Node.js windows library (64-bit)"
|
|
||||||
)
|
|
||||||
endif()
|
|
||||||
file(REMOVE_RECURSE ${ROOT}/${LIB64_PATH})
|
|
||||||
file(MAKE_DIRECTORY ${ROOT}/${LIB64_PATH})
|
|
||||||
file(RENAME
|
|
||||||
${TEMP}/${LIB64_PATH}/${LIB64_NAME}
|
|
||||||
${ROOT}/${LIB64_PATH}/${LIB64_NAME}
|
|
||||||
)
|
|
||||||
file(REMOVE_RECURSE ${TEMP}/${LIB64_PATH})
|
|
||||||
endif()
|
|
||||||
endif()
|
|
||||||
|
|
||||||
# The downloaded headers should always be set for inclusion
|
|
||||||
list(APPEND INCLUDE_DIRS ${ROOT}/include)
|
|
||||||
|
|
||||||
# Look for the NAN module, and add it to the includes
|
|
||||||
find_nodejs_module(
|
|
||||||
nan
|
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}
|
|
||||||
NODEJS_NAN_DIR
|
|
||||||
)
|
|
||||||
if(NODEJS_NAN_DIR)
|
|
||||||
list(APPEND INCLUDE_DIRS ${NODEJS_NAN_DIR})
|
|
||||||
endif()
|
|
||||||
|
|
||||||
# Under windows, we need a bunch of libraries (due to the way
|
|
||||||
# dynamic linking works)
|
|
||||||
if(WIN32)
|
|
||||||
# Generate and use a delay load hook to allow the node binary
|
|
||||||
# name to be changed while still loading native modules
|
|
||||||
set(DELAY_LOAD_HOOK ${CMAKE_CURRENT_BINARY_DIR}/win_delay_load_hook.c)
|
|
||||||
nodejs_generate_delayload_hook(${DELAY_LOAD_HOOK})
|
|
||||||
set(SOURCES ${DELAY_LOAD_HOOK})
|
|
||||||
|
|
||||||
# Necessary flags to get delayload working correctly
|
|
||||||
list(APPEND LINK_FLAGS
|
|
||||||
"-IGNORE:4199"
|
|
||||||
"-DELAYLOAD:iojs.exe"
|
|
||||||
"-DELAYLOAD:node.exe"
|
|
||||||
"-DELAYLOAD:node.dll"
|
|
||||||
)
|
|
||||||
|
|
||||||
# Core system libraries used by node
|
|
||||||
list(APPEND LIBRARIES
|
|
||||||
kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib
|
|
||||||
advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib
|
|
||||||
odbc32.lib Shlwapi.lib DelayImp.lib
|
|
||||||
)
|
|
||||||
|
|
||||||
# Also link to the node stub itself (downloaded above)
|
|
||||||
if(CMAKE_CL_64)
|
|
||||||
list(APPEND LIBRARIES ${ROOT}/${LIB64_PATH}/${LIB64_NAME})
|
|
||||||
else()
|
|
||||||
list(APPEND LIBRARIES ${ROOT}/${LIB32_PATH}/${LIB32_NAME})
|
|
||||||
endif()
|
|
||||||
else()
|
|
||||||
# Non-windows platforms should use these flags
|
|
||||||
list(APPEND DEFINITIONS _LARGEFILE_SOURCE _FILE_OFFSET_BITS=64)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
# Special handling for OSX / clang to allow undefined symbols
|
|
||||||
# Define is required by node on OSX
|
|
||||||
if(APPLE)
|
|
||||||
list(APPEND LINK_FLAGS "-undefined dynamic_lookup")
|
|
||||||
list(APPEND DEFINITIONS _DARWIN_USE_64_BIT_INODE=1)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
# Export all settings for use as arguments in the rest of the build
|
|
||||||
set(NODEJS_VERSION ${VERSION} PARENT_SCOPE)
|
|
||||||
set(NODEJS_SOURCES ${SOURCES} PARENT_SCOPE)
|
|
||||||
set(NODEJS_INCLUDE_DIRS ${INCLUDE_DIRS} PARENT_SCOPE)
|
|
||||||
set(NODEJS_LIBRARIES ${LIBRARIES} PARENT_SCOPE)
|
|
||||||
set(NODEJS_LINK_FLAGS ${LINK_FLAGS} PARENT_SCOPE)
|
|
||||||
set(NODEJS_DEFINITIONS ${DEFINITIONS} PARENT_SCOPE)
|
|
||||||
|
|
||||||
# Prevents this function from executing more than once
|
|
||||||
set(NODEJS_INIT TRUE PARENT_SCOPE)
|
|
||||||
endfunction()
|
|
||||||
|
|
||||||
# Helper function for defining a node module
|
|
||||||
# After nodejs_init, all of the settings and dependencies necessary to do
|
|
||||||
# this yourself are defined, but this helps make sure everything is configured
|
|
||||||
# correctly. Feel free to use it as a model to do this by hand (or to
|
|
||||||
# tweak this configuration if you need something custom).
|
|
||||||
function(add_nodejs_module NAME)
|
|
||||||
# Validate name parameter (must be a valid C identifier)
|
|
||||||
string(MAKE_C_IDENTIFIER ${NAME} ${NAME}_SYMBOL_CHECK)
|
|
||||||
if(NOT "${NAME}" STREQUAL "${${NAME}_SYMBOL_CHECK}")
|
|
||||||
message(FATAL_ERROR
|
|
||||||
"Module name must be a valid C identifier. "
|
|
||||||
"Suggested alternative: '${${NAME}_SYMBOL_CHECK}'"
|
|
||||||
)
|
|
||||||
endif()
|
|
||||||
# Make sure node is initialized (variables set) before defining the module
|
|
||||||
if(NOT NODEJS_INIT)
|
|
||||||
message(FATAL_ERROR
|
|
||||||
"Node.js has not been initialized. "
|
|
||||||
"Call nodejs_init before adding any modules"
|
|
||||||
)
|
|
||||||
endif()
|
|
||||||
# In order to match node-gyp, we need to build into type specific folders
|
|
||||||
# ncmake takes care of this, but be sure to set CMAKE_BUILD_TYPE yourself
|
|
||||||
# if invoking CMake directly
|
|
||||||
if(NOT CMAKE_CONFIGURATION_TYPES AND NOT CMAKE_BUILD_TYPE)
|
|
||||||
message(FATAL_ERROR
|
|
||||||
"Configuration type must be specified. "
|
|
||||||
"Set CMAKE_BUILD_TYPE or use a different generator"
|
|
||||||
)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
# A node module is a shared library
|
|
||||||
add_library(${NAME} SHARED ${NODEJS_SOURCES} ${ARGN})
|
|
||||||
# Add compiler defines for the module
|
|
||||||
# Two helpful ones:
|
|
||||||
# MODULE_NAME must match the name of the build library, define that here
|
|
||||||
# ${NAME}_BUILD is for symbol visibility under windows
|
|
||||||
string(TOUPPER "${NAME}_BUILD" ${NAME}_BUILD_DEF)
|
|
||||||
target_compile_definitions(${NAME}
|
|
||||||
PRIVATE MODULE_NAME=${NAME}
|
|
||||||
PRIVATE ${${NAME}_BUILD_DEF}
|
|
||||||
PUBLIC ${NODEJS_DEFINITIONS}
|
|
||||||
)
|
|
||||||
# This properly defines includes for the module
|
|
||||||
target_include_directories(${NAME} PUBLIC ${NODEJS_INCLUDE_DIRS})
|
|
||||||
|
|
||||||
# Add link flags to the module
|
|
||||||
target_link_libraries(${NAME} ${NODEJS_LIBRARIES})
|
|
||||||
|
|
||||||
# Set required properties for the module to build properly
|
|
||||||
# Correct naming, symbol visiblity and C++ standard
|
|
||||||
set_target_properties(${NAME} PROPERTIES
|
|
||||||
OUTPUT_NAME ${NAME}
|
|
||||||
PREFIX ""
|
|
||||||
SUFFIX ".node"
|
|
||||||
MACOSX_RPATH ON
|
|
||||||
C_VISIBILITY_PRESET hidden
|
|
||||||
CXX_VISIBILITY_PRESET hidden
|
|
||||||
POSITION_INDEPENDENT_CODE TRUE
|
|
||||||
CMAKE_CXX_STANDARD_REQUIRED TRUE
|
|
||||||
CXX_STANDARD 11
|
|
||||||
LINK_FLAGS "${NODEJS_LINK_FLAGS}"
|
|
||||||
)
|
|
||||||
|
|
||||||
# Make sure we're buiilding in a build specific output directory
|
|
||||||
# Only necessary on single-target generators (Make, Ninja)
|
|
||||||
# Multi-target generators do this automatically
|
|
||||||
# This (luckily) mirrors node-gyp conventions
|
|
||||||
if(NOT CMAKE_CONFIGURATION_TYPES)
|
|
||||||
set_property(TARGET ${NAME} PROPERTY
|
|
||||||
LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BUILD_TYPE}
|
|
||||||
)
|
|
||||||
endif()
|
|
||||||
endfunction()
|
|
||||||
@@ -1,6 +1,7 @@
|
|||||||
coverage:
|
coverage:
|
||||||
|
|
||||||
ignore:
|
ignore:
|
||||||
|
- unit_tests/.*
|
||||||
- third_party/.*
|
- third_party/.*
|
||||||
|
|
||||||
comment: off
|
comment: off
|
||||||
|
|||||||
+4
-2
@@ -2,6 +2,8 @@ module.exports = {
|
|||||||
default: '--strict --tags ~@stress --tags ~@todo --require features/support --require features/step_definitions',
|
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',
|
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',
|
todo: '--strict --tags @todo --require features/support --require features/step_definitions',
|
||||||
all: '--strict --require features/support --require features/step_definitions',
|
all: '--strict --require features/support --require features/step_definitions'
|
||||||
mld: '--strict --tags ~@stress --tags ~@todo --tags ~@alternative --tags ~@matrix --tags ~@trip --require features/support --require features/step_definitions -f progress'
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
+14
-42
@@ -1,46 +1,18 @@
|
|||||||
FROM alpine:3.5
|
FROM ubuntu:14.04
|
||||||
|
|
||||||
ARG DOCKER_TAG
|
RUN apt-get update -y && apt-get install -y software-properties-common
|
||||||
|
RUN add-apt-repository ppa:ubuntu-toolchain-r/test
|
||||||
|
RUN apt-get update -y && apt-get install -y g++-5 libbz2-dev libstxxl-dev libstxxl1 libxml2-dev libzip-dev lua5.1 liblua5.1-0-dev libtbb-dev libgdal-dev libboost-all-dev ccache
|
||||||
|
RUN apt-get -y install curl cmake cmake-curses-gui git
|
||||||
|
|
||||||
RUN mkdir /src
|
|
||||||
COPY . /src
|
|
||||||
|
|
||||||
RUN mkdir /opt
|
|
||||||
WORKDIR /opt
|
WORKDIR /opt
|
||||||
RUN NPROC=$(grep -c ^processor /proc/cpuinfo 2>/dev/null || 1) && \
|
RUN git clone --depth 1 --branch v0.31.0 https://github.com/creationix/nvm.git
|
||||||
case ${DOCKER_TAG} in *"-debug"*) BUILD_TYPE="Debug";; *) BUILD_TYPE="Release";; esac && \
|
RUN /bin/bash -c "source /opt/nvm/nvm.sh && nvm install v4"
|
||||||
\
|
|
||||||
echo "@testing http://dl-cdn.alpinelinux.org/alpine/edge/testing" >> /etc/apk/repositories && \
|
|
||||||
apk update && \
|
|
||||||
apk upgrade && \
|
|
||||||
apk add git cmake wget make libc-dev gcc g++ bzip2-dev boost-dev zlib-dev expat-dev lua5.1-dev libtbb@testing libtbb-dev@testing && \
|
|
||||||
\
|
|
||||||
echo "Building libstxxl" && \
|
|
||||||
cd /opt && \
|
|
||||||
git clone --depth 1 --branch 1.4.1 https://github.com/stxxl/stxxl.git && \
|
|
||||||
cd stxxl && \
|
|
||||||
mkdir build && \
|
|
||||||
cd build && \
|
|
||||||
cmake -DCMAKE_BUILD_TYPE=Release .. && \
|
|
||||||
make -j${NPROC} && \
|
|
||||||
make install && \
|
|
||||||
\
|
|
||||||
echo "Building OSRM ${DOCKER_TAG}" && \
|
|
||||||
cd /src && \
|
|
||||||
mkdir build && \
|
|
||||||
cd build && \
|
|
||||||
cmake -DCMAKE_BUILD_TYPE=${BUILD_TYPE} -DENABLE_LTO=On .. && \
|
|
||||||
make -j${NPROC} install && \
|
|
||||||
cd ../profiles && \
|
|
||||||
cp -r * /opt && \
|
|
||||||
\
|
|
||||||
echo "Cleaning up" && \
|
|
||||||
strip /usr/local/bin/* && \
|
|
||||||
rm /usr/local/lib/libstxxl* && \
|
|
||||||
cd /opt && \
|
|
||||||
apk del boost-dev && \
|
|
||||||
apk del g++ cmake libc-dev expat-dev zlib-dev bzip2-dev lua5.1-dev git make gcc && \
|
|
||||||
apk add boost-filesystem boost-program_options boost-regex boost-iostreams boost-thread libgomp lua5.1 expat && \
|
|
||||||
rm -rf /src /opt/stxxl /usr/local/bin/stxxl_tool /usr/local/lib/libosrm*
|
|
||||||
|
|
||||||
EXPOSE 5000
|
RUN useradd -ms /bin/bash mapbox
|
||||||
|
USER mapbox
|
||||||
|
ENV HOME /home/mapbox
|
||||||
|
WORKDIR /home/mapbox
|
||||||
|
|
||||||
|
RUN echo "source /opt/nvm/nvm.sh" > .bashrc
|
||||||
|
RUN echo "source /home/mapbox/.bashrc" > .profile
|
||||||
|
|||||||
@@ -0,0 +1,6 @@
|
|||||||
|
# Docker based continious integration
|
||||||
|
|
||||||
|
Run ```./docker/build-image.sh``` to build a docker image.
|
||||||
|
The image contains all the build dependencies and the state of the local git repository.
|
||||||
|
|
||||||
|
Run ```./docker/run-gcc.sh``` to build OSRM with g++ and run all tests.
|
||||||
Executable
+9
@@ -0,0 +1,9 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
set -e
|
||||||
|
set -o pipefail
|
||||||
|
|
||||||
|
docker build \
|
||||||
|
-t mapbox/osrm:linux \
|
||||||
|
docker/
|
||||||
|
|
||||||
@@ -1,9 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
|
|
||||||
# We've placed the Dockerfile under docker/ so that the generically named
|
|
||||||
# hooks/ directory doesn't pollute the main directory. Because we need to
|
|
||||||
# COPY the source into the container, we need to use some -f gymnastics to
|
|
||||||
# ensure that "COPY . /src" is referring to the repo root, not the directory
|
|
||||||
# that contains the Dockerfile.
|
|
||||||
# This script gets executed with a pwd of wherever the Dockerfile is.
|
|
||||||
docker build --build-arg DOCKER_TAG=${DOCKER_TAG} -t $IMAGE_NAME -f Dockerfile ..
|
|
||||||
Executable
+11
@@ -0,0 +1,11 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
set -e
|
||||||
|
set -o pipefail
|
||||||
|
|
||||||
|
docker run \
|
||||||
|
-i \
|
||||||
|
-e "CXX=clang++" \
|
||||||
|
-v `pwd`:/home/mapbox/osrm-backend \
|
||||||
|
-t mapbox/osrm:linux \
|
||||||
|
/bin/bash -lc "osrm-backend/docker/test.sh"
|
||||||
Executable
+12
@@ -0,0 +1,12 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
set -e
|
||||||
|
set -o pipefail
|
||||||
|
|
||||||
|
docker run \
|
||||||
|
-i \
|
||||||
|
-e "CXX=g++-5" \
|
||||||
|
-e "CC=gcc-5" \
|
||||||
|
-v `pwd`:/home/mapbox/osrm-backend \
|
||||||
|
-t mapbox/osrm:linux \
|
||||||
|
/bin/bash -lc "osrm-backend/docker/test.sh"
|
||||||
Executable
+21
@@ -0,0 +1,21 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
set -e
|
||||||
|
set -o pipefail
|
||||||
|
|
||||||
|
export CMAKEOPTIONS="-DCMAKE_BUILD_TYPE=Release"
|
||||||
|
|
||||||
|
cd /home/mapbox/osrm-backend
|
||||||
|
[ -d build ] && rm -rf build
|
||||||
|
mkdir -p build
|
||||||
|
cd build
|
||||||
|
cmake .. $CMAKEOPTIONS -DBUILD_TOOLS=1
|
||||||
|
|
||||||
|
make -j`nproc`
|
||||||
|
make tests -j`nproc`
|
||||||
|
#./unit_tests/server-tests
|
||||||
|
#./unit_tests/library-tests
|
||||||
|
#./unit_tests/extractor-tests
|
||||||
|
#./unit_tests/util-tests
|
||||||
|
cd ..
|
||||||
|
npm test
|
||||||
+4
-7
@@ -247,7 +247,7 @@ curl 'http://router.project-osrm.org/table/v1/driving/polyline(egs_Iq_aqAppHzbHu
|
|||||||
|
|
||||||
- `code` if the request was successful `Ok` otherwise see the service dependent and general status codes.
|
- `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
|
- `durations` array of arrays that stores the matrix in row-major order. `durations[i][j]` gives the travel time from
|
||||||
the i-th waypoint to the j-th waypoint. Values are given in seconds. Can be `null` if no route between `i` and `j` can be found.
|
the i-th waypoint to the j-th waypoint. Values are given in seconds.
|
||||||
- `sources` array of `Waypoint` objects describing all sources in order
|
- `sources` array of `Waypoint` objects describing all sources in order
|
||||||
- `destinations` array of `Waypoint` objects describing all destinations in order
|
- `destinations` array of `Waypoint` objects describing all destinations in order
|
||||||
|
|
||||||
@@ -279,8 +279,6 @@ In addition to the [general options](#general-options) the following options are
|
|||||||
|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.|
|
|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} ...]` |Timestamps for the input locations in seconds since UNIX epoch. Timestamps need to be monotonically increasing. |
|
||||||
|radiuses |`{radius};{radius}[;{radius} ...]` |Standard deviation of GPS precision used for map matching. If applicable use GPS accuracy.|
|
|radiuses |`{radius};{radius}[;{radius} ...]` |Standard deviation of GPS precision used for map matching. If applicable use GPS accuracy.|
|
||||||
|gaps |`split` (default), `ignore` |Allows the input track splitting based on huge timestamp gaps between points. |
|
|
||||||
|tidy |`true`, `false` (default) |Allows the input track modification to obtain better matching quality for noisy tracks. |
|
|
||||||
|
|
||||||
|Parameter |Values |
|
|Parameter |Values |
|
||||||
|------------|-----------------------------------|
|
|------------|-----------------------------------|
|
||||||
@@ -300,7 +298,6 @@ The area to search is chosen such that the correct candidate should be considere
|
|||||||
Each `Waypoint` object has the following additional properties:
|
Each `Waypoint` object has the following additional properties:
|
||||||
- `matchings_index`: Index to the `Route` object in `matchings` the sub-trace was matched to.
|
- `matchings_index`: Index to the `Route` object in `matchings` the sub-trace was matched to.
|
||||||
- `waypoint_index`: Index of the waypoint inside the matched route.
|
- `waypoint_index`: Index of the waypoint inside the matched route.
|
||||||
- `alternatives_count`: number of alternative routes leading to the destination from this trace point. 0 means there are no other routes reaching destination. Greater values mean that there are different routes available and different route can be selected if you provide more coordinates.
|
|
||||||
- `matchings`: An array of `Route` objects that assemble the trace. Each `Route` object has the following additional properties:
|
- `matchings`: An array of `Route` objects that assemble the trace. Each `Route` object has the following additional properties:
|
||||||
- `confidence`: Confidence of the matching. `float` value between 0 and 1. 1 is very confident that the matching is correct.
|
- `confidence`: Confidence of the matching. `float` value between 0 and 1. 1 is very confident that the matching is correct.
|
||||||
|
|
||||||
@@ -326,7 +323,7 @@ In addition to the [general options](#general-options) the following options are
|
|||||||
|
|
||||||
|Option |Values |Description |
|
|Option |Values |Description |
|
||||||
|------------|------------------------------------------------|---------------------------------------------------------------------------|
|
|------------|------------------------------------------------|---------------------------------------------------------------------------|
|
||||||
|roundtrip |`true` (default), `false` |Return route is a roundtrip (route returns to first location) |
|
|roundtrip |`true` (default), `false` |Return route is a roundtrip |
|
||||||
|source |`any` (default), `first` |Return route starts at `any` or `first` coordinate |
|
|source |`any` (default), `first` |Return route starts at `any` or `first` coordinate |
|
||||||
|destination |`any` (default), `last` |Return route ends at `any` or `last` coordinate |
|
|destination |`any` (default), `last` |Return route ends at `any` or `last` coordinate |
|
||||||
|steps |`true`, `false` (default) |Return route instructions for each trip |
|
|steps |`true`, `false` (default) |Return route instructions for each trip |
|
||||||
@@ -486,9 +483,9 @@ Represents a route between two waypoints.
|
|||||||
- `distance`: The distance traveled by this route leg, in `float` meters.
|
- `distance`: The distance traveled by this route leg, in `float` meters.
|
||||||
- `duration`: The estimated travel time, in `float` number of seconds.
|
- `duration`: The estimated travel time, in `float` number of seconds.
|
||||||
- `weight`: The calculated weight of the route leg.
|
- `weight`: The calculated weight of the route leg.
|
||||||
- `summary`: Summary of the route taken as `string`. Depends on the `summary` parameter:
|
- `summary`: Summary of the route taken as `string`. Depends on the `steps` parameter:
|
||||||
|
|
||||||
| summary | |
|
| steps | |
|
||||||
|--------------|-----------------------------------------------------------------------|
|
|--------------|-----------------------------------------------------------------------|
|
||||||
| true | Names of the two major roads used. Can be empty if route is too short.|
|
| true | Names of the two major roads used. Can be empty if route is too short.|
|
||||||
| false | empty `string` |
|
| false | empty `string` |
|
||||||
|
|||||||
@@ -1,332 +0,0 @@
|
|||||||
<!-- Generated by documentation.js. Update this documentation by updating the source code. -->
|
|
||||||
|
|
||||||
## OSRM
|
|
||||||
|
|
||||||
The `OSRM` method is the main constructor for creating an OSRM instance.
|
|
||||||
An OSRM instance requires a `.osrm` dataset, which is prepared by the OSRM toolchain.
|
|
||||||
You can create such a `.osrm` file by running the OSRM binaries we ship in `node_modules/osrm/lib/binding/` and default
|
|
||||||
profiles (e.g. for setting speeds and determining road types to route on) in `node_modules/osrm/profiles/`:
|
|
||||||
|
|
||||||
node_modules/osrm/lib/binding/osrm-extract data.osm.pbf -p node_modules/osrm/profiles/car.lua
|
|
||||||
node_modules/osrm/lib/binding/osrm-contract data.osrm
|
|
||||||
|
|
||||||
Consult the [osrm-backend](https://github.com/Project-OSRM/osrm-backend) documentation for further details.
|
|
||||||
|
|
||||||
Once you have a complete `network.osrm` file, you can calculate routes in javascript with this object.
|
|
||||||
|
|
||||||
```javascript
|
|
||||||
var osrm = new OSRM('network.osrm');
|
|
||||||
```
|
|
||||||
|
|
||||||
**Parameters**
|
|
||||||
|
|
||||||
- `options` **([Object](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object) \| [String](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String))** Options for creating an OSRM object or string to the `.osrm` file. (optional, default `{shared_memory:true}`)
|
|
||||||
- `options.algorithm` **[String](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String)?** The algorithm to use for routing. Can be 'CH', 'CoreCH' or 'MLD'. Default is 'CH'.
|
|
||||||
Make sure you prepared the dataset with the correct toolchain.
|
|
||||||
- `options.shared_memory` **[Boolean](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Boolean)?** Connects to the persistent shared memory datastore.
|
|
||||||
This requires you to run `osrm-datastore` prior to creating an `OSRM` object.
|
|
||||||
- `options.path` **[String](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String)?** The path to the `.osrm` files. This is mutually exclusive with setting {options.shared_memory} to true.
|
|
||||||
|
|
||||||
### route
|
|
||||||
|
|
||||||
Returns the fastest route between two or more coordinates while visiting the waypoints in order.
|
|
||||||
|
|
||||||
**Parameters**
|
|
||||||
|
|
||||||
- `options` **[Object](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object)** Object literal containing parameters for the route query.
|
|
||||||
- `options.coordinates` **[Array](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array)?** The coordinates this request will use, coordinates as `[{lon},{lat}]` values, in decimal degrees.
|
|
||||||
- `options.bearings` **[Array](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array)?** Limits the search to segments with given bearing in degrees towards true north in clockwise direction.
|
|
||||||
Can be `null` or an array of `[{value},{range}]` with `integer 0 .. 360,integer 0 .. 180`.
|
|
||||||
- `options.radiuses` **[Array](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array)?** Limits the coordinate snapping to streets in the given radius in meters. Can be `null` (unlimited, default) or `double >= 0`.
|
|
||||||
- `options.hints` **[Array](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array)?** Hints for the coordinate snapping. Array of base64 encoded strings.
|
|
||||||
- `options.alternatives` **[Boolean](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Boolean)** Search for alternative routes and return as well.
|
|
||||||
_Please note that even if an alternative route is requested, a result cannot be guaranteed._ (optional, default `false`)
|
|
||||||
- `options.steps` **[Boolean](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Boolean)** Return route steps for each route leg. (optional, default `false`)
|
|
||||||
- `options.annotations` **([Array](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array) \| [Boolean](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Boolean))** An array with strings of `duration`, `nodes`, `distance`, `weight`, `datasources`, `speed` or boolean for enabling/disabling all. (optional, default `false`)
|
|
||||||
- `options.geometries` **[String](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String)** Returned route geometry format (influences overview and per step). Can also be `geojson`. (optional, default `polyline`)
|
|
||||||
- `options.overview` **[String](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String)** Add overview geometry either `full`, `simplified` according to highest zoom level it could be display on, or not at all (`false`). (optional, default `simplified`)
|
|
||||||
- `options.continue_straight` **[Boolean](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Boolean)?** 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.
|
|
||||||
`null`/`true`/`false`
|
|
||||||
- `callback` **[Function](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/function)**
|
|
||||||
|
|
||||||
**Examples**
|
|
||||||
|
|
||||||
```javascript
|
|
||||||
var osrm = new OSRM("berlin-latest.osrm");
|
|
||||||
osrm.route({coordinates: [[52.519930,13.438640], [52.513191,13.415852]]}, function(err, result) {
|
|
||||||
if(err) throw err;
|
|
||||||
console.log(result.waypoints); // array of Waypoint objects representing all waypoints in order
|
|
||||||
console.log(result.routes); // array of Route objects ordered by descending recommendation rank
|
|
||||||
});
|
|
||||||
```
|
|
||||||
|
|
||||||
Returns **[Object](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object)** An array of [Waypoint](#waypoint) objects representing all waypoints in order AND an array of [`Route`](#route) objects ordered by descending recommendation rank.
|
|
||||||
|
|
||||||
### nearest
|
|
||||||
|
|
||||||
Snaps a coordinate to the street network and returns the nearest n matches.
|
|
||||||
|
|
||||||
Note: `coordinates` in the general options only supports a single `{longitude},{latitude}` entry.
|
|
||||||
|
|
||||||
**Parameters**
|
|
||||||
|
|
||||||
- `options` **[Object](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object)** Object literal containing parameters for the nearest query.
|
|
||||||
- `options.coordinates` **[Array](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array)?** The coordinates this request will use, coordinates as `[{lon},{lat}]` values, in decimal degrees.
|
|
||||||
- `options.bearings` **[Array](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array)?** Limits the search to segments with given bearing in degrees towards true north in clockwise direction.
|
|
||||||
Can be `null` or an array of `[{value},{range}]` with `integer 0 .. 360,integer 0 .. 180`.
|
|
||||||
- `options.radiuses` **[Array](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array)?** Limits the coordinate snapping to streets in the given radius in meters. Can be `null` (unlimited, default) or `double >= 0`.
|
|
||||||
- `options.hints` **[Array](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array)?** Hints for the coordinate snapping. Array of base64 encoded strings.
|
|
||||||
- `options.number` **[Number](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number)** Number of nearest segments that should be returned.
|
|
||||||
Must be an integer greater than or equal to `1`. (optional, default `1`)
|
|
||||||
- `callback` **[Function](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/function)**
|
|
||||||
|
|
||||||
**Examples**
|
|
||||||
|
|
||||||
```javascript
|
|
||||||
var osrm = new OSRM('network.osrm');
|
|
||||||
var options = {
|
|
||||||
coordinates: [[13.388860,52.517037]],
|
|
||||||
number: 3,
|
|
||||||
bearings: [[0,20]]
|
|
||||||
};
|
|
||||||
osrm.nearest(options, function(err, response) {
|
|
||||||
console.log(response.waypoints); // array of Waypoint objects
|
|
||||||
});
|
|
||||||
```
|
|
||||||
|
|
||||||
Returns **[Object](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object)** containing `waypoints`.
|
|
||||||
**`waypoints`**: array of [`Ẁaypoint`](#waypoint) objects sorted by distance to the input coordinate.
|
|
||||||
Each object has an additional `distance` property, which is the distance in meters to the supplied input coordinate.
|
|
||||||
|
|
||||||
### table
|
|
||||||
|
|
||||||
Computes duration tables for the given locations. Allows for both symmetric and asymmetric
|
|
||||||
tables.
|
|
||||||
|
|
||||||
**Parameters**
|
|
||||||
|
|
||||||
- `options` **[Object](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object)** Object literal containing parameters for the table query.
|
|
||||||
- `options.coordinates` **[Array](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array)?** The coordinates this request will use, coordinates as `[{lon},{lat}]` values, in decimal degrees.
|
|
||||||
- `options.bearings` **[Array](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array)?** Limits the search to segments with given bearing in degrees towards true north in clockwise direction.
|
|
||||||
Can be `null` or an array of `[{value},{range}]` with `integer 0 .. 360,integer 0 .. 180`.
|
|
||||||
- `options.radiuses` **[Array](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array)?** Limits the coordinate snapping to streets in the given radius in meters. Can be `null` (unlimited, default) or `double >= 0`.
|
|
||||||
- `options.hints` **[Array](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array)?** Hints for the coordinate snapping. Array of base64 encoded strings.
|
|
||||||
- `options.sources` **[Array](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array)?** An array of `index` elements (`0 <= integer < #coordinates`) to
|
|
||||||
use
|
|
||||||
location with given index as source. Default is to use all.
|
|
||||||
- `options.destinations` **[Array](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array)?** An array of `index` elements (`0 <= integer <
|
|
||||||
#coordinates`) to use location with given index as destination. Default is to use all.
|
|
||||||
- `callback` **[Function](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/function)**
|
|
||||||
|
|
||||||
**Examples**
|
|
||||||
|
|
||||||
```javascript
|
|
||||||
var osrm = new OSRM('network.osrm');
|
|
||||||
var options = {
|
|
||||||
coordinates: [
|
|
||||||
[13.388860,52.517037],
|
|
||||||
[13.397634,52.529407],
|
|
||||||
[13.428555,52.523219]
|
|
||||||
]
|
|
||||||
};
|
|
||||||
osrm.table(options, function(err, response) {
|
|
||||||
console.log(response.durations); // array of arrays, matrix in row-major order
|
|
||||||
console.log(response.sources); // array of Waypoint objects
|
|
||||||
console.log(response.destinations); // array of Waypoint objects
|
|
||||||
});
|
|
||||||
```
|
|
||||||
|
|
||||||
Returns **[Object](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object)** containing `durations`, `sources`, and `destinations`.
|
|
||||||
**`durations`**: array of arrays that stores the matrix in row-major order. `durations[i][j]` gives the travel time from the i-th waypoint to the j-th waypoint.
|
|
||||||
Values are given in seconds.
|
|
||||||
**`sources`**: array of [`Ẁaypoint`](#waypoint) objects describing all sources in order.
|
|
||||||
**`destinations`**: array of [`Ẁaypoint`](#waypoint) objects describing all destinations in order.
|
|
||||||
|
|
||||||
### tile
|
|
||||||
|
|
||||||
This generates [Mapbox Vector Tiles](https://mapbox.com/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.
|
|
||||||
|
|
||||||
**Parameters**
|
|
||||||
|
|
||||||
- `ZXY` **[Array](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array)** an array consisting of `x`, `y`, and `z` values representing tile coordinates like
|
|
||||||
[wiki.openstreetmap.org/wiki/Slippy_map_tilenames](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/).
|
|
||||||
- `callback` **[Function](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/function)**
|
|
||||||
|
|
||||||
**Examples**
|
|
||||||
|
|
||||||
```javascript
|
|
||||||
var osrm = new OSRM('network.osrm');
|
|
||||||
osrm.tile([0, 0, 0], function(err, response) {
|
|
||||||
if (err) throw err;
|
|
||||||
fs.writeFileSync('./tile.vector.pbf', response); // write the buffer to a file
|
|
||||||
});
|
|
||||||
```
|
|
||||||
|
|
||||||
Returns **[Buffer](https://nodejs.org/api/buffer.html)** contains a Protocol Buffer encoded vector tile.
|
|
||||||
|
|
||||||
### 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.
|
|
||||||
|
|
||||||
**Parameters**
|
|
||||||
|
|
||||||
- `options` **[Object](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object)** Object literal containing parameters for the match query.
|
|
||||||
- `options.coordinates` **[Array](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array)?** The coordinates this request will use, coordinates as `[{lon},{lat}]` values, in decimal degrees.
|
|
||||||
- `options.bearings` **[Array](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array)?** Limits the search to segments with given bearing in degrees towards true north in clockwise direction.
|
|
||||||
Can be `null` or an array of `[{value},{range}]` with `integer 0 .. 360,integer 0 .. 180`.
|
|
||||||
- `options.hints` **[Array](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array)?** Hints for the coordinate snapping. Array of base64 encoded strings.
|
|
||||||
- `options.steps` **[Boolean](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Boolean)** Return route steps for each route. (optional, default `false`)
|
|
||||||
- `options.annotations` **([Array](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array) \| [Boolean](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Boolean))** An array with strings of `duration`, `nodes`, `distance`, `weight`, `datasources`, `speed` or boolean for enabling/disabling all. (optional, default `false`)
|
|
||||||
- `options.geometries` **[String](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String)** Returned route geometry format (influences overview and per step). Can also be `geojson`. (optional, default `polyline`)
|
|
||||||
- `options.overview` **[String](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String)** Add overview geometry either `full`, `simplified` according to highest zoom level it could be display on, or not at all (`false`). (optional, default `simplified`)
|
|
||||||
- `options.timestamps` **[Array](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array)<[Number](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number)>?** Timestamp of the input location (integers, UNIX-like timestamp).
|
|
||||||
- `options.radiuses` **[Array](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array)?** Standard deviation of GPS precision used for map matching. If applicable use GPS accuracy. Can be `null` for default value `5` meters or `double >= 0`.
|
|
||||||
- `callback` **[Function](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/function)**
|
|
||||||
|
|
||||||
**Examples**
|
|
||||||
|
|
||||||
```javascript
|
|
||||||
var osrm = new OSRM('network.osrm');
|
|
||||||
var options = {
|
|
||||||
coordinates: [[13.393252,52.542648],[13.39478,52.543079],[13.397389,52.542107]],
|
|
||||||
timestamps: [1424684612, 1424684616, 1424684620]
|
|
||||||
};
|
|
||||||
osrm.match(options, function(err, response) {
|
|
||||||
if (err) throw err;
|
|
||||||
console.log(response.tracepoints); // array of Waypoint objects
|
|
||||||
console.log(response.matchings); // array of Route objects
|
|
||||||
});
|
|
||||||
```
|
|
||||||
|
|
||||||
Returns **[Object](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object)** containing `tracepoints` and `matchings`.
|
|
||||||
**`tracepoints`** Array of [`Ẁaypoint`](#waypoint) 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 includes two additional properties, 1) `matchings_index`: Index to the
|
|
||||||
[`Route`](#route) object in matchings the sub-trace was matched to, 2) `waypoint_index`: Index of
|
|
||||||
the waypoint inside the matched route.
|
|
||||||
**`matchings`** is an array of [`Route`](#route) objects that assemble the trace. Each `Route` object has an additional `confidence` property,
|
|
||||||
which is the confidence of the matching. float value between `0` and `1`. `1` is very confident that the matching is correct.
|
|
||||||
|
|
||||||
### trip
|
|
||||||
|
|
||||||
The trip plugin solves the Traveling Salesman Problem using a greedy heuristic
|
|
||||||
(farthest-insertion algorithm) for 10 or _ more waypoints and uses brute force for less than 10
|
|
||||||
waypoints. The returned path does not have to be the shortest path, _ as TSP is NP-hard it is
|
|
||||||
only an approximation.
|
|
||||||
|
|
||||||
Note that all input coordinates have to be connected for the trip service to work.
|
|
||||||
Currently, not all combinations of `roundtrip`, `source` and `destination` are supported.
|
|
||||||
Right now, the following combinations are possible:
|
|
||||||
|
|
||||||
| roundtrip | source | destination | supported |
|
|
||||||
| :-------- | :----- | :---------- | :-------- |
|
|
||||||
| true | first | last | **yes** |
|
|
||||||
| true | first | any | **yes** |
|
|
||||||
| true | any | last | **yes** |
|
|
||||||
| true | any | any | **yes** |
|
|
||||||
| false | first | last | **yes** |
|
|
||||||
| false | first | any | no |
|
|
||||||
| false | any | last | no |
|
|
||||||
| false | any | any | no |
|
|
||||||
|
|
||||||
**Parameters**
|
|
||||||
|
|
||||||
- `options` **[Object](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object)** Object literal containing parameters for the trip query.
|
|
||||||
- `options.coordinates` **[Array](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array)?** The coordinates this request will use, coordinates as `[{lon},{lat}]` values, in decimal degrees.
|
|
||||||
- `options.bearings` **[Array](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array)?** Limits the search to segments with given bearing in degrees towards true north in clockwise direction.
|
|
||||||
Can be `null` or an array of `[{value},{range}]` with `integer 0 .. 360,integer 0 .. 180`.
|
|
||||||
- `options.radiuses` **[Array](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array)?** Limits the coordinate snapping to streets in the given radius in meters. Can be `double >= 0` or `null` (unlimited, default).
|
|
||||||
- `options.hints` **[Array](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array)?** Hints for the coordinate snapping. Array of base64 encoded strings.
|
|
||||||
- `options.steps` **[Boolean](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Boolean)** Return route steps for each route. (optional, default `false`)
|
|
||||||
- `options.annotations` **([Array](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array) \| [Boolean](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Boolean))** An array with strings of `duration`, `nodes`, `distance`, `weight`, `datasources`, `speed` or boolean for enabling/disabling all. (optional, default `false`)
|
|
||||||
- `options.geometries` **[String](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String)** Returned route geometry format (influences overview and per step). Can also be `geojson`. (optional, default `polyline`)
|
|
||||||
- `options.overview` **[String](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String)** Add overview geometry either `full`, `simplified` (optional, default `simplified`)
|
|
||||||
- `options.roundtrip` **[Boolean](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Boolean)** Return route is a roundtrip. (optional, default `true`)
|
|
||||||
- `options.source` **[String](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String)** Return route starts at `any` or `first` coordinate. (optional, default `any`)
|
|
||||||
- `options.destination` **[String](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String)** Return route ends at `any` or `last` coordinate. (optional, default `any`)
|
|
||||||
- `callback` **[Function](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/function)**
|
|
||||||
|
|
||||||
**Examples**
|
|
||||||
|
|
||||||
```javascript
|
|
||||||
var osrm = new OSRM('network.osrm');
|
|
||||||
var options = {
|
|
||||||
coordinates: [
|
|
||||||
[13.36761474609375, 52.51663871100423],
|
|
||||||
[13.374481201171875, 52.506191342034576]
|
|
||||||
],
|
|
||||||
source: "first",
|
|
||||||
destination: "last",
|
|
||||||
roundtrip: false
|
|
||||||
}
|
|
||||||
osrm.trip(options, function(err, response) {
|
|
||||||
if (err) throw err;
|
|
||||||
console.log(response.waypoints); // array of Waypoint objects
|
|
||||||
console.log(response.trips); // array of Route objects
|
|
||||||
});
|
|
||||||
```
|
|
||||||
|
|
||||||
Returns **[Object](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object)** containing `waypoints` and `trips`.
|
|
||||||
**`waypoints`**: an array of [`Waypoint`](#waypoint) objects representing all waypoints in input order.
|
|
||||||
Each Waypoint object has the following additional properties,
|
|
||||||
1) `trips_index`: index to trips of the sub-trip the point was matched to, and
|
|
||||||
2) `waypoint_index`: index of the point in the trip.
|
|
||||||
**`trips`**: an array of [`Route`](#route) objects that assemble the trace.
|
|
||||||
|
|
||||||
## Responses
|
|
||||||
|
|
||||||
Responses
|
|
||||||
|
|
||||||
### Route
|
|
||||||
|
|
||||||
Represents a route through (potentially multiple) waypoints.
|
|
||||||
|
|
||||||
**Parameters**
|
|
||||||
|
|
||||||
- `exteral` **documentation** in
|
|
||||||
[`osrm-backend`](../http.md#route)
|
|
||||||
|
|
||||||
### RouteLeg
|
|
||||||
|
|
||||||
Represents a route between two waypoints.
|
|
||||||
|
|
||||||
**Parameters**
|
|
||||||
|
|
||||||
- `exteral` **documentation** in
|
|
||||||
[`osrm-backend`](../http.md#routeleg)
|
|
||||||
|
|
||||||
### 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.
|
|
||||||
|
|
||||||
**Parameters**
|
|
||||||
|
|
||||||
- `exteral` **documentation** in
|
|
||||||
[`osrm-backend`](https://github.com/Project-OSRM/osrm-backend/blob/master/docs/http.md#routestep)
|
|
||||||
|
|
||||||
### StepManeuver
|
|
||||||
|
|
||||||
**Parameters**
|
|
||||||
|
|
||||||
- `exteral` **documentation** in
|
|
||||||
[`osrm-backend`](https://github.com/Project-OSRM/osrm-backend/blob/master/docs/http.md#stepmaneuver)
|
|
||||||
|
|
||||||
### Waypoint
|
|
||||||
|
|
||||||
Object used to describe waypoint on a route.
|
|
||||||
|
|
||||||
**Parameters**
|
|
||||||
|
|
||||||
- `exteral` **documentation** in
|
|
||||||
[`osrm-backend`](https://github.com/Project-OSRM/osrm-backend/blob/master/docs/http.md#waypoint)
|
|
||||||
@@ -1,86 +0,0 @@
|
|||||||
# Releasing
|
|
||||||
|
|
||||||
Releasing a new version of `node-osrm` is mostly automated using Travis CI.
|
|
||||||
|
|
||||||
The version of `node-osrm` is locked to the same version as `osrm-backend`. Every `node-osrm` should have a `osrm-backend` release of the same version. Of course, only release a `node-osrm` after the release has been tagged in `osrm-backend`.
|
|
||||||
|
|
||||||
These steps all happen on `master`. After the release is out, create a branch using the MAJOR.MINOR version of the release to document code changes made for that version.
|
|
||||||
|
|
||||||
### Steps to release
|
|
||||||
|
|
||||||
1. Update the `osrm_release` field in `package.json` to the corresonding git tag in `osrm-backend.`
|
|
||||||
|
|
||||||
Confirm the desired OSRM branch and commit to `master`.
|
|
||||||
|
|
||||||
1. Bump node-osrm version
|
|
||||||
|
|
||||||
Update the `CHANGELOG.md` and the `package.json` version if needed.
|
|
||||||
|
|
||||||
1. Check that Travis CI [builds are passing](https://travis-ci.org/Project-OSRM/node-osrm) for the latest commit on `master`.
|
|
||||||
|
|
||||||
1. Publishing binaries
|
|
||||||
|
|
||||||
If travis builds are passing then it's time to publish binaries by committing with a message containing `[publish binary]`. Use an empty commit for this.
|
|
||||||
|
|
||||||
```
|
|
||||||
git commit --allow-empty -m "[publish binary] vMAJOR.MINOR.PATCH"
|
|
||||||
```
|
|
||||||
|
|
||||||
1. Test
|
|
||||||
|
|
||||||
Locally you can now test binaries. Cleanup, re-install, and run the tests like:
|
|
||||||
|
|
||||||
```
|
|
||||||
make clean
|
|
||||||
npm install # will pull remote binaries
|
|
||||||
npm ls # confirm deps are correct
|
|
||||||
make test
|
|
||||||
```
|
|
||||||
|
|
||||||
1. Tag
|
|
||||||
|
|
||||||
Once binaries are published for Linux and OS X then its time to tag a new release and add the changelog to the tag:
|
|
||||||
|
|
||||||
```
|
|
||||||
git tag vMAJOR.MINOR.PATCH -a
|
|
||||||
git push --tags
|
|
||||||
```
|
|
||||||
|
|
||||||
1. Publish node-osrm. **we only do this for stable releases**
|
|
||||||
|
|
||||||
First ensure your local `node-pre-gyp` is up to date:
|
|
||||||
|
|
||||||
```
|
|
||||||
npm ls
|
|
||||||
```
|
|
||||||
|
|
||||||
This is important because it is bundled during packaging.
|
|
||||||
|
|
||||||
If you see any errors then do:
|
|
||||||
|
|
||||||
```
|
|
||||||
rm -rf node_modules/node-pre-gyp
|
|
||||||
npm install node-pre-gyp
|
|
||||||
```
|
|
||||||
|
|
||||||
Now we're ready to publish `node-osrm` to <https://www.npmjs.org/package/osrm>:
|
|
||||||
|
|
||||||
```
|
|
||||||
npm publish
|
|
||||||
```
|
|
||||||
|
|
||||||
Dependent apps can now pull from the npm registry like:
|
|
||||||
|
|
||||||
```
|
|
||||||
"dependencies": {
|
|
||||||
"osrm": "^MAJOR.MINOR.PATCH"
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
Or can still pull from the github tag like:
|
|
||||||
|
|
||||||
```
|
|
||||||
"dependencies": {
|
|
||||||
"osrm": "https://github.com/Project-OSRM/node-osrm/archive/vMAJOR.MINOR.PATCH.tar.gz"
|
|
||||||
}
|
|
||||||
```
|
|
||||||
+3
-80
@@ -25,19 +25,6 @@ As you scroll down the file you'll see local variables, and then local functions
|
|||||||
|
|
||||||
`way_function` and `node_function` are the important functions which are called when extracting OpenStreetMap data with `osrm-extract`.
|
`way_function` and `node_function` are the important functions which are called when extracting OpenStreetMap data with `osrm-extract`.
|
||||||
|
|
||||||
The following global properties can be set in your profile:
|
|
||||||
|
|
||||||
Attribute | Type | Notes
|
|
||||||
------------------------------|----------|----------------------------------------------------------------------------
|
|
||||||
weight_name | String | Name used in output for the routing weight property (default 'duration')
|
|
||||||
weight_precision | Unsigned | Decimal precision of edge weights (default 1)
|
|
||||||
left_hand_driving | Boolean | Are vehicles assumed to drive on the left? (used in guidance)
|
|
||||||
use_turn_restrictions | Boolean | Are turn instructions followed?
|
|
||||||
continue_straight_at_waypoint | Boolean | Must the route continue straight on at a via point, or are U-turns allowed?
|
|
||||||
max_speed_for_map_matching | Float | Maximum vehicle speed to be assumed in matching (in m/s)
|
|
||||||
max_turn_weight | Float | Maximum turn penalty weight
|
|
||||||
force_split_edges | Boolean | True value forces a split of forward and backward edges of extracted ways and guarantees that segment_function will be called for all segments
|
|
||||||
|
|
||||||
## way_function
|
## way_function
|
||||||
|
|
||||||
Given an OpenStreetMap way, the way_function will either return nothing (meaning we are not going to route over this way at all), or it will set up a result hash to be returned. The most important thing it will do is set the value of `result.forward_speed` and `result.backward_speed` as a suitable integer value representing the speed for traversing the way.
|
Given an OpenStreetMap way, the way_function will either return nothing (meaning we are not going to route over this way at all), or it will set up a result hash to be returned. The most important thing it will do is set the value of `result.forward_speed` and `result.backward_speed` as a suitable integer value representing the speed for traversing the way.
|
||||||
@@ -46,79 +33,15 @@ All other calculations stem from that, including the returned timings in driving
|
|||||||
|
|
||||||
Using the power of the scripting language you wouldn't typically see something as simple as a `result.forward_speed = 20` line within the way_function. Instead a way_function will examine the tagging (e.g. `way:get_value_by_key("highway")` and many others), process this information in various ways, calling other local functions, referencing the global variables and look-up hashes, before arriving at the result.
|
Using the power of the scripting language you wouldn't typically see something as simple as a `result.forward_speed = 20` line within the way_function. Instead a way_function will examine the tagging (e.g. `way:get_value_by_key("highway")` and many others), process this information in various ways, calling other local functions, referencing the global variables and look-up hashes, before arriving at the result.
|
||||||
|
|
||||||
The following attributes can be set on the result in way_function:
|
## Guidance
|
||||||
|
|
||||||
Attribute | Type | Notes
|
|
||||||
----------------------------------------|----------|--------------------------------------------------------------------------
|
|
||||||
forward_speed | Float | Speed on this way in km/h
|
|
||||||
backward_speed | Float | " "
|
|
||||||
forward_rate | Float | Routing weight, expressed as meters/*weight* (e.g. for a fastest-route weighting, you would want this to be meters/second, so set it to forward_speed/3.6)
|
|
||||||
backward_rate | Float | " "
|
|
||||||
forward_mode | Enum | Mode of travel (e.g. car, ferry). Defined in include/extractor/travel_mode.hpp
|
|
||||||
backward_mode | Enum | " "
|
|
||||||
duration | Float | Alternative setter for duration of the whole way in both directions
|
|
||||||
weight | Float | Alternative setter for weight of the whole way in both directions
|
|
||||||
turn_lanes_forward | String | Directions for individual lanes (normalised OSM turn:lanes value)
|
|
||||||
turn_lanes_backward | String | " "
|
|
||||||
forward_restricted | Boolean | Is this a restricted access road? (e.g. private, or deliveries only; used to enable high turn penalty, so that way is only chosen for start/end of route)
|
|
||||||
backward_restricted | Boolean | " "
|
|
||||||
is_startpoint | Boolean | Can a journey start on this way? (e.g. ferry; if false, prevents snapping the start point to this way)
|
|
||||||
roundabout | Boolean | Is this part of a roundabout?
|
|
||||||
circular | Boolean | Is this part of a non-roundabout circular junction?
|
|
||||||
name | String | Name of the way
|
|
||||||
ref | String | Road number
|
|
||||||
pronunciation | String | Name pronunciation
|
|
||||||
road_classification.motorway_class | Boolean | Guidance: way is a motorway
|
|
||||||
road_classification.link_class | Boolean | Guidance: way is a slip/link road
|
|
||||||
road_classification.road_priority_class | Enum | Guidance: order in priority list. Defined in include/extractor/guidance/road_classification.hpp
|
|
||||||
road_classification.may_be_ignored | Boolean | Guidance: way is non-highway
|
|
||||||
road_classification.num_lanes | Unsigned | Guidance: total number of lanes in way
|
|
||||||
|
|
||||||
### Guidance
|
|
||||||
|
|
||||||
The guidance parameters in profiles are currently a work in progress. They can and will change.
|
The guidance parameters in profiles are currently a work in progress. They can and will change.
|
||||||
Please be aware of this when using guidance configuration possibilities.
|
Please be aware of this when using guidance configuration possibilities.
|
||||||
|
|
||||||
|
### Road Classification
|
||||||
|
|
||||||
Guidance uses road classes to decide on when/if to emit specific instructions and to discover which road is obvious when following a route.
|
Guidance uses road classes to decide on when/if to emit specific instructions and to discover which road is obvious when following a route.
|
||||||
Classification uses three flags and a priority-category.
|
Classification uses three flags and a priority-category.
|
||||||
The flags indicate whether a road is a motorway (required for on/off ramps), a link type (the ramps itself, if also a motorway) and whether a road may be omittted in considerations (is considered purely for connectivity).
|
The flags indicate whether a road is a motorway (required for on/off ramps), a link type (the ramps itself, if also a motorway) and whether a road may be omittted in considerations (is considered purely for connectivity).
|
||||||
The priority-category influences the decision which road is considered the obvious choice and which roads can be seen as fork.
|
The priority-category influences the decision which road is considered the obvious choice and which roads can be seen as fork.
|
||||||
Forks can be emitted between roads of similar priority category only. Obvious choices follow a major priority road, if the priority difference is large.
|
Forks can be emitted between roads of similar priority category only. Obvious choices follow a major priority road, if the priority difference is large.
|
||||||
|
|
||||||
## node_function
|
|
||||||
|
|
||||||
The following attributes can be set on the result in node_function:
|
|
||||||
|
|
||||||
Attribute | Type | Notes
|
|
||||||
----------------|---------|-------------------------------------------------------
|
|
||||||
barrier | Boolean | Is it an impassable barrier?
|
|
||||||
traffic_lights | Boolean | Is it a traffic light (incurs delay in turn_function)?
|
|
||||||
|
|
||||||
## segment_function
|
|
||||||
|
|
||||||
The following attributes can be read and set on the result in segment_function:
|
|
||||||
|
|
||||||
Attribute | Read/write? | Type | Notes
|
|
||||||
-------------------|-------------|---------|------------------------------------------------------
|
|
||||||
source.lon | Read | Float | Co-ordinates of segment start
|
|
||||||
source.lat | Read | Float | " "
|
|
||||||
target.lon | Read | Float | Co-ordinates of segment end
|
|
||||||
target.lat | Read | Float | " "
|
|
||||||
target.distance | Read | Float | Length of segment
|
|
||||||
weight | Read/write | Float | Routing weight for this segment
|
|
||||||
duration | Read/write | Float | Duration for this segment
|
|
||||||
|
|
||||||
## turn_function
|
|
||||||
|
|
||||||
The following attributes can be read and set on the result in turn_function:
|
|
||||||
|
|
||||||
Attribute | Read/write? | Type | Notes
|
|
||||||
-------------------|-------------|---------|------------------------------------------------------
|
|
||||||
direction_modifier | Read | Enum | Geometry of turn. Defined in include/extractor/guidance/turn_instruction.hpp
|
|
||||||
turn_type | Read | Enum | Priority of turn. Defined in include/extractor/guidance/turn_instruction.hpp
|
|
||||||
has_traffic_light | Read | Boolean | Is a traffic light present at this turn?
|
|
||||||
source_restricted | Read | Boolean | Is it from a restricted access road? (See definition in way_function)
|
|
||||||
target_restricted | Read | Boolean | Is it to a restricted access road? (See definition in way_function)
|
|
||||||
angle | Read | Float | Angle of turn in degrees (0-360: 0=u-turn, 180=straight on)
|
|
||||||
duration | Read/write | Float | Penalty to be applied for this turn (duration in deciseconds)
|
|
||||||
weight | Read/write | Float | Penalty to be applied for this turn (routing weight)
|
|
||||||
|
|||||||
+9
-13
@@ -32,25 +32,21 @@ We may introduce forward-compatible changes: query parameters and response prope
|
|||||||
|
|
||||||
- The `master` branch is for the bleeding edge development
|
- The `master` branch is for the bleeding edge development
|
||||||
- We create and maintain release branches `x.y` to control the release flow
|
- We create and maintain release branches `x.y` to control the release flow
|
||||||
- We create the release branch once we create release branches once we want to release the first RC
|
- We create the release branch once we tagged the final version `x.y.0` version, RCs go on master
|
||||||
- RCs go in the release branch, commits needs to be cherry-picked from master
|
|
||||||
- No minor or major version will be released without a code-equal release candidates
|
- No minor or major version will be released without a code-equal release candidates
|
||||||
- For quality assurance, release candidates need to be staged beforing tagging a final release
|
- 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
|
- Patch versions may be released without a release candidate
|
||||||
- We may backport fixes to older versions and release them as patch versions
|
- We may backport fixes to older versions and release them as patch versions
|
||||||
|
|
||||||
## Releasing a version
|
## Releasing a version
|
||||||
|
|
||||||
1. Check out the appropriate release branch `x.y`
|
1. Check out the appropriate release branch `x.y`
|
||||||
2. Make sure `CHANGELOG.md` is up to date.
|
2. Make sure all tests are passing (e.g. Travis CI gives you a :thumbs_up:)
|
||||||
3. Make sure the OSRM version in `CMakeLists.txt` is up to date
|
3. Make sure `CHANGELOG.md` is up to date.
|
||||||
4. Make sure the `package.json` is up to date.
|
4. Make sure the OSRM version in `CMakeLists.txt` is up to date
|
||||||
5. Make sure all tests are passing (e.g. Travis CI gives you a :thumbs_up:)
|
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 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
|
||||||
7. 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. 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
|
9. If not a release-candidate: Write a mailing-list post to osrm-talk@openstreetmap.org to announce the release
|
||||||
10. Wait until the travis build has been completed and check if the node binaries were published by doing:
|
|
||||||
`rm -rf node_modules && npm install` locally.
|
|
||||||
11. For final releases run `npm publish` or `npm publish --tag next` for release candidates.
|
|
||||||
|
|
||||||
|
|||||||
@@ -46,6 +46,12 @@ You should see the compiled binaries in `build/unit_tests`, you can then run eac
|
|||||||
./engine-tests
|
./engine-tests
|
||||||
```
|
```
|
||||||
|
|
||||||
|
For `library-tests` you will need to provide a path to the test data:
|
||||||
|
|
||||||
|
```
|
||||||
|
./library-tests ../../test/data/monaco.osrm
|
||||||
|
```
|
||||||
|
|
||||||
## Cucumber
|
## Cucumber
|
||||||
|
|
||||||
For a general introduction on cucumber in our testsuite, have a look at [the wiki](https://github.com/Project-OSRM/osrm-backend/wiki/Cucumber-Test-Suite).
|
For a general introduction on cucumber in our testsuite, have a look at [the wiki](https://github.com/Project-OSRM/osrm-backend/wiki/Cucumber-Test-Suite).
|
||||||
|
|||||||
+2
-2
@@ -58,8 +58,8 @@ int main(int argc, const char *argv[])
|
|||||||
const auto distance = route.values["distance"].get<json::Number>().value;
|
const auto distance = route.values["distance"].get<json::Number>().value;
|
||||||
const auto duration = route.values["duration"].get<json::Number>().value;
|
const auto duration = route.values["duration"].get<json::Number>().value;
|
||||||
|
|
||||||
// Warn users if extract does not contain the default coordinates from above
|
// Warn users if extract does not contain the default Berlin coordinates from above
|
||||||
if (distance == 0 || duration == 0)
|
if (distance == 0 or duration == 0)
|
||||||
{
|
{
|
||||||
std::cout << "Note: distance or duration is zero. ";
|
std::cout << "Note: distance or duration is zero. ";
|
||||||
std::cout << "You are probably doing a query outside of the OSM extract.\n\n";
|
std::cout << "You are probably doing a query outside of the OSM extract.\n\n";
|
||||||
|
|||||||
@@ -1,32 +0,0 @@
|
|||||||
process.env.UV_THREADPOOL_SIZE = Math.ceil(require('os').cpus().length * 1.5);
|
|
||||||
|
|
||||||
var express = require('express');
|
|
||||||
var OSRM = require('..');
|
|
||||||
var path = require('path');
|
|
||||||
|
|
||||||
var app = express();
|
|
||||||
var osrm = new OSRM(path.join(__dirname,"../test/data/ch/monaco.osrm"));
|
|
||||||
|
|
||||||
// Accepts a query like:
|
|
||||||
// http://localhost:8888?start=13.414307,52.521835&end=13.402290,52.523728
|
|
||||||
app.get('/', function(req, res) {
|
|
||||||
if (!req.query.start || !req.query.end) {
|
|
||||||
return res.json({"error":"invalid start and end query"});
|
|
||||||
}
|
|
||||||
var coordinates = [];
|
|
||||||
var start = req.query.start.split(',');
|
|
||||||
coordinates.push([+start[0],+start[1]]);
|
|
||||||
var end = req.query.end.split(',');
|
|
||||||
coordinates.push([+end[0],+end[1]]);
|
|
||||||
var query = {
|
|
||||||
coordinates: coordinates,
|
|
||||||
alternateRoute: req.query.alternatives !== 'false'
|
|
||||||
};
|
|
||||||
osrm.route(query, function(err, result) {
|
|
||||||
if (err) return res.json({"error":err.message});
|
|
||||||
return res.json(result);
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
console.log('Listening on port: ' + 8888);
|
|
||||||
app.listen(8888);
|
|
||||||
+158
-144
@@ -7,179 +7,193 @@ Feature: Bike - Access tags on ways
|
|||||||
|
|
||||||
Scenario: Bike - Access tag hierarchy on ways
|
Scenario: Bike - Access tag hierarchy on ways
|
||||||
Then routability should be
|
Then routability should be
|
||||||
| highway | access | vehicle | bicycle | bothw |
|
| highway | access | vehicle | bicycle | bothw |
|
||||||
| primary | | | | cycling |
|
| | | | | x |
|
||||||
| primary | yes | | | cycling |
|
| | yes | | | x |
|
||||||
| primary | no | | | |
|
| | no | | | |
|
||||||
| primary | | yes | | cycling |
|
| | | yes | | x |
|
||||||
| primary | | no | | |
|
| | | no | | |
|
||||||
| primary | no | yes | | cycling |
|
| | no | yes | | x |
|
||||||
| primary | yes | no | | |
|
| | yes | no | | |
|
||||||
| primary | | | yes | cycling |
|
| | | | yes | x |
|
||||||
| primary | | | no | |
|
| | | | no | |
|
||||||
| primary | no | | yes | cycling |
|
| | no | | yes | x |
|
||||||
| primary | yes | | no | |
|
| | yes | | no | |
|
||||||
| primary | | no | yes | cycling |
|
| | | no | yes | x |
|
||||||
| primary | | yes | no | |
|
| | | yes | no | |
|
||||||
|
| runway | | | | |
|
||||||
|
| runway | yes | | | x |
|
||||||
|
| runway | no | | | |
|
||||||
|
| runway | | yes | | x |
|
||||||
|
| runway | | no | | |
|
||||||
|
| runway | no | yes | | x |
|
||||||
|
| runway | yes | no | | |
|
||||||
|
| runway | | | yes | x |
|
||||||
|
| runway | | | no | |
|
||||||
|
| runway | no | | yes | x |
|
||||||
|
| runway | yes | | no | |
|
||||||
|
| runway | | no | yes | x |
|
||||||
|
| runway | | yes | no | |
|
||||||
|
|
||||||
@todo
|
@todo
|
||||||
Scenario: Bike - Access tag in forward direction
|
Scenario: Bike - Access tag in forward direction
|
||||||
Then routability should be
|
Then routability should be
|
||||||
| highway | access:forward | vehicle:forward | bicycle:forward | forw | backw |
|
| highway | access:forward | vehicle:forward | bicycle:forward | forw | backw |
|
||||||
| primary | | | | cycling | |
|
| | | | | x | |
|
||||||
| primary | yes | | | cycling | |
|
| | yes | | | x | |
|
||||||
| primary | no | | | | |
|
| | no | | | | |
|
||||||
| primary | | yes | | cycling | |
|
| | | yes | | x | |
|
||||||
| primary | | no | | | |
|
| | | no | | | |
|
||||||
| primary | no | yes | | cycling | |
|
| | no | yes | | x | |
|
||||||
| primary | yes | no | | | |
|
| | yes | no | | | |
|
||||||
| primary | | | yes | cycling | |
|
| | | | yes | x | |
|
||||||
| primary | | | no | | |
|
| | | | no | | |
|
||||||
| primary | no | | yes | cycling | |
|
| | no | | yes | x | |
|
||||||
| primary | yes | | no | | |
|
| | yes | | no | | |
|
||||||
| primary | | no | yes | cycling | |
|
| | | no | yes | x | |
|
||||||
| primary | | yes | no | | |
|
| | | yes | no | | |
|
||||||
| runway | | | | cycling | |
|
| runway | | | | x | |
|
||||||
| runway | yes | | | cycling | |
|
| runway | yes | | | x | |
|
||||||
| runway | no | | | | |
|
| runway | no | | | | |
|
||||||
| runway | | yes | | cycling | |
|
| runway | | yes | | x | |
|
||||||
| runway | | no | | | |
|
| runway | | no | | | |
|
||||||
| runway | no | yes | | cycling | |
|
| runway | no | yes | | x | |
|
||||||
| runway | yes | no | | | |
|
| runway | yes | no | | | |
|
||||||
| runway | | | yes | cycling | |
|
| runway | | | yes | x | |
|
||||||
| runway | | | no | | |
|
| runway | | | no | | |
|
||||||
| runway | no | | yes | cycling | |
|
| runway | no | | yes | x | |
|
||||||
| runway | yes | | no | | |
|
| runway | yes | | no | | |
|
||||||
| runway | | no | yes | cycling | |
|
| runway | | no | yes | x | |
|
||||||
| runway | | yes | no | | |
|
| runway | | yes | no | | |
|
||||||
|
|
||||||
@todo
|
@todo
|
||||||
Scenario: Bike - Access tag in backward direction
|
Scenario: Bike - Access tag in backward direction
|
||||||
Then routability should be
|
Then routability should be
|
||||||
| highway | access:forward | vehicle:forward | bicycle:forward | forw | backw |
|
| highway | access:forward | vehicle:forward | bicycle:forward | forw | backw |
|
||||||
| primary | | | | | cycling |
|
| | | | | | x |
|
||||||
| primary | yes | | | | cycling |
|
| | yes | | | | x |
|
||||||
| primary | no | | | | |
|
| | no | | | | |
|
||||||
| primary | | yes | | | cycling |
|
| | | yes | | | x |
|
||||||
| primary | | no | | | |
|
| | | no | | | |
|
||||||
| primary | no | yes | | | cycling |
|
| | no | yes | | | x |
|
||||||
| primary | yes | no | | | |
|
| | yes | no | | | |
|
||||||
| primary | | | yes | | cycling |
|
| | | | yes | | x |
|
||||||
| primary | | | no | | |
|
| | | | no | | |
|
||||||
| primary | no | | yes | | cycling |
|
| | no | | yes | | x |
|
||||||
| primary | yes | | no | | |
|
| | yes | | no | | |
|
||||||
| primary | | no | yes | | cycling |
|
| | | no | yes | | x |
|
||||||
| primary | | yes | no | | |
|
| | | yes | no | | |
|
||||||
| runway | | | | | cycling |
|
| runway | | | | | x |
|
||||||
| runway | yes | | | | cycling |
|
| runway | yes | | | | x |
|
||||||
| runway | no | | | | |
|
| runway | no | | | | |
|
||||||
| runway | | yes | | | cycling |
|
| runway | | yes | | | x |
|
||||||
| runway | | no | | | |
|
| runway | | no | | | |
|
||||||
| runway | no | yes | | | cycling |
|
| runway | no | yes | | | x |
|
||||||
| runway | yes | no | | | |
|
| runway | yes | no | | | |
|
||||||
| runway | | | yes | | cycling |
|
| runway | | | yes | | x |
|
||||||
| runway | | | no | | |
|
| runway | | | no | | |
|
||||||
| runway | no | | yes | | cycling |
|
| runway | no | | yes | | x |
|
||||||
| runway | yes | | no | | |
|
| runway | yes | | no | | |
|
||||||
| runway | | no | yes | | cycling |
|
| runway | | no | yes | | x |
|
||||||
| runway | | yes | no | | |
|
| runway | | yes | no | | |
|
||||||
|
|
||||||
Scenario: Bike - Overwriting implied acccess on ways
|
Scenario: Bike - Overwriting implied acccess on ways
|
||||||
Then routability should be
|
Then routability should be
|
||||||
| highway | access | vehicle | bicycle | bothw |
|
| highway | access | vehicle | bicycle | bothw |
|
||||||
| cycleway | | | | cycling |
|
| cycleway | | | | x |
|
||||||
| runway | | | | |
|
| runway | | | | |
|
||||||
| cycleway | no | | | |
|
| cycleway | no | | | |
|
||||||
| cycleway | | no | | |
|
| cycleway | | no | | |
|
||||||
| cycleway | | | no | |
|
| cycleway | | | no | |
|
||||||
| runway | yes | | | cycling |
|
| runway | yes | | | x |
|
||||||
| runway | | yes | | cycling |
|
| runway | | yes | | x |
|
||||||
| runway | | | yes | cycling |
|
| runway | | | yes | x |
|
||||||
|
|
||||||
Scenario: Bike - Access tags on ways
|
Scenario: Bike - Access tags on ways
|
||||||
Then routability should be
|
Then routability should be
|
||||||
| access | vehicle | bicycle | bothw |
|
| access | vehicle | bicycle | bothw |
|
||||||
| | | | cycling |
|
| | | | x |
|
||||||
| yes | | | cycling |
|
| yes | | | x |
|
||||||
| permissive | | | cycling |
|
| permissive | | | x |
|
||||||
| designated | | | cycling |
|
| designated | | | x |
|
||||||
| some_tag | | | cycling |
|
| some_tag | | | x |
|
||||||
| no | | | |
|
| no | | | |
|
||||||
| private | | | |
|
| private | | | |
|
||||||
| agricultural | | | |
|
| agricultural | | | |
|
||||||
| forestry | | | |
|
| forestry | | | |
|
||||||
| delivery | | | |
|
| delivery | | | |
|
||||||
| | yes | | cycling |
|
| | yes | | x |
|
||||||
| | permissive | | cycling |
|
| | permissive | | x |
|
||||||
| | designated | | cycling |
|
| | designated | | x |
|
||||||
| | some_tag | | cycling |
|
| | some_tag | | x |
|
||||||
| | no | | |
|
| | no | | |
|
||||||
| | private | | |
|
| | private | | |
|
||||||
| | agricultural | | |
|
| | agricultural | | |
|
||||||
| | forestry | | |
|
| | forestry | | |
|
||||||
| | delivery | | |
|
| | delivery | | |
|
||||||
| | | yes | cycling |
|
| | | yes | x |
|
||||||
| | | permissive | cycling |
|
| | | permissive | x |
|
||||||
| | | designated | cycling |
|
| | | designated | x |
|
||||||
| | | some_tag | cycling |
|
| | | some_tag | x |
|
||||||
| | | no | |
|
| | | no | |
|
||||||
| | | private | |
|
| | | private | |
|
||||||
| | | agricultural | |
|
| | | agricultural | |
|
||||||
| | | forestry | |
|
| | | forestry | |
|
||||||
| | | delivery | |
|
| | | delivery | |
|
||||||
|
|
||||||
Scenario: Bike - Access tags on both node and way
|
Scenario: Bike - Access tags on both node and way
|
||||||
Then routability should be
|
Then routability should be
|
||||||
| access | node/access | bothw |
|
| access | node/access | bothw |
|
||||||
| yes | yes | cycling |
|
| yes | yes | x |
|
||||||
| yes | no | |
|
| yes | no | |
|
||||||
| yes | some_tag | cycling |
|
| yes | some_tag | x |
|
||||||
| no | yes | |
|
| no | yes | |
|
||||||
| no | no | |
|
| no | no | |
|
||||||
| no | some_tag | |
|
| no | some_tag | |
|
||||||
| some_tag | yes | cycling |
|
| some_tag | yes | x |
|
||||||
| some_tag | no | |
|
| some_tag | no | |
|
||||||
| some_tag | some_tag | cycling |
|
| some_tag | some_tag | x |
|
||||||
|
|
||||||
Scenario: Bike - Access combinations
|
Scenario: Bike - Access combinations
|
||||||
Then routability should be
|
Then routability should be
|
||||||
| highway | access | vehicle | bicycle | forw | backw |
|
| highway | access | vehicle | bicycle | forw | backw |
|
||||||
| runway | private | | yes | cycling | cycling |
|
| runway | private | | yes | x | x |
|
||||||
| footway | | no | permissive | cycling | cycling |
|
| footway | | no | permissive | x | x |
|
||||||
| motorway | | | yes | cycling | |
|
| motorway | | | yes | x | |
|
||||||
| track | forestry | | permissive | cycling | cycling |
|
| track | forestry | | permissive | x | x |
|
||||||
| cycleway | yes | designated | no | | |
|
| cycleway | yes | designated | no | | |
|
||||||
| primary | | yes | private | | |
|
| primary | | yes | private | | |
|
||||||
| residential | permissive | | no | | |
|
| residential | permissive | | no | | |
|
||||||
|
|
||||||
Scenario: Bike - Ignore access tags for other modes
|
Scenario: Bike - Ignore access tags for other modes
|
||||||
Then routability should be
|
Then routability should be
|
||||||
| highway | boat | motor_vehicle | moped | bothw |
|
| highway | boat | motor_vehicle | moped | bothw |
|
||||||
| river | yes | | | |
|
| river | yes | | | |
|
||||||
| cycleway | no | | | cycling |
|
| cycleway | no | | | x |
|
||||||
| runway | | yes | | |
|
| runway | | yes | | |
|
||||||
| cycleway | | no | | cycling |
|
| cycleway | | no | | x |
|
||||||
| runway | | | yes | |
|
| runway | | | yes | |
|
||||||
| cycleway | | | no | cycling |
|
| cycleway | | | no | x |
|
||||||
|
|
||||||
Scenario: Bike - Bridleways when access is explicit
|
Scenario: Bike - Bridleways when access is explicit
|
||||||
Then routability should be
|
Then routability should be
|
||||||
| highway | horse | foot | bicycle | bothw |
|
| highway | horse | foot | bicycle | bothw |
|
||||||
| bridleway | | | yes | cycling |
|
| bridleway | | | yes | x |
|
||||||
| bridleway | | yes | | pushing bike |
|
| bridleway | | yes | | x |
|
||||||
| bridleway | designated | | | |
|
| bridleway | designated | | | |
|
||||||
| bridleway | | | | |
|
| bridleway | | | | |
|
||||||
|
|
||||||
Scenario: Bike - Tram with oneway when access is implicit
|
Scenario: Bike - Tram with oneway when access is implicit
|
||||||
Then routability should be
|
Then routability should be
|
||||||
| highway | railway | access | oneway | forw | backw |
|
| highway | railway | access | oneway | bothw |
|
||||||
| residential | tram | | yes | cycling | pushing bike |
|
| residential | tram | | yes | x |
|
||||||
| service | tram | psv | yes | cycling | pushing bike |
|
| service | tram | psv | yes | x |
|
||||||
|
|
||||||
Scenario: Bike - Access combinations
|
Scenario: Bike - Access combinations
|
||||||
Then routability should be
|
Then routability should be
|
||||||
| highway | access | bothw |
|
| highway | access | bothw |
|
||||||
| primary | permissive | cycling |
|
| primary | permissive | x |
|
||||||
| steps | permissive | cycling |
|
| steps | permissive | x |
|
||||||
| footway | permissive | cycling |
|
| footway | permissive | x |
|
||||||
| garbagetag | permissive | cycling |
|
| garbagetag | permissive | x |
|
||||||
|
|
||||||
|
|||||||
@@ -7,62 +7,62 @@ Feature: Bike - Access tags on nodes
|
|||||||
|
|
||||||
Scenario: Bike - Access tag hierarchy on nodes
|
Scenario: Bike - Access tag hierarchy on nodes
|
||||||
Then routability should be
|
Then routability should be
|
||||||
| node/access | node/vehicle | node/bicycle | node/highway | bothw |
|
| node/access | node/vehicle | node/bicycle | node/highway | bothw |
|
||||||
| | | | | cycling |
|
| | | | | x |
|
||||||
| yes | | | | cycling |
|
| yes | | | | x |
|
||||||
| no | | | | |
|
| no | | | | |
|
||||||
| | yes | | | cycling |
|
| | yes | | | x |
|
||||||
| | no | | | |
|
| | no | | | |
|
||||||
| no | yes | | | cycling |
|
| no | yes | | | x |
|
||||||
| yes | no | | | |
|
| yes | no | | | |
|
||||||
| | | yes | | cycling |
|
| | | yes | | x |
|
||||||
| | | no | | |
|
| | | no | | |
|
||||||
| | | no | crossing | cycling |
|
| | | no | crossing | x |
|
||||||
| no | | yes | | cycling |
|
| no | | yes | | x |
|
||||||
| yes | | no | | |
|
| yes | | no | | |
|
||||||
| | no | yes | | cycling |
|
| | no | yes | | x |
|
||||||
| | yes | no | | |
|
| | yes | no | | |
|
||||||
|
|
||||||
Scenario: Bike - Overwriting implied acccess on nodes doesn't overwrite way
|
Scenario: Bike - Overwriting implied acccess on nodes doesn't overwrite way
|
||||||
Then routability should be
|
Then routability should be
|
||||||
| highway | node/access | node/vehicle | node/bicycle | bothw |
|
| highway | node/access | node/vehicle | node/bicycle | bothw |
|
||||||
| cycleway | | | | cycling |
|
| cycleway | | | | x |
|
||||||
| runway | | | | |
|
| runway | | | | |
|
||||||
| cycleway | no | | | |
|
| cycleway | no | | | |
|
||||||
| cycleway | | no | | |
|
| cycleway | | no | | |
|
||||||
| cycleway | | | no | |
|
| cycleway | | | no | |
|
||||||
| runway | yes | | | |
|
| runway | yes | | | |
|
||||||
| runway | | yes | | |
|
| runway | | yes | | |
|
||||||
| runway | | | yes | |
|
| runway | | | yes | |
|
||||||
|
|
||||||
Scenario: Bike - Access tags on nodes
|
Scenario: Bike - Access tags on nodes
|
||||||
Then routability should be
|
Then routability should be
|
||||||
| node/access | node/vehicle | node/bicycle | bothw |
|
| node/access | node/vehicle | node/bicycle | bothw |
|
||||||
| | | | cycling |
|
| | | | x |
|
||||||
| yes | | | cycling |
|
| yes | | | x |
|
||||||
| permissive | | | cycling |
|
| permissive | | | x |
|
||||||
| designated | | | cycling |
|
| designated | | | x |
|
||||||
| some_tag | | | cycling |
|
| some_tag | | | x |
|
||||||
| no | | | |
|
| no | | | |
|
||||||
| private | | | |
|
| private | | | |
|
||||||
| agricultural | | | |
|
| agricultural | | | |
|
||||||
| forestry | | | |
|
| forestry | | | |
|
||||||
| delivery | | | |
|
| delivery | | | |
|
||||||
| | yes | | cycling |
|
| | yes | | x |
|
||||||
| | permissive | | cycling |
|
| | permissive | | x |
|
||||||
| | designated | | cycling |
|
| | designated | | x |
|
||||||
| | some_tag | | cycling |
|
| | some_tag | | x |
|
||||||
| | no | | |
|
| | no | | |
|
||||||
| | private | | |
|
| | private | | |
|
||||||
| | agricultural | | |
|
| | agricultural | | |
|
||||||
| | forestry | | |
|
| | forestry | | |
|
||||||
| | delivery | | |
|
| | delivery | | |
|
||||||
| | | yes | cycling |
|
| | | yes | x |
|
||||||
| | | permissive | cycling |
|
| | | permissive | x |
|
||||||
| | | designated | cycling |
|
| | | designated | x |
|
||||||
| | | some_tag | cycling |
|
| | | some_tag | x |
|
||||||
| | | no | |
|
| | | no | |
|
||||||
| | | private | |
|
| | | private | |
|
||||||
| | | agricultural | |
|
| | | agricultural | |
|
||||||
| | | forestry | |
|
| | | forestry | |
|
||||||
| | | delivery | |
|
| | | delivery | |
|
||||||
|
|||||||
@@ -1,35 +0,0 @@
|
|||||||
@routing @bicycle @alley
|
|
||||||
Feature: Bicycle - Route around alleys
|
|
||||||
|
|
||||||
Background:
|
|
||||||
Given the profile file
|
|
||||||
"""
|
|
||||||
require 'bicycle'
|
|
||||||
properties.weight_name = 'cyclability'
|
|
||||||
"""
|
|
||||||
|
|
||||||
Scenario: Bicycle - Avoid taking alleys
|
|
||||||
Given the query options
|
|
||||||
| annotations | nodes |
|
|
||||||
|
|
||||||
Given the node map
|
|
||||||
"""
|
|
||||||
a-----b-----c
|
|
||||||
| : |
|
|
||||||
d.....e.....f
|
|
||||||
"""
|
|
||||||
|
|
||||||
And the ways
|
|
||||||
| nodes | highway | service |
|
|
||||||
| abc | residential | |
|
|
||||||
| def | service | alley |
|
|
||||||
| ad | residential | |
|
|
||||||
| be | service | alley |
|
|
||||||
| cf | residential | |
|
|
||||||
|
|
||||||
When I route I should get
|
|
||||||
| from | to | a:nodes | weight | # |
|
|
||||||
| a | f | 1:2:3:6 | 200.4 | Avoids d,e,f |
|
|
||||||
| a | e | 1:2:5 | 176.4 | Take the alley b,e if neccessary |
|
|
||||||
| d | f | 4:1:2:3:6 | 252.6 | Avoids the alley d,e,f |
|
|
||||||
|
|
||||||
@@ -71,17 +71,17 @@ Feature: Bike - Squares and other areas
|
|||||||
| abcda | (nil) | parking |
|
| abcda | (nil) | parking |
|
||||||
|
|
||||||
When I route I should get
|
When I route I should get
|
||||||
| from | to | route |
|
| from | to | route |
|
||||||
| x | y | xa,abcda,by |
|
| x | y | xa,abcda,by,by |
|
||||||
| y | x | by,abcda,xa |
|
| y | x | by,abcda,xa,xa |
|
||||||
| a | b | abcda,abcda |
|
| a | b | abcda,abcda |
|
||||||
| a | d | abcda,abcda |
|
| a | d | abcda,abcda |
|
||||||
| b | c | abcda,abcda |
|
| b | c | abcda,abcda |
|
||||||
| c | b | abcda,abcda |
|
| c | b | abcda,abcda |
|
||||||
| c | d | abcda,abcda |
|
| c | d | abcda,abcda |
|
||||||
| d | c | abcda,abcda |
|
| d | c | abcda,abcda |
|
||||||
| d | a | abcda,abcda |
|
| d | a | abcda,abcda |
|
||||||
| a | d | abcda,abcda |
|
| a | d | abcda,abcda |
|
||||||
|
|
||||||
|
|
||||||
@train @platform
|
@train @platform
|
||||||
@@ -99,14 +99,14 @@ Feature: Bike - Squares and other areas
|
|||||||
| abcda | (nil) | platform |
|
| abcda | (nil) | platform |
|
||||||
|
|
||||||
When I route I should get
|
When I route I should get
|
||||||
| from | to | route |
|
| from | to | route |
|
||||||
| x | y | xa,abcda,by |
|
| x | y | xa,abcda,by,by |
|
||||||
| y | x | by,abcda,xa |
|
| y | x | by,abcda,xa,xa |
|
||||||
| a | b | abcda,abcda |
|
| a | b | abcda,abcda |
|
||||||
| a | d | abcda,abcda |
|
| a | d | abcda,abcda |
|
||||||
| b | c | abcda,abcda |
|
| b | c | abcda,abcda |
|
||||||
| c | b | abcda,abcda |
|
| c | b | abcda,abcda |
|
||||||
| c | d | abcda,abcda |
|
| c | d | abcda,abcda |
|
||||||
| d | c | abcda,abcda |
|
| d | c | abcda,abcda |
|
||||||
| d | a | abcda,abcda |
|
| d | a | abcda,abcda |
|
||||||
| a | d | abcda,abcda |
|
| a | d | abcda,abcda |
|
||||||
|
|||||||
@@ -7,9 +7,9 @@ Feature: Bicycle - Handle cycling
|
|||||||
Scenario: Bicycle - Use a ferry route
|
Scenario: Bicycle - Use a ferry route
|
||||||
Given the node map
|
Given the node map
|
||||||
"""
|
"""
|
||||||
a b c
|
a b c
|
||||||
d
|
d
|
||||||
e f g
|
e f g
|
||||||
"""
|
"""
|
||||||
|
|
||||||
And the ways
|
And the ways
|
||||||
@@ -19,22 +19,22 @@ Feature: Bicycle - Handle cycling
|
|||||||
| efg | primary | | |
|
| efg | primary | | |
|
||||||
|
|
||||||
When I route I should get
|
When I route I should get
|
||||||
| from | to | route | modes |
|
| from | to | route | modes |
|
||||||
| a | g | abc,cde,efg,efg | cycling,cycling,cycling,cycling |
|
| a | g | abc,cde,efg,efg | cycling,cycling,cycling,cycling |
|
||||||
| b | f | abc,cde,efg,efg | cycling,cycling,cycling,cycling |
|
| b | f | abc,cde,efg,efg | cycling,cycling,cycling,cycling |
|
||||||
| e | c | cde,cde | cycling,cycling |
|
| e | c | cde,cde | cycling,cycling |
|
||||||
| e | b | cde,abc,abc | cycling,cycling,cycling |
|
| e | b | cde,abc,abc | cycling,cycling,cycling |
|
||||||
| e | a | cde,abc,abc | cycling,cycling,cycling |
|
| e | a | cde,abc,abc | cycling,cycling,cycling |
|
||||||
| c | e | cde,cde | cycling,cycling |
|
| c | e | cde,cde | cycling,cycling |
|
||||||
| c | f | cde,efg,efg | cycling,cycling,cycling |
|
| c | f | cde,efg,efg | cycling,cycling,cycling |
|
||||||
| c | g | cde,efg,efg | cycling,cycling,cycling |
|
| c | g | cde,efg,efg | cycling,cycling,cycling |
|
||||||
|
|
||||||
Scenario: Bicycle - Properly handle durations
|
Scenario: Bicycle - Properly handle durations
|
||||||
Given the node map
|
Given the node map
|
||||||
"""
|
"""
|
||||||
a b c
|
a b c
|
||||||
d
|
d
|
||||||
e f g
|
e f g
|
||||||
"""
|
"""
|
||||||
|
|
||||||
And the ways
|
And the ways
|
||||||
@@ -45,7 +45,7 @@ Feature: Bicycle - Handle cycling
|
|||||||
|
|
||||||
When I route I should get
|
When I route I should get
|
||||||
| from | to | route | modes | speed |
|
| from | to | route | modes | speed |
|
||||||
| a | g | abc,cde,efg,efg | cycling,cycling,cycling,cycling | 6 km/h |
|
| a | g | abc,cde,efg,efg | cycling,cycling,cycling,cycling | 5 km/h |
|
||||||
| b | f | abc,cde,efg,efg | cycling,cycling,cycling,cycling | 5 km/h |
|
| b | f | abc,cde,efg,efg | cycling,cycling,cycling,cycling | 4 km/h |
|
||||||
| c | e | cde,cde | cycling,cycling | 2 km/h |
|
| c | e | cde,cde | cycling,cycling | 2 km/h |
|
||||||
| e | c | cde,cde | cycling,cycling | 2 km/h |
|
| e | c | cde,cde | cycling,cycling | 2 km/h |
|
||||||
|
|||||||
@@ -79,19 +79,3 @@ Feature: Bike - Cycle tracks/lanes
|
|||||||
| residential | lane | yes | x | x |
|
| residential | lane | yes | x | x |
|
||||||
| footway | lane | yes | x | x |
|
| footway | lane | yes | x | x |
|
||||||
| cycleway | lane | yes | x | x |
|
| cycleway | lane | yes | x | x |
|
||||||
|
|
||||||
Scenario: Bike - Cycleway on oneways, modes
|
|
||||||
Then routability should be
|
|
||||||
| highway | cycleway | oneway | forw | backw |
|
|
||||||
| motorway | track | yes | cycling | |
|
|
||||||
| residential | track | yes | cycling | pushing bike |
|
|
||||||
| cycleway | track | yes | cycling | pushing bike |
|
|
||||||
| footway | track | yes | pushing bike | pushing bike |
|
|
||||||
|
|
||||||
Scenario: Bike - Cycleway on oneways, speeds
|
|
||||||
Then routability should be
|
|
||||||
| highway | cycleway | oneway | forw | backw |
|
|
||||||
| motorway | track | yes | 15 km/h | |
|
|
||||||
| residential | track | yes | 15 km/h | 6 km/h |
|
|
||||||
| cycleway | track | yes | 15 km/h | 6 km/h |
|
|
||||||
| footway | track | yes | 6 km/h +-1 | 6 km/h +-1 |
|
|
||||||
|
|||||||
@@ -159,7 +159,7 @@ Feature: Bike - Mode flag
|
|||||||
| c | a | bc,ab,ab | pushing bike,cycling,cycling |
|
| c | a | bc,ab,ab | pushing bike,cycling,cycling |
|
||||||
| d | b | cd,bc,bc | cycling,pushing bike,pushing bike |
|
| d | b | cd,bc,bc | cycling,pushing bike,pushing bike |
|
||||||
| a | c | ab,bc,bc | cycling,pushing bike,pushing bike |
|
| a | c | ab,bc,bc | cycling,pushing bike,pushing bike |
|
||||||
| b | d | bc,cd,cd | pushing bike,cycling,cycling |
|
| b | d | bc,cd,cd | pushing bike,cycling,cycling |
|
||||||
|
|
||||||
Scenario: Bicycle - Modes when starting on forward oneway
|
Scenario: Bicycle - Modes when starting on forward oneway
|
||||||
Given the node map
|
Given the node map
|
||||||
|
|||||||
@@ -17,8 +17,8 @@ Feature: Bike - Street names in instructions
|
|||||||
| bc | Your Way | A7 |
|
| bc | Your Way | A7 |
|
||||||
|
|
||||||
When I route I should get
|
When I route I should get
|
||||||
| from | to | route | ref |
|
| from | to | route | ref |
|
||||||
| a | c | My Way,Your Way | A6,A7 |
|
| a | c | My Way,Your Way,Your Way | A6,A7,A7 |
|
||||||
|
|
||||||
@unnamed
|
@unnamed
|
||||||
Scenario: Bike - No longer use way type to describe unnamed ways, see #3231
|
Scenario: Bike - No longer use way type to describe unnamed ways, see #3231
|
||||||
|
|||||||
@@ -8,15 +8,13 @@ Feature: Bike - Oneway streets
|
|||||||
|
|
||||||
Scenario: Bike - Simple oneway
|
Scenario: Bike - Simple oneway
|
||||||
Then routability should be
|
Then routability should be
|
||||||
| highway | foot | oneway | forw | backw |
|
| highway | foot | oneway | forw | backw |
|
||||||
| primary | no | yes | cycling | |
|
| primary | no | yes | x | |
|
||||||
| primary | | yes | cycling | pushing bike |
|
|
||||||
|
|
||||||
Scenario: Simple reverse oneway
|
Scenario: Simple reverse oneway
|
||||||
Then routability should be
|
Then routability should be
|
||||||
| highway | foot | oneway | forw | backw |
|
| highway | foot | oneway | forw | backw |
|
||||||
| primary | no | -1 | | cycling |
|
| primary | no | -1 | | x |
|
||||||
| primary | | -1 | pushing bike | cycling |
|
|
||||||
|
|
||||||
Scenario: Bike - Around the Block
|
Scenario: Bike - Around the Block
|
||||||
Given the node map
|
Given the node map
|
||||||
@@ -41,83 +39,83 @@ Feature: Bike - Oneway streets
|
|||||||
|
|
||||||
Scenario: Bike - Handle various oneway tag values
|
Scenario: Bike - Handle various oneway tag values
|
||||||
Then routability should be
|
Then routability should be
|
||||||
| foot | oneway | forw | backw |
|
| foot | oneway | forw | backw |
|
||||||
| no | | cycling | cycling |
|
| no | | x | x |
|
||||||
| no | nonsense | cycling | cycling |
|
| no | nonsense | x | x |
|
||||||
| no | no | cycling | cycling |
|
| no | no | x | x |
|
||||||
| no | false | cycling | cycling |
|
| no | false | x | x |
|
||||||
| no | 0 | cycling | cycling |
|
| no | 0 | x | x |
|
||||||
| no | yes | cycling | |
|
| no | yes | x | |
|
||||||
| no | true | cycling | |
|
| no | true | x | |
|
||||||
| no | 1 | cycling | |
|
| no | 1 | x | |
|
||||||
| no | -1 | | cycling |
|
| no | -1 | | x |
|
||||||
|
|
||||||
Scenario: Bike - Implied oneways
|
Scenario: Bike - Implied oneways
|
||||||
Then routability should be
|
Then routability should be
|
||||||
| highway | foot | bicycle | junction | forw | backw | # |
|
| highway | foot | bicycle | junction | forw | backw | # |
|
||||||
| | no | | | cycling | cycling | |
|
| | no | | | x | x | |
|
||||||
| | no | | roundabout | cycling | | |
|
| | no | | roundabout | x | | |
|
||||||
| motorway | no | yes | | cycling | | |
|
| motorway | no | yes | | x | | |
|
||||||
| motorway_link | no | yes | | cycling | cycling | does not imply oneway |
|
| motorway_link | no | yes | | x | x | does not imply oneway |
|
||||||
| motorway | no | yes | roundabout | cycling | | |
|
| motorway | no | yes | roundabout | x | | |
|
||||||
| motorway_link | no | yes | roundabout | cycling | | |
|
| motorway_link | no | yes | roundabout | x | | |
|
||||||
|
|
||||||
Scenario: Bike - Overriding implied oneways
|
Scenario: Bike - Overriding implied oneways
|
||||||
Then routability should be
|
Then routability should be
|
||||||
| highway | foot | junction | oneway | forw | backw |
|
| highway | foot | junction | oneway | forw | backw |
|
||||||
| primary | no | roundabout | no | cycling | cycling |
|
| primary | no | roundabout | no | x | x |
|
||||||
| primary | no | roundabout | yes | cycling | |
|
| primary | no | roundabout | yes | x | |
|
||||||
| motorway_link | no | | -1 | | |
|
| motorway_link | no | | -1 | | |
|
||||||
| trunk_link | no | | -1 | | |
|
| trunk_link | no | | -1 | | |
|
||||||
| primary | no | roundabout | -1 | | cycling |
|
| primary | no | roundabout | -1 | | x |
|
||||||
|
|
||||||
Scenario: Bike - Oneway:bicycle should override normal oneways tags
|
Scenario: Bike - Oneway:bicycle should override normal oneways tags
|
||||||
Then routability should be
|
Then routability should be
|
||||||
| foot | oneway:bicycle | oneway | junction | forw | backw |
|
| foot | oneway:bicycle | oneway | junction | forw | backw |
|
||||||
| no | yes | | | cycling | |
|
| no | yes | | | x | |
|
||||||
| no | yes | yes | | cycling | |
|
| no | yes | yes | | x | |
|
||||||
| no | yes | no | | cycling | |
|
| no | yes | no | | x | |
|
||||||
| no | yes | -1 | | cycling | |
|
| no | yes | -1 | | x | |
|
||||||
| no | yes | | roundabout | cycling | |
|
| no | yes | | roundabout | x | |
|
||||||
| no | no | | | cycling | cycling |
|
| no | no | | | x | x |
|
||||||
| no | no | yes | | cycling | cycling |
|
| no | no | yes | | x | x |
|
||||||
| no | no | no | | cycling | cycling |
|
| no | no | no | | x | x |
|
||||||
| no | no | -1 | | cycling | cycling |
|
| no | no | -1 | | x | x |
|
||||||
| no | no | | roundabout | cycling | cycling |
|
| no | no | | roundabout | x | x |
|
||||||
| no | -1 | | | | cycling |
|
| no | -1 | | | | x |
|
||||||
| no | -1 | yes | | | cycling |
|
| no | -1 | yes | | | x |
|
||||||
| no | -1 | no | | | cycling |
|
| no | -1 | no | | | x |
|
||||||
| no | -1 | -1 | | | cycling |
|
| no | -1 | -1 | | | x |
|
||||||
| no | -1 | | roundabout | | cycling |
|
| no | -1 | | roundabout | | x |
|
||||||
|
|
||||||
Scenario: Bike - Contra flow
|
Scenario: Bike - Contra flow
|
||||||
Then routability should be
|
Then routability should be
|
||||||
| foot | oneway | cycleway | forw | backw |
|
| foot | oneway | cycleway | forw | backw |
|
||||||
| no | yes | opposite | cycling | cycling |
|
| no | yes | opposite | x | x |
|
||||||
| no | yes | opposite_track | cycling | cycling |
|
| no | yes | opposite_track | x | x |
|
||||||
| no | yes | opposite_lane | cycling | cycling |
|
| no | yes | opposite_lane | x | x |
|
||||||
| no | -1 | opposite | cycling | cycling |
|
| no | -1 | opposite | x | x |
|
||||||
| no | -1 | opposite_track | cycling | cycling |
|
| no | -1 | opposite_track | x | x |
|
||||||
| no | -1 | opposite_lane | cycling | cycling |
|
| no | -1 | opposite_lane | x | x |
|
||||||
| no | no | opposite | cycling | cycling |
|
| no | no | opposite | x | x |
|
||||||
| no | no | opposite_track | cycling | cycling |
|
| no | no | opposite_track | x | x |
|
||||||
| no | no | opposite_lane | cycling | cycling |
|
| no | no | opposite_lane | x | x |
|
||||||
|
|
||||||
Scenario: Bike - Should not be affected by car tags
|
Scenario: Bike - Should not be affected by car tags
|
||||||
Then routability should be
|
Then routability should be
|
||||||
| foot | junction | oneway | oneway:car | forw | backw |
|
| foot | junction | oneway | oneway:car | forw | backw |
|
||||||
| no | | yes | yes | cycling | |
|
| no | | yes | yes | x | |
|
||||||
| no | | yes | no | cycling | |
|
| no | | yes | no | x | |
|
||||||
| no | | yes | -1 | cycling | |
|
| no | | yes | -1 | x | |
|
||||||
| no | | no | yes | cycling | cycling |
|
| no | | no | yes | x | x |
|
||||||
| no | | no | no | cycling | cycling |
|
| no | | no | no | x | x |
|
||||||
| no | | no | -1 | cycling | cycling |
|
| no | | no | -1 | x | x |
|
||||||
| no | | -1 | yes | | cycling |
|
| no | | -1 | yes | | x |
|
||||||
| no | | -1 | no | | cycling |
|
| no | | -1 | no | | x |
|
||||||
| no | | -1 | -1 | | cycling |
|
| no | | -1 | -1 | | x |
|
||||||
| no | roundabout | | yes | cycling | |
|
| no | roundabout | | yes | x | |
|
||||||
| no | roundabout | | no | cycling | |
|
| no | roundabout | | no | x | |
|
||||||
| no | roundabout | | -1 | cycling | |
|
| no | roundabout | | -1 | x | |
|
||||||
|
|
||||||
Scenario: Bike - Two consecutive oneways
|
Scenario: Bike - Two consecutive oneways
|
||||||
Given the node map
|
Given the node map
|
||||||
|
|||||||
@@ -3,30 +3,34 @@ Feature: Bike - Accessability of different way types
|
|||||||
|
|
||||||
Background:
|
Background:
|
||||||
Given the profile "bicycle"
|
Given the profile "bicycle"
|
||||||
|
Given the shortcuts
|
||||||
|
| key | value |
|
||||||
|
| bike | 15 km/h ~20% |
|
||||||
|
| foot | 5 km/h ~20% |
|
||||||
|
|
||||||
Scenario: Bike - Pushing bikes on pedestrian-only ways
|
Scenario: Bike - Pushing bikes on pedestrian-only ways
|
||||||
Then routability should be
|
Then routability should be
|
||||||
| highway | oneway | forw | backw |
|
| highway | oneway | forw | backw |
|
||||||
| (nil) | | | |
|
| (nil) | | | |
|
||||||
| cycleway | | cycling | cycling |
|
| cycleway | | bike | bike |
|
||||||
| primary | | cycling | cycling |
|
| primary | | bike | bike |
|
||||||
| pedestrian | | pushing bike | pushing bike |
|
| pedestrian | | foot | foot |
|
||||||
| cycleway | | cycling | cycling |
|
| footway | | foot | foot |
|
||||||
| primary | yes | cycling | pushing bike |
|
| primary | yes | bike | foot |
|
||||||
|
|
||||||
Scenario: Bike - Pushing bikes against normal oneways
|
Scenario: Bike - Pushing bikes against normal oneways
|
||||||
Then routability should be
|
Then routability should be
|
||||||
| highway | oneway | forw | backw |
|
| highway | oneway | forw | backw |
|
||||||
| (nil) | | | |
|
| (nil) | | | |
|
||||||
| primary | yes | cycling | pushing bike |
|
| primary | yes | bike | foot |
|
||||||
| pedestrian | yes | pushing bike | pushing bike |
|
| pedestrian | yes | foot | foot |
|
||||||
|
|
||||||
Scenario: Bike - Pushing bikes against reverse oneways
|
Scenario: Bike - Pushing bikes against reverse oneways
|
||||||
Then routability should be
|
Then routability should be
|
||||||
| highway | oneway | forw | backw |
|
| highway | oneway | forw | backw |
|
||||||
| (nil) | | | |
|
| (nil) | | | |
|
||||||
| primary | -1 | pushing bike | cycling |
|
| primary | -1 | foot | bike |
|
||||||
| pedestrian | -1 | pushing bike | pushing bike |
|
| pedestrian | -1 | foot | foot |
|
||||||
|
|
||||||
@square
|
@square
|
||||||
Scenario: Bike - Push bikes on pedestrian areas
|
Scenario: Bike - Push bikes on pedestrian areas
|
||||||
@@ -43,7 +47,7 @@ Feature: Bike - Accessability of different way types
|
|||||||
| abcda | yes | pedestrian |
|
| abcda | yes | pedestrian |
|
||||||
|
|
||||||
When I route I should get
|
When I route I should get
|
||||||
| from | to | route |
|
| from | to | route |
|
||||||
| a | b | abcda,abcda |
|
| a | b | abcda,abcda |
|
||||||
| a | d | abcda,abcda |
|
| a | d | abcda,abcda |
|
||||||
| b | c | abcda,abcda |
|
| b | c | abcda,abcda |
|
||||||
@@ -55,19 +59,19 @@ Feature: Bike - Accessability of different way types
|
|||||||
|
|
||||||
Scenario: Bike - Pushing bikes on ways with foot=yes
|
Scenario: Bike - Pushing bikes on ways with foot=yes
|
||||||
Then routability should be
|
Then routability should be
|
||||||
| highway | foot | forw | backw |
|
| highway | foot | forw | backw |
|
||||||
| motorway | | | |
|
| motorway | | | |
|
||||||
| motorway | yes | pushing bike | |
|
| motorway | yes | foot | |
|
||||||
| runway | | | |
|
| runway | | | |
|
||||||
| runway | yes | pushing bike | pushing bike |
|
| runway | yes | foot | foot |
|
||||||
|
|
||||||
@todo
|
@todo
|
||||||
Scenario: Bike - Pushing bikes on ways with foot=yes in one direction
|
Scenario: Bike - Pushing bikes on ways with foot=yes in one direction
|
||||||
Then routability should be
|
Then routability should be
|
||||||
| highway | foot:forward | foot:backward | forw | backw |
|
| highway | foot:forward | foot:backward | forw | backw |
|
||||||
| motorway | | | | |
|
| motorway | | | | |
|
||||||
| motorway | yes | | pushing bike | |
|
| motorway | yes | | foot | |
|
||||||
| motorway | | yes | | pushing bike |
|
| motorway | | yes | | foot |
|
||||||
|
|
||||||
@construction
|
@construction
|
||||||
Scenario: Bike - Don't allow routing on ways still under construction
|
Scenario: Bike - Don't allow routing on ways still under construction
|
||||||
@@ -100,11 +104,11 @@ Feature: Bike - Accessability of different way types
|
|||||||
| cf | primary | |
|
| cf | primary | |
|
||||||
|
|
||||||
When I route I should get
|
When I route I should get
|
||||||
| from | to | route | modes |
|
| from | to | route | modes |
|
||||||
| a | d | ab,bc,cd,cd | cycling,cycling,cycling,cycling |
|
| a | d | ab,bc,cd,cd | cycling,cycling,cycling,cycling |
|
||||||
| d | a | cd,bc,ab,ab | cycling,pushing bike,cycling,cycling |
|
| d | a | cd,bc,ab,ab | cycling,pushing bike,cycling,cycling |
|
||||||
| c | a | bc,ab,ab | pushing bike,cycling,cycling |
|
| c | a | bc,ab,ab | pushing bike,cycling,cycling |
|
||||||
| d | b | cd,bc,bc | cycling,pushing bike,pushing bike |
|
| d | b | cd,bc,bc | cycling,pushing bike,pushing bike |
|
||||||
|
|
||||||
Scenario: Bike - Instructions when pushing bike on footway/pedestrian, etc.
|
Scenario: Bike - Instructions when pushing bike on footway/pedestrian, etc.
|
||||||
Given the node map
|
Given the node map
|
||||||
|
|||||||
@@ -5,7 +5,6 @@ Feature: Bike - Turn restrictions
|
|||||||
|
|
||||||
Background:
|
Background:
|
||||||
Given the profile "bicycle"
|
Given the profile "bicycle"
|
||||||
Given a grid size of 200 meters
|
|
||||||
|
|
||||||
@no_turning
|
@no_turning
|
||||||
Scenario: Bike - No left turn
|
Scenario: Bike - No left turn
|
||||||
|
|||||||
@@ -7,33 +7,33 @@ Feature: Bike - Handle ferry routes
|
|||||||
|
|
||||||
Scenario: Bike - Bringing bikes on trains
|
Scenario: Bike - Bringing bikes on trains
|
||||||
Then routability should be
|
Then routability should be
|
||||||
| highway | railway | bicycle | bothw |
|
| highway | railway | bicycle | bothw |
|
||||||
| primary | | | cycling |
|
| primary | | | x |
|
||||||
| (nil) | train | | |
|
| (nil) | train | | |
|
||||||
| (nil) | train | no | |
|
| (nil) | train | no | |
|
||||||
| (nil) | train | yes | train |
|
| (nil) | train | yes | x |
|
||||||
| (nil) | railway | | |
|
| (nil) | railway | | |
|
||||||
| (nil) | railway | no | |
|
| (nil) | railway | no | |
|
||||||
| (nil) | railway | yes | train |
|
| (nil) | railway | yes | x |
|
||||||
| (nil) | subway | | |
|
| (nil) | subway | | |
|
||||||
| (nil) | subway | no | |
|
| (nil) | subway | no | |
|
||||||
| (nil) | subway | yes | train |
|
| (nil) | subway | yes | x |
|
||||||
| (nil) | tram | | |
|
| (nil) | tram | | |
|
||||||
| (nil) | tram | no | |
|
| (nil) | tram | no | |
|
||||||
| (nil) | tram | yes | train |
|
| (nil) | tram | yes | x |
|
||||||
| (nil) | light_rail | | |
|
| (nil) | light_rail | | |
|
||||||
| (nil) | light_rail | no | |
|
| (nil) | light_rail | no | |
|
||||||
| (nil) | light_rail | yes | train |
|
| (nil) | light_rail | yes | x |
|
||||||
| (nil) | monorail | | |
|
| (nil) | monorail | | |
|
||||||
| (nil) | monorail | no | |
|
| (nil) | monorail | no | |
|
||||||
| (nil) | monorail | yes | train |
|
| (nil) | monorail | yes | x |
|
||||||
| (nil) | some_tag | | |
|
| (nil) | some_tag | | |
|
||||||
| (nil) | some_tag | no | |
|
| (nil) | some_tag | no | |
|
||||||
| (nil) | some_tag | yes | cycling |
|
| (nil) | some_tag | yes | x |
|
||||||
|
|
||||||
@construction
|
@construction
|
||||||
Scenario: Bike - Don't route on railways under construction
|
Scenario: Bike - Don't route on railways under construction
|
||||||
Then routability should be
|
Then routability should be
|
||||||
| highway | railway | bicycle | bothw |
|
| highway | railway | bicycle | bothw |
|
||||||
| primary | | | cycling |
|
| primary | | | x |
|
||||||
| (nil) | construction | yes | |
|
| (nil) | construction | yes | |
|
||||||
|
|||||||
@@ -3,7 +3,6 @@ Feature: Turn Penalties
|
|||||||
|
|
||||||
Background:
|
Background:
|
||||||
Given the profile "turnbot"
|
Given the profile "turnbot"
|
||||||
Given a grid size of 200 meters
|
|
||||||
|
|
||||||
Scenario: Bike - turns should incur a delay that depend on the angle
|
Scenario: Bike - turns should incur a delay that depend on the angle
|
||||||
|
|
||||||
@@ -27,46 +26,10 @@ Feature: Turn Penalties
|
|||||||
|
|
||||||
When I route I should get
|
When I route I should get
|
||||||
| from | to | route | time | distance |
|
| from | to | route | time | distance |
|
||||||
| s | a | sj,ja,ja | 63s +-1 | 483m +-1 |
|
| s | a | sj,ja,ja | 39s +-1 | 242m +-1 |
|
||||||
| s | b | sj,jb,jb | 50s +-1 | 400m +-1 |
|
| s | b | sj,jb,jb | 30s +-1 | 200m +-1 |
|
||||||
| s | c | sj,jc,jc | 54s +-1 | 483m +-1 |
|
| s | c | sj,jc,jc | 29s +-1 | 242m +-1 |
|
||||||
| s | d | sj,jd,jd | 40s +-1 | 400m +-1 |
|
| s | d | sj,jd,jd | 20s +-1 | 200m +-1 |
|
||||||
| s | e | sj,je,je | 53s +-1 | 483m +-1 |
|
| s | e | sj,je,je | 29s +-1 | 242m +-1 |
|
||||||
| s | f | sj,jf,jf | 50s +-1 | 400m +-1 |
|
| s | f | sj,jf,jf | 30s +-1 | 200m +-1 |
|
||||||
| s | g | sj,jg,jg | 63s +-1 | 483m +-1 |
|
| s | g | sj,jg,jg | 39s +-1 | 242m +-1 |
|
||||||
|
|
||||||
Scenario: Bicycle - Turn penalties on cyclability
|
|
||||||
Given the profile file
|
|
||||||
"""
|
|
||||||
require 'bicycle'
|
|
||||||
properties.weight_name = 'cyclability'
|
|
||||||
"""
|
|
||||||
|
|
||||||
Given the node map
|
|
||||||
"""
|
|
||||||
a--b-----c
|
|
||||||
|
|
|
||||||
|
|
|
||||||
d
|
|
||||||
|
|
||||||
e--------f-----------g
|
|
||||||
/
|
|
||||||
/
|
|
||||||
/
|
|
||||||
h
|
|
||||||
"""
|
|
||||||
|
|
||||||
And the ways
|
|
||||||
| nodes | highway |
|
|
||||||
| abc | residential |
|
|
||||||
| bd | residential |
|
|
||||||
| efg | residential |
|
|
||||||
| fh | residential |
|
|
||||||
|
|
||||||
When I route I should get
|
|
||||||
| from | to | distance | weight | # |
|
|
||||||
| a | c | 900m +- 1 | 216 | Going straight has no penalties |
|
|
||||||
| a | d | 900m +- 1 | 220.2 | Turning right had penalties |
|
|
||||||
| e | g | 2100m +- 4| 503.9 | Going straght has no penalties |
|
|
||||||
| e | h | 2100m +- 4| 515.1 | Turn sharp right has even higher penalties|
|
|
||||||
|
|
||||||
|
|||||||
@@ -292,15 +292,14 @@ Feature: Car - Restricted access
|
|||||||
| service | private | |
|
| service | private | |
|
||||||
| cycleway | private | |
|
| cycleway | private | |
|
||||||
| track | private | |
|
| track | private | |
|
||||||
| footway | customers | |
|
|
||||||
|
|
||||||
Scenario: Car - Access blacklist
|
Scenario: Car - Access blacklist
|
||||||
Then routability should be
|
Then routability should be
|
||||||
| highway | access | bothw |
|
| highway | access | bothw |
|
||||||
| primary | | x |
|
| primary | | x |
|
||||||
|
| primary | customer | |
|
||||||
| primary | emergency | |
|
| primary | emergency | |
|
||||||
| primary | forestry | |
|
| primary | forestry | |
|
||||||
| primary | agricultural | |
|
| primary | agricultural | |
|
||||||
| primary | psv | |
|
| primary | psv | |
|
||||||
| primary | no | |
|
| primary | no | |
|
||||||
| primary | customers | x |
|
|
||||||
|
|||||||
@@ -3,7 +3,6 @@ Feature: Car - Handle driving
|
|||||||
|
|
||||||
Background:
|
Background:
|
||||||
Given the profile "car"
|
Given the profile "car"
|
||||||
Given a grid size of 200 meters
|
|
||||||
|
|
||||||
Scenario: Car - Use a ferry route
|
Scenario: Car - Use a ferry route
|
||||||
Given the node map
|
Given the node map
|
||||||
@@ -16,7 +15,7 @@ Feature: Car - Handle driving
|
|||||||
And the ways
|
And the ways
|
||||||
| nodes | highway | bridge | bicycle |
|
| nodes | highway | bridge | bicycle |
|
||||||
| abc | primary | | |
|
| abc | primary | | |
|
||||||
| cde | primary | movable | yes |
|
| cde | | movable | yes |
|
||||||
| efg | primary | | |
|
| efg | primary | | |
|
||||||
|
|
||||||
When I route I should get
|
When I route I should get
|
||||||
@@ -41,15 +40,15 @@ Feature: Car - Handle driving
|
|||||||
And the ways
|
And the ways
|
||||||
| nodes | highway | bridge |
|
| nodes | highway | bridge |
|
||||||
| abc | primary | |
|
| abc | primary | |
|
||||||
| cde | primary | movable |
|
| cde | | movable |
|
||||||
| efg | primary | |
|
| efg | primary | |
|
||||||
|
|
||||||
When I route I should get
|
When I route I should get
|
||||||
| from | to | route | modes | speed | time |
|
| from | to | route | modes | speed | time |
|
||||||
| a | g | abc,cde,efg,efg | driving,driving,driving,driving | 13 km/h | 340s +-1 |
|
| a | g | abc,cde,efg,efg | driving,driving,driving,driving | 12 km/h | 173s +-1 |
|
||||||
| b | f | abc,cde,efg,efg | driving,driving,driving,driving | 9 km/h | 318s +-1 |
|
| b | f | abc,cde,efg,efg | driving,driving,driving,driving | 9 km/h | 162s +-1 |
|
||||||
| c | e | cde,cde | driving,driving | 5 km/h | 295s +-1 |
|
| c | e | cde,cde | driving,driving | 5 km/h | 146s +-1 |
|
||||||
| e | c | cde,cde | driving,driving | 5 km/h | 295s +-1 |
|
| e | c | cde,cde | driving,driving | 5 km/h | 149s +-1 |
|
||||||
|
|
||||||
Scenario: Car - Properly handle durations
|
Scenario: Car - Properly handle durations
|
||||||
Given the node map
|
Given the node map
|
||||||
@@ -62,7 +61,7 @@ Feature: Car - Handle driving
|
|||||||
And the ways
|
And the ways
|
||||||
| nodes | highway | bridge | duration |
|
| nodes | highway | bridge | duration |
|
||||||
| abc | primary | | |
|
| abc | primary | | |
|
||||||
| cde | primary | movable | 00:10:00 |
|
| cde | | movable | 00:05:00 |
|
||||||
| efg | primary | | |
|
| efg | primary | | |
|
||||||
|
|
||||||
When I route I should get
|
When I route I should get
|
||||||
|
|||||||
@@ -23,11 +23,11 @@ Feature: Car - Destination only, no passing through
|
|||||||
When I route I should get
|
When I route I should get
|
||||||
| from | to | route |
|
| from | to | route |
|
||||||
| a | b | ab,ab |
|
| a | b | ab,ab |
|
||||||
| a | c | ab,bcd |
|
| a | c | ab,bcd,bcd |
|
||||||
| a | d | ab,bcd,bcd |
|
| a | d | ab,bcd,bcd |
|
||||||
| a | e | axye,axye |
|
| a | e | axye,axye |
|
||||||
| e | d | de,de |
|
| e | d | de,de |
|
||||||
| e | c | de,bcd |
|
| e | c | de,bcd,bcd |
|
||||||
| e | b | de,bcd,bcd |
|
| e | b | de,bcd,bcd |
|
||||||
| e | a | axye,axye |
|
| e | a | axye,axye |
|
||||||
|
|
||||||
@@ -51,12 +51,12 @@ Feature: Car - Destination only, no passing through
|
|||||||
When I route I should get
|
When I route I should get
|
||||||
| from | to | route |
|
| from | to | route |
|
||||||
| a | b | ab,ab |
|
| a | b | ab,ab |
|
||||||
| a | c | ab,bc |
|
| a | c | ab,bc,bc |
|
||||||
| a | d | ab,cd |
|
| a | d | ab,bc,cd,cd |
|
||||||
| a | e | axye,axye |
|
| a | e | axye,axye |
|
||||||
| e | d | de,de |
|
| e | d | de,de |
|
||||||
| e | c | de,cd |
|
| e | c | de,cd,cd |
|
||||||
| e | b | de,bc |
|
| e | b | de,cd,bc,bc |
|
||||||
| e | a | axye,axye |
|
| e | a | axye,axye |
|
||||||
|
|
||||||
Scenario: Car - Routing inside a destination only area
|
Scenario: Car - Routing inside a destination only area
|
||||||
|
|||||||
@@ -18,8 +18,8 @@ Feature: Car - Street names in instructions
|
|||||||
| bc | Your Way | A1 |
|
| bc | Your Way | A1 |
|
||||||
|
|
||||||
When I route I should get
|
When I route I should get
|
||||||
| from | to | route | ref |
|
| from | to | route | ref |
|
||||||
| a | c | My Way,Your Way | ,A1|
|
| a | c | My Way,Your Way,Your Way | ,A1,A1|
|
||||||
|
|
||||||
Scenario: Car - A named street with pronunciation
|
Scenario: Car - A named street with pronunciation
|
||||||
Given the node map
|
Given the node map
|
||||||
@@ -36,9 +36,9 @@ Feature: Car - Street names in instructions
|
|||||||
| cd | Your Way | yourewaye | |
|
| cd | Your Way | yourewaye | |
|
||||||
|
|
||||||
When I route I should get
|
When I route I should get
|
||||||
| from | to | route | pronunciations | ref |
|
| from | to | route | pronunciations | ref |
|
||||||
| a | d | My Way,My Way | ,meyeway | ,A1 |
|
| a | d | My Way,My Way,My Way | ,meyeway,meyeway | ,A1,A1 |
|
||||||
| 1 | c | Your Way,Your Way | yourewaye,yourewaye | , |
|
| 1 | c | Your Way,Your Way | yourewaye,yourewaye | , |
|
||||||
|
|
||||||
# See #2860
|
# See #2860
|
||||||
Scenario: Car - same street name but different pronunciation
|
Scenario: Car - same street name but different pronunciation
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ Feature: Basic Routing
|
|||||||
Given the profile "car"
|
Given the profile "car"
|
||||||
Given a grid size of 500 meters
|
Given a grid size of 500 meters
|
||||||
|
|
||||||
@smallest @via
|
@smallest
|
||||||
Scenario: Summaries when routing on a simple network
|
Scenario: Summaries when routing on a simple network
|
||||||
Given the node map
|
Given the node map
|
||||||
"""
|
"""
|
||||||
|
|||||||
@@ -1,39 +0,0 @@
|
|||||||
@routing @car @traffic_light
|
|
||||||
Feature: Car - Handle traffic lights
|
|
||||||
|
|
||||||
Background:
|
|
||||||
Given the profile "car"
|
|
||||||
|
|
||||||
Scenario: Car - Encounters a traffic light
|
|
||||||
Given the node map
|
|
||||||
"""
|
|
||||||
a-1-b-2-c
|
|
||||||
|
|
||||||
d-3-e-4-f
|
|
||||||
|
|
||||||
g-h-i k-l-m
|
|
||||||
| |
|
|
||||||
j n
|
|
||||||
|
|
||||||
"""
|
|
||||||
|
|
||||||
And the ways
|
|
||||||
| nodes | highway |
|
|
||||||
| abc | primary |
|
|
||||||
| def | primary |
|
|
||||||
| ghi | primary |
|
|
||||||
| klm | primary |
|
|
||||||
| hj | primary |
|
|
||||||
| ln | primary |
|
|
||||||
|
|
||||||
And the nodes
|
|
||||||
| node | highway |
|
|
||||||
| e | traffic_signals |
|
|
||||||
| l | traffic_signals |
|
|
||||||
|
|
||||||
When I route I should get
|
|
||||||
| from | to | time | # |
|
|
||||||
| 1 | 2 | 11.1s | no turn with no traffic light |
|
|
||||||
| 3 | 4 | 13.1s | no turn with traffic light |
|
|
||||||
| g | j | 18.7s | turn with no traffic light |
|
|
||||||
| k | n | 20.7s | turn with traffic light |
|
|
||||||
@@ -48,17 +48,18 @@ Feature: Traffic - turn penalties
|
|||||||
| mn | primary |
|
| mn | primary |
|
||||||
| mp | primary |
|
| mp | primary |
|
||||||
And the profile "car"
|
And the profile "car"
|
||||||
|
And the extract extra arguments "--generate-edge-lookup"
|
||||||
|
|
||||||
Scenario: Weighting not based on turn penalty file
|
Scenario: Weighting not based on turn penalty file
|
||||||
When I route I should get
|
When I route I should get
|
||||||
| from | to | route | speed | weight | time |
|
| from | to | route | speed | weight | time |
|
||||||
| a | h | ad,dhk | 65 km/h | 11s +-1 | 11s +-1 |
|
| a | h | ad,dhk,dhk | 65 km/h | 11s +-1 | 11s +-1 |
|
||||||
# straight
|
# straight
|
||||||
| i | g | fim,fg,fg | 55 km/h | 13s +-1 | 13s +-1 |
|
| i | g | fim,fg,fg | 55 km/h | 13s +-1 | 13s +-1 |
|
||||||
# right
|
# right
|
||||||
| a | e | ad,def,def | 44 km/h | 16.3s +-1 | 16.3s +-1 |
|
| a | e | ad,def,def | 44 km/h | 16.3s +-1 | 16.3s +-1 |
|
||||||
# left
|
# left
|
||||||
| c | g | cd,def,fg | 65 km/h | 22s +-1 | 22s +-1 |
|
| c | g | cd,def,fg,fg | 65 km/h | 22s +-1 | 22s +-1 |
|
||||||
# double straight
|
# double straight
|
||||||
| p | g | mp,fim,fg,fg | 60 km/h | 24s +-1 | 24s +-1 |
|
| p | g | mp,fim,fg,fg | 60 km/h | 24s +-1 | 24s +-1 |
|
||||||
# straight-right
|
# straight-right
|
||||||
@@ -86,16 +87,15 @@ Feature: Traffic - turn penalties
|
|||||||
# hkl left turn
|
# hkl left turn
|
||||||
# ade left turn
|
# ade left turn
|
||||||
And the contract extra arguments "--turn-penalty-file {penalties_file}"
|
And the contract extra arguments "--turn-penalty-file {penalties_file}"
|
||||||
And the customize extra arguments "--turn-penalty-file {penalties_file}"
|
|
||||||
When I route I should get
|
When I route I should get
|
||||||
| from | to | route | speed | weight | time |
|
| from | to | route | speed | weight | time |
|
||||||
| a | h | ad,dhk | 65 km/h | 11 | 11s +-1 |
|
| a | h | ad,dhk,dhk | 65 km/h | 11 | 11s +-1 |
|
||||||
# straight
|
# straight
|
||||||
| i | g | fim,fg,fg | 56 km/h | 12.8 | 12s +-1 |
|
| i | g | fim,fg,fg | 56 km/h | 12.8 | 12s +-1 |
|
||||||
# right - ifg penalty
|
# right - ifg penalty
|
||||||
| a | e | ad,def,def | 67 km/h | 10.8 | 10s +-1 |
|
| a | e | ad,def,def | 67 km/h | 10.8 | 10s +-1 |
|
||||||
# left - faster because of negative ade penalty
|
# left - faster because of negative ade penalty
|
||||||
| c | g | cd,def,fg | 65 km/h | 22 | 22s +-1 |
|
| c | g | cd,def,fg,fg | 65 km/h | 22 | 22s +-1 |
|
||||||
# double straight
|
# double straight
|
||||||
| p | g | mp,fim,fg,fg | 61 km/h | 23.8 | 23s +-1 |
|
| p | g | mp,fim,fg,fg | 61 km/h | 23.8 | 23s +-1 |
|
||||||
# straight-right - ifg penalty
|
# straight-right - ifg penalty
|
||||||
@@ -105,13 +105,12 @@ Feature: Traffic - turn penalties
|
|||||||
# double right - forced left by lkh penalty
|
# double right - forced left by lkh penalty
|
||||||
| g | n | fg,fim,mn,mn | 28 km/h | 51.8 | 51s +-1 |
|
| g | n | fg,fim,mn,mn | 28 km/h | 51.8 | 51s +-1 |
|
||||||
# double left - imn penalty
|
# double left - imn penalty
|
||||||
| j | c | jk,klm,fim,def,cd | 53 km/h | 54.6 | 54s +-1 |
|
| j | c | jk,klm,fim,def,cd,cd | 53 km/h | 54.6 | 54s +-1 |
|
||||||
# double left - hdc penalty ever so slightly higher than imn; forces all the way around
|
# double left - hdc penalty ever so slightly higher than imn; forces all the way around
|
||||||
|
|
||||||
Scenario: Too-negative penalty clamps, but does not fail
|
Scenario: Too-negative penalty clamps, but does not fail
|
||||||
Given the profile "testbot"
|
Given the contract extra arguments "--turn-penalty-file {penalties_file}"
|
||||||
And the contract extra arguments "--turn-penalty-file {penalties_file}"
|
And the profile "testbot"
|
||||||
And the customize extra arguments "--turn-penalty-file {penalties_file}"
|
|
||||||
And the turn penalty file
|
And the turn penalty file
|
||||||
"""
|
"""
|
||||||
1,4,5,-10
|
1,4,5,-10
|
||||||
|
|||||||
@@ -51,8 +51,8 @@ Feature: Car - weights
|
|||||||
| cd | primary | yes |
|
| cd | primary | yes |
|
||||||
| be | service | yes |
|
| be | service | yes |
|
||||||
| ec | service | yes |
|
| ec | service | yes |
|
||||||
|
And the extract extra arguments "--generate-edge-lookup"
|
||||||
And the contract extra arguments "--segment-speed-file {speeds_file}"
|
And the contract extra arguments "--segment-speed-file {speeds_file}"
|
||||||
And the customize extra arguments "--segment-speed-file {speeds_file}"
|
|
||||||
And the speed file
|
And the speed file
|
||||||
"""
|
"""
|
||||||
2,5,8
|
2,5,8
|
||||||
@@ -61,28 +61,3 @@ Feature: Car - weights
|
|||||||
| from | to | route | speed | weight |
|
| from | to | route | speed | weight |
|
||||||
| a | d | ab,bc,cd,cd | 65 km/h | 44.4 |
|
| a | d | ab,bc,cd,cd | 65 km/h | 44.4 |
|
||||||
| a | e | ab,be,be | 14 km/h | 112 |
|
| a | e | ab,be,be | 14 km/h | 112 |
|
||||||
|
|
||||||
Scenario: Distance weights
|
|
||||||
Given the profile file "car" extended with
|
|
||||||
"""
|
|
||||||
api_version = 1
|
|
||||||
properties.weight_name = 'distance'
|
|
||||||
"""
|
|
||||||
|
|
||||||
Given the node map
|
|
||||||
"""
|
|
||||||
a---b---c
|
|
||||||
|
|
|
||||||
d
|
|
||||||
"""
|
|
||||||
|
|
||||||
And the ways
|
|
||||||
| nodes |
|
|
||||||
| abc |
|
|
||||||
| bd |
|
|
||||||
|
|
||||||
When I route I should get
|
|
||||||
| waypoints | bearings | route | distance | weights | times |
|
|
||||||
| a,b | 90 90 | abc,abc | 200m | 200,0 | 11.1s,0s |
|
|
||||||
| b,c | 90 90 | abc,abc | 200m | 200,0 | 11.1s,0s |
|
|
||||||
| a,d | 90 180 | abc,bd,bd | 399.9m | 200,200,0 | 13.2s,11.1s,0s |
|
|
||||||
|
|||||||
@@ -3,7 +3,6 @@ Feature: Foot - Squares and other areas
|
|||||||
|
|
||||||
Background:
|
Background:
|
||||||
Given the profile "foot"
|
Given the profile "foot"
|
||||||
Given a grid size of 200 meters
|
|
||||||
|
|
||||||
@square
|
@square
|
||||||
Scenario: Foot - Route along edge of a squares
|
Scenario: Foot - Route along edge of a squares
|
||||||
|
|||||||
@@ -3,7 +3,6 @@ Feature: Foot - Street names in instructions
|
|||||||
|
|
||||||
Background:
|
Background:
|
||||||
Given the profile "foot"
|
Given the profile "foot"
|
||||||
Given a grid size of 200 meters
|
|
||||||
|
|
||||||
Scenario: Foot - A named street
|
Scenario: Foot - A named street
|
||||||
Given the node map
|
Given the node map
|
||||||
|
|||||||
@@ -4,7 +4,6 @@ Feature: Foot - Turn restrictions
|
|||||||
|
|
||||||
Background:
|
Background:
|
||||||
Given the profile "foot"
|
Given the profile "foot"
|
||||||
Given a grid size of 200 meters
|
|
||||||
|
|
||||||
@no_turning
|
@no_turning
|
||||||
Scenario: Foot - No left turn
|
Scenario: Foot - No left turn
|
||||||
|
|||||||
@@ -297,19 +297,19 @@ Feature: Turn Lane Guidance
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
And the ways
|
And the ways
|
||||||
| nodes | turn:lanes:forward | name | destination | oneway |
|
| nodes | turn:lanes:forward | name |
|
||||||
| ab | | main | One | yes |
|
| ab | | main |
|
||||||
| bc | left\|through\|through\|through\|right | main | One | yes |
|
| bc | left\|through\|through\|through\|right | main |
|
||||||
| cd | left\|through\|right | main | Two | yes |
|
| cd | left\|through\|right | main |
|
||||||
| de | | main | Three | yes |
|
| de | | main |
|
||||||
| cf | | off | | yes |
|
| cf | | off |
|
||||||
| ch | | off | | yes |
|
| ch | | off |
|
||||||
| dg | | off | | yes |
|
| dg | | off |
|
||||||
| di | | off | | yes |
|
| di | | off |
|
||||||
|
|
||||||
When I route I should get
|
When I route I should get
|
||||||
| waypoints | route | turns | destinations | lanes | locations |
|
| waypoints | route | turns | lanes |
|
||||||
| a,e | main,main,main | depart,use lane straight,arrive | One,Two,Three | ,left:false straight:false straight:true straight:false right:false, | a,c,e |
|
| a,e | main,main,main | depart,use lane straight,arrive | ,left:false straight:false straight:true straight:false right:false, |
|
||||||
|
|
||||||
@anticipate
|
@anticipate
|
||||||
Scenario: Anticipate Lanes for through and collapse multiple use lanes
|
Scenario: Anticipate Lanes for through and collapse multiple use lanes
|
||||||
|
|||||||
@@ -33,8 +33,8 @@ Feature: Features related to bugs
|
|||||||
| e | traffic_signals |
|
| e | traffic_signals |
|
||||||
|
|
||||||
When I route I should get
|
When I route I should get
|
||||||
| waypoints | route | turns |
|
| waypoints | route | turns |
|
||||||
| 1,2 | top,right | depart,arrive |
|
| 1,2 | top,right,right | depart,new name right,arrive |
|
||||||
|
|
||||||
@3156
|
@3156
|
||||||
Scenario: Incorrect lanes tag
|
Scenario: Incorrect lanes tag
|
||||||
|
|||||||
@@ -9,10 +9,10 @@ Feature: Collapse
|
|||||||
Scenario: Collapse U-Turn Triangle Intersection
|
Scenario: Collapse U-Turn Triangle Intersection
|
||||||
Given the node map
|
Given the node map
|
||||||
"""
|
"""
|
||||||
g---f---e---d
|
g f e d
|
||||||
\ /
|
|
||||||
\ /
|
|
||||||
a-----b-----c
|
a b c
|
||||||
"""
|
"""
|
||||||
|
|
||||||
And the ways
|
And the ways
|
||||||
@@ -23,27 +23,27 @@ Feature: Collapse
|
|||||||
| be | primary_link | | yes |
|
| be | primary_link | | yes |
|
||||||
|
|
||||||
When I route I should get
|
When I route I should get
|
||||||
| waypoints | route | turns | locations |
|
| waypoints | route | turns |
|
||||||
| a,g | road,road,road | depart,continue uturn,arrive | a,b,g |
|
| a,g | road,road,road | depart,continue uturn,arrive |
|
||||||
| d,c | road,road,road | depart,continue uturn,arrive | d,f,c |
|
| d,c | road,road,road | depart,continue uturn,arrive |
|
||||||
|
|
||||||
@reverse @traffic-signals
|
@reverse @traffic-signals
|
||||||
Scenario: Collapse U-Turn Triangle Intersection
|
Scenario: Collapse U-Turn Triangle Intersection
|
||||||
Given the node map
|
Given the node map
|
||||||
"""
|
"""
|
||||||
g---f---j---e---d
|
g f j e d
|
||||||
\ /
|
|
||||||
h i
|
h i
|
||||||
\ /
|
|
||||||
a-------b-------c
|
a b c
|
||||||
"""
|
"""
|
||||||
|
|
||||||
And the ways
|
And the ways
|
||||||
| nodes | highway | name | oneway |
|
| nodes | highway | name | oneway |
|
||||||
| abc | primary | road | yes |
|
| abc | primary | road | yes |
|
||||||
| dejfg | primary | road | yes |
|
| dejfg | primary | road | yes |
|
||||||
| fhb | primary_link | | yes |
|
| fhb | primary_link | | |
|
||||||
| bie | primary_link | | yes |
|
| bie | primary_link | | |
|
||||||
|
|
||||||
And the nodes
|
And the nodes
|
||||||
| node | highway |
|
| node | highway |
|
||||||
@@ -52,9 +52,9 @@ Feature: Collapse
|
|||||||
| i | traffic_signals |
|
| i | traffic_signals |
|
||||||
|
|
||||||
When I route I should get
|
When I route I should get
|
||||||
| waypoints | route | turns | locations |
|
| waypoints | route | turns |
|
||||||
| a,g | road,road,road | depart,continue uturn,arrive | a,b,g |
|
| a,g | road,road,road | depart,continue uturn,arrive |
|
||||||
| d,c | road,road,road | depart,continue uturn,arrive | d,f,c |
|
| d,c | road,road,road | depart,continue uturn,arrive |
|
||||||
|
|
||||||
Scenario: Forking before a turn (forky)
|
Scenario: Forking before a turn (forky)
|
||||||
Given the node map
|
Given the node map
|
||||||
@@ -66,7 +66,7 @@ Feature: Collapse
|
|||||||
`d.
|
`d.
|
||||||
f e
|
f e
|
||||||
"""
|
"""
|
||||||
# note: check collapse.feature for a similar test case where we do not
|
# note: check clooapse.feature for a similar test case where we do not
|
||||||
# classify the situation as Sliproad and therefore keep the fork inst.
|
# classify the situation as Sliproad and therefore keep the fork inst.
|
||||||
|
|
||||||
And the ways
|
And the ways
|
||||||
@@ -85,65 +85,8 @@ Feature: Collapse
|
|||||||
| restriction | bc | dc | c | no_right_turn |
|
| restriction | bc | dc | c | no_right_turn |
|
||||||
|
|
||||||
When I route I should get
|
When I route I should get
|
||||||
| waypoints | route | turns | locations |
|
| waypoints | route | turns |
|
||||||
| a,g | road,cross,cross | depart,turn left,arrive | a,b,g |
|
| a,g | road,cross,cross | depart,turn left,arrive |
|
||||||
| a,e | road,road,road | depart,continue slight right,arrive | a,b,e |
|
| a,e | road,road,road | depart,continue right,arrive |
|
||||||
# We should discuss whether the next item should be collapsed to depart,turn 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 | a,b,d,f |
|
| a,f | road,road,cross,cross | depart,continue slight right,turn right,arrive |
|
||||||
|
|
||||||
Scenario: Forking before a turn (forky), larger
|
|
||||||
Given the node map
|
|
||||||
"""
|
|
||||||
g
|
|
||||||
.
|
|
||||||
c
|
|
||||||
.'|
|
|
||||||
.' |
|
|
||||||
a . . b .' |
|
|
||||||
' . |
|
|
||||||
` d
|
|
||||||
f ' e
|
|
||||||
"""
|
|
||||||
|
|
||||||
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 | locations |
|
|
||||||
| a,g | road,cross,cross | depart,turn left,arrive | a,b,g |
|
|
||||||
| a,e | road,road,road | depart,continue slight right,arrive | a,b,e |
|
|
||||||
# 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 | a,b,d,f |
|
|
||||||
|
|
||||||
Scenario: Pulled Back Turn
|
|
||||||
Given the node map
|
|
||||||
"""
|
|
||||||
d
|
|
||||||
|
|
|
||||||
a-b-c
|
|
||||||
|
|
|
||||||
e
|
|
||||||
"""
|
|
||||||
|
|
||||||
And the ways
|
|
||||||
| nodes | highway | name |
|
|
||||||
| abc | tertiary | road |
|
|
||||||
| cd | tertiary | left |
|
|
||||||
| be | tertiary | right |
|
|
||||||
|
|
||||||
When I route I should get
|
|
||||||
| waypoints | route | turns |
|
|
||||||
| a,d | road,left,left | depart,turn left,arrive |
|
|
||||||
| a,e | road,right,right | depart,turn right,arrive |
|
|
||||||
|
|||||||
+285
-304
@@ -32,23 +32,23 @@ Feature: Collapse
|
|||||||
| gb | primary | first | yes |
|
| gb | primary | first | yes |
|
||||||
|
|
||||||
When I route I should get
|
When I route I should get
|
||||||
| waypoints | route | turns | locations |
|
| waypoints | route | turns |
|
||||||
| a,l | first,second,second | depart,turn right,arrive | a,b,l |
|
| a,l | first,second,second | depart,turn right,arrive |
|
||||||
| a,d | first,first | depart,arrive | a,d |
|
| a,d | first,first | depart,arrive |
|
||||||
| a,j | first,second,second | depart,turn left,arrive | a,c,j |
|
| a,j | first,second,second | depart,turn left,arrive |
|
||||||
| a,h | first,first,first | depart,continue uturn,arrive | a,c,h |
|
| a,h | first,first,first | depart,continue uturn,arrive |
|
||||||
| e,j | first,second,second | depart,turn right,arrive | e,f,j |
|
| e,j | first,second,second | depart,turn right,arrive |
|
||||||
| e,h | first,first | depart,arrive | e,h |
|
| e,h | first,first | depart,arrive |
|
||||||
| e,l | first,second,second | depart,turn left,arrive | e,g,l |
|
| e,l | first,second,second | depart,turn left,arrive |
|
||||||
| e,d | first,first,first | depart,continue uturn,arrive | e,g,d |
|
| e,d | first,first,first | depart,continue uturn,arrive |
|
||||||
| k,h | second,first,first | depart,turn right,arrive | k,g,h |
|
| k,h | second,first,first | depart,turn right,arrive |
|
||||||
| k,l | second,second | depart,arrive | k,l |
|
| k,l | second,second | depart,arrive |
|
||||||
| k,d | second,first,first | depart,turn left,arrive | k,b,d |
|
| k,d | second,first,first | depart,turn left,arrive |
|
||||||
| k,j | second,second,second | depart,continue uturn,arrive | k,b,j |
|
| k,j | second,second,second | depart,continue uturn,arrive |
|
||||||
| i,d | second,first,first | depart,turn right,arrive | i,c,d |
|
| i,d | second,first,first | depart,turn right,arrive |
|
||||||
| i,j | second,second | depart,arrive | i,j |
|
| i,j | second,second | depart,arrive |
|
||||||
| i,h | second,first,first | depart,turn left,arrive | i,f,h |
|
| i,h | second,first,first | depart,turn left,arrive |
|
||||||
| i,l | second,second,second | depart,continue uturn,arrive | i,f,l |
|
| i,l | second,second,second | depart,continue uturn,arrive |
|
||||||
|
|
||||||
Scenario: Segregated Intersection, Cross Belonging to Correct Street
|
Scenario: Segregated Intersection, Cross Belonging to Correct Street
|
||||||
Given the node map
|
Given the node map
|
||||||
@@ -77,23 +77,23 @@ Feature: Collapse
|
|||||||
| gb | primary | second | yes |
|
| gb | primary | second | yes |
|
||||||
|
|
||||||
When I route I should get
|
When I route I should get
|
||||||
| waypoints | route | turns | locations |
|
| waypoints | route | turns |
|
||||||
| a,l | first,second,second | depart,turn right,arrive | a,b,l |
|
| a,l | first,second,second | depart,turn right,arrive |
|
||||||
| a,d | first,first | depart,arrive | a,d |
|
| a,d | first,first | depart,arrive |
|
||||||
| a,j | first,second,second | depart,turn left,arrive | a,c,j |
|
| a,j | first,second,second | depart,turn left,arrive |
|
||||||
| a,h | first,first,first | depart,continue uturn,arrive | a,c,h |
|
| a,h | first,first,first | depart,continue uturn,arrive |
|
||||||
| e,j | first,second,second | depart,turn right,arrive | e,f,j |
|
| e,j | first,second,second | depart,turn right,arrive |
|
||||||
| e,h | first,first | depart,arrive | e,h |
|
| e,h | first,first | depart,arrive |
|
||||||
| e,l | first,second,second | depart,turn left,arrive | e,g,l |
|
| e,l | first,second,second | depart,turn left,arrive |
|
||||||
| e,d | first,first,first | depart,continue uturn,arrive | e,g,d |
|
| e,d | first,first,first | depart,continue uturn,arrive |
|
||||||
| k,h | second,first,first | depart,turn right,arrive | k,g,h |
|
| k,h | second,first,first | depart,turn right,arrive |
|
||||||
| k,l | second,second | depart,arrive | k,l |
|
| k,l | second,second | depart,arrive |
|
||||||
| k,d | second,first,first | depart,turn left,arrive | k,b,d |
|
| k,d | second,first,first | depart,turn left,arrive |
|
||||||
| k,j | second,second,second | depart,continue uturn,arrive | k,b,j |
|
| k,j | second,second,second | depart,continue uturn,arrive |
|
||||||
| i,d | second,first,first | depart,turn right,arrive | i,c,d |
|
| i,d | second,first,first | depart,turn right,arrive |
|
||||||
| i,j | second,second | depart,arrive | i,j |
|
| i,j | second,second | depart,arrive |
|
||||||
| i,h | second,first,first | depart,turn left,arrive | i,f,h |
|
| i,h | second,first,first | depart,turn left,arrive |
|
||||||
| i,l | second,second,second | depart,continue uturn,arrive | i,f,l |
|
| i,l | second,second,second | depart,continue uturn,arrive |
|
||||||
|
|
||||||
Scenario: Segregated Intersection, Cross Belonging to Mixed Streets
|
Scenario: Segregated Intersection, Cross Belonging to Mixed Streets
|
||||||
Given the node map
|
Given the node map
|
||||||
@@ -122,23 +122,23 @@ Feature: Collapse
|
|||||||
| gb | primary | first | yes |
|
| gb | primary | first | yes |
|
||||||
|
|
||||||
When I route I should get
|
When I route I should get
|
||||||
| waypoints | route | turns | locations |
|
| waypoints | route | turns |
|
||||||
| a,l | first,second,second | depart,turn right,arrive | a,b,l |
|
| a,l | first,second,second | depart,turn right,arrive |
|
||||||
| a,d | first,first | depart,arrive | a,d |
|
| a,d | first,first | depart,arrive |
|
||||||
| a,j | first,second,second | depart,turn left,arrive | a,c,j |
|
| a,j | first,second,second | depart,turn left,arrive |
|
||||||
| a,h | first,first,first | depart,continue uturn,arrive | a,c,h |
|
| a,h | first,first,first | depart,continue uturn,arrive |
|
||||||
| e,j | first,second,second | depart,turn right,arrive | e,f,j |
|
| e,j | first,second,second | depart,turn right,arrive |
|
||||||
| e,h | first,first | depart,arrive | e,h |
|
| e,h | first,first | depart,arrive |
|
||||||
| e,l | first,second,second | depart,turn left,arrive | e,g,l |
|
| e,l | first,second,second | depart,turn left,arrive |
|
||||||
| e,d | first,first,first | depart,continue uturn,arrive | e,g,d |
|
| e,d | first,first,first | depart,continue uturn,arrive |
|
||||||
| k,h | second,first,first | depart,turn right,arrive | k,g,h |
|
| k,h | second,first,first | depart,turn right,arrive |
|
||||||
| k,l | second,second | depart,arrive | k,l |
|
| k,l | second,second | depart,arrive |
|
||||||
| k,d | second,first,first | depart,turn left,arrive | k,b,d |
|
| k,d | second,first,first | depart,turn left,arrive |
|
||||||
| k,j | second,second,second | depart,continue uturn,arrive | k,b,j |
|
| k,j | second,second,second | depart,continue uturn,arrive |
|
||||||
| i,d | second,first,first | depart,turn right,arrive | i,c,d |
|
| i,d | second,first,first | depart,turn right,arrive |
|
||||||
| i,j | second,second | depart,arrive | i,j |
|
| i,j | second,second | depart,arrive |
|
||||||
| i,h | second,first,first | depart,turn left,arrive | i,f,h |
|
| i,h | second,first,first | depart,turn left,arrive |
|
||||||
| i,l | second,second,second | depart,continue uturn,arrive | i,f,l |
|
| i,l | second,second,second | depart,continue uturn,arrive |
|
||||||
|
|
||||||
Scenario: Partly Segregated Intersection, Two Segregated Roads
|
Scenario: Partly Segregated Intersection, Two Segregated Roads
|
||||||
Given the node map
|
Given the node map
|
||||||
@@ -172,23 +172,23 @@ Feature: Collapse
|
|||||||
| liejk | primary | second | yes | 5 |
|
| liejk | primary | second | yes | 5 |
|
||||||
|
|
||||||
When I route I should get
|
When I route I should get
|
||||||
| waypoints | route | turns | locations |
|
| waypoints | route | turns |
|
||||||
| a,h | first,second,second | depart,turn right,arrive | a,b,h |
|
| a,h | first,second,second | depart,turn right,arrive |
|
||||||
| a,c | first,first | depart,arrive | a,c |
|
| a,c | first,first | depart,arrive |
|
||||||
| a,j | first,second,second | depart,turn left,arrive | a,b,j |
|
| a,j | first,second,second | depart,turn left,arrive |
|
||||||
| a,f | first,first,first | depart,continue uturn,arrive | a,b,f |
|
| a,f | first,first,first | depart,continue uturn,arrive |
|
||||||
| d,j | first,second,second | depart,turn right,arrive | d,e,j |
|
| d,j | first,second,second | depart,turn right,arrive |
|
||||||
| d,f | first,first | depart,arrive | d,f |
|
| d,f | first,first | depart,arrive |
|
||||||
| d,h | first,second,second | depart,turn left,arrive | d,e,h |
|
| d,h | first,second,second | depart,turn left,arrive |
|
||||||
| d,c | first,first,first | depart,continue uturn,arrive | d,e,c |
|
| d,c | first,first,first | depart,continue uturn,arrive |
|
||||||
| g,c | second,first,first | depart,turn right,arrive | g,b,c |
|
| g,c | second,first,first | depart,turn right,arrive |
|
||||||
| g,j | second,second | depart,arrive | g,j |
|
| g,j | second,second | depart,arrive |
|
||||||
| g,f | second,first,first | depart,turn left,arrive | g,e,f |
|
| g,f | second,first,first | depart,turn left,arrive |
|
||||||
| g,h | second,second,second | depart,continue uturn,arrive | g,b,h |
|
| g,h | second,second,second | depart,continue uturn,arrive |
|
||||||
| i,f | second,first,first | depart,turn right,arrive | i,e,f |
|
| i,f | second,first,first | depart,turn right,arrive |
|
||||||
| i,h | second,second | depart,arrive | i,h |
|
| i,h | second,second | depart,arrive |
|
||||||
| i,c | second,first,first | depart,turn left,arrive | i,b,c |
|
| i,c | second,first,first | depart,turn left,arrive |
|
||||||
| i,j | second,second,second | depart,continue uturn,arrive | i,e,j |
|
| i,j | second,second,second | depart,continue uturn,arrive |
|
||||||
|
|
||||||
Scenario: Partly Segregated Intersection, Two Segregated Roads, Intersection belongs to Second
|
Scenario: Partly Segregated Intersection, Two Segregated Roads, Intersection belongs to Second
|
||||||
Given the node map
|
Given the node map
|
||||||
@@ -226,23 +226,23 @@ Feature: Collapse
|
|||||||
| liejk | primary | second | yes | 5 |
|
| liejk | primary | second | yes | 5 |
|
||||||
|
|
||||||
When I route I should get
|
When I route I should get
|
||||||
| waypoints | route | turns | locations |
|
| waypoints | route | turns |
|
||||||
| a,h | first,second,second | depart,turn right,arrive | a,b,h |
|
| a,h | first,second,second | depart,turn right,arrive |
|
||||||
| a,c | first,first | depart,arrive | a,c |
|
| a,c | first,first | depart,arrive |
|
||||||
| a,j | first,second,second | depart,turn left,arrive | a,b,j |
|
| a,j | first,second,second | depart,turn left,arrive |
|
||||||
| a,f | first,first,first | depart,continue uturn,arrive | a,b,f |
|
| a,f | first,first,first | depart,continue uturn,arrive |
|
||||||
| d,j | first,second,second | depart,turn right,arrive | d,e,j |
|
| d,j | first,second,second | depart,turn right,arrive |
|
||||||
| d,f | first,first | depart,arrive | d,f |
|
| d,f | first,first | depart,arrive |
|
||||||
| d,h | first,second,second | depart,turn left,arrive | d,e,h |
|
| d,h | first,second,second | depart,turn left,arrive |
|
||||||
| d,c | first,first,first | depart,continue uturn,arrive | d,e,c |
|
| d,c | first,first,first | depart,continue uturn,arrive |
|
||||||
| g,c | second,first,first | depart,turn right,arrive | g,b,c |
|
| g,c | second,first,first | depart,turn right,arrive |
|
||||||
| g,j | second,second | depart,arrive | g,j |
|
| g,j | second,second | depart,arrive |
|
||||||
| g,f | second,first,first | depart,turn left,arrive | g,e,f |
|
| g,f | second,first,first | depart,turn left,arrive |
|
||||||
| g,h | second,second,second | depart,continue uturn,arrive | g,b,h |
|
| g,h | second,second,second | depart,continue uturn,arrive |
|
||||||
| i,f | second,first,first | depart,turn right,arrive | i,e,f |
|
| i,f | second,first,first | depart,turn right,arrive |
|
||||||
| i,h | second,second | depart,arrive | i,h |
|
| i,h | second,second | depart,arrive |
|
||||||
| i,c | second,first,first | depart,turn left,arrive | i,b,c |
|
| i,c | second,first,first | depart,turn left,arrive |
|
||||||
| i,j | second,second,second | depart,continue uturn,arrive | i,e,j |
|
| i,j | second,second,second | depart,continue uturn,arrive |
|
||||||
|
|
||||||
Scenario: Segregated Intersection, Cross Belonging to Mixed Streets - Slight Angles
|
Scenario: Segregated Intersection, Cross Belonging to Mixed Streets - Slight Angles
|
||||||
Given the node map
|
Given the node map
|
||||||
@@ -271,23 +271,23 @@ Feature: Collapse
|
|||||||
| gb | primary | first | yes |
|
| gb | primary | first | yes |
|
||||||
|
|
||||||
When I route I should get
|
When I route I should get
|
||||||
| waypoints | route | turns | locations |
|
| waypoints | route | turns |
|
||||||
| a,l | first,second,second | depart,turn right,arrive | a,b,l |
|
| a,l | first,second,second | depart,turn right,arrive |
|
||||||
| a,d | first,first | depart,arrive | a,d |
|
| a,d | first,first | depart,arrive |
|
||||||
| a,j | first,second,second | depart,turn left,arrive | a,c,j |
|
| a,j | first,second,second | depart,turn left,arrive |
|
||||||
| a,h | first,first,first | depart,continue uturn,arrive | a,c,h |
|
| a,h | first,first,first | depart,continue uturn,arrive |
|
||||||
| e,j | first,second,second | depart,turn right,arrive | e,f,j |
|
| e,j | first,second,second | depart,turn right,arrive |
|
||||||
| e,h | first,first | depart,arrive | e,h |
|
| e,h | first,first | depart,arrive |
|
||||||
| e,l | first,second,second | depart,turn left,arrive | e,g,l |
|
| e,l | first,second,second | depart,turn left,arrive |
|
||||||
| e,d | first,first,first | depart,continue uturn,arrive | e,g,d |
|
| e,d | first,first,first | depart,continue uturn,arrive |
|
||||||
| k,h | second,first,first | depart,turn right,arrive | k,g,h |
|
| k,h | second,first,first | depart,turn right,arrive |
|
||||||
| k,l | second,second | depart,arrive | k,l |
|
| k,l | second,second | depart,arrive |
|
||||||
| k,d | second,first,first | depart,turn left,arrive | k,b,d |
|
| k,d | second,first,first | depart,turn left,arrive |
|
||||||
| k,j | second,second,second | depart,continue uturn,arrive | k,b,j |
|
| k,j | second,second,second | depart,continue uturn,arrive |
|
||||||
| i,d | second,first,first | depart,turn right,arrive | i,c,d |
|
| i,d | second,first,first | depart,turn right,arrive |
|
||||||
| i,j | second,second | depart,arrive | i,j |
|
| i,j | second,second | depart,arrive |
|
||||||
| i,h | second,first,first | depart,turn left,arrive | i,f,h |
|
| i,h | second,first,first | depart,turn left,arrive |
|
||||||
| i,l | second,second,second | depart,continue uturn,arrive | i,f,l |
|
| i,l | second,second,second | depart,continue uturn,arrive |
|
||||||
|
|
||||||
Scenario: Segregated Intersection, Cross Belonging to Mixed Streets - Slight Angles (2)
|
Scenario: Segregated Intersection, Cross Belonging to Mixed Streets - Slight Angles (2)
|
||||||
Given the node map
|
Given the node map
|
||||||
@@ -316,23 +316,23 @@ Feature: Collapse
|
|||||||
| gb | primary | first | yes |
|
| gb | primary | first | yes |
|
||||||
|
|
||||||
When I route I should get
|
When I route I should get
|
||||||
| waypoints | route | turns | locations |
|
| waypoints | route | turns |
|
||||||
| a,l | first,second,second | depart,turn right,arrive | a,b,l |
|
| a,l | first,second,second | depart,turn right,arrive |
|
||||||
| a,d | first,first | depart,arrive | a,d |
|
| a,d | first,first | depart,arrive |
|
||||||
| a,j | first,second,second | depart,turn left,arrive | a,c,j |
|
| a,j | first,second,second | depart,turn left,arrive |
|
||||||
| a,h | first,first,first | depart,continue uturn,arrive | a,c,h |
|
| a,h | first,first,first | depart,continue uturn,arrive |
|
||||||
| e,j | first,second,second | depart,turn right,arrive | e,f,j |
|
| e,j | first,second,second | depart,turn right,arrive |
|
||||||
| e,h | first,first | depart,arrive | e,h |
|
| e,h | first,first | depart,arrive |
|
||||||
| e,l | first,second,second | depart,turn left,arrive | e,g,l |
|
| e,l | first,second,second | depart,turn left,arrive |
|
||||||
| e,d | first,first,first | depart,continue uturn,arrive | e,g,d |
|
| e,d | first,first,first | depart,continue uturn,arrive |
|
||||||
| k,h | second,first,first | depart,turn right,arrive | k,g,h |
|
| k,h | second,first,first | depart,turn right,arrive |
|
||||||
| k,l | second,second | depart,arrive | k,l |
|
| k,l | second,second | depart,arrive |
|
||||||
| k,d | second,first,first | depart,turn left,arrive | k,b,d |
|
| k,d | second,first,first | depart,turn left,arrive |
|
||||||
| k,j | second,second,second | depart,continue uturn,arrive | k,b,j |
|
| k,j | second,second,second | depart,continue uturn,arrive |
|
||||||
| i,d | second,first,first | depart,turn right,arrive | i,c,d |
|
| i,d | second,first,first | depart,turn right,arrive |
|
||||||
| i,j | second,second | depart,arrive | i,j |
|
| i,j | second,second | depart,arrive |
|
||||||
| i,h | second,first,first | depart,turn left,arrive | i,f,h |
|
| i,h | second,first,first | depart,turn left,arrive |
|
||||||
| i,l | second,second,second | depart,continue uturn,arrive | i,f,l |
|
| i,l | second,second,second | depart,continue uturn,arrive |
|
||||||
|
|
||||||
Scenario: Entering a segregated road
|
Scenario: Entering a segregated road
|
||||||
Given the node map
|
Given the node map
|
||||||
@@ -353,20 +353,20 @@ Feature: Collapse
|
|||||||
| ge | primary | second | no |
|
| ge | primary | second | no |
|
||||||
|
|
||||||
When I route I should get
|
When I route I should get
|
||||||
| waypoints | route | turns | locations |
|
| waypoints | route | turns |
|
||||||
| d,c | first,first,first | depart,continue uturn,arrive | d,e,c |
|
| d,c | first,first,first | depart,continue uturn,arrive |
|
||||||
| a,f | first,first,first | depart,continue uturn,arrive | a,b,f |
|
| a,f | first,first,first | depart,continue uturn,arrive |
|
||||||
| a,g | first,second,second | depart,turn left,arrive | a,b,g |
|
| a,g | first,second,second | depart,turn left,arrive |
|
||||||
| d,g | first,second,second | depart,turn right,arrive | d,e,g |
|
| d,g | first,second,second | depart,turn right,arrive |
|
||||||
| g,f | second,first,first | depart,turn right,arrive | g,e,f |
|
| g,f | second,first,first | depart,turn right,arrive |
|
||||||
| g,c | second,first,first | depart,end of road left,arrive | g,b,c |
|
| g,c | second,first,first | depart,end of road left,arrive |
|
||||||
|
|
||||||
Scenario: Do not collapse turning roads
|
Scenario: Do not collapse turning roads
|
||||||
Given the node map
|
Given the node map
|
||||||
"""
|
"""
|
||||||
e
|
e
|
||||||
c---d
|
c d
|
||||||
a---b-f
|
a b f
|
||||||
"""
|
"""
|
||||||
|
|
||||||
And the ways
|
And the ways
|
||||||
@@ -378,10 +378,10 @@ Feature: Collapse
|
|||||||
| bf | primary | third | yes |
|
| bf | primary | third | yes |
|
||||||
|
|
||||||
When I route I should get
|
When I route I should get
|
||||||
| waypoints | route | turns | locations |
|
| waypoints | route | turns |
|
||||||
| a,d | first,first,first,first | depart,continue left,continue right,arrive | a,b,c,d |
|
| a,d | first,first,first,first | depart,continue left,continue right,arrive |
|
||||||
| a,e | first,second,second | depart,turn left,arrive | a,b,e |
|
| a,e | first,second,second | depart,turn left,arrive |
|
||||||
| a,f | first,third,third | depart,turn straight,arrive | a,b,f |
|
| a,f | first,third,third | depart,turn straight,arrive |
|
||||||
|
|
||||||
Scenario: Bridge on unnamed road
|
Scenario: Bridge on unnamed road
|
||||||
Given the node map
|
Given the node map
|
||||||
@@ -399,14 +399,12 @@ Feature: Collapse
|
|||||||
| waypoints | route | turns |
|
| waypoints | route | turns |
|
||||||
| a,d | , | depart,arrive |
|
| a,d | , | depart,arrive |
|
||||||
|
|
||||||
# This scenario could be considered to require a `turn left`. The danger to create random/unwanted instructions
|
Scenario: Crossing Bridge into Segregated Turn
|
||||||
# from a setting like this are just to big, though. Therefore I opted to use `depart,arrive` only
|
|
||||||
Scenario: Crossing Bridge into Segregated Turn
|
|
||||||
Given the node map
|
Given the node map
|
||||||
"""
|
"""
|
||||||
f
|
f
|
||||||
i-h-----g-e
|
i h g e
|
||||||
a-b-----c-d
|
a b c d
|
||||||
"""
|
"""
|
||||||
|
|
||||||
And the ways
|
And the ways
|
||||||
@@ -421,8 +419,8 @@ Feature: Collapse
|
|||||||
| hi | primary | yes | to_bridge |
|
| hi | primary | yes | to_bridge |
|
||||||
|
|
||||||
When I route I should get
|
When I route I should get
|
||||||
| waypoints | route | turns | locations |
|
| waypoints | route | turns |
|
||||||
| a,f | to_bridge,target_road | depart,arrive | a,f |
|
| a,f | to_bridge,target_road,target_road | depart,turn left,arrive |
|
||||||
|
|
||||||
Scenario: Pankenbruecke
|
Scenario: Pankenbruecke
|
||||||
Given the node map
|
Given the node map
|
||||||
@@ -440,12 +438,8 @@ Feature: Collapse
|
|||||||
|
|
|
|
||||||
|
|
|
|
||||||
|
|
|
|
||||||
|
|
|
||||||
|
|
|
||||||
|
|
|
||||||
g
|
g
|
||||||
"""
|
"""
|
||||||
|
|
||||||
And the ways
|
And the ways
|
||||||
| nodes | highway | name | oneway | lanes |
|
| nodes | highway | name | oneway | lanes |
|
||||||
| kabhj | primary | inroad | yes | 4 |
|
| kabhj | primary | inroad | yes | 4 |
|
||||||
@@ -455,17 +449,17 @@ Feature: Collapse
|
|||||||
| fi | primary | cross | no | |
|
| fi | primary | cross | no | |
|
||||||
|
|
||||||
When I route I should get
|
When I route I should get
|
||||||
| waypoints | route | turns | locations |
|
| waypoints | route | turns |
|
||||||
| a,g | inroad,outroad,outroad | depart,new name straight,arrive | a,d,g |
|
| a,g | inroad,outroad,outroad | depart,new name straight,arrive |
|
||||||
| a,i | inroad,cross,cross | depart,turn left,arrive | a,f,i |
|
| a,i | inroad,cross,cross | depart,turn left,arrive |
|
||||||
|
|
||||||
Scenario: Close Turns - Don't Collapse
|
Scenario: Close Turns - Don't Collapse
|
||||||
Given the node map
|
Given the node map
|
||||||
"""
|
"""
|
||||||
g d
|
g d
|
||||||
| |
|
|
||||||
e-b-c-f
|
e b c f
|
||||||
| |
|
|
||||||
a h
|
a h
|
||||||
"""
|
"""
|
||||||
|
|
||||||
@@ -478,10 +472,10 @@ Feature: Collapse
|
|||||||
| ch | primary | reverse |
|
| ch | primary | reverse |
|
||||||
|
|
||||||
When I route I should get
|
When I route I should get
|
||||||
| waypoints | route | turns | locations |
|
| waypoints | route | turns |
|
||||||
| a,d | in,cross,out,out | depart,turn right,turn left,arrive | a,b,c,d |
|
| a,d | in,cross,out,out | depart,turn right,turn left,arrive |
|
||||||
| a,h | in,cross,reverse,reverse | depart,turn right,turn right,arrive | a,b,c,h |
|
| a,h | in,cross,reverse,reverse | depart,turn right,turn right,arrive |
|
||||||
| g,d | straight,cross,out,out | depart,turn left,turn left,arrive | g,b,c,d |
|
| g,d | straight,cross,out,out | depart,turn left,turn left,arrive |
|
||||||
|
|
||||||
Scenario: No Name During Turns
|
Scenario: No Name During Turns
|
||||||
Given the node map
|
Given the node map
|
||||||
@@ -534,6 +528,25 @@ Feature: Collapse
|
|||||||
| waypoints | route | turns |
|
| waypoints | route | turns |
|
||||||
| a,d | road,road | depart,arrive |
|
| a,d | road,road | depart,arrive |
|
||||||
|
|
||||||
|
Scenario: Pulled Back Turn
|
||||||
|
Given the node map
|
||||||
|
"""
|
||||||
|
d
|
||||||
|
a b c
|
||||||
|
e
|
||||||
|
"""
|
||||||
|
|
||||||
|
And the ways
|
||||||
|
| nodes | highway | name |
|
||||||
|
| abc | tertiary | road |
|
||||||
|
| cd | tertiary | left |
|
||||||
|
| be | tertiary | right |
|
||||||
|
|
||||||
|
When I route I should get
|
||||||
|
| waypoints | route | turns |
|
||||||
|
| a,d | road,left,left | depart,turn left,arrive |
|
||||||
|
| a,e | road,right,right | depart,turn right,arrive |
|
||||||
|
|
||||||
Scenario: No Name During Turns, keep important turns
|
Scenario: No Name During Turns, keep important turns
|
||||||
Given the node map
|
Given the node map
|
||||||
"""
|
"""
|
||||||
@@ -556,15 +569,15 @@ Feature: Collapse
|
|||||||
Given the node map
|
Given the node map
|
||||||
"""
|
"""
|
||||||
h
|
h
|
||||||
a .
|
a
|
||||||
..
|
|
||||||
.g
|
g
|
||||||
b f
|
b f
|
||||||
| c .
|
c
|
||||||
| | . ,
|
|
||||||
| | . .
|
|
||||||
| | . e
|
e
|
||||||
| | d
|
d
|
||||||
j i
|
j i
|
||||||
"""
|
"""
|
||||||
|
|
||||||
@@ -576,27 +589,27 @@ Feature: Collapse
|
|||||||
| gbj | secondary | out | yes |
|
| gbj | secondary | out | yes |
|
||||||
|
|
||||||
When I route I should get
|
When I route I should get
|
||||||
| waypoints | route | turns | locations |
|
| waypoints | route | turns |
|
||||||
| i,h | in,road,road | depart,turn left,arrive | i,f,h |
|
| i,h | in,road,road | depart,turn left,arrive |
|
||||||
| a,d | road,road | depart,arrive | a,d |
|
| a,d | road,road | depart,arrive |
|
||||||
| a,j | road,out,out | depart,turn slight right,arrive | a,b,j |
|
| a,j | road,out,out | depart,turn slight right,arrive |
|
||||||
|
|
||||||
Scenario: Segregated Intersection into Very Slight Turn
|
Scenario: Segregated Intersection into Very Slight Turn
|
||||||
Given the node map
|
Given the node map
|
||||||
"""
|
"""
|
||||||
h
|
h
|
||||||
a.
|
a
|
||||||
.,
|
|
||||||
..
|
|
||||||
.g
|
g
|
||||||
b.
|
b
|
||||||
| f
|
f
|
||||||
| c .
|
c
|
||||||
| |. .
|
|
||||||
| | . .
|
|
||||||
| | . .
|
|
||||||
| | . e
|
e
|
||||||
| | d
|
d
|
||||||
j i
|
j i
|
||||||
"""
|
"""
|
||||||
|
|
||||||
@@ -608,17 +621,17 @@ Feature: Collapse
|
|||||||
| gbj | secondary | out | yes |
|
| gbj | secondary | out | yes |
|
||||||
|
|
||||||
When I route I should get
|
When I route I should get
|
||||||
| waypoints | route | turns | locations |
|
| waypoints | route | turns |
|
||||||
| i,h | in,road,road | depart,turn slight left,arrive | i,f,h |
|
| i,h | in,road,road | depart,turn slight left,arrive |
|
||||||
| a,d | road,road | depart,arrive | a,d |
|
| a,d | road,road | depart,arrive |
|
||||||
| a,j | road,out,out | depart,turn slight right,arrive | a,b,j |
|
| a,j | road,out,out | depart,turn slight right,arrive |
|
||||||
|
|
||||||
Scenario: Don't collapse everything to u-turn / too wide
|
Scenario: Don't collapse everything to u-turn / too wide
|
||||||
Given the node map
|
Given the node map
|
||||||
"""
|
"""
|
||||||
a---b---e
|
a b e
|
||||||
|
|
|
||||||
d---c---f
|
d c f
|
||||||
"""
|
"""
|
||||||
|
|
||||||
And the ways
|
And the ways
|
||||||
@@ -628,18 +641,18 @@ Feature: Collapse
|
|||||||
| cf | secondary | bottom |
|
| cf | secondary | bottom |
|
||||||
|
|
||||||
When I route I should get
|
When I route I should get
|
||||||
| waypoints | turns | route | locations |
|
| waypoints | turns | route |
|
||||||
| a,d | depart,continue right,turn right,arrive | road,road,road,road | a,b,c,d |
|
| a,d | depart,continue right,turn right,arrive | road,road,road,road |
|
||||||
| d,a | depart,continue left,turn left,arrive | road,road,road,road | d,c,b,a |
|
| d,a | depart,continue left,turn left,arrive | road,road,road,road |
|
||||||
|
|
||||||
Scenario: Forking before a turn
|
Scenario: Forking before a turn
|
||||||
Given the node map
|
Given the node map
|
||||||
"""
|
"""
|
||||||
g
|
g
|
||||||
|
|
|
||||||
.c
|
c
|
||||||
a---b-d-e
|
a b d e
|
||||||
|
|
|
||||||
f
|
f
|
||||||
"""
|
"""
|
||||||
|
|
||||||
@@ -659,18 +672,18 @@ Feature: Collapse
|
|||||||
| restriction | bc | dc | c | no_right_turn |
|
| restriction | bc | dc | c | no_right_turn |
|
||||||
|
|
||||||
When I route I should get
|
When I route I should get
|
||||||
| waypoints | route | turns | locations |
|
| waypoints | route | turns |
|
||||||
| a,g | road,cross,cross | depart,turn left,arrive | a,b,g |
|
| a,g | road,cross,cross | depart,turn left,arrive |
|
||||||
| a,e | road,road | depart,arrive | a,e |
|
| a,e | road,road | depart,arrive |
|
||||||
|
|
||||||
Scenario: Forking before a turn (narrow)
|
Scenario: Forking before a turn (narrow)
|
||||||
Given the node map
|
Given the node map
|
||||||
"""
|
"""
|
||||||
g
|
g
|
||||||
|
|
|
||||||
..c
|
c
|
||||||
a-b---d-e
|
a b d e
|
||||||
|
|
|
||||||
f
|
f
|
||||||
"""
|
"""
|
||||||
|
|
||||||
@@ -690,9 +703,44 @@ Feature: Collapse
|
|||||||
| restriction | bc | dc | c | no_right_turn |
|
| restriction | bc | dc | c | no_right_turn |
|
||||||
|
|
||||||
When I route I should get
|
When I route I should get
|
||||||
| waypoints | route | turns | locations |
|
| waypoints | route | turns |
|
||||||
| a,g | road,cross,cross | depart,turn left,arrive | a,b,g |
|
| a,g | road,cross,cross | depart,turn left,arrive |
|
||||||
| a,e | road,road | depart,arrive | a,e |
|
| a,e | road,road | depart,arrive |
|
||||||
|
|
||||||
|
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.
|
||||||
|
|
||||||
|
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,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 |
|
||||||
|
|
||||||
Scenario: On-Off on Highway
|
Scenario: On-Off on Highway
|
||||||
Given the node map
|
Given the node map
|
||||||
@@ -709,11 +757,11 @@ Feature: Collapse
|
|||||||
| ce | off | motorway_link | yes |
|
| ce | off | motorway_link | yes |
|
||||||
|
|
||||||
When I route I should get
|
When I route I should get
|
||||||
| waypoints | route | turns | locations |
|
| waypoints | route | turns |
|
||||||
| a,d | Hwy,Hwy | depart,arrive | a,d |
|
| a,d | Hwy,Hwy | depart,arrive |
|
||||||
| f,d | on,Hwy,Hwy | depart,merge slight right,arrive | f,b,d |
|
| f,d | on,Hwy,Hwy | depart,merge slight right,arrive |
|
||||||
| f,e | on,Hwy,off,off | depart,merge slight right,off ramp right,arrive | f,b,c,e |
|
| f,e | on,Hwy,off,off | depart,merge slight right,off ramp right,arrive |
|
||||||
| a,e | Hwy,off,off | depart,off ramp right,arrive | a,c,e |
|
| a,e | Hwy,off,off | depart,off ramp right,arrive |
|
||||||
|
|
||||||
@negative @straight
|
@negative @straight
|
||||||
Scenario: Don't collapse going straight if actual turn
|
Scenario: Don't collapse going straight if actual turn
|
||||||
@@ -760,8 +808,8 @@ Feature: Collapse
|
|||||||
| ge | primary | second | no |
|
| ge | primary | second | no |
|
||||||
|
|
||||||
When I route I should get
|
When I route I should get
|
||||||
| waypoints | route | turns | locations |
|
| waypoints | route | turns |
|
||||||
| d,c | first,first,first | depart,continue uturn,arrive | d,e,c |
|
| d,c | first,first,first | depart,continue uturn,arrive |
|
||||||
|
|
||||||
Scenario: Entering a segregated road slight turn
|
Scenario: Entering a segregated road slight turn
|
||||||
Given the node map
|
Given the node map
|
||||||
@@ -782,8 +830,8 @@ Feature: Collapse
|
|||||||
| ge | primary | second | no |
|
| ge | primary | second | no |
|
||||||
|
|
||||||
When I route I should get
|
When I route I should get
|
||||||
| waypoints | route | turns | locations |
|
| waypoints | route | turns |
|
||||||
| d,c | first,first,first | depart,continue uturn,arrive | d,e,c |
|
| d,c | first,first,first | depart,continue uturn,arrive |
|
||||||
|
|
||||||
Scenario: Do not collapse UseLane step when lanes change
|
Scenario: Do not collapse UseLane step when lanes change
|
||||||
Given the node map
|
Given the node map
|
||||||
@@ -807,8 +855,8 @@ Feature: Collapse
|
|||||||
| di | | off |
|
| di | | off |
|
||||||
|
|
||||||
When I route I should get
|
When I route I should get
|
||||||
| waypoints | route | turns | locations |
|
| waypoints | route | turns |
|
||||||
| a,e | main,main,main | depart,use lane straight,arrive | a,c,e |
|
| a,e | main,main,main | depart,use lane straight,arrive |
|
||||||
|
|
||||||
Scenario: But _do_ collapse UseLane step when lanes stay the same
|
Scenario: But _do_ collapse UseLane step when lanes stay the same
|
||||||
Given the node map
|
Given the node map
|
||||||
@@ -864,10 +912,10 @@ Feature: Collapse
|
|||||||
Given the node map
|
Given the node map
|
||||||
"""
|
"""
|
||||||
i
|
i
|
||||||
j e ~ ~ ~ ~ d c h
|
j e d c h
|
||||||
|
|
|
||||||
|
|
|
||||||
k g ~ ~ ~ ~ a b f
|
k g a b f
|
||||||
"""
|
"""
|
||||||
|
|
||||||
And the ways
|
And the ways
|
||||||
@@ -882,8 +930,8 @@ Feature: Collapse
|
|||||||
| ej | primary | | off | yes |
|
| ej | primary | | off | yes |
|
||||||
|
|
||||||
When I route I should get
|
When I route I should get
|
||||||
| waypoints | route | turns | locations |
|
| waypoints | route | turns |
|
||||||
| k,j | on,ferry,road,road,ferry,off,off | depart,notification straight,notification straight,continue uturn,turn straight,notification straight,arrive | k,g,a,b,d,e,j |
|
| 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
|
# http://www.openstreetmap.org/#map=19/37.78090/-122.41251
|
||||||
Scenario: U-Turn onto unnamed-road
|
Scenario: U-Turn onto unnamed-road
|
||||||
@@ -906,8 +954,8 @@ Feature: Collapse
|
|||||||
| ef | secondary | | down | yes |
|
| ef | secondary | | down | yes |
|
||||||
|
|
||||||
When I route I should get
|
When I route I should get
|
||||||
| waypoints | route | turns | locations |
|
| waypoints | route | turns |
|
||||||
| a,1 | up,turn,, | depart,turn right,turn sharp right,arrive | a,b,e,_ |
|
| a,1 | up,turn,, | depart,turn right,turn sharp right,arrive |
|
||||||
|
|
||||||
#http://www.openstreetmap.org/#map=19/52.48778/13.30024
|
#http://www.openstreetmap.org/#map=19/52.48778/13.30024
|
||||||
Scenario: Hohenzollerdammbrücke
|
Scenario: Hohenzollerdammbrücke
|
||||||
@@ -959,21 +1007,23 @@ Feature: Collapse
|
|||||||
| os | motorway_link | a100 | yes |
|
| os | motorway_link | a100 | yes |
|
||||||
|
|
||||||
And the relations
|
And the relations
|
||||||
| type | way:from | way:to | node:via | restriction |
|
| type | way:from | way:to | node:via | restriction |
|
||||||
| restriction | ck | ki | k | only_straight_on |
|
| restriction | ck | kh | k | no_right_turn |
|
||||||
| restriction | bk | kh | k | only_straight_on |
|
| restriction | bk | ki | k | no_left_turn |
|
||||||
| restriction | hl | ld | l | only_straight_on |
|
| restriction | hl | lc | l | no_right_turn |
|
||||||
| restriction | gl | lc | l | only_straight_on |
|
| restriction | gl | ld | l | no_left_turn |
|
||||||
| restriction | bc | cm | c | no_right_turn |
|
| restriction | bc | cm | c | no_right_turn |
|
||||||
| restriction | bc | ck | c | no_left_turn |
|
| restriction | bc | ck | c | no_left_turn |
|
||||||
| restriction | nc | cm | c | no_left_turn |
|
| restriction | nc | cm | c | no_left_turn |
|
||||||
| restriction | nc | cd | c | no_right_turn |
|
| restriction | nc | cd | c | no_right_turn |
|
||||||
| restriction | lc | cm | c | only_straight_on |
|
| restriction | lc | ck | c | no_left_turn |
|
||||||
| restriction | gh | ho | h | no_right_turn |
|
| restriction | lc | cd | c | no_right_turn |
|
||||||
| restriction | gh | hl | h | no_left_turn |
|
| restriction | gh | ho | h | no_right_turn |
|
||||||
| restriction | kh | ho | h | only_straight_on |
|
| restriction | gh | hl | h | no_left_turn |
|
||||||
| restriction | ph | ho | h | no_left_turn |
|
| restriction | kh | hi | h | no_left_turn |
|
||||||
| restriction | ph | hi | h | no_right_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
|
When I route I should get
|
||||||
| waypoints | route | turns | locations |
|
| waypoints | route | turns | locations |
|
||||||
@@ -986,72 +1036,3 @@ Feature: Collapse
|
|||||||
| f,e | | | |
|
| f,e | | | |
|
||||||
| q,j | a100,hohe,hohe | depart,turn right,arrive | q,p,j |
|
| q,j | a100,hohe,hohe | depart,turn right,arrive | q,p,j |
|
||||||
| q,e | a100,hohebruecke,hohe | depart,turn left,arrive | q,p,e |
|
| q,e | a100,hohebruecke,hohe | depart,turn left,arrive | q,p,e |
|
||||||
|
|
||||||
Scenario: Forking before a turn (forky)
|
|
||||||
Given the node map
|
|
||||||
"""
|
|
||||||
g
|
|
||||||
.
|
|
||||||
c
|
|
||||||
a . . b .'
|
|
||||||
` d.
|
|
||||||
f e
|
|
||||||
"""
|
|
||||||
#Check collapse.detail for a similar case (shorter) that does not classify these turns as a sliproad anymore
|
|
||||||
|
|
||||||
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 | locations |
|
|
||||||
| a,g | road,cross,cross | depart,fork left,arrive | a,b,g |
|
|
||||||
| a,e | road,road,road | depart,fork slight right,arrive | a,b,e |
|
|
||||||
| a,f | road,road,cross,cross | depart,fork slight right,turn right,arrive | a,b,d,f |
|
|
||||||
|
|
||||||
|
|
||||||
# http://www.openstreetmap.org/way/92415447 #3933
|
|
||||||
Scenario: Use total angle for turn instruction if entry step has large distance
|
|
||||||
# """
|
|
||||||
# kf-_ a
|
|
||||||
# | - b
|
|
||||||
# | c
|
|
||||||
# |d
|
|
||||||
# e
|
|
||||||
# |
|
|
||||||
# i
|
|
||||||
# """
|
|
||||||
|
|
||||||
And the node locations
|
|
||||||
| node | lat | lon | #id |
|
|
||||||
| a | -33.9644254 | 151.1378673 | 33226063 |
|
|
||||||
| b | -33.9644373 | 151.1377172 | 1072787030 |
|
|
||||||
| c | -33.9644791 | 151.1374452 | 4222903609 |
|
|
||||||
| d | -33.9645661 | 151.1372654 | 4222903610 |
|
|
||||||
| e | -33.9646986 | 151.1371539 | 4222903611 |
|
|
||||||
| f | -33.964386 | 151.1372133 | 1072786875 |
|
|
||||||
| i | -33.9661796 | 151.1368491 | 2781176918 |
|
|
||||||
| k | -33.9643781 | 151.1371422 | 1684173853 |
|
|
||||||
|
|
||||||
And the ways
|
|
||||||
| nodes | highway | name | oneway | #id |
|
|
||||||
| ab | trunk | President Avenue | yes | 92415447 |
|
|
||||||
| bcde | trunk | President Avenue | yes | 422534457 |
|
|
||||||
| bf | trunk | President Avenue | yes | 447779786 |
|
|
||||||
| fk | trunk | President Avenue | yes | 179293012 |
|
|
||||||
| fei | trunk | Princes Highway | yes | 130099670 |
|
|
||||||
|
|
||||||
When I route I should get
|
|
||||||
| waypoints | route | turns | locations |
|
|
||||||
| a,i | President Avenue,Princes Highway,Princes Highway | depart,turn left,arrive | a,b,i |
|
|
||||||
|
|||||||
@@ -21,22 +21,20 @@ Feature: Slipways and Dedicated Turn Lanes
|
|||||||
|
|
||||||
And the ways
|
And the ways
|
||||||
| nodes | highway | name | oneway |
|
| nodes | highway | name | oneway |
|
||||||
| ab | trunk | first | |
|
| abc | trunk | first | |
|
||||||
| bc | trunk | first | |
|
|
||||||
| cd | trunk | first | |
|
| cd | trunk | first | |
|
||||||
| bhf | trunk_link | | yes |
|
| bhf | trunk_link | | yes |
|
||||||
| cf | primary | second | yes |
|
| cfg | primary | second | yes |
|
||||||
| fg | primary | second | yes |
|
| ec | primary | second | |
|
||||||
| ec | primary | second | no |
|
|
||||||
|
|
||||||
And the relations
|
And the relations
|
||||||
| type | way:from | way:to | node:via | restriction |
|
| type | way:from | way:to | node:via | restriction |
|
||||||
| restriction | bc | cf | c | no_right_turn |
|
| restriction | abc | cfg | c | no_right_turn |
|
||||||
|
|
||||||
When I route I should get
|
When I route I should get
|
||||||
| waypoints | route | turns | locations |
|
| waypoints | route | turns |
|
||||||
| a,g | first,second,second | depart,turn right,arrive | a,b,g |
|
| a,g | first,second,second | depart,turn right,arrive |
|
||||||
| a,1 | first,, | depart,turn right,arrive | a,b,_ |
|
| a,1 | first,, | depart,turn right,arrive |
|
||||||
|
|
||||||
Scenario: Turn Instead of Ramp
|
Scenario: Turn Instead of Ramp
|
||||||
Given the node map
|
Given the node map
|
||||||
@@ -64,10 +62,9 @@ Feature: Slipways and Dedicated Turn Lanes
|
|||||||
| type | way:from | way:to | node:via | restriction |
|
| type | way:from | way:to | node:via | restriction |
|
||||||
| restriction | abc | cfg | c | no_right_turn |
|
| restriction | abc | cfg | c | no_right_turn |
|
||||||
|
|
||||||
#this is very ugly :(, but we don't have a way to overrule ramps right now, also: this tagging sucks
|
When I route I should get
|
||||||
When I route I should get
|
| waypoints | route | turns |
|
||||||
| waypoints | route | turns |
|
| a,g | first,,second,second | depart,turn right,turn straight,arrive |
|
||||||
| a,g | first,,second,second | depart,off ramp right,turn straight,arrive |
|
|
||||||
|
|
||||||
Scenario: Turning Sliproad onto a ferry
|
Scenario: Turning Sliproad onto a ferry
|
||||||
Given the node map
|
Given the node map
|
||||||
@@ -100,9 +97,9 @@ Feature: Slipways and Dedicated Turn Lanes
|
|||||||
| restriction | abc | cf | c | no_right_turn |
|
| restriction | abc | cf | c | no_right_turn |
|
||||||
|
|
||||||
When I route I should get
|
When I route I should get
|
||||||
| waypoints | route | turns |
|
| waypoints | route | turns |
|
||||||
| a,i | first,,second,second,second | depart,off ramp right,turn straight,notification straight,arrive |
|
| a,i | first,,second,second,second | depart,turn right,turn straight,notification straight,arrive |
|
||||||
| a,1 | first,, | depart,off ramp right,arrive |
|
| a,1 | first,, | depart,turn right,arrive |
|
||||||
|
|
||||||
Scenario: Turn Instead of Ramp - Max-Speed
|
Scenario: Turn Instead of Ramp - Max-Speed
|
||||||
Given the node map
|
Given the node map
|
||||||
@@ -120,22 +117,20 @@ Feature: Slipways and Dedicated Turn Lanes
|
|||||||
|
|
||||||
And the ways
|
And the ways
|
||||||
| nodes | highway | name | maxspeed | oneway |
|
| nodes | highway | name | maxspeed | oneway |
|
||||||
| ab | trunk | first | 70 | |
|
| abc | trunk | first | 70 | |
|
||||||
| bc | trunk | first | 70 | |
|
|
||||||
| cd | trunk | first | 2 | |
|
| cd | trunk | first | 2 | |
|
||||||
| bhf | trunk_link | | 2 | yes |
|
| bhf | trunk_link | | 2 | yes |
|
||||||
| cf | primary | second | 50 | yes |
|
| cfg | primary | second | 50 | yes |
|
||||||
| fg | primary | second | 50 | yes |
|
| ec | primary | second | 50 | |
|
||||||
| ec | primary | second | 50 | yes |
|
|
||||||
|
|
||||||
And the relations
|
And the relations
|
||||||
| type | way:from | way:to | node:via | restriction |
|
| type | way:from | way:to | node:via | restriction |
|
||||||
| restriction | bc | cf | c | no_right_turn |
|
| restriction | abc | cfg | c | no_right_turn |
|
||||||
|
|
||||||
When I route I should get
|
When I route I should get
|
||||||
| waypoints | route | turns | locations |
|
| waypoints | route | turns |
|
||||||
| a,g | first,second,second | depart,turn right,arrive | a,b,g |
|
| a,g | first,second,second | depart,turn right,arrive |
|
||||||
| a,1 | first,, | depart,turn right,arrive | a,b,_ |
|
| a,1 | first,, | depart,turn right,arrive |
|
||||||
|
|
||||||
|
|
||||||
Scenario: Turn Instead of Ramp
|
Scenario: Turn Instead of Ramp
|
||||||
@@ -166,8 +161,8 @@ Feature: Slipways and Dedicated Turn Lanes
|
|||||||
| efg | primary | second |
|
| efg | primary | second |
|
||||||
|
|
||||||
When I route I should get
|
When I route I should get
|
||||||
| waypoints | route | turns | locations |
|
| waypoints | route | turns |
|
||||||
| a,g | first,,second,second | depart,off ramp right,turn straight,arrive | a,b,f,g |
|
| a,g | first,,second,second | depart,off ramp right,turn straight,arrive |
|
||||||
|
|
||||||
Scenario: Turn Instead of Ramp
|
Scenario: Turn Instead of Ramp
|
||||||
Given the node map
|
Given the node map
|
||||||
@@ -193,8 +188,8 @@ Feature: Slipways and Dedicated Turn Lanes
|
|||||||
| efg | primary | second |
|
| efg | primary | second |
|
||||||
|
|
||||||
When I route I should get
|
When I route I should get
|
||||||
| waypoints | route | turns | locations |
|
| waypoints | route | turns |
|
||||||
| a,g | first,,second,second | depart,off ramp right,turn straight,arrive | a,b,f,g |
|
| a,g | first,,second,second | depart,off ramp right,turn straight,arrive |
|
||||||
|
|
||||||
Scenario: Inner city expressway with on road
|
Scenario: Inner city expressway with on road
|
||||||
Given the node map
|
Given the node map
|
||||||
@@ -213,20 +208,18 @@ Feature: Slipways and Dedicated Turn Lanes
|
|||||||
|
|
||||||
And the ways
|
And the ways
|
||||||
| nodes | highway | name | oneway |
|
| nodes | highway | name | oneway |
|
||||||
| ab | primary | road | |
|
| abc | primary | road | |
|
||||||
| bc | primary | road | |
|
|
||||||
| cg | primary | road | |
|
| cg | primary | road | |
|
||||||
| bfd | trunk_link | | yes |
|
| bfd | trunk_link | | yes |
|
||||||
| cd | trunk | trunk | yes |
|
| cde | trunk | trunk | yes |
|
||||||
| de | trunk | trunk | yes |
|
|
||||||
|
|
||||||
And the relations
|
And the relations
|
||||||
| type | way:from | way:to | node:via | restriction |
|
| type | way:from | way:to | node:via | restriction |
|
||||||
| restriction | bc | cd | c | no_right_turn |
|
| restriction | abc | cde | c | no_right_turn |
|
||||||
|
|
||||||
When I route I should get
|
When I route I should get
|
||||||
| waypoints | route | turns | locations |
|
| waypoints | route | turns |
|
||||||
| a,e | road,trunk,trunk | depart,turn right,arrive | a,b,e |
|
| a,e | road,trunk,trunk | depart,turn right,arrive |
|
||||||
|
|
||||||
|
|
||||||
Scenario: Slipway Round U-Turn
|
Scenario: Slipway Round U-Turn
|
||||||
@@ -249,8 +242,8 @@ Feature: Slipways and Dedicated Turn Lanes
|
|||||||
| def | primary | road | yes |
|
| def | primary | road | yes |
|
||||||
|
|
||||||
When I route I should get
|
When I route I should get
|
||||||
| waypoints | route | turns | locations |
|
| waypoints | route | turns |
|
||||||
| a,f | road,road,road | depart,continue uturn,arrive | a,b,f |
|
| a,f | road,road,road | depart,continue uturn,arrive |
|
||||||
|
|
||||||
Scenario: Slipway Steep U-Turn
|
Scenario: Slipway Steep U-Turn
|
||||||
Given the node map
|
Given the node map
|
||||||
@@ -271,8 +264,8 @@ Feature: Slipways and Dedicated Turn Lanes
|
|||||||
| def | primary | road | yes |
|
| def | primary | road | yes |
|
||||||
|
|
||||||
When I route I should get
|
When I route I should get
|
||||||
| waypoints | route | turns | locations |
|
| waypoints | route | turns |
|
||||||
| a,f | road,road,road | depart,continue uturn,arrive | a,b,f |
|
| a,f | road,road,road | depart,continue uturn,arrive |
|
||||||
|
|
||||||
Scenario: Schwarzwaldstrasse Autobahn
|
Scenario: Schwarzwaldstrasse Autobahn
|
||||||
Given the node map
|
Given the node map
|
||||||
@@ -316,21 +309,21 @@ Feature: Slipways and Dedicated Turn Lanes
|
|||||||
| qe | secondary_link | Ettlinger Allee | | yes |
|
| qe | secondary_link | Ettlinger Allee | | yes |
|
||||||
|
|
||||||
When I route I should get
|
When I route I should get
|
||||||
| waypoints | route | turns | ref | locations |
|
| waypoints | route | turns | ref |
|
||||||
| a,o | Schwarzwaldstrasse,Ettlinger Allee,Ettlinger Allee | depart,turn right,arrive | L561,, | a,b,o |
|
| a,o | Schwarzwaldstrasse,Ettlinger Allee,Ettlinger Allee | depart,turn right,arrive | L561,L561, |
|
||||||
|
|
||||||
Scenario: Traffic Lights everywhere
|
Scenario: Traffic Lights everywhere
|
||||||
#http://map.project-osrm.org/?z=18¢er=48.995336%2C8.383813&loc=48.995467%2C8.384548&loc=48.995115%2C8.382761&hl=en&alt=0
|
#http://map.project-osrm.org/?z=18¢er=48.995336%2C8.383813&loc=48.995467%2C8.384548&loc=48.995115%2C8.382761&hl=en&alt=0
|
||||||
Given the node map
|
Given the node map
|
||||||
"""
|
"""
|
||||||
a - - k-l-. j
|
a k l j
|
||||||
''d'b-c-i
|
d b c i
|
||||||
\ |
|
|
||||||
e g
|
e g
|
||||||
\|
|
|
||||||
1\|
|
1
|
||||||
h
|
h
|
||||||
|
|
|
||||||
f
|
f
|
||||||
"""
|
"""
|
||||||
|
|
||||||
@@ -342,24 +335,16 @@ Feature: Slipways and Dedicated Turn Lanes
|
|||||||
|
|
||||||
And the ways
|
And the ways
|
||||||
| nodes | highway | name | oneway |
|
| nodes | highway | name | oneway |
|
||||||
| ak | secondary | Ebertstrasse | yes |
|
| aklbci | secondary | Ebertstrasse | yes |
|
||||||
| klbc | secondary | Ebertstrasse | yes |
|
|
||||||
| ci | secondary | Ebertstrasse | yes |
|
|
||||||
| kdeh | secondary_link | | yes |
|
| kdeh | secondary_link | | yes |
|
||||||
| jc | primary | Brauerstrasse | yes |
|
| jcghf | primary | Brauerstrasse | yes |
|
||||||
| cgh | primary | Brauerstrasse | yes |
|
|
||||||
| hf | primary | Brauerstrasse | yes |
|
|
||||||
|
|
||||||
And the relations
|
|
||||||
| type | way:from | way:to | node:via | restriction |
|
|
||||||
| restriction | klbc | cgh | c | no_right_turn |
|
|
||||||
|
|
||||||
When I route I should get
|
When I route I should get
|
||||||
| waypoints | route | turns | locations |
|
| waypoints | route | turns |
|
||||||
| a,i | Ebertstrasse,Ebertstrasse | depart,arrive | a,i |
|
| a,i | Ebertstrasse,Ebertstrasse | depart,arrive |
|
||||||
| a,l | Ebertstrasse,Ebertstrasse | depart,arrive | a,l |
|
| a,l | Ebertstrasse,Ebertstrasse | depart,arrive |
|
||||||
| a,f | Ebertstrasse,Brauerstrasse,Brauerstrasse | depart,turn right,arrive | a,k,f |
|
| a,f | Ebertstrasse,Brauerstrasse,Brauerstrasse | depart,turn right,arrive |
|
||||||
| a,1 | Ebertstrasse,, | depart,turn slight right,arrive | a,k,_ |
|
| a,1 | Ebertstrasse,, | depart,turn slight right,arrive |
|
||||||
|
|
||||||
#2839
|
#2839
|
||||||
Scenario: Self-Loop
|
Scenario: Self-Loop
|
||||||
@@ -472,10 +457,10 @@ Feature: Slipways and Dedicated Turn Lanes
|
|||||||
| g | traffic_signals |
|
| g | traffic_signals |
|
||||||
|
|
||||||
When I route I should get
|
When I route I should get
|
||||||
| waypoints | route | turns | locations | # |
|
| waypoints | route | turns | # |
|
||||||
| a,d | new york,new york | depart,arrive | a,d | this is the sinatra route |
|
| 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,c,j | |
|
| 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 | a,b,g,_ | this can falsly be seen as a sliproad |
|
| 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
|
# Merging into degree two loop on dedicated turn detection / 2927
|
||||||
Scenario: Turn Instead of Ramp
|
Scenario: Turn Instead of Ramp
|
||||||
@@ -512,8 +497,8 @@ Feature: Slipways and Dedicated Turn Lanes
|
|||||||
|
|
||||||
# We don't actually care about routes here, this is all about endless loops in turn discovery
|
# We don't actually care about routes here, this is all about endless loops in turn discovery
|
||||||
When I route I should get
|
When I route I should get
|
||||||
| waypoints | route |
|
| waypoints | route | turns |
|
||||||
| a,i | road,road,road |
|
| a,i | road,road,road | depart,fork slight left,arrive |
|
||||||
|
|
||||||
|
|
||||||
# The following tests are current false positives / false negatives #3199
|
# The following tests are current false positives / false negatives #3199
|
||||||
@@ -543,9 +528,9 @@ Feature: Slipways and Dedicated Turn Lanes
|
|||||||
| hid | residential | Waldkauzsteig |
|
| hid | residential | Waldkauzsteig |
|
||||||
|
|
||||||
When I route I should get
|
When I route I should get
|
||||||
| waypoints | route | turns | locations |
|
| waypoints | route | turns |
|
||||||
| a,d | Nachtigallensteig,Kiebitzsteig,Kiebitzsteig | depart,turn left,arrive | a,b,d |
|
| a,d | Nachtigallensteig,Kiebitzsteig,Kiebitzsteig | depart,turn left,arrive |
|
||||||
| a,h | Nachtigallensteig,Nachtigallensteig | depart,arrive | a,h |
|
| a,h | Nachtigallensteig,Nachtigallensteig | depart,arrive |
|
||||||
|
|
||||||
|
|
||||||
@sliproads
|
@sliproads
|
||||||
@@ -569,8 +554,8 @@ Feature: Slipways and Dedicated Turn Lanes
|
|||||||
| aeg | primary | aeg | yes |
|
| aeg | primary | aeg | yes |
|
||||||
|
|
||||||
When I route I should get
|
When I route I should get
|
||||||
| waypoints | route | turns | locations |
|
| waypoints | route | turns |
|
||||||
| s,f | sabc,aeg,dbef,dbef | depart,turn right,turn right,arrive | s,a,e,f |
|
| s,f | sabc,aeg,dbef,dbef | depart,turn right,turn right,arrive |
|
||||||
|
|
||||||
@sliproads
|
@sliproads
|
||||||
Scenario: Through Street, not a Sliproad although obvious
|
Scenario: Through Street, not a Sliproad although obvious
|
||||||
@@ -593,8 +578,8 @@ Feature: Slipways and Dedicated Turn Lanes
|
|||||||
| aeg | primary | aeg | yes |
|
| aeg | primary | aeg | yes |
|
||||||
|
|
||||||
When I route I should get
|
When I route I should get
|
||||||
| waypoints | route | turns | locations |
|
| waypoints | route | turns |
|
||||||
| s,f | sabc,aeg,dbef,dbef | depart,turn right,turn right,arrive | s,a,e,f |
|
| s,f | sabc,aeg,dbef,dbef | depart,turn right,turn right,arrive |
|
||||||
|
|
||||||
@sliproads
|
@sliproads
|
||||||
Scenario: Sliproad target turn is restricted
|
Scenario: Sliproad target turn is restricted
|
||||||
@@ -629,9 +614,9 @@ Feature: Slipways and Dedicated Turn Lanes
|
|||||||
| restriction | ae | ef | e | no_right_turn |
|
| restriction | ae | ef | e | no_right_turn |
|
||||||
|
|
||||||
When I route I should get
|
When I route I should get
|
||||||
| waypoints | route | turns | locations |
|
| waypoints | route | turns |
|
||||||
| s,f | sabc,dbef,dbef | depart,turn right,arrive | s,b,f |
|
| s,f | sabc,dbef,dbef | depart,turn right,arrive |
|
||||||
| s,g | sabc,aeg,aeg | depart,turn right,arrive | s,a,g |
|
| s,g | sabc,aeg,aeg | depart,turn right,arrive |
|
||||||
|
|
||||||
@sliproads
|
@sliproads
|
||||||
Scenario: Not a Sliproad, road not continuing straight
|
Scenario: Not a Sliproad, road not continuing straight
|
||||||
@@ -651,9 +636,9 @@ Feature: Slipways and Dedicated Turn Lanes
|
|||||||
| aeg | primary | aeg | yes |
|
| aeg | primary | aeg | yes |
|
||||||
|
|
||||||
When I route I should get
|
When I route I should get
|
||||||
| waypoints | route | turns | locations |
|
| waypoints | route | turns |
|
||||||
| s,c | sabc,sabc | depart,arrive | s,c |
|
| s,c | sabc,sabc | depart,arrive |
|
||||||
| s,g | sabc,aeg,aeg | depart,turn right,arrive | s,a,g |
|
| s,g | sabc,aeg,aeg | depart,turn right,arrive |
|
||||||
|
|
||||||
@sliproads
|
@sliproads
|
||||||
Scenario: Intersection too far away with Traffic Light shortly after initial split
|
Scenario: Intersection too far away with Traffic Light shortly after initial split
|
||||||
@@ -686,8 +671,8 @@ Feature: Slipways and Dedicated Turn Lanes
|
|||||||
| ae | primary | ae | yes |
|
| ae | primary | ae | yes |
|
||||||
|
|
||||||
When I route I should get
|
When I route I should get
|
||||||
| waypoints | route | turns | locations |
|
| waypoints | route | turns |
|
||||||
| s,f | sabc,ae,dbef,dbef | depart,turn slight right,turn right,arrive | s,a,e,f |
|
| s,f | sabc,ae,dbef,dbef | depart,turn slight right,turn right,arrive |
|
||||||
|
|
||||||
@sliproads
|
@sliproads
|
||||||
Scenario: Traffic Signal on Sliproad
|
Scenario: Traffic Signal on Sliproad
|
||||||
@@ -719,8 +704,8 @@ Feature: Slipways and Dedicated Turn Lanes
|
|||||||
| ate | primary | ate | yes |
|
| ate | primary | ate | yes |
|
||||||
|
|
||||||
When I route I should get
|
When I route I should get
|
||||||
| waypoints | route | turns | locations |
|
| waypoints | route | turns |
|
||||||
| s,f | sabc,ef,ef | depart,turn right,arrive | s,a,f |
|
| s,f | sabc,ef,ef | depart,turn right,arrive |
|
||||||
|
|
||||||
@sliproads
|
@sliproads
|
||||||
Scenario: Sliproad tagged as link
|
Scenario: Sliproad tagged as link
|
||||||
@@ -747,8 +732,8 @@ Feature: Slipways and Dedicated Turn Lanes
|
|||||||
| ae | motorway_link | ae | yes |
|
| ae | motorway_link | ae | yes |
|
||||||
|
|
||||||
When I route I should get
|
When I route I should get
|
||||||
| waypoints | route | turns | locations |
|
| waypoints | route | turns |
|
||||||
| s,f | sabc,dbef,dbef | depart,turn right,arrive | s,a,f |
|
| s,f | sabc,dbef,dbef | depart,turn right,arrive |
|
||||||
|
|
||||||
@sliproads
|
@sliproads
|
||||||
Scenario: Sliproad with same-ish names
|
Scenario: Sliproad with same-ish names
|
||||||
@@ -774,8 +759,8 @@ Feature: Slipways and Dedicated Turn Lanes
|
|||||||
| af | primary | sliproad | | yes |
|
| af | primary | sliproad | | yes |
|
||||||
|
|
||||||
When I route I should get
|
When I route I should get
|
||||||
| waypoints | route | turns | locations |
|
| waypoints | route | turns |
|
||||||
| s,t | main,crossing,crossing | depart,turn right,arrive | s,a,t |
|
| s,t | main,crossing,crossing | depart,turn right,arrive |
|
||||||
|
|
||||||
@sliproads
|
@sliproads
|
||||||
Scenario: Not a Sliproad, name mismatch
|
Scenario: Not a Sliproad, name mismatch
|
||||||
@@ -803,8 +788,8 @@ Feature: Slipways and Dedicated Turn Lanes
|
|||||||
| af | primary | sliproad | yes |
|
| af | primary | sliproad | yes |
|
||||||
|
|
||||||
When I route I should get
|
When I route I should get
|
||||||
| waypoints | route | turns | locations |
|
| waypoints | route | turns |
|
||||||
| s,t | main,away,away | depart,turn right,arrive | s,a,t |
|
| s,t | main,away,away | depart,turn right,arrive |
|
||||||
|
|
||||||
@sliproads
|
@sliproads
|
||||||
Scenario: Not a Sliproad, low road priority
|
Scenario: Not a Sliproad, low road priority
|
||||||
@@ -833,8 +818,8 @@ Feature: Slipways and Dedicated Turn Lanes
|
|||||||
| af | service | sliproad | 30 km/h | yes |
|
| af | service | sliproad | 30 km/h | yes |
|
||||||
|
|
||||||
When I route I should get
|
When I route I should get
|
||||||
| waypoints | route | turns | locations |
|
| waypoints | route | turns |
|
||||||
| s,t | main,away,away | depart,turn right,arrive | s,a,t |
|
| s,t | main,away,away | depart,turn right,arrive |
|
||||||
|
|
||||||
@sliproads
|
@sliproads
|
||||||
Scenario: Not a Sliproad, more than three roads at target intersection
|
Scenario: Not a Sliproad, more than three roads at target intersection
|
||||||
@@ -863,8 +848,8 @@ Feature: Slipways and Dedicated Turn Lanes
|
|||||||
| af | primary | sliproad | yes |
|
| af | primary | sliproad | yes |
|
||||||
|
|
||||||
When I route I should get
|
When I route I should get
|
||||||
| waypoints | route | turns | locations |
|
| waypoints | route | turns |
|
||||||
| s,g | main,sliproad,another,another | depart,turn right,turn left,arrive | s,a,f,g |
|
| s,g | main,sliproad,another,another | depart,turn right,turn left,arrive |
|
||||||
|
|
||||||
@sliproads:
|
@sliproads:
|
||||||
Scenario: Throughabout-Sliproad
|
Scenario: Throughabout-Sliproad
|
||||||
@@ -942,5 +927,5 @@ Feature: Slipways and Dedicated Turn Lanes
|
|||||||
| restriction | bc | cd | c | only_straight |
|
| restriction | bc | cd | c | only_straight |
|
||||||
|
|
||||||
When I route I should get
|
When I route I should get
|
||||||
| waypoints | route | turns | locations |
|
| waypoints | route | turns | locations |
|
||||||
| a,k | road,,, | depart,turn right,roundabout turn right exit-1,arrive | a,b,h,k |
|
| a,k | road,,, | depart,continue right,roundabout turn right exit-1,arrive | a,b,h,k |
|
||||||
|
|||||||
@@ -39,8 +39,8 @@ Feature: Fork Instructions
|
|||||||
| bd | primary | yes |
|
| bd | primary | yes |
|
||||||
|
|
||||||
When I route I should get
|
When I route I should get
|
||||||
| waypoints | route | turns |
|
| waypoints | route | turns |
|
||||||
| a,d | ab,bd | depart,arrive |
|
| a,d | ab,bd,bd | depart,new name slight right,arrive |
|
||||||
|
|
||||||
Scenario: Don't Fork On Single Road
|
Scenario: Don't Fork On Single Road
|
||||||
Given the node map
|
Given the node map
|
||||||
@@ -56,8 +56,8 @@ Feature: Fork Instructions
|
|||||||
| bd | primary | yes | turn |
|
| bd | primary | yes | turn |
|
||||||
|
|
||||||
When I route I should get
|
When I route I should get
|
||||||
| waypoints | route | turns |
|
| waypoints | route | turns |
|
||||||
| a,d | road,turn | depart,arrive |
|
| a,d | road,turn,turn | depart,new name straight,arrive |
|
||||||
|
|
||||||
Scenario: Do not fork on link type
|
Scenario: Do not fork on link type
|
||||||
Given the node map
|
Given the node map
|
||||||
@@ -382,6 +382,6 @@ Feature: Fork Instructions
|
|||||||
| ab | on | motorway_link |
|
| ab | on | motorway_link |
|
||||||
|
|
||||||
When I route I should get
|
When I route I should get
|
||||||
| waypoints | route | turns |
|
| waypoints | route | turns |
|
||||||
| a,j | on,xbcj | depart,arrive |
|
| a,j | on,xbcj | depart,arrive |
|
||||||
| a,i | on,off,off | depart,turn right,arrive |
|
| a,i | on,off,off | depart,turn slight right,arrive |
|
||||||
|
|||||||
@@ -110,9 +110,9 @@ Feature: Intersections Data
|
|||||||
| cf | corner |
|
| cf | corner |
|
||||||
|
|
||||||
When I route I should get
|
When I route I should get
|
||||||
| waypoints | route | intersections |
|
| waypoints | route | intersections |
|
||||||
| a,d | through,through | true:90,true:0 true:90 false:270,true:90 true:180 false:270;true:270 |
|
| a,d | through,through | true:90,true:0 true:90 false:270,true:90 true:180 false:270;true:270 |
|
||||||
| f,a | corner,throughbridge,through | true:0;true:90 false:180 true:270,true:0 false:90 true:270;true:90 |
|
| f,a | corner,through,through | true:0;true:90 false:180 true:270,true:0 false:90 true:270;true:90 |
|
||||||
|
|
||||||
Scenario: Roundabouts
|
Scenario: Roundabouts
|
||||||
Given the node map
|
Given the node map
|
||||||
|
|||||||
@@ -80,8 +80,8 @@ Feature: Exceptions for routing onto low-priority roads
|
|||||||
| bc | service | service |
|
| bc | service | service |
|
||||||
|
|
||||||
When I route I should get
|
When I route I should get
|
||||||
| waypoints | route | turns |
|
| waypoints | route | turns |
|
||||||
| a,c | road,service | depart,arrive |
|
| a,c | road,service,service | depart,new name straight,arrive |
|
||||||
|
|
||||||
Scenario: Straight onto low-priority, with driveway
|
Scenario: Straight onto low-priority, with driveway
|
||||||
Given the node map
|
Given the node map
|
||||||
@@ -114,6 +114,6 @@ Feature: Exceptions for routing onto low-priority roads
|
|||||||
| bf | driveway | |
|
| bf | driveway | |
|
||||||
|
|
||||||
When I route I should get
|
When I route I should get
|
||||||
| waypoints | route | turns |
|
| waypoints | route | turns |
|
||||||
| a,c | road, | depart,arrive |
|
| a,c | road, | depart,arrive |
|
||||||
| c,a | ,road | depart,arrive |
|
| c,a | ,road,road | depart,new name straight,arrive |
|
||||||
|
|||||||
@@ -354,13 +354,13 @@ Feature: Merge Segregated Roads
|
|||||||
| hb | road | yes |
|
| hb | road | yes |
|
||||||
|
|
||||||
When I route I should get
|
When I route I should get
|
||||||
| waypoints | turns | route | intersections |
|
| waypoints | turns | route | intersections |
|
||||||
| a,f | depart,arrive | road,road | true:180,false:0 true:180,false:0 true:180;true:0 |
|
| a,f | depart,arrive | road,road | true:180,false:0 true:180,false:0 true:180;true:0 |
|
||||||
| c,f | depart,arrive | bridge,road | true:180,false:0 true:180;true:0 |
|
| c,f | depart,new name straight,arrive | bridge,road,road | true:180;false:0 true:180;true:0 |
|
||||||
| 1,f | depart,arrive | bridge,road | true:180,false:0 true:180;true:0 |
|
| 1,f | depart,new name straight,arrive | bridge,road,road | true:180;false:0 true:180;true:0 |
|
||||||
| f,a | depart,arrive | road,road | true:0,true:0 false:180,true:0 false:180;true:180 |
|
| f,a | depart,arrive | road,road | true:0,true:0 false:180,true:0 false:180;true:180 |
|
||||||
| g,a | depart,arrive | bridge,road | true:0,true:0 false:180;true:180 |
|
| g,a | depart,new name straight,arrive | bridge,road,road | true:0;true:0 false:180;true:180 |
|
||||||
| 2,a | depart,arrive | bridge,road | true:0,true:0 false:180;true:180 |
|
| 2,a | depart,new name straight,arrive | bridge,road,road | true:0;true:0 false:180;true:180 |
|
||||||
|
|
||||||
@negative
|
@negative
|
||||||
Scenario: Traffic Circle
|
Scenario: Traffic Circle
|
||||||
@@ -501,25 +501,25 @@ Feature: Merge Segregated Roads
|
|||||||
| jc | vert | yes |
|
| jc | vert | yes |
|
||||||
| cf | vert | yes |
|
| cf | vert | yes |
|
||||||
| fl | vert | yes |
|
| fl | vert | yes |
|
||||||
| xg | horiz | no |
|
| gx | horiz | no |
|
||||||
| xc | horiz | no |
|
| xc | horiz | no |
|
||||||
| xf | horiz | no |
|
| fx | horiz | no |
|
||||||
| xb | horiz | no |
|
| xb | horiz | no |
|
||||||
And the relations
|
And the relations
|
||||||
| type | way:from | way:to | node:via | restriction |
|
| type | way:from | way:to | node:via | restriction |
|
||||||
| restriction | bc | cf | c | no_left_turn |
|
| restriction | bc | cf | c | no_left_turn |
|
||||||
| restriction | fg | gb | g | no_left_turn |
|
| restriction | fg | gb | g | no_left_turn |
|
||||||
| restriction | gb | bc | b | no_left_turn |
|
| restriction | cf | fg | f | no_left_turn |
|
||||||
| restriction | cf | fg | f | no_left_turn |
|
| restriction | gb | bc | b | no_left_turn |
|
||||||
| restriction | xb | xf | x | only_straight_on |
|
| restriction | xb | bc | b | no_left_turn |
|
||||||
| restriction | xf | xb | x | only_straight_on |
|
| restriction | xc | cf | c | no_left_turn |
|
||||||
| restriction | xg | xc | x | only_straight_on |
|
| restriction | xf | fg | f | no_left_turn |
|
||||||
| restriction | xc | xg | x | only_straight_on |
|
| restriction | xg | gb | g | no_left_turn |
|
||||||
|
|
||||||
# the goal here should be not to mention the intersection in the middle at all and also suppress the segregated parts
|
# the goal here should be not to mention the intersection in the middle at all and also suppress the segregated parts
|
||||||
When I route I should get
|
When I route I should get
|
||||||
| waypoints | route | intersections |
|
| waypoints | route | intersections |
|
||||||
| a,l | horiz,vert,vert | true:90;false:0 true:60 true:90 true:180 false:270,true:60 false:120 false:240 false:300,true:0 false:90 false:180 false:240 true:270;true:180 |
|
| a,l | horiz,vert,vert | true:90;false:0 true:60 true:90 true:180 false:270,true:60 true:120 false:240 true:300,true:0 false:90 false:180 false:240 false:270;true:180 |
|
||||||
| a,d | horiz,horiz | true:90,false:0 true:60 true:90 true:180 false:270,false:0 true:90 false:180 false:270 true:300;true:270 |
|
| a,d | horiz,horiz | true:90,false:0 true:60 true:90 true:180 false:270,false:0 true:90 false:180 false:270 true:300;true:270 |
|
||||||
| j,h | vert,horiz,horiz | true:0;true:0 true:90 false:180 false:270 true:300,false:60 false:120 false:240 true:300,false:0 false:90 false:120 true:180 true:270;true:90 |
|
| j,h | vert,horiz,horiz | true:0;true:0 true:90 false:180 false:270 true:300,true:60 false:120 true:240 true:300,false:0 false:90 false:120 false:180 true:270;true:90 |
|
||||||
| j,l | vert,vert | true:0,true:0 true:90 false:180 false:270 true:300,true:0 false:90 false:180 true:240 false:270;true:180 |
|
| j,l | vert,vert | true:0,true:0 true:90 false:180 false:270 true:300,true:0 false:90 false:180 true:240 false:270;true:180 |
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ Feature: New-Name Instructions
|
|||||||
|
|
||||||
Background:
|
Background:
|
||||||
Given the profile "car"
|
Given the profile "car"
|
||||||
Given a grid size of 150 meters
|
Given a grid size of 100 meters
|
||||||
|
|
||||||
Scenario: Undisturbed name Change
|
Scenario: Undisturbed name Change
|
||||||
Given the node map
|
Given the node map
|
||||||
|
|||||||
@@ -97,5 +97,5 @@ Feature: Simple Turns
|
|||||||
| ei | left | yes |
|
| ei | left | yes |
|
||||||
|
|
||||||
When I route I should get
|
When I route I should get
|
||||||
| waypoints | route | turns |
|
| waypoints | route |
|
||||||
| g,a | in,road,road | depart,fork right,arrive |
|
| g,a | in,road,road |
|
||||||
|
|||||||
@@ -233,9 +233,9 @@ Feature: Ramp Guidance
|
|||||||
| cd | motorway |
|
| cd | motorway |
|
||||||
|
|
||||||
When I route I should get
|
When I route I should get
|
||||||
| waypoints | route | turns |
|
| waypoints | route | turns |
|
||||||
| a,d | ac,cd | depart,arrive |
|
| a,d | ac,cd,cd | depart,new name slight left,arrive |
|
||||||
| b,d | bc,cd | depart,arrive |
|
| b,d | bc,cd,cd | depart,new name slight right,arrive |
|
||||||
|
|
||||||
Scenario: Two Ramps Joining into common Motorway Unnamed
|
Scenario: Two Ramps Joining into common Motorway Unnamed
|
||||||
Given the node map
|
Given the node map
|
||||||
|
|||||||
@@ -37,37 +37,3 @@ Feature: Basic Roundabout
|
|||||||
| h,a | gh,ab,ab | depart,roundabout turn left exit-3,arrive |
|
| h,a | gh,ab,ab | depart,roundabout turn left exit-3,arrive |
|
||||||
| h,d | gh,cd,cd | depart,roundabout turn straight exit-2,arrive |
|
| h,d | gh,cd,cd | depart,roundabout turn straight exit-2,arrive |
|
||||||
| h,f | gh,ef,ef | depart,roundabout turn right exit-1,arrive |
|
| h,f | gh,ef,ef | depart,roundabout turn right exit-1,arrive |
|
||||||
|
|
||||||
# https://www.openstreetmap.org/way/223225602
|
|
||||||
Scenario: Enter and Exit with changing mode
|
|
||||||
Given the node map
|
|
||||||
"""
|
|
||||||
a
|
|
||||||
b
|
|
||||||
h g c d
|
|
||||||
e
|
|
||||||
f
|
|
||||||
"""
|
|
||||||
|
|
||||||
And the ways
|
|
||||||
| nodes | junction | highway |
|
|
||||||
| ab | | residential |
|
|
||||||
| cd | | residential |
|
|
||||||
| ef | | footway |
|
|
||||||
| gh | | footway |
|
|
||||||
| bgecb | roundabout | residential |
|
|
||||||
|
|
||||||
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,ef | depart,roundabout turn left exit-1,notification right,arrive |
|
|
||||||
| a,h | ab,bgecb,gh,gh | depart,roundabout turn right exit-1,notification right,arrive |
|
|
||||||
| d,f | cd,ef,ef,ef | depart,roundabout turn sharp left exit-2,notification right,arrive |
|
|
||||||
| d,h | cd,gh,gh,gh | depart,roundabout turn left exit-2,notification right,arrive |
|
|
||||||
| d,a | cd,ab,ab | depart,roundabout turn right exit-1,arrive |
|
|
||||||
| f,h | ef,gh,gh,gh | depart,roundabout turn sharp left exit-3,notification right,arrive |
|
|
||||||
| f,a | ef,ab,ab | depart,roundabout turn straight exit-2,arrive |
|
|
||||||
| f,d | ef,cd,cd | depart,roundabout turn right exit-1,arrive |
|
|
||||||
| h,a | gh,ab,ab | depart,roundabout turn left exit-2,arrive |
|
|
||||||
| h,d | gh,cd,cd | depart,roundabout turn straight exit-1,arrive |
|
|
||||||
| h,f | gh,bgecb,ef,ef | depart,roundabout turn right exit-1,notification right,arrive |
|
|
||||||
|
|||||||
@@ -222,43 +222,6 @@ Feature: Basic Roundabout
|
|||||||
| j,f | jkl,def,def | depart,roundabout-exit-2,arrive |
|
| j,f | jkl,def,def | depart,roundabout-exit-2,arrive |
|
||||||
| j,c | jkl,abc,abc | depart,roundabout-exit-3,arrive |
|
| j,c | jkl,abc,abc | depart,roundabout-exit-3,arrive |
|
||||||
|
|
||||||
Scenario: Mixed Entry and Exit - clockwise order
|
|
||||||
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 |
|
|
||||||
| behkb | roundabout | yes |
|
|
||||||
|
|
||||||
When I route I should get
|
|
||||||
| waypoints | route | turns |
|
|
||||||
| a,c | abc,abc,abc | depart,roundabout-exit-4,arrive |
|
|
||||||
| a,l | abc,jkl,jkl | depart,roundabout-exit-3,arrive |
|
|
||||||
| a,i | abc,ghi,ghi | depart,roundabout-exit-2,arrive |
|
|
||||||
| a,f | abc,def,def | depart,roundabout-exit-1,arrive |
|
|
||||||
| d,f | def,def,def | depart,roundabout-exit-4,arrive |
|
|
||||||
| d,c | def,abc,abc | depart,roundabout-exit-3,arrive |
|
|
||||||
| d,l | def,jkl,jkl | depart,roundabout-exit-2,arrive |
|
|
||||||
| d,i | def,ghi,ghi | depart,roundabout-exit-1,arrive |
|
|
||||||
| g,i | ghi,ghi,ghi | depart,roundabout-exit-4,arrive |
|
|
||||||
| g,f | ghi,def,def | depart,roundabout-exit-3,arrive |
|
|
||||||
| g,c | ghi,abc,abc | depart,roundabout-exit-2,arrive |
|
|
||||||
| g,l | ghi,jkl,jkl | depart,roundabout-exit-1,arrive |
|
|
||||||
| j,l | jkl,jkl,jkl | depart,roundabout-exit-4,arrive |
|
|
||||||
| j,i | jkl,ghi,ghi | depart,roundabout-exit-3,arrive |
|
|
||||||
| j,f | jkl,def,def | depart,roundabout-exit-2,arrive |
|
|
||||||
| j,c | jkl,abc,abc | depart,roundabout-exit-1,arrive |
|
|
||||||
|
|
||||||
Scenario: Mixed Entry and Exit - segregated roads, different names
|
Scenario: Mixed Entry and Exit - segregated roads, different names
|
||||||
Given the node map
|
Given the node map
|
||||||
"""
|
"""
|
||||||
@@ -447,10 +410,10 @@ Feature: Basic Roundabout
|
|||||||
| h | give_way |
|
| h | give_way |
|
||||||
|
|
||||||
When I route I should get
|
When I route I should get
|
||||||
| waypoints | route | turns | locations |
|
| waypoints | route | turns |
|
||||||
# since we cannot handle these invalid roundabout tags yet, we cannot output roundabout taggings. This will hopefully change some day
|
# since we cannot handle these invalid roundabout tags yet, we cannout output roundabout taggings. This will hopefully change some day
|
||||||
#| w,x | ll,egg,egg,tr,tr | depart,roundabout-exit-1,roundabout-exit-2,arrive |
|
#| w,x | ll,egg,egg,tr,tr | depart,roundabout-exit-1,roundabout-exit-2,arrive |
|
||||||
| w,x | ll,egg,egg,tr,tr | depart,turn right,continue left,turn straight,arrive | w,b,d,f,x |
|
| w,x | ll,egg,egg,tr,tr | depart,turn right,continue left,turn straight,arrive |
|
||||||
|
|
||||||
Scenario: Use Lane in Roundabout
|
Scenario: Use Lane in Roundabout
|
||||||
Given the node map
|
Given the node map
|
||||||
@@ -718,105 +681,3 @@ Feature: Basic Roundabout
|
|||||||
| u,r | ug,ar,ar | depart,roundabout-exit-3,arrive |
|
| u,r | ug,ar,ar | depart,roundabout-exit-3,arrive |
|
||||||
| u,s | ug,ds,ds | depart,roundabout-exit-4,arrive |
|
| u,s | ug,ds,ds | depart,roundabout-exit-4,arrive |
|
||||||
| u,t | ug,ft,ft | depart,roundabout-exit-5,arrive |
|
| u,t | ug,ft,ft | depart,roundabout-exit-5,arrive |
|
||||||
|
|
||||||
|
|
||||||
@3762
|
|
||||||
Scenario: Only Enter
|
|
||||||
Given the node map
|
|
||||||
"""
|
|
||||||
a
|
|
||||||
b
|
|
||||||
i c e ~ ~ ~ f - h
|
|
||||||
j d
|
|
||||||
k g
|
|
||||||
"""
|
|
||||||
|
|
||||||
And the ways
|
|
||||||
| nodes | junction | route |
|
|
||||||
| ab | | |
|
|
||||||
| ef | | ferry |
|
|
||||||
| fh | | |
|
|
||||||
| dg | | |
|
|
||||||
| ic | | |
|
|
||||||
| jk | | |
|
|
||||||
| bcjdeb | roundabout | |
|
|
||||||
|
|
||||||
When I route I should get
|
|
||||||
| waypoints | route | turns |
|
|
||||||
| a,h | ab,ef,ef,fh,fh | depart,roundabout-exit-4,notification slight right,notification straight,arrive |
|
|
||||||
|
|
||||||
|
|
||||||
Scenario: Drive through roundabout
|
|
||||||
Given the node map
|
|
||||||
"""
|
|
||||||
a
|
|
||||||
b e d f
|
|
||||||
c
|
|
||||||
g h
|
|
||||||
"""
|
|
||||||
|
|
||||||
And the ways
|
|
||||||
| nodes | junction | oneway |
|
|
||||||
| abcda | roundabout | yes |
|
|
||||||
| edf | | |
|
|
||||||
| gch | | yes |
|
|
||||||
|
|
||||||
When I route I should get
|
|
||||||
| waypoints | bearings | route | turns |
|
|
||||||
| e,f | 90 90 | edf,edf,edf | depart,roundabout-exit-1,arrive |
|
|
||||||
| e,h | 90 135 | edf,gch,gch | depart,roundabout-exit-2,arrive |
|
|
||||||
| g,f | 45 90 | gch,edf,edf | depart,roundabout-exit-2,arrive |
|
|
||||||
| g,h | 45 135 | gch,gch,gch | depart,roundabout-exit-1,arrive |
|
|
||||||
| e,e | 90 270 | edf,edf,edf | depart,roundabout-exit-3,arrive |
|
|
||||||
|
|
||||||
@4030 @4075
|
|
||||||
Scenario: Service roundabout with service exits
|
|
||||||
# Counting of service exits must be adjusted in #4075
|
|
||||||
Given the node map
|
|
||||||
"""
|
|
||||||
e
|
|
||||||
f a d
|
|
||||||
g b1c
|
|
||||||
h
|
|
||||||
"""
|
|
||||||
|
|
||||||
And the ways
|
|
||||||
| nodes | highway | junction |
|
|
||||||
| abcda | service | roundabout |
|
|
||||||
| de | service | |
|
|
||||||
| af | service | |
|
|
||||||
| bg | tertiary | |
|
|
||||||
| bh | service | |
|
|
||||||
|
|
||||||
When I route I should get
|
|
||||||
| from | to | route | turns |
|
|
||||||
| 1 | e | abcda,de,de | depart,roundabout-exit-1,arrive |
|
|
||||||
| 1 | f | abcda,af,af | depart,roundabout-exit-1,arrive |
|
|
||||||
| 1 | g | abcda,bg,bg | depart,roundabout-exit-1,arrive |
|
|
||||||
| 1 | h | abcda,bh,bh | depart,roundabout-exit-1,arrive |
|
|
||||||
|
|
||||||
Scenario: CCW and CW roundabouts with overlaps
|
|
||||||
Given the node map
|
|
||||||
"""
|
|
||||||
a d g h
|
|
||||||
|
|
||||||
b c j i
|
|
||||||
f e k l
|
|
||||||
"""
|
|
||||||
|
|
||||||
And the ways
|
|
||||||
| nodes | highway | junction |
|
|
||||||
| abcda | tertiary | roundabout |
|
|
||||||
| ed | tertiary | |
|
|
||||||
| af | tertiary | |
|
|
||||||
| ghijg | tertiary | roundabout |
|
|
||||||
| kg | tertiary | |
|
|
||||||
| hl | tertiary | |
|
|
||||||
|
|
||||||
When I route I should get
|
|
||||||
| from | to | route | turns | distance |
|
|
||||||
| e | f | ed,af,af | depart,roundabout-exit-1,arrive | 80.1m |
|
|
||||||
| f | e | af,ed,ed | depart,roundabout-exit-1,arrive | 120.1m |
|
|
||||||
| k | l | kg,hl,hl | depart,roundabout-exit-1,arrive | 80.1m |
|
|
||||||
| l | k | hl,kg,kg | depart,roundabout-exit-1,arrive | 120.1m |
|
|
||||||
|
|
||||||
|
|||||||
@@ -25,20 +25,20 @@ Feature: Staggered Intersections
|
|||||||
| jcdehi | residential | Cedar Dr |
|
| jcdehi | residential | Cedar Dr |
|
||||||
|
|
||||||
When I route I should get
|
When I route I should get
|
||||||
| waypoints | route | turns | locations |
|
| waypoints | route | turns |
|
||||||
| a,g | Oak St,Oak St | depart,arrive | a,g |
|
| a,g | Oak St,Oak St | depart,arrive |
|
||||||
| g,a | Oak St,Oak St | depart,arrive | g,a |
|
| g,a | Oak St,Oak St | depart,arrive |
|
||||||
|
|
||||||
Scenario: Staggered Intersection: do not collapse if long segment in between
|
Scenario: Staggered Intersection: do not collapse if long segment in between
|
||||||
Given the node map
|
Given the node map
|
||||||
"""
|
"""
|
||||||
j
|
j
|
||||||
a b c
|
a b c
|
||||||
|
|
|
||||||
|
|
|
||||||
d
|
d
|
||||||
|
|
|
||||||
|
|
|
||||||
e f g
|
e f g
|
||||||
h
|
h
|
||||||
i
|
i
|
||||||
@@ -51,18 +51,16 @@ Feature: Staggered Intersections
|
|||||||
| jcdehi | residential | Cedar Dr |
|
| jcdehi | residential | Cedar Dr |
|
||||||
|
|
||||||
When I route I should get
|
When I route I should get
|
||||||
| waypoints | route | turns | locations |
|
| waypoints | route | turns |
|
||||||
| a,g | Oak St,Cedar Dr,Oak St,Oak St | depart,turn right,turn left,arrive | a,c,e,g |
|
| a,g | Oak St,Cedar Dr,Oak St,Oak St | depart,turn right,turn left,arrive |
|
||||||
| g,a | Oak St,Cedar Dr,Oak St,Oak St | depart,turn right,turn left,arrive | g,e,c,a |
|
| g,a | Oak St,Cedar Dr,Oak St,Oak St | depart,turn right,turn left,arrive |
|
||||||
|
|
||||||
Scenario: Staggered Intersection: do not collapse if not left-right or right-left
|
Scenario: Staggered Intersection: do not collapse if not left-right or right-left
|
||||||
Given the node map
|
Given the node map
|
||||||
"""
|
"""
|
||||||
j
|
j
|
||||||
a b c
|
a b c
|
||||||
|
|
|
||||||
d
|
d
|
||||||
|
|
|
||||||
g f e
|
g f e
|
||||||
h
|
h
|
||||||
i
|
i
|
||||||
@@ -75,11 +73,11 @@ Feature: Staggered Intersections
|
|||||||
| jcdehi | residential | Cedar Dr |
|
| jcdehi | residential | Cedar Dr |
|
||||||
|
|
||||||
When I route I should get
|
When I route I should get
|
||||||
| waypoints | route | turns | locations |
|
| waypoints | route | turns |
|
||||||
| a,g | Oak St,Oak St,Oak St | depart,continue uturn,arrive | a,c,g |
|
| a,g | Oak St,Oak St,Oak St | depart,continue uturn,arrive |
|
||||||
| g,a | Oak St,Oak St,Oak St | depart,continue uturn,arrive | g,e,a |
|
| g,a | Oak St,Oak St,Oak St | depart,continue uturn,arrive |
|
||||||
|
|
||||||
Scenario: Staggered Intersection: use new-name if the names are not the same
|
Scenario: Staggered Intersection: do not collapse if the names are not the same
|
||||||
Given the node map
|
Given the node map
|
||||||
"""
|
"""
|
||||||
j
|
j
|
||||||
@@ -97,9 +95,9 @@ Feature: Staggered Intersections
|
|||||||
| jcdehi | residential | Cedar Dr |
|
| jcdehi | residential | Cedar Dr |
|
||||||
|
|
||||||
When I route I should get
|
When I route I should get
|
||||||
| waypoints | route | turns | locations |
|
| waypoints | route | turns |
|
||||||
| a,g | Oak St,Elm St | depart,arrive | a,g |
|
| a,g | Oak St,Cedar Dr,Elm St,Elm St | depart,turn right,turn left,arrive |
|
||||||
| g,a | Elm St,Oak St | depart,arrive | g,a |
|
| g,a | Elm St,Cedar Dr,Oak St,Oak St | depart,turn right,turn left,arrive |
|
||||||
|
|
||||||
Scenario: Staggered Intersection: do not collapse if a mode change is involved
|
Scenario: Staggered Intersection: do not collapse if a mode change is involved
|
||||||
Given the node map
|
Given the node map
|
||||||
@@ -107,7 +105,7 @@ Feature: Staggered Intersections
|
|||||||
j
|
j
|
||||||
a b c
|
a b c
|
||||||
d
|
d
|
||||||
e~~f - - - - g
|
e f g
|
||||||
h
|
h
|
||||||
"""
|
"""
|
||||||
|
|
||||||
@@ -119,9 +117,9 @@ Feature: Staggered Intersections
|
|||||||
| jcdeh | primary | road | |
|
| jcdeh | primary | road | |
|
||||||
|
|
||||||
When I route I should get
|
When I route I should get
|
||||||
| waypoints | route | turns | modes | locations |
|
| waypoints | route | turns | modes |
|
||||||
| a,g | to_sea,road,to_sea,road,road | depart,turn right,turn left,notification straight,arrive | driving,driving,ferry,driving,driving | a,c,e,f,g |
|
| a,g | to_sea,road,to_sea,road,road | depart,turn right,turn left,notification straight,arrive | driving,driving,ferry,driving,driving |
|
||||||
| g,a | road,to_sea,road,to_sea,to_sea | depart,notification straight,turn right,turn left,arrive | driving,ferry,driving,driving,driving | g,f,e,c,a |
|
| g,a | road,to_sea,road,to_sea,to_sea | depart,notification straight,turn right,turn left,arrive | driving,ferry,driving,driving,driving |
|
||||||
|
|
||||||
Scenario: Staggered Intersection: do not collapse intermediary intersections
|
Scenario: Staggered Intersection: do not collapse intermediary intersections
|
||||||
Given the node map
|
Given the node map
|
||||||
@@ -129,9 +127,7 @@ Feature: Staggered Intersections
|
|||||||
j
|
j
|
||||||
a b c
|
a b c
|
||||||
e f g
|
e f g
|
||||||
|
|
|
||||||
d
|
d
|
||||||
|
|
|
||||||
k l m
|
k l m
|
||||||
i
|
i
|
||||||
"""
|
"""
|
||||||
@@ -144,6 +140,6 @@ Feature: Staggered Intersections
|
|||||||
| jcedki | residential | Cedar Dr |
|
| jcedki | residential | Cedar Dr |
|
||||||
|
|
||||||
When I route I should get
|
When I route I should get
|
||||||
| waypoints | route | turns | locations |
|
| waypoints | route | turns |
|
||||||
| a,m | Oak St,Cedar Dr,Oak St,Oak St | depart,turn right,turn left,arrive | a,c,k,m |
|
| a,m | Oak St,Cedar Dr,Oak St,Oak St | depart,turn right,turn left,arrive |
|
||||||
| m,a | Oak St,Cedar Dr,Oak St,Oak St | depart,turn right,turn left,arrive | m,k,c,a |
|
| m,a | Oak St,Cedar Dr,Oak St,Oak St | depart,turn right,turn left,arrive |
|
||||||
|
|||||||
@@ -150,7 +150,7 @@ Feature: Simple Turns
|
|||||||
| nodes | highway | name | lanes | oneway |
|
| nodes | highway | name | lanes | oneway |
|
||||||
| akb | primary | road | 4 | yes |
|
| akb | primary | road | 4 | yes |
|
||||||
| hgi | primary | road | 4 | yes |
|
| hgi | primary | road | 4 | yes |
|
||||||
| kcdefg | primary_link | | 1 | yes |
|
| akcdefg | primary_link | | 1 | yes |
|
||||||
| gj | tertiary | turn | 1 | |
|
| gj | tertiary | turn | 1 | |
|
||||||
|
|
||||||
When I route I should get
|
When I route I should get
|
||||||
@@ -444,7 +444,7 @@ Feature: Simple Turns
|
|||||||
|
|
||||||
When I route I should get
|
When I route I should get
|
||||||
| waypoints | route | turns | locations | # |
|
| waypoints | route | turns | locations | # |
|
||||||
| g,f | turn,road,road | depart,turn left,arrive | g,e,f | #could offer an additional turn at `e` if you don't detect the turn in between as curve |
|
| g,f | turn,road | depart,arrive | g,f | #could offer an additional turn at `e` if you don't detect the turn in between as curve |
|
||||||
| c,f | road,road,road | depart,continue right,arrive | c,b,f | |
|
| c,f | road,road,road | depart,continue right,arrive | c,b,f | |
|
||||||
|
|
||||||
#http://www.openstreetmap.org/search?query=52.479264%2013.295617#map=19/52.47926/13.29562
|
#http://www.openstreetmap.org/search?query=52.479264%2013.295617#map=19/52.47926/13.29562
|
||||||
@@ -808,15 +808,15 @@ Feature: Simple Turns
|
|||||||
| cjk | Friede | no | | tertiary |
|
| cjk | Friede | no | | tertiary |
|
||||||
|
|
||||||
When I route I should get
|
When I route I should get
|
||||||
| waypoints | route | turns | intersections |
|
| waypoints | route | turns | intersections |
|
||||||
| a,g | Perle,Heide,Heide | depart,turn right,arrive | true:90;true:90 true:180 false:270 true:345;true:18 |
|
| a,g | Perle,Heide,Heide | depart,turn right,arrive | true:90;true:90 true:180 false:270 true:345;true:18 |
|
||||||
| a,k | Perle,Friede,Friede | depart,turn left,arrive | true:90;true:90 true:180 false:270 true:345;true:153 |
|
| a,k | Perle,Friede,Friede | depart,turn left,arrive | true:90;true:90 true:180 false:270 true:345;true:153 |
|
||||||
| a,e | Perle,Perle | depart,arrive | true:90,true:90 true:180 false:270 true:345;true:270 |
|
| a,e | Perle,Perle | depart,arrive | true:90,true:90 true:180 false:270 true:345;true:270 |
|
||||||
| e,k | Perle,Friede,Friede | depart,turn right,arrive | true:270;false:90 true:180 true:270 true:345;true:153 |
|
| e,k | Perle,Friede,Friede | depart,turn right,arrive | true:270;false:90 true:180 true:270 true:345;true:153 |
|
||||||
| e,g | Perle,Heide,Heide | depart,turn left,arrive | true:270;false:90 true:180 true:270 true:345;true:18 |
|
| e,g | Perle,Heide,Heide | depart,turn left,arrive | true:270;false:90 true:180 true:270 true:345;true:18 |
|
||||||
| h,k | Heide,Friede | depart,arrive | true:16,true:90 true:180 true:270 true:345;true:153 |
|
| h,k | Heide,Friede,Friede | depart,new name straight,arrive | true:16;true:90 true:180 true:270 true:345;true:153 |
|
||||||
| h,e | Heide,Perle,Perle | depart,turn right,arrive | true:16;true:90 true:180 true:270 true:345;true:270 |
|
| h,e | Heide,Perle,Perle | depart,turn right,arrive | true:16;true:90 true:180 true:270 true:345;true:270 |
|
||||||
| h,a | Heide,Perle,Perle | depart,turn left,arrive | true:16;true:90 true:180 true:270 true:345;true:90 |
|
| h,a | Heide,Perle,Perle | depart,turn left,arrive | true:16;true:90 true:180 true:270 true:345;true:90 |
|
||||||
|
|
||||||
#http://www.openstreetmap.org/#map=19/52.53293/13.32956
|
#http://www.openstreetmap.org/#map=19/52.53293/13.32956
|
||||||
Scenario: Curved Exit from Curved Road
|
Scenario: Curved Exit from Curved Road
|
||||||
@@ -852,9 +852,9 @@ Feature: Simple Turns
|
|||||||
When I route I should get
|
When I route I should get
|
||||||
| waypoints | route | turns |
|
| waypoints | route | turns |
|
||||||
| a,j | Siemens,Siemens,Siemens | depart,continue slight right,arrive |
|
| a,j | Siemens,Siemens,Siemens | depart,continue slight right,arrive |
|
||||||
| a,g | Siemens,Erna | depart,arrive |
|
| a,g | Siemens,Erna,Erna | depart,new name slight left,arrive |
|
||||||
| g,j | Erna,Siemens,Siemens | depart,turn left,arrive |
|
| g,j | Erna,Siemens,Siemens | depart,turn left,arrive |
|
||||||
| g,a | Erna,Siemens | depart,arrive |
|
| g,a | Erna,Siemens,Siemens | depart,new name slight right,arrive |
|
||||||
|
|
||||||
#http://www.openstreetmap.org/#map=19/52.51303/13.32170
|
#http://www.openstreetmap.org/#map=19/52.51303/13.32170
|
||||||
Scenario: Ernst Reuter Platz
|
Scenario: Ernst Reuter Platz
|
||||||
@@ -1188,12 +1188,12 @@ Feature: Simple Turns
|
|||||||
| j | traffic_signals |
|
| j | traffic_signals |
|
||||||
|
|
||||||
When I route I should get
|
When I route I should get
|
||||||
| waypoints | route | turns |
|
| waypoints | route | turns |
|
||||||
| a,c | rose,trift | depart,arrive |
|
| a,c | rose,trift,trift | depart,new name slight left,arrive |
|
||||||
| a,k | rose,muhle,muhle | depart,turn slight right,arrive |
|
| a,k | rose,muhle,muhle | depart,turn slight right,arrive |
|
||||||
| d,f | trift,rose | depart,arrive |
|
| d,f | trift,rose,rose | depart,new name straight,arrive |
|
||||||
| d,k | trift,muhle,muhle | depart,turn sharp left,arrive |
|
| d,k | trift,muhle,muhle | depart,turn sharp left,arrive |
|
||||||
| d,c | trift,trift,trift | depart,continue uturn,arrive |
|
| d,c | trift,trift,trift | depart,continue uturn,arrive |
|
||||||
|
|
||||||
#http://www.openstreetmap.org/#map=19/52.50740/13.44824
|
#http://www.openstreetmap.org/#map=19/52.50740/13.44824
|
||||||
Scenario: Turning Loop at the end of the road
|
Scenario: Turning Loop at the end of the road
|
||||||
@@ -1275,8 +1275,8 @@ Feature: Simple Turns
|
|||||||
| bcde | 6 |
|
| bcde | 6 |
|
||||||
|
|
||||||
When I route I should get
|
When I route I should get
|
||||||
| waypoints | route |
|
| waypoints | route |
|
||||||
| a,e | ab,bcde |
|
| a,e | ab,bcde,bcde |
|
||||||
|
|
||||||
|
|
||||||
@3401
|
@3401
|
||||||
@@ -1312,8 +1312,8 @@ Feature: Simple Turns
|
|||||||
|
|
||||||
# we don't care for turn instructions, this is a coordinate extraction bug check
|
# we don't care for turn instructions, this is a coordinate extraction bug check
|
||||||
When I route I should get
|
When I route I should get
|
||||||
| waypoints | route | intersections |
|
| waypoints | route | intersections |
|
||||||
| a,g | ab,bcdefgh | true:90,true:45 false:180 false:270;true:180 |
|
| a,g | ab,bcdefgh,bcdefgh | true:90;true:45 false:180 false:270;true:180 |
|
||||||
|
|
||||||
#https://github.com/Project-OSRM/osrm-backend/pull/3469#issuecomment-270806580
|
#https://github.com/Project-OSRM/osrm-backend/pull/3469#issuecomment-270806580
|
||||||
Scenario: Oszillating Lower Priority Road
|
Scenario: Oszillating Lower Priority Road
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ Feature: Turn Lane Guidance
|
|||||||
|
|
||||||
Background:
|
Background:
|
||||||
Given the profile "car"
|
Given the profile "car"
|
||||||
Given a grid size of 5 meters
|
Given a grid size of 20 meters
|
||||||
|
|
||||||
@simple
|
@simple
|
||||||
Scenario: Basic Turn Lane 3-way Turn with empty lanes
|
Scenario: Basic Turn Lane 3-way Turn with empty lanes
|
||||||
@@ -602,17 +602,6 @@ Feature: Turn Lane Guidance
|
|||||||
a e
|
a e
|
||||||
| |
|
| |
|
||||||
| |
|
| |
|
||||||
| |
|
|
||||||
| |
|
|
||||||
| |
|
|
||||||
| |
|
|
||||||
| |
|
|
||||||
| |
|
|
||||||
| |
|
|
||||||
| |
|
|
||||||
| |
|
|
||||||
| |
|
|
||||||
| |
|
|
||||||
b d
|
b d
|
||||||
h c
|
h c
|
||||||
' -- g - - f
|
' -- g - - f
|
||||||
@@ -620,8 +609,8 @@ Feature: Turn Lane Guidance
|
|||||||
|
|
||||||
And the ways
|
And the ways
|
||||||
| nodes | name | turn:lanes:forward | oneway | highway | lanes |
|
| nodes | name | turn:lanes:forward | oneway | highway | lanes |
|
||||||
| abc | road | left\|left\|left\|through\|through | yes | primary | 2 |
|
| abc | road | left\|left\|left\|through\|through | yes | primary | 5 |
|
||||||
| cde | road | | yes | primary | 2 |
|
| cde | road | | yes | primary | 3 |
|
||||||
| hc | cross | | yes | secondary | |
|
| hc | cross | | yes | secondary | |
|
||||||
| cg | straight | | no | tertiary | |
|
| cg | straight | | no | tertiary | |
|
||||||
| cf | left | | yes | primary | |
|
| cf | left | | yes | primary | |
|
||||||
@@ -819,10 +808,6 @@ Feature: Turn Lane Guidance
|
|||||||
"""
|
"""
|
||||||
a b e
|
a b e
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
d c f
|
d c f
|
||||||
"""
|
"""
|
||||||
|
|
||||||
@@ -873,9 +858,9 @@ Feature: Turn Lane Guidance
|
|||||||
| ab | on | motorway_link | |
|
| ab | on | motorway_link | |
|
||||||
|
|
||||||
When I route I should get
|
When I route I should get
|
||||||
| waypoints | route | turns | lanes |
|
| waypoints | route | turns | lanes |
|
||||||
| a,j | on,xbcj | depart,arrive | , |
|
| a,j | on,xbcj | depart,arrive | , |
|
||||||
| a,i | on,off,off | depart,turn right,arrive | ,none:false slight right:true, |
|
| a,i | on,off,off | depart,turn slight right,arrive | ,none:false slight right:true, |
|
||||||
|
|
||||||
#http://www.openstreetmap.org/#map=17/52.47414/13.35712
|
#http://www.openstreetmap.org/#map=17/52.47414/13.35712
|
||||||
@todo @ramp @2645
|
@todo @ramp @2645
|
||||||
@@ -952,9 +937,9 @@ Feature: Turn Lane Guidance
|
|||||||
| dce | cross | primary | yes | | 1 |
|
| dce | cross | primary | yes | | 1 |
|
||||||
|
|
||||||
When I route I should get
|
When I route I should get
|
||||||
| waypoints | route | turns | lanes | locations |
|
| waypoints | route | turns | lanes |
|
||||||
| a,g | road,cross,cross | depart,turn right,arrive | ,left:false right:true, | a,b,g |
|
| a,g | road,cross,cross | depart,turn right,arrive | ,left:false right:true, |
|
||||||
| a,e | road,cross,cross | depart,end of road left,arrive | ,left:true right:false, | a,c,e |
|
| a,e | road,cross,cross | depart,turn left,arrive | ,left:true right:false, |
|
||||||
|
|
||||||
Scenario: Partitioned turn, Slight Curve
|
Scenario: Partitioned turn, Slight Curve
|
||||||
Given the node map
|
Given the node map
|
||||||
@@ -975,9 +960,9 @@ Feature: Turn Lane Guidance
|
|||||||
| dce | cross | primary | yes | |
|
| dce | cross | primary | yes | |
|
||||||
|
|
||||||
When I route I should get
|
When I route I should get
|
||||||
| waypoints | route | turns | lanes | locations |
|
| waypoints | route | turns | lanes |
|
||||||
| a,g | road,cross,cross | depart,turn right,arrive | ,left:false right:true, | a,b,g |
|
| a,g | road,cross,cross | depart,turn right,arrive | ,left:false right:true, |
|
||||||
| a,e | road,cross,cross | depart,end of road left,arrive | ,left:true right:false, | a,c,e |
|
| a,e | road,cross,cross | depart,turn left,arrive | ,left:true right:false, |
|
||||||
|
|
||||||
Scenario: Lane Parsing Issue #2694
|
Scenario: Lane Parsing Issue #2694
|
||||||
Given the node map
|
Given the node map
|
||||||
|
|||||||
@@ -23,15 +23,15 @@ Feature: Simple Turns
|
|||||||
When I route I should get
|
When I route I should get
|
||||||
| waypoints | route | turns |
|
| waypoints | route | turns |
|
||||||
| a,c | ab,cb,cb | depart,turn left,arrive |
|
| a,c | ab,cb,cb | depart,turn left,arrive |
|
||||||
| a,e | ab,eb | depart,arrive |
|
| a,e | ab,eb,eb | depart,new name straight,arrive |
|
||||||
| a,d | ab,db,db | depart,turn right,arrive |
|
| a,d | ab,db,db | depart,turn right,arrive |
|
||||||
| c,a | cb,ab,ab | depart,turn right,arrive |
|
| c,a | cb,ab,ab | depart,turn right,arrive |
|
||||||
| c,d | cb,db | depart,arrive |
|
| c,d | cb,db,db | depart,new name straight,arrive |
|
||||||
| c,e | cb,eb,eb | depart,turn left,arrive |
|
| c,e | cb,eb,eb | depart,turn left,arrive |
|
||||||
| d,a | db,ab,ab | depart,turn left,arrive |
|
| d,a | db,ab,ab | depart,turn left,arrive |
|
||||||
| d,c | db,cb | depart,arrive |
|
| d,c | db,cb,cb | depart,new name straight,arrive |
|
||||||
| d,e | db,eb,eb | depart,turn right,arrive |
|
| d,e | db,eb,eb | depart,turn right,arrive |
|
||||||
| e,a | eb,ab | depart,arrive |
|
| e,a | eb,ab,ab | depart,new name straight,arrive |
|
||||||
| e,c | eb,cb,cb | depart,turn right,arrive |
|
| e,c | eb,cb,cb | depart,turn right,arrive |
|
||||||
| e,d | eb,db,db | depart,turn left,arrive |
|
| e,d | eb,db,db | depart,turn left,arrive |
|
||||||
|
|
||||||
@@ -53,15 +53,15 @@ Feature: Simple Turns
|
|||||||
When I route I should get
|
When I route I should get
|
||||||
| waypoints | route | turns |
|
| waypoints | route | turns |
|
||||||
| a,c | ab,cb,cb | depart,turn left,arrive |
|
| a,c | ab,cb,cb | depart,turn left,arrive |
|
||||||
| a,e | ab,eb | depart,arrive |
|
| a,e | ab,eb,eb | depart,new name straight,arrive |
|
||||||
| a,d | ab,db,db | depart,turn right,arrive |
|
| a,d | ab,db,db | depart,turn right,arrive |
|
||||||
| c,a | cb,ab,ab | depart,turn right,arrive |
|
| c,a | cb,ab,ab | depart,turn right,arrive |
|
||||||
| c,d | cb,db | depart,arrive |
|
| c,d | cb,db,db | depart,new name straight,arrive |
|
||||||
| c,e | cb,eb,eb | depart,turn left,arrive |
|
| c,e | cb,eb,eb | depart,turn left,arrive |
|
||||||
| d,a | db,ab,ab | depart,turn left,arrive |
|
| d,a | db,ab,ab | depart,turn left,arrive |
|
||||||
| d,c | db,cb | depart,arrive |
|
| d,c | db,cb,cb | depart,new name straight,arrive |
|
||||||
| d,e | db,eb,eb | depart,turn right,arrive |
|
| d,e | db,eb,eb | depart,turn right,arrive |
|
||||||
| e,a | eb,ab | depart,arrive |
|
| e,a | eb,ab,ab | depart,new name straight,arrive |
|
||||||
| e,c | eb,cb,cb | depart,turn right,arrive |
|
| e,c | eb,cb,cb | depart,turn right,arrive |
|
||||||
| e,d | eb,db,db | depart,turn left,arrive |
|
| e,d | eb,db,db | depart,turn left,arrive |
|
||||||
|
|
||||||
@@ -86,10 +86,10 @@ Feature: Simple Turns
|
|||||||
| a,e | abe,abe | depart,arrive |
|
| a,e | abe,abe | depart,arrive |
|
||||||
| a,d | abe,db,db | depart,turn right,arrive |
|
| a,d | abe,db,db | depart,turn right,arrive |
|
||||||
| c,a | cb,abe,abe | depart,turn right,arrive |
|
| c,a | cb,abe,abe | depart,turn right,arrive |
|
||||||
| c,d | cb,db | depart,arrive |
|
| c,d | cb,db,db | depart,new name straight,arrive |
|
||||||
| c,e | cb,abe,abe | depart,turn left,arrive |
|
| c,e | cb,abe,abe | depart,turn left,arrive |
|
||||||
| d,a | db,abe,abe | depart,turn left,arrive |
|
| d,a | db,abe,abe | depart,turn left,arrive |
|
||||||
| d,c | db,cb | depart,arrive |
|
| d,c | db,cb,cb | depart,new name straight,arrive |
|
||||||
| d,e | db,abe,abe | depart,turn right,arrive |
|
| d,e | db,abe,abe | depart,turn right,arrive |
|
||||||
| e,a | abe,abe | depart,arrive |
|
| e,a | abe,abe | depart,arrive |
|
||||||
| e,c | abe,cb,cb | depart,turn right,arrive |
|
| e,c | abe,cb,cb | depart,turn right,arrive |
|
||||||
@@ -139,9 +139,9 @@ Feature: Simple Turns
|
|||||||
When I route I should get
|
When I route I should get
|
||||||
| waypoints | route | turns |
|
| waypoints | route | turns |
|
||||||
| a,c | ab,cb,cb | depart,turn left,arrive |
|
| a,c | ab,cb,cb | depart,turn left,arrive |
|
||||||
| a,d | ab,db | depart,arrive |
|
| a,d | ab,db,db | depart,new name straight,arrive |
|
||||||
| d,c | db,cb,cb | depart,turn right,arrive |
|
| d,c | db,cb,cb | depart,turn right,arrive |
|
||||||
| d,a | db,ab | depart,arrive |
|
| d,a | db,ab,ab | depart,new name straight,arrive |
|
||||||
|
|
||||||
Scenario: Three Way Intersection - Meeting Oneways
|
Scenario: Three Way Intersection - Meeting Oneways
|
||||||
Given the node map
|
Given the node map
|
||||||
@@ -208,7 +208,7 @@ Feature: Simple Turns
|
|||||||
| b,c | ab,ac,ac | depart,turn sharp left,arrive |
|
| b,c | ab,ac,ac | depart,turn sharp left,arrive |
|
||||||
| b,d | ab,ad,ad | depart,turn left,arrive |
|
| b,d | ab,ad,ad | depart,turn left,arrive |
|
||||||
| b,e | ab,ae,ae | depart,turn slight left,arrive |
|
| b,e | ab,ae,ae | depart,turn slight left,arrive |
|
||||||
| b,f | ab,af | depart,arrive |
|
| b,f | ab,af,af | depart,new name straight,arrive |
|
||||||
| b,g | ab,ag,ag | depart,turn slight right,arrive |
|
| b,g | ab,ag,ag | depart,turn slight right,arrive |
|
||||||
| b,h | ab,ah,ah | depart,turn right,arrive |
|
| b,h | ab,ah,ah | depart,turn right,arrive |
|
||||||
| b,i | ab,ai,ai | depart,turn sharp right,arrive |
|
| b,i | ab,ai,ai | depart,turn sharp right,arrive |
|
||||||
@@ -241,7 +241,7 @@ Feature: Simple Turns
|
|||||||
| b,c | ab,ac,ac | depart,turn sharp left,arrive |
|
| b,c | ab,ac,ac | depart,turn sharp left,arrive |
|
||||||
| b,d | ab,ad,ad | depart,turn left,arrive |
|
| b,d | ab,ad,ad | depart,turn left,arrive |
|
||||||
| b,e | ab,ae,ae | depart,turn slight left,arrive |
|
| b,e | ab,ae,ae | depart,turn slight left,arrive |
|
||||||
| b,f | ab,af | depart,arrive |
|
| b,f | ab,af,af | depart,new name straight,arrive |
|
||||||
| b,g | ab,ag,ag | depart,turn slight right,arrive |
|
| b,g | ab,ag,ag | depart,turn slight right,arrive |
|
||||||
| b,h | ab,ah,ah | depart,turn right,arrive |
|
| b,h | ab,ah,ah | depart,turn right,arrive |
|
||||||
| b,i | ab,ai,ai | depart,turn sharp right,arrive |
|
| b,i | ab,ai,ai | depart,turn sharp right,arrive |
|
||||||
@@ -743,10 +743,10 @@ Feature: Simple Turns
|
|||||||
| be | primary | no |
|
| be | primary | no |
|
||||||
|
|
||||||
When I route I should get
|
When I route I should get
|
||||||
| waypoints | route | turns |
|
| waypoints | route | turns |
|
||||||
| a,c | abc,abc | depart,arrive |
|
| a,c | abc,abc | depart,arrive |
|
||||||
| d,e | db,be | depart,arrive |
|
| d,e | db,be,be | depart,new name slight right,arrive |
|
||||||
| e,d | be,db | depart,arrive |
|
| e,d | be,db,db | depart,new name slight left,arrive |
|
||||||
|
|
||||||
Scenario: Right Turn Assignment Three Conflicting Turns with invalid - 1
|
Scenario: Right Turn Assignment Three Conflicting Turns with invalid - 1
|
||||||
Given the node map
|
Given the node map
|
||||||
@@ -904,19 +904,19 @@ Feature: Simple Turns
|
|||||||
| bd | residential | in |
|
| bd | residential | in |
|
||||||
|
|
||||||
When I route I should get
|
When I route I should get
|
||||||
| waypoints | turns | route |
|
| waypoints | turns | route |
|
||||||
| a,c | depart,arrive | road,road |
|
| a,c | depart,arrive | road,road |
|
||||||
| d,a | depart,turn left,arrive | in,road,road |
|
| d,a | depart,turn left,arrive | in,road,road |
|
||||||
| d,c | depart,arrive | in,road |
|
| d,c | depart,new name straight,arrive | in,road,road |
|
||||||
|
|
||||||
Scenario: Channing Street
|
Scenario: Channing Street
|
||||||
Given the node map
|
Given the node map
|
||||||
"""
|
"""
|
||||||
g f
|
g f
|
||||||
| |
|
|
||||||
d---c-b-a
|
d c b a
|
||||||
| |
|
|
||||||
| |
|
|
||||||
h e
|
h e
|
||||||
"""
|
"""
|
||||||
|
|
||||||
@@ -1030,9 +1030,9 @@ Feature: Simple Turns
|
|||||||
| ec | Molkenmarkt | secondary | yes |
|
| ec | Molkenmarkt | secondary | yes |
|
||||||
|
|
||||||
When I route I should get
|
When I route I should get
|
||||||
| waypoints | turns | route |
|
| waypoints | turns | route |
|
||||||
| a,d | depart,arrive | Molkenmarkt,Stralauer Str |
|
| a,d | depart,new name straight,arrive | Molkenmarkt,Stralauer Str,Stralauer Str |
|
||||||
| e,d | depart,arrive | Molkenmarkt,Stralauer Str |
|
| e,d | depart,new name slight left,arrive | Molkenmarkt,Stralauer Str,Stralauer Str |
|
||||||
|
|
||||||
# http://www.openstreetmap.org/#map=18/39.28158/-76.62291
|
# http://www.openstreetmap.org/#map=18/39.28158/-76.62291
|
||||||
@3002
|
@3002
|
||||||
@@ -1149,19 +1149,19 @@ Feature: Simple Turns
|
|||||||
| a,c | in,through,through | depart,turn left,arrive |
|
| a,c | in,through,through | depart,turn left,arrive |
|
||||||
|
|
||||||
# http://www.openstreetmap.org/#map=19/52.51556/13.41832
|
# http://www.openstreetmap.org/#map=19/52.51556/13.41832
|
||||||
Scenario: No Slight Right at Stralauer Strasse
|
Scenario: No Slight Right over Jannowitzbruecke
|
||||||
Given the node map
|
Given the node map
|
||||||
"""
|
"""
|
||||||
l m
|
l m
|
||||||
| |
|
| |
|
||||||
f._ | |
|
f._ | |
|
||||||
' g---h.
|
' g---h.
|
||||||
| | '-i
|
| | '.
|
||||||
| |
|
| | i
|
||||||
a_ | |
|
a_ | |
|
||||||
''.b---c
|
''.b---c
|
||||||
| |' d._
|
| |'d._
|
||||||
| | 'e
|
| | 'e
|
||||||
j k
|
j k
|
||||||
"""
|
"""
|
||||||
|
|
||||||
@@ -1175,20 +1175,20 @@ Feature: Simple Turns
|
|||||||
| kchm | Alexanderstr | primary | yes |
|
| kchm | Alexanderstr | primary | yes |
|
||||||
|
|
||||||
When I route I should get
|
When I route I should get
|
||||||
| waypoints | turns | route |
|
| waypoints | turns | route |
|
||||||
| a,e | depart,arrive | Stralauer Str,Holzmarktstr |
|
| a,e | depart,new name straight,arrive | Stralauer Str,Holzmarktstr,Holzmarktstr |
|
||||||
|
|
||||||
Scenario: No Slight Right at Stralauer Strasse -- less extreme
|
Scenario: No Slight Right over Jannowitzbruecke -- less extreme
|
||||||
Given the node map
|
Given the node map
|
||||||
"""
|
"""
|
||||||
l m
|
l m
|
||||||
| |
|
| |
|
||||||
f_ | |
|
f_ | |
|
||||||
' 'g---h_
|
' 'g h_
|
||||||
| | '\_
|
| | '\_
|
||||||
| | i
|
| | i
|
||||||
a_ | |
|
a_ | |
|
||||||
'_ b___c_
|
'_ b c_
|
||||||
| | \_
|
| | \_
|
||||||
| | e
|
| | e
|
||||||
j k
|
j k
|
||||||
@@ -1204,20 +1204,20 @@ Feature: Simple Turns
|
|||||||
| kchm | Alexanderstr | primary | yes |
|
| kchm | Alexanderstr | primary | yes |
|
||||||
|
|
||||||
When I route I should get
|
When I route I should get
|
||||||
| waypoints | turns | route |
|
| waypoints | turns | route |
|
||||||
| a,e | depart,arrive | Stralauer Str,Holzmarktstr |
|
| a,e | depart,new name straight,arrive | Stralauer Str,Holzmarktstr,Holzmarktstr |
|
||||||
|
|
||||||
Scenario: No Slight Right at Stralauer Strasse
|
Scenario: No Slight Right over Jannowitzbruecke
|
||||||
Given the node map
|
Given the node map
|
||||||
"""
|
"""
|
||||||
l m
|
l m
|
||||||
| |
|
| |
|
||||||
| |
|
| |
|
||||||
_ _ g---h_
|
_ _ g h_
|
||||||
f' | | '_
|
f' | | '_
|
||||||
| | i
|
| | i
|
||||||
| |
|
| |
|
||||||
_ _b---c__
|
_ _b c__
|
||||||
a' | | 'd
|
a' | | 'd
|
||||||
| |
|
| |
|
||||||
j k
|
j k
|
||||||
|
|||||||
@@ -77,8 +77,7 @@ class OSRMDirectLoader extends OSRMBaseLoader {
|
|||||||
osrmUp (callback) {
|
osrmUp (callback) {
|
||||||
if (this.osrmIsRunning()) return callback(new Error("osrm-routed already running!"));
|
if (this.osrmIsRunning()) return callback(new Error("osrm-routed already running!"));
|
||||||
|
|
||||||
const command_arguments = util.format('%s -p %d -a %s', this.inputFile, this.scope.OSRM_PORT, this.scope.ROUTING_ALGORITHM);
|
this.child = this.scope.runBin('osrm-routed', util.format("%s -p %d", this.inputFile, this.scope.OSRM_PORT), this.scope.environment, (err) => {
|
||||||
this.child = this.scope.runBin('osrm-routed', command_arguments, this.scope.environment, (err) => {
|
|
||||||
if (err && err.signal !== 'SIGINT') {
|
if (err && err.signal !== 'SIGINT') {
|
||||||
this.child = null;
|
this.child = null;
|
||||||
throw new Error(util.format('osrm-routed %s: %s', errorReason(err), err.cmd));
|
throw new Error(util.format('osrm-routed %s: %s', errorReason(err), err.cmd));
|
||||||
@@ -116,8 +115,7 @@ class OSRMDatastoreLoader extends OSRMBaseLoader {
|
|||||||
osrmUp (callback) {
|
osrmUp (callback) {
|
||||||
if (this.osrmIsRunning()) return callback();
|
if (this.osrmIsRunning()) return callback();
|
||||||
|
|
||||||
const command_arguments = util.format('--shared-memory=1 -p %d -a %s', this.scope.OSRM_PORT, this.scope.ROUTING_ALGORITHM);
|
this.child = this.scope.runBin('osrm-routed', util.format('--shared-memory=1 -p %d', this.scope.OSRM_PORT), this.scope.environment, (err) => {
|
||||||
this.child = this.scope.runBin('osrm-routed', command_arguments, this.scope.environment, (err) => {
|
|
||||||
if (err && err.signal !== 'SIGINT') {
|
if (err && err.signal !== 'SIGINT') {
|
||||||
this.child = null;
|
this.child = null;
|
||||||
throw new Error(util.format('osrm-routed %s: %s', errorReason(err), err.cmd));
|
throw new Error(util.format('osrm-routed %s: %s', errorReason(err), err.cmd));
|
||||||
|
|||||||
@@ -68,7 +68,7 @@ module.exports = function (expected, actual) {
|
|||||||
// header row
|
// header row
|
||||||
cells = []
|
cells = []
|
||||||
headers.forEach( (key) => {
|
headers.forEach( (key) => {
|
||||||
var content = String(key).padRight(' ', widths[key] );
|
var content = key.padRight(' ', widths[key] );
|
||||||
if (columnStatus[key] == false )
|
if (columnStatus[key] == false )
|
||||||
content = okStr + content;
|
content = okStr + content;
|
||||||
cells.push( chalk.white( content ) );
|
cells.push( chalk.white( content ) );
|
||||||
@@ -83,7 +83,7 @@ module.exports = function (expected, actual) {
|
|||||||
// expected row
|
// expected row
|
||||||
cells = []
|
cells = []
|
||||||
headers.forEach( (key) => {
|
headers.forEach( (key) => {
|
||||||
var content = String(row[key]).padRight(' ', widths[key] );
|
var content = row[key].padRight(' ', widths[key] );
|
||||||
if (statusRows[i][key] == false)
|
if (statusRows[i][key] == false)
|
||||||
cells.push( chalk.yellow( wantStr + content) );
|
cells.push( chalk.yellow( wantStr + content) );
|
||||||
else {
|
else {
|
||||||
@@ -105,7 +105,7 @@ module.exports = function (expected, actual) {
|
|||||||
if (rowError) {
|
if (rowError) {
|
||||||
cells = []
|
cells = []
|
||||||
headers.forEach( (key) => {
|
headers.forEach( (key) => {
|
||||||
var content = String(actual[i][key]).padRight(' ', widths[key] );
|
var content = actual[i][key].padRight(' ', widths[key] );
|
||||||
if (statusRows[i][key] == false)
|
if (statusRows[i][key] == false)
|
||||||
cells.push( chalk.red( gotStr + content) );
|
cells.push( chalk.red( gotStr + content) );
|
||||||
else {
|
else {
|
||||||
|
|||||||
@@ -0,0 +1,38 @@
|
|||||||
|
@prepare @options @files
|
||||||
|
Feature: osrm-contract command line options: datasources
|
||||||
|
# expansions:
|
||||||
|
# {processed_file} => path to .osrm file
|
||||||
|
|
||||||
|
Background:
|
||||||
|
Given the profile "testbot"
|
||||||
|
Given the extract extra arguments "--generate-edge-lookup"
|
||||||
|
And the node map
|
||||||
|
"""
|
||||||
|
a b
|
||||||
|
"""
|
||||||
|
And the ways
|
||||||
|
| nodes |
|
||||||
|
| ab |
|
||||||
|
And the speed file
|
||||||
|
"""
|
||||||
|
1,2,50
|
||||||
|
2,1,50
|
||||||
|
2,3,50
|
||||||
|
3,2,50
|
||||||
|
1,4,50
|
||||||
|
4,1,50
|
||||||
|
"""
|
||||||
|
And the data has been extracted
|
||||||
|
|
||||||
|
Scenario: osrm-contract - Passing base file
|
||||||
|
When I run "osrm-contract --segment-speed-file {speeds_file} {processed_file}"
|
||||||
|
Then datasource names should contain "lua profile,27_osrmcontract_passing_base_file_speeds"
|
||||||
|
And it should exit successfully
|
||||||
|
|
||||||
|
Scenario: osrm-contract - Passing base file
|
||||||
|
Given the speed file
|
||||||
|
"""
|
||||||
|
"""
|
||||||
|
And the data has been extracted
|
||||||
|
When I run "osrm-contract --segment-speed-file {speeds_file} {processed_file}"
|
||||||
|
Then it should exit successfully
|
||||||
@@ -20,30 +20,11 @@ Feature: osrm-contract command line option: edge-weight-updates-over-factor
|
|||||||
And the data has been saved to disk
|
And the data has been saved to disk
|
||||||
|
|
||||||
Scenario: Logging weight with updates over factor of 2, long segment
|
Scenario: Logging weight with updates over factor of 2, long segment
|
||||||
When I run "osrm-extract --profile {profile_file} {osm_file}"
|
When I run "osrm-extract --profile {profile_file} {osm_file} --generate-edge-lookup"
|
||||||
When I run "osrm-contract --edge-weight-updates-over-factor 2 --segment-speed-file {speeds_file} {processed_file}"
|
When I run "osrm-contract --edge-weight-updates-over-factor 2 --segment-speed-file {speeds_file} {processed_file}"
|
||||||
Then stderr should not contain "Speed values were used to update 2 segment(s)"
|
And stderr should contain "weight updates"
|
||||||
And stderr should contain "Segment: 1,2"
|
And stderr should contain "New speed: 100 kph"
|
||||||
And stderr should contain "Segment: 1,3"
|
|
||||||
And I route I should get
|
And I route I should get
|
||||||
| from | to | route | speed |
|
| from | to | route | speed |
|
||||||
| a | b | ab,ab | 100 km/h |
|
| a | b | ab,ab | 100 km/h |
|
||||||
| a | c | ac,ac | 100 km/h |
|
| a | c | ac,ac | 100 km/h |
|
||||||
|
|
||||||
|
|
||||||
Scenario: Logging using weigts as durations for non-duration profile
|
|
||||||
Given the profile file "testbot" extended with
|
|
||||||
"""
|
|
||||||
properties.weight_name = 'steps'
|
|
||||||
function way_function(way, result)
|
|
||||||
result.forward_mode = mode.driving
|
|
||||||
result.backward_mode = mode.driving
|
|
||||||
result.weight = 1
|
|
||||||
result.duration = 1
|
|
||||||
end
|
|
||||||
"""
|
|
||||||
And the data has been saved to disk
|
|
||||||
|
|
||||||
When I run "osrm-extract --profile {profile_file} {osm_file}"
|
|
||||||
When I run "osrm-contract --edge-weight-updates-over-factor 2 --segment-speed-file {speeds_file} {processed_file}"
|
|
||||||
Then stderr should contain "Speed values were used to update 2 segments for 'steps' profile"
|
|
||||||
|
|||||||
@@ -0,0 +1,28 @@
|
|||||||
|
@prepare @options @invalid
|
||||||
|
Feature: osrm-contract command line options: invalid options
|
||||||
|
|
||||||
|
Background:
|
||||||
|
Given the profile "testbot"
|
||||||
|
And the node map
|
||||||
|
"""
|
||||||
|
a b
|
||||||
|
"""
|
||||||
|
And the ways
|
||||||
|
| nodes |
|
||||||
|
| ab |
|
||||||
|
And the data has been extracted
|
||||||
|
|
||||||
|
Scenario: osrm-contract - Non-existing option
|
||||||
|
When I try to run "osrm-contract --fly-me-to-the-moon"
|
||||||
|
Then stdout should be empty
|
||||||
|
And stderr should contain "option"
|
||||||
|
And stderr should contain "fly-me-to-the-moon"
|
||||||
|
And it should exit with an error
|
||||||
|
|
||||||
|
# This tests the error messages when you try to use --segment-speed-file,
|
||||||
|
# but osrm-extract has not been run with --generate-edge-lookup
|
||||||
|
Scenario: osrm-contract - Someone forgot --generate-edge-lookup on osrm-extract
|
||||||
|
When I try to run "osrm-contract --segment-speed-file /dev/null {processed_file}"
|
||||||
|
Then stderr should contain "Error while trying to mmap"
|
||||||
|
Then stderr should contain ".osrm.turn_penalties_index"
|
||||||
|
And it should exit with an error
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
@contract @options @version
|
@prepare @options @version
|
||||||
Feature: osrm-contract command line options: version
|
Feature: osrm-contract command line options: version
|
||||||
# the regex will match these two formats:
|
# the regex will match these two formats:
|
||||||
# v0.3.7.0 # this is the normal format when you build from a git clone
|
# v0.3.7.0 # this is the normal format when you build from a git clone
|
||||||
|
|||||||
@@ -1,23 +0,0 @@
|
|||||||
@customize @options @files
|
|
||||||
Feature: osrm-contract command line options: files
|
|
||||||
Background:
|
|
||||||
Given the profile "testbot"
|
|
||||||
And the node map
|
|
||||||
"""
|
|
||||||
a b
|
|
||||||
"""
|
|
||||||
And the ways
|
|
||||||
| nodes |
|
|
||||||
| ab |
|
|
||||||
And the data has been extracted
|
|
||||||
And the data has been partitioned
|
|
||||||
|
|
||||||
Scenario: osrm-customize - Passing base file
|
|
||||||
When I run "osrm-customize {processed_file}"
|
|
||||||
Then it should exit successfully
|
|
||||||
|
|
||||||
Scenario: osrm-customize - Missing input file
|
|
||||||
When I try to run "osrm-customize over-the-rainbow.osrm"
|
|
||||||
And stderr should contain "over-the-rainbow.osrm"
|
|
||||||
And stderr should contain "not found"
|
|
||||||
And it should exit with an error
|
|
||||||
@@ -1,35 +0,0 @@
|
|||||||
@contract @options @help
|
|
||||||
Feature: osrm-customize command line options: help
|
|
||||||
|
|
||||||
Scenario: osrm-customize - Help should be shown when no options are passed
|
|
||||||
When I try to run "osrm-customize"
|
|
||||||
Then stderr should be empty
|
|
||||||
And stdout should contain /osrm-customize(.exe)? <input.osrm> \[options\]:/
|
|
||||||
And stdout should contain "Options:"
|
|
||||||
And stdout should contain "--version"
|
|
||||||
And stdout should contain "--help"
|
|
||||||
And stdout should contain "Configuration:"
|
|
||||||
And stdout should contain "--threads"
|
|
||||||
And it should exit with an error
|
|
||||||
|
|
||||||
Scenario: osrm-customize - Help, short
|
|
||||||
When I run "osrm-customize -h"
|
|
||||||
Then stderr should be empty
|
|
||||||
And stdout should contain /osrm-customize(.exe)? <input.osrm> \[options\]:/
|
|
||||||
And stdout should contain "Options:"
|
|
||||||
And stdout should contain "--version"
|
|
||||||
And stdout should contain "--help"
|
|
||||||
And stdout should contain "Configuration:"
|
|
||||||
And stdout should contain "--threads"
|
|
||||||
And it should exit successfully
|
|
||||||
|
|
||||||
Scenario: osrm-customize - Help, long
|
|
||||||
When I run "osrm-customize --help"
|
|
||||||
Then stderr should be empty
|
|
||||||
And stdout should contain /osrm-customize(.exe)? <input.osrm> \[options\]:/
|
|
||||||
And stdout should contain "Options:"
|
|
||||||
And stdout should contain "--version"
|
|
||||||
And stdout should contain "--help"
|
|
||||||
And stdout should contain "Configuration:"
|
|
||||||
And stdout should contain "--threads"
|
|
||||||
And it should exit successfully
|
|
||||||
@@ -1,20 +0,0 @@
|
|||||||
@prepare @options @invalid
|
|
||||||
Feature: osrm-customize command line options: invalid options
|
|
||||||
|
|
||||||
Background:
|
|
||||||
Given the profile "testbot"
|
|
||||||
And the node map
|
|
||||||
"""
|
|
||||||
a b
|
|
||||||
"""
|
|
||||||
And the ways
|
|
||||||
| nodes |
|
|
||||||
| ab |
|
|
||||||
And the data has been extracted
|
|
||||||
|
|
||||||
Scenario: osrm-customize - Non-existing option
|
|
||||||
When I try to run "osrm-customize --fly-me-to-the-moon"
|
|
||||||
Then stdout should be empty
|
|
||||||
And stderr should contain "option"
|
|
||||||
And stderr should contain "fly-me-to-the-moon"
|
|
||||||
And it should exit with an error
|
|
||||||
@@ -1,19 +0,0 @@
|
|||||||
@prepare @options @version
|
|
||||||
Feature: osrm-customize command line options: version
|
|
||||||
|
|
||||||
Background:
|
|
||||||
Given the profile "testbot"
|
|
||||||
|
|
||||||
Scenario: osrm-customize - Version, short
|
|
||||||
When I run "osrm-customize --v"
|
|
||||||
Then stderr should be empty
|
|
||||||
And stdout should contain 1 line
|
|
||||||
And stdout should contain /(v\d{1,2}\.\d{1,2}\.\d{1,2}|\w*-\d+-\w+)/
|
|
||||||
And it should exit successfully
|
|
||||||
|
|
||||||
Scenario: osrm-customize - Version, long
|
|
||||||
When I run "osrm-customize --version"
|
|
||||||
Then stderr should be empty
|
|
||||||
And stdout should contain 1 line
|
|
||||||
And stdout should contain /(v\d{1,2}\.\d{1,2}\.\d{1,2}|\w*-\d+-\w+)/
|
|
||||||
And it should exit successfully
|
|
||||||
@@ -14,6 +14,7 @@ Feature: osrm-extract command line options: help
|
|||||||
And stdout should contain "Configuration:"
|
And stdout should contain "Configuration:"
|
||||||
And stdout should contain "--profile"
|
And stdout should contain "--profile"
|
||||||
And stdout should contain "--threads"
|
And stdout should contain "--threads"
|
||||||
|
And stdout should contain "--generate-edge-lookup"
|
||||||
And stdout should contain "--small-component-size"
|
And stdout should contain "--small-component-size"
|
||||||
And it should exit successfully
|
And it should exit successfully
|
||||||
|
|
||||||
@@ -27,6 +28,7 @@ Feature: osrm-extract command line options: help
|
|||||||
And stdout should contain "Configuration:"
|
And stdout should contain "Configuration:"
|
||||||
And stdout should contain "--profile"
|
And stdout should contain "--profile"
|
||||||
And stdout should contain "--threads"
|
And stdout should contain "--threads"
|
||||||
|
And stdout should contain "--generate-edge-lookup"
|
||||||
And stdout should contain "--small-component-size"
|
And stdout should contain "--small-component-size"
|
||||||
And it should exit successfully
|
And it should exit successfully
|
||||||
|
|
||||||
@@ -40,5 +42,6 @@ Feature: osrm-extract command line options: help
|
|||||||
And stdout should contain "Configuration:"
|
And stdout should contain "Configuration:"
|
||||||
And stdout should contain "--profile"
|
And stdout should contain "--profile"
|
||||||
And stdout should contain "--threads"
|
And stdout should contain "--threads"
|
||||||
|
And stdout should contain "--generate-edge-lookup"
|
||||||
And stdout should contain "--small-component-size"
|
And stdout should contain "--small-component-size"
|
||||||
And it should exit successfully
|
And it should exit successfully
|
||||||
|
|||||||
@@ -1,22 +0,0 @@
|
|||||||
@partition @options @files
|
|
||||||
Feature: osrm-partition command line options: files
|
|
||||||
Background:
|
|
||||||
Given the profile "testbot"
|
|
||||||
And the node map
|
|
||||||
"""
|
|
||||||
a b
|
|
||||||
"""
|
|
||||||
And the ways
|
|
||||||
| nodes |
|
|
||||||
| ab |
|
|
||||||
And the data has been extracted
|
|
||||||
|
|
||||||
Scenario: osrm-partition - Passing base file
|
|
||||||
When I run "osrm-partition {processed_file}"
|
|
||||||
Then it should exit successfully
|
|
||||||
|
|
||||||
Scenario: osrm-partition - Missing input file
|
|
||||||
When I try to run "osrm-partition over-the-rainbow.osrm"
|
|
||||||
And stderr should contain "over-the-rainbow.osrm"
|
|
||||||
And stderr should contain "not found"
|
|
||||||
And it should exit with an error
|
|
||||||
@@ -1,50 +0,0 @@
|
|||||||
@partition @options @help
|
|
||||||
Feature: osrm-partition command line options: help
|
|
||||||
|
|
||||||
Scenario: osrm-partition - Help should be shown when no options are passed
|
|
||||||
When I try to run "osrm-partition"
|
|
||||||
Then stderr should be empty
|
|
||||||
And stdout should contain /osrm-partition(.exe)? <input.osrm> \[options\]:/
|
|
||||||
And stdout should contain "Options:"
|
|
||||||
And stdout should contain "--version"
|
|
||||||
And stdout should contain "--help"
|
|
||||||
And stdout should contain "Configuration:"
|
|
||||||
And stdout should contain "--threads"
|
|
||||||
And stdout should contain "--balance"
|
|
||||||
And stdout should contain "--boundary"
|
|
||||||
And stdout should contain "--optimizing-cuts"
|
|
||||||
And stdout should contain "--small-component-size"
|
|
||||||
And stdout should contain "--max-cell-sizes"
|
|
||||||
And it should exit with an error
|
|
||||||
|
|
||||||
Scenario: osrm-partition - Help, short
|
|
||||||
When I run "osrm-partition -h"
|
|
||||||
Then stderr should be empty
|
|
||||||
And stdout should contain /osrm-partition(.exe)? <input.osrm> \[options\]:/
|
|
||||||
And stdout should contain "Options:"
|
|
||||||
And stdout should contain "--version"
|
|
||||||
And stdout should contain "--help"
|
|
||||||
And stdout should contain "Configuration:"
|
|
||||||
And stdout should contain "--threads"
|
|
||||||
And stdout should contain "--balance"
|
|
||||||
And stdout should contain "--boundary"
|
|
||||||
And stdout should contain "--optimizing-cuts"
|
|
||||||
And stdout should contain "--small-component-size"
|
|
||||||
And stdout should contain "--max-cell-sizes"
|
|
||||||
And it should exit successfully
|
|
||||||
|
|
||||||
Scenario: osrm-partition - Help, long
|
|
||||||
When I run "osrm-partition --help"
|
|
||||||
Then stderr should be empty
|
|
||||||
And stdout should contain /osrm-partition(.exe)? <input.osrm> \[options\]:/
|
|
||||||
And stdout should contain "Options:"
|
|
||||||
And stdout should contain "--version"
|
|
||||||
And stdout should contain "--help"
|
|
||||||
And stdout should contain "Configuration:"
|
|
||||||
And stdout should contain "--threads"
|
|
||||||
And stdout should contain "--balance"
|
|
||||||
And stdout should contain "--boundary"
|
|
||||||
And stdout should contain "--optimizing-cuts"
|
|
||||||
And stdout should contain "--small-component-size"
|
|
||||||
And stdout should contain "--max-cell-sizes"
|
|
||||||
And it should exit successfully
|
|
||||||
@@ -1,32 +0,0 @@
|
|||||||
@partition @options @invalid
|
|
||||||
Feature: osrm-partition command line options: invalid options
|
|
||||||
|
|
||||||
Background:
|
|
||||||
Given the profile "testbot"
|
|
||||||
And the node map
|
|
||||||
"""
|
|
||||||
a b
|
|
||||||
"""
|
|
||||||
And the ways
|
|
||||||
| nodes |
|
|
||||||
| ab |
|
|
||||||
And the data has been extracted
|
|
||||||
|
|
||||||
Scenario: osrm-partition - Non-existing option
|
|
||||||
When I try to run "osrm-partition --fly-me-to-the-moon"
|
|
||||||
Then stdout should be empty
|
|
||||||
And stderr should contain "option"
|
|
||||||
And stderr should contain "fly-me-to-the-moon"
|
|
||||||
And it should exit with an error
|
|
||||||
|
|
||||||
Scenario: osrm-partition - Check invalid values
|
|
||||||
When I try to run "osrm-partition --max-cell-sizes 4,6@4,16 fly-me-to-the-moon.osrm"
|
|
||||||
Then stdout should be empty
|
|
||||||
And stderr should contain "is invalid"
|
|
||||||
And it should exit with an error
|
|
||||||
|
|
||||||
Scenario: osrm-partition - Check non-descending order
|
|
||||||
When I try to run "osrm-partition --max-cell-sizes 4,64,16 fly-me-to-the-moon.osrm"
|
|
||||||
Then stdout should be empty
|
|
||||||
And stderr should contain "must be sorted in non-descending order"
|
|
||||||
And it should exit with an error
|
|
||||||
@@ -1,19 +0,0 @@
|
|||||||
@partition @options @version
|
|
||||||
Feature: osrm-partition command line options: version
|
|
||||||
|
|
||||||
Background:
|
|
||||||
Given the profile "testbot"
|
|
||||||
|
|
||||||
Scenario: osrm-partition - Version, short
|
|
||||||
When I run "osrm-partition --v"
|
|
||||||
Then stderr should be empty
|
|
||||||
And stdout should contain 1 line
|
|
||||||
And stdout should contain /(v\d{1,2}\.\d{1,2}\.\d{1,2}|\w*-\d+-\w+)/
|
|
||||||
And it should exit successfully
|
|
||||||
|
|
||||||
Scenario: osrm-partition - Version, long
|
|
||||||
When I run "osrm-partition --version"
|
|
||||||
Then stderr should be empty
|
|
||||||
And stdout should contain 1 line
|
|
||||||
And stdout should contain /(v\d{1,2}\.\d{1,2}\.\d{1,2}|\w*-\d+-\w+)/
|
|
||||||
And it should exit successfully
|
|
||||||
@@ -104,4 +104,4 @@ end
|
|||||||
| from | to | route | time |
|
| from | to | route | time |
|
||||||
| a | b | ac,cb,cb | 24.2s |
|
| a | b | ac,cb,cb | 24.2s |
|
||||||
| a | d | ac,cd,cd | 24.2s |
|
| a | d | ac,cd,cd | 24.2s |
|
||||||
| a | e | ac,ce | 20s |
|
| a | e | ac,ce,ce | 20s |
|
||||||
|
|||||||
@@ -13,9 +13,6 @@ properties.max_speed_for_map_matching = 180/3.6
|
|||||||
properties.use_turn_restrictions = true
|
properties.use_turn_restrictions = true
|
||||||
properties.continue_straight_at_waypoint = true
|
properties.continue_straight_at_waypoint = true
|
||||||
properties.weight_name = 'test_version1'
|
properties.weight_name = 'test_version1'
|
||||||
properties.weight_precision = 2
|
|
||||||
|
|
||||||
assert(properties.max_turn_weight == 327.67)
|
|
||||||
|
|
||||||
function node_function (node, result)
|
function node_function (node, result)
|
||||||
print ('node_function ' .. node:id())
|
print ('node_function ' .. node:id())
|
||||||
@@ -66,4 +63,4 @@ end
|
|||||||
| from | to | route | time |
|
| from | to | route | time |
|
||||||
| a | b | ac,cb,cb | 19.2s |
|
| a | b | ac,cb,cb | 19.2s |
|
||||||
| a | d | ac,cd,cd | 19.2s |
|
| a | d | ac,cd,cd | 19.2s |
|
||||||
| a | e | ac,ce | 20s |
|
| a | e | ac,ce,ce | 20s |
|
||||||
|
|||||||
@@ -2,10 +2,10 @@
|
|||||||
Feature: osrm-extract with a profile containing raster source
|
Feature: osrm-extract with a profile containing raster source
|
||||||
Scenario: osrm-extract on a valid profile
|
Scenario: osrm-extract on a valid profile
|
||||||
Given the profile "rasterbot"
|
Given the profile "rasterbot"
|
||||||
And the node locations
|
And the node map
|
||||||
| node | lat | lon |
|
"""
|
||||||
| a | 0.1 | 0.1 |
|
a b
|
||||||
| b | 0.05 | 0.1 |
|
"""
|
||||||
And the ways
|
And the ways
|
||||||
| nodes |
|
| nodes |
|
||||||
| ab |
|
| ab |
|
||||||
@@ -20,6 +20,4 @@ Feature: osrm-extract with a profile containing raster source
|
|||||||
And the data has been saved to disk
|
And the data has been saved to disk
|
||||||
When I run "osrm-extract {osm_file} -p {profile_file}"
|
When I run "osrm-extract {osm_file} -p {profile_file}"
|
||||||
Then stdout should contain "source loader"
|
Then stdout should contain "source loader"
|
||||||
Then stdout should contain "slope: 0.0899"
|
|
||||||
Then stdout should contain "slope: -0.0899"
|
|
||||||
And it should exit successfully
|
And it should exit successfully
|
||||||
|
|||||||
@@ -50,9 +50,8 @@ Feature: Raster - weights
|
|||||||
And I route I should get
|
And I route I should get
|
||||||
| from | to | route | speed |
|
| from | to | route | speed |
|
||||||
| a | b | ab,ab | 8 km/h |
|
| a | b | ab,ab | 8 km/h |
|
||||||
| b | a | ab,ab | 22 km/h |
|
| a | c | ad,dc,dc | 15 km/h |
|
||||||
| a | c | ab,bc,bc | 12 km/h |
|
| b | c | bc,bc | 8 km/h |
|
||||||
| b | c | bc,bc | 22 km/h |
|
|
||||||
| a | d | ad,ad | 15 km/h |
|
| a | d | ad,ad | 15 km/h |
|
||||||
| d | c | dc,dc | 15 km/h |
|
| d | c | dc,dc | 15 km/h |
|
||||||
| d | e | de,de | 10 km/h |
|
| d | e | de,de | 10 km/h |
|
||||||
|
|||||||
@@ -23,16 +23,6 @@ module.exports = function () {
|
|||||||
callback();
|
callback();
|
||||||
});
|
});
|
||||||
|
|
||||||
this.Given(/^the partition extra arguments "(.*?)"$/, (args, callback) => {
|
|
||||||
this.partitionArgs = this.expandOptions(args);
|
|
||||||
callback();
|
|
||||||
});
|
|
||||||
|
|
||||||
this.Given(/^the customize extra arguments "(.*?)"$/, (args, callback) => {
|
|
||||||
this.customizeArgs = this.expandOptions(args);
|
|
||||||
callback();
|
|
||||||
});
|
|
||||||
|
|
||||||
this.Given(/^a grid size of ([0-9.]+) meters$/, (meters, callback) => {
|
this.Given(/^a grid size of ([0-9.]+) meters$/, (meters, callback) => {
|
||||||
this.setGridSize(meters);
|
this.setGridSize(meters);
|
||||||
callback();
|
callback();
|
||||||
@@ -269,7 +259,11 @@ module.exports = function () {
|
|||||||
this.writeAndLinkOSM(callback);
|
this.writeAndLinkOSM(callback);
|
||||||
});
|
});
|
||||||
|
|
||||||
this.Given(/^the data has been (extract|contract|partition|customiz)ed$/, (step, callback) => {
|
this.Given(/^the data has been extracted$/, (callback) => {
|
||||||
|
this.reprocess(callback);
|
||||||
|
});
|
||||||
|
|
||||||
|
this.Given(/^the data has been contracted$/, (callback) => {
|
||||||
this.reprocess(callback);
|
this.reprocess(callback);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
@@ -16,13 +16,10 @@ module.exports = function () {
|
|||||||
|
|
||||||
var headers = new Set(table.raw()[0]);
|
var headers = new Set(table.raw()[0]);
|
||||||
|
|
||||||
got.code = 'unknown';
|
|
||||||
if (res.body.length) {
|
if (res.body.length) {
|
||||||
json = JSON.parse(res.body);
|
json = JSON.parse(res.body);
|
||||||
got.code = json.code;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
if (headers.has('status')) {
|
if (headers.has('status')) {
|
||||||
got.status = json.status.toString();
|
got.status = json.status.toString();
|
||||||
}
|
}
|
||||||
@@ -36,14 +33,13 @@ module.exports = function () {
|
|||||||
got['#'] = row['#'];
|
got['#'] = row['#'];
|
||||||
}
|
}
|
||||||
|
|
||||||
var subMatchings = [''],
|
var subMatchings = [],
|
||||||
turns = '',
|
turns = '',
|
||||||
route = '',
|
route = '',
|
||||||
duration = '',
|
duration = '',
|
||||||
annotation = '',
|
annotation = '',
|
||||||
geometry = '',
|
geometry = '',
|
||||||
OSMIDs = '',
|
OSMIDs = '';
|
||||||
alternatives = '';
|
|
||||||
|
|
||||||
|
|
||||||
if (res.statusCode === 200) {
|
if (res.statusCode === 200) {
|
||||||
@@ -99,10 +95,6 @@ module.exports = function () {
|
|||||||
if (json.matchings.length != 1) throw new Error('*** Checking geometry only supported for matchings with one subtrace');
|
if (json.matchings.length != 1) throw new Error('*** Checking geometry only supported for matchings with one subtrace');
|
||||||
geometry = json.matchings[0].geometry;
|
geometry = json.matchings[0].geometry;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (headers.has('alternatives')) {
|
|
||||||
alternatives = this.alternativesList(json);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (headers.has('turns')) {
|
if (headers.has('turns')) {
|
||||||
@@ -145,9 +137,6 @@ module.exports = function () {
|
|||||||
got['OSM IDs'] = OSMIDs;
|
got['OSM IDs'] = OSMIDs;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (headers.has('alternatives')) {
|
|
||||||
got['alternatives'] = alternatives;
|
|
||||||
}
|
|
||||||
var ok = true;
|
var ok = true;
|
||||||
var encodedResult = '',
|
var encodedResult = '',
|
||||||
extendedTarget = '';
|
extendedTarget = '';
|
||||||
@@ -178,7 +167,8 @@ module.exports = function () {
|
|||||||
|
|
||||||
if (headers.has('matchings')) {
|
if (headers.has('matchings')) {
|
||||||
if (subMatchings.length != row.matchings.split(',').length) {
|
if (subMatchings.length != row.matchings.split(',').length) {
|
||||||
return cb(new Error('*** table matchings and api response are not the same'));
|
ok = false;
|
||||||
|
cb(new Error('*** table matchings and api response are not the same'));
|
||||||
}
|
}
|
||||||
|
|
||||||
row.matchings.split(',').forEach((sub, si) => {
|
row.matchings.split(',').forEach((sub, si) => {
|
||||||
|
|||||||
@@ -12,7 +12,7 @@ module.exports = function () {
|
|||||||
};
|
};
|
||||||
|
|
||||||
this.runAndSafeOutput = (binary, options, callback) => {
|
this.runAndSafeOutput = (binary, options, callback) => {
|
||||||
return this.runBin(binary, this.expandOptions(options), this.environment, (err, stdout, stderr) => {
|
this.runBin(binary, this.expandOptions(options), this.environment, (err, stdout, stderr) => {
|
||||||
this.stdout = stdout;
|
this.stdout = stdout;
|
||||||
this.stderr = stderr;
|
this.stderr = stderr;
|
||||||
this.exitCode = err && err.code || 0;
|
this.exitCode = err && err.code || 0;
|
||||||
@@ -25,22 +25,36 @@ module.exports = function () {
|
|||||||
this.runAndSafeOutput('osrm-routed', options, callback);
|
this.runAndSafeOutput('osrm-routed', options, callback);
|
||||||
});
|
});
|
||||||
|
|
||||||
this.When(/^I run "osrm\-(extract|contract|partition|customize)\s?(.*?)"$/, (binary, options, callback) => {
|
this.When(/^I run "osrm\-extract\s?(.*?)"$/, (options, callback) => {
|
||||||
const stamp = this.processedCacheFile + '.stamp_' + binary;
|
const stamp = this.processedCacheFile + '.extract';
|
||||||
this.runAndSafeOutput('osrm-' + binary, options, (err) => {
|
this.runAndSafeOutput('osrm-extract', options, (err) => {
|
||||||
if (err) return callback(err);
|
if (err) return callback(err);
|
||||||
fs.writeFile(stamp, 'ok', callback);
|
fs.writeFile(stamp, 'ok', callback);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
this.When(/^I try to run "(osrm\-[a-z]+)\s?(.*?)"$/, (binary, options, callback) => {
|
this.When(/^I run "osrm\-contract\s?(.*?)"$/, (options, callback) => {
|
||||||
this.runAndSafeOutput(binary, options, () => { callback(); });
|
const stamp = this.processedCacheFile + '.contract';
|
||||||
|
this.runAndSafeOutput('osrm-contract', options, (err) => {
|
||||||
|
if (err) return callback(err);
|
||||||
|
fs.writeFile(stamp, 'ok', callback);
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
this.When(/^I run "osrm\-datastore\s?(.*?)"(?: with input "([^"]*)")?$/, (options, input, callback) => {
|
this.When(/^I try to run "osrm\-routed\s?(.*?)"$/, (options, callback) => {
|
||||||
let child = this.runAndSafeOutput('osrm-datastore', options, callback);
|
this.runAndSafeOutput('osrm-routed', options, () => { callback(); });
|
||||||
if (input !== undefined)
|
});
|
||||||
child.stdin.write(input);
|
|
||||||
|
this.When(/^I try to run "osrm\-extract\s?(.*?)"$/, (options, callback) => {
|
||||||
|
this.runAndSafeOutput('osrm-extract', options, () => { callback(); });
|
||||||
|
});
|
||||||
|
|
||||||
|
this.When(/^I try to run "osrm\-contract\s?(.*?)"$/, (options, callback) => {
|
||||||
|
this.runAndSafeOutput('osrm-contract', options, () => { callback(); });
|
||||||
|
});
|
||||||
|
|
||||||
|
this.When(/^I run "osrm\-datastore\s?(.*?)"$/, (options, callback) => {
|
||||||
|
this.runAndSafeOutput('osrm-datastore', options, callback);
|
||||||
});
|
});
|
||||||
|
|
||||||
this.Then(/^it should exit successfully$/, () => {
|
this.Then(/^it should exit successfully$/, () => {
|
||||||
@@ -52,9 +66,8 @@ module.exports = function () {
|
|||||||
assert.ok(this.exitCode !== 0 || this.termSignal);
|
assert.ok(this.exitCode !== 0 || this.termSignal);
|
||||||
});
|
});
|
||||||
|
|
||||||
this.Then(/^stdout should( not)? contain "(.*?)"$/, (not, str) => {
|
this.Then(/^stdout should contain "(.*?)"$/, (str) => {
|
||||||
const contains = this.stdout.indexOf(str) > -1;
|
assert.ok(this.stdout.indexOf(str) > -1);
|
||||||
assert.ok(typeof not === 'undefined' ? contains : !contains);
|
|
||||||
});
|
});
|
||||||
|
|
||||||
this.Then(/^stderr should( not)? contain "(.*?)"$/, (not, str) => {
|
this.Then(/^stderr should( not)? contain "(.*?)"$/, (not, str) => {
|
||||||
@@ -88,6 +101,11 @@ module.exports = function () {
|
|||||||
assert.equal(this.stderr.split('\n').length - 1, parseInt(lines));
|
assert.equal(this.stderr.split('\n').length - 1, parseInt(lines));
|
||||||
});
|
});
|
||||||
|
|
||||||
|
this.Then(/^datasource names should contain "(.+)"$/, (expectedData) => {
|
||||||
|
const actualData = fs.readFileSync(this.processedCacheFile + '.datasource_names', {encoding:'UTF-8'}).trim().split('\n').join(',');
|
||||||
|
assert.equal(actualData, expectedData);
|
||||||
|
});
|
||||||
|
|
||||||
this.Given(/^the query options$/, (table, callback) => {
|
this.Given(/^the query options$/, (table, callback) => {
|
||||||
table.raw().forEach(tuple => {
|
table.raw().forEach(tuple => {
|
||||||
this.queryParams[tuple[0]] = tuple[1];
|
this.queryParams[tuple[0]] = tuple[1];
|
||||||
|
|||||||
@@ -10,7 +10,7 @@ module.exports = function () {
|
|||||||
headers = new Set(Object.keys(table.hashes()[0]));
|
headers = new Set(Object.keys(table.hashes()[0]));
|
||||||
|
|
||||||
if (!testedHeaders.some(k => !!headers.has(k))) {
|
if (!testedHeaders.some(k => !!headers.has(k))) {
|
||||||
throw new Error('*** routability table must contain either "forw", "backw", "bothw", "forw_rate" or "backw_mode" column');
|
throw new Error('*** routability table must contain either "forw", "backw", "bothw", "forw_rate" or "backw_rate" column');
|
||||||
}
|
}
|
||||||
|
|
||||||
this.reprocessAndLoadData((e) => {
|
this.reprocessAndLoadData((e) => {
|
||||||
@@ -62,12 +62,9 @@ module.exports = function () {
|
|||||||
// rename forw/backw to forw/backw_speed
|
// rename forw/backw to forw/backw_speed
|
||||||
switch (true) {
|
switch (true) {
|
||||||
case '' === want:
|
case '' === want:
|
||||||
outputRow[direction] = result[direction].status ?
|
|
||||||
result[direction].mode : '';
|
|
||||||
break;
|
|
||||||
case 'x' === want:
|
case 'x' === want:
|
||||||
outputRow[direction] = result[direction].status ?
|
outputRow[direction] = result[direction].status ?
|
||||||
'x' : '';
|
result[direction].status.toString() : '';
|
||||||
break;
|
break;
|
||||||
case /^[\d\.]+ s/.test(want):
|
case /^[\d\.]+ s/.test(want):
|
||||||
// the result here can come back as a non-number value like
|
// the result here can come back as a non-number value like
|
||||||
@@ -91,7 +88,7 @@ module.exports = function () {
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
outputRow[direction] = result[direction].mode || '';
|
throw new Error(util.format('*** Unknown expectation format: %s', want));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (this.FuzzyMatch.match(outputRow[direction], want)) {
|
if (this.FuzzyMatch.match(outputRow[direction], want)) {
|
||||||
@@ -109,7 +106,7 @@ module.exports = function () {
|
|||||||
|
|
||||||
// makes simple a-b request using the given cucumber test routability conditions
|
// makes simple a-b request using the given cucumber test routability conditions
|
||||||
// result is an object containing the calculated values for 'rate', 'status',
|
// result is an object containing the calculated values for 'rate', 'status',
|
||||||
// 'time', 'distance', 'speed' and 'mode', for forwards and backwards routing, as well as
|
// 'time', 'distance', and 'speed' for forwards and backwards routing, as well as
|
||||||
// a bothw object that diffs forwards/backwards
|
// a bothw object that diffs forwards/backwards
|
||||||
var testRoutabilityRow = (i, cb) => {
|
var testRoutabilityRow = (i, cb) => {
|
||||||
var result = {};
|
var result = {};
|
||||||
@@ -126,7 +123,6 @@ module.exports = function () {
|
|||||||
|
|
||||||
r.query = this.query;
|
r.query = this.query;
|
||||||
r.json = JSON.parse(body);
|
r.json = JSON.parse(body);
|
||||||
r.code = r.json.code;
|
|
||||||
r.status = res.statusCode === 200 ? 'x' : null;
|
r.status = res.statusCode === 200 ? 'x' : null;
|
||||||
if (r.status) {
|
if (r.status) {
|
||||||
r.route = this.wayList(r.json.routes[0]);
|
r.route = this.wayList(r.json.routes[0]);
|
||||||
@@ -137,13 +133,6 @@ module.exports = function () {
|
|||||||
r.distance = r.json.routes[0].distance;
|
r.distance = r.json.routes[0].distance;
|
||||||
r.rate = Math.round(r.distance / r.json.routes[0].weight);
|
r.rate = Math.round(r.distance / r.json.routes[0].weight);
|
||||||
r.speed = r.time > 0 ? parseInt(3.6 * r.distance / r.time) : null;
|
r.speed = r.time > 0 ? parseInt(3.6 * r.distance / r.time) : null;
|
||||||
|
|
||||||
// use the mode of the first step of the route
|
|
||||||
// for routability table test, we can assume the mode is the same throughout the route,
|
|
||||||
// since the route is just a single way
|
|
||||||
if( r.json.routes[0].legs[0] && r.json.routes[0].legs[0].steps[0] ) {
|
|
||||||
r.mode = r.json.routes[0].legs[0].steps[0].mode;
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
r.status = null;
|
r.status = null;
|
||||||
}
|
}
|
||||||
@@ -178,7 +167,7 @@ module.exports = function () {
|
|||||||
scb();
|
scb();
|
||||||
};
|
};
|
||||||
|
|
||||||
['rate', 'status', 'time', 'distance', 'speed' ,'mode'].forEach((key) => {
|
['rate', 'status', 'time', 'distance', 'speed'].forEach((key) => {
|
||||||
sq.defer(parseRes, key);
|
sq.defer(parseRes, key);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
@@ -29,10 +29,8 @@ module.exports = function () {
|
|||||||
}
|
}
|
||||||
|
|
||||||
var json;
|
var json;
|
||||||
got.code = 'unknown';
|
|
||||||
if (res.body.length) {
|
if (res.body.length) {
|
||||||
json = JSON.parse(res.body);
|
json = JSON.parse(res.body);
|
||||||
got.code = json.code;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (headers.has('status')) {
|
if (headers.has('status')) {
|
||||||
|
|||||||
@@ -179,7 +179,7 @@ module.exports = function () {
|
|||||||
};
|
};
|
||||||
|
|
||||||
this.extractData = (p, callback) => {
|
this.extractData = (p, callback) => {
|
||||||
let stamp = p.processedCacheFile + '.stamp_extract';
|
let stamp = p.processedCacheFile + '.extract';
|
||||||
fs.exists(stamp, (exists) => {
|
fs.exists(stamp, (exists) => {
|
||||||
if (exists) return callback();
|
if (exists) return callback();
|
||||||
|
|
||||||
@@ -193,7 +193,7 @@ module.exports = function () {
|
|||||||
};
|
};
|
||||||
|
|
||||||
this.contractData = (p, callback) => {
|
this.contractData = (p, callback) => {
|
||||||
let stamp = p.processedCacheFile + '.stamp_contract';
|
let stamp = p.processedCacheFile + '.contract';
|
||||||
fs.exists(stamp, (exists) => {
|
fs.exists(stamp, (exists) => {
|
||||||
if (exists) return callback();
|
if (exists) return callback();
|
||||||
|
|
||||||
@@ -206,46 +206,15 @@ module.exports = function () {
|
|||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
this.partitionData = (p, callback) => {
|
this.extractAndContract = (callback) => {
|
||||||
let stamp = p.processedCacheFile + '.stamp_partition';
|
|
||||||
fs.exists(stamp, (exists) => {
|
|
||||||
if (exists) return callback();
|
|
||||||
|
|
||||||
this.runBin('osrm-partition', util.format('%s %s', p.partitionArgs, p.processedCacheFile), p.environment, (err) => {
|
|
||||||
if (err) {
|
|
||||||
return callback(new Error(util.format('osrm-partition %s: %s', errorReason(err), err.cmd)));
|
|
||||||
}
|
|
||||||
fs.writeFile(stamp, 'ok', callback);
|
|
||||||
});
|
|
||||||
});
|
|
||||||
};
|
|
||||||
|
|
||||||
this.customizeData = (p, callback) => {
|
|
||||||
let stamp = p.processedCacheFile + '.stamp_customize';
|
|
||||||
fs.exists(stamp, (exists) => {
|
|
||||||
if (exists) return callback();
|
|
||||||
|
|
||||||
this.runBin('osrm-customize', util.format('%s %s', p.customizeArgs, p.processedCacheFile), p.environment, (err) => {
|
|
||||||
if (err) {
|
|
||||||
return callback(new Error(util.format('osrm-customize %s: %s', errorReason(err), err)));
|
|
||||||
}
|
|
||||||
fs.writeFile(stamp, 'ok', callback);
|
|
||||||
});
|
|
||||||
});
|
|
||||||
};
|
|
||||||
|
|
||||||
this.extractContractPartitionAndCustomize = (callback) => {
|
|
||||||
// a shallow copy of scenario parameters to avoid data inconsistency
|
// a shallow copy of scenario parameters to avoid data inconsistency
|
||||||
// if a cucumber timeout occurs during deferred jobs
|
// if a cucumber timeout occurs during deferred jobs
|
||||||
let p = {extractArgs: this.extractArgs, contractArgs: this.contractArgs,
|
let p = {extractArgs: this.extractArgs, contractArgs: this.contractArgs,
|
||||||
partitionArgs: this.partitionArgs, customizeArgs: this.customizeArgs,
|
|
||||||
profileFile: this.profileFile, inputCacheFile: this.inputCacheFile,
|
profileFile: this.profileFile, inputCacheFile: this.inputCacheFile,
|
||||||
processedCacheFile: this.processedCacheFile, environment: this.environment};
|
processedCacheFile: this.processedCacheFile, environment: this.environment};
|
||||||
let queue = d3.queue(1);
|
let queue = d3.queue(1);
|
||||||
queue.defer(this.extractData.bind(this), p);
|
queue.defer(this.extractData.bind(this), p);
|
||||||
queue.defer(this.contractData.bind(this), p);
|
queue.defer(this.contractData.bind(this), p);
|
||||||
queue.defer(this.partitionData.bind(this), p);
|
|
||||||
queue.defer(this.customizeData.bind(this), p);
|
|
||||||
queue.awaitAll(callback);
|
queue.awaitAll(callback);
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -259,14 +228,14 @@ module.exports = function () {
|
|||||||
this.reprocess = (callback) => {
|
this.reprocess = (callback) => {
|
||||||
let queue = d3.queue(1);
|
let queue = d3.queue(1);
|
||||||
queue.defer(this.writeAndLinkOSM.bind(this));
|
queue.defer(this.writeAndLinkOSM.bind(this));
|
||||||
queue.defer(this.extractContractPartitionAndCustomize.bind(this));
|
queue.defer(this.extractAndContract.bind(this));
|
||||||
queue.awaitAll(callback);
|
queue.awaitAll(callback);
|
||||||
};
|
};
|
||||||
|
|
||||||
this.reprocessAndLoadData = (callback) => {
|
this.reprocessAndLoadData = (callback) => {
|
||||||
let queue = d3.queue(1);
|
let queue = d3.queue(1);
|
||||||
queue.defer(this.writeAndLinkOSM.bind(this));
|
queue.defer(this.writeAndLinkOSM.bind(this));
|
||||||
queue.defer(this.extractContractPartitionAndCustomize.bind(this));
|
queue.defer(this.extractAndContract.bind(this));
|
||||||
queue.defer(this.osrmLoader.load.bind(this.osrmLoader), this.processedCacheFile);
|
queue.defer(this.osrmLoader.load.bind(this.osrmLoader), this.processedCacheFile);
|
||||||
queue.awaitAll(callback);
|
queue.awaitAll(callback);
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -31,15 +31,14 @@ module.exports = function () {
|
|||||||
this.DEFAULT_ENVIRONMENT = Object.assign({STXXLCFG: stxxl_config}, process.env);
|
this.DEFAULT_ENVIRONMENT = Object.assign({STXXLCFG: stxxl_config}, process.env);
|
||||||
this.DEFAULT_PROFILE = 'bicycle';
|
this.DEFAULT_PROFILE = 'bicycle';
|
||||||
this.DEFAULT_INPUT_FORMAT = 'osm';
|
this.DEFAULT_INPUT_FORMAT = 'osm';
|
||||||
this.DEFAULT_LOAD_METHOD = 'datastore';
|
this.DEFAULT_LOAD_METHOD = this.PLATFORM_WINDOWS ? 'directly' : 'datastore';
|
||||||
this.DEFAULT_ORIGIN = [1,1];
|
this.DEFAULT_ORIGIN = [1,1];
|
||||||
this.OSM_USER = 'osrm';
|
this.OSM_USER = 'osrm';
|
||||||
|
this.OSM_GENERATOR = 'osrm-test';
|
||||||
this.OSM_UID = 1;
|
this.OSM_UID = 1;
|
||||||
this.OSM_TIMESTAMP = '2000-01-01T00:00:00Z';
|
this.OSM_TIMESTAMP = '2000-01-01T00:00:00Z';
|
||||||
this.WAY_SPACING = 100;
|
this.WAY_SPACING = 100;
|
||||||
this.DEFAULT_GRID_SIZE = 100; // meters
|
this.DEFAULT_GRID_SIZE = 100; // meters
|
||||||
// get algorithm name from the command line profile argument
|
|
||||||
this.ROUTING_ALGORITHM = process.argv[process.argv.indexOf('-p') + 1] === 'mld' ? 'MLD' : 'CH';
|
|
||||||
|
|
||||||
this.OSRM_PORT = process.env.OSRM_PORT && parseInt(process.env.OSRM_PORT) || 5000;
|
this.OSRM_PORT = process.env.OSRM_PORT && parseInt(process.env.OSRM_PORT) || 5000;
|
||||||
this.HOST = 'http://127.0.0.1:' + this.OSRM_PORT;
|
this.HOST = 'http://127.0.0.1:' + this.OSRM_PORT;
|
||||||
|
|||||||
@@ -35,8 +35,6 @@ module.exports = function () {
|
|||||||
this.queryParams = {};
|
this.queryParams = {};
|
||||||
this.extractArgs = '';
|
this.extractArgs = '';
|
||||||
this.contractArgs = '';
|
this.contractArgs = '';
|
||||||
this.partitionArgs = '';
|
|
||||||
this.customizeArgs = '';
|
|
||||||
this.environment = Object.assign(this.DEFAULT_ENVIRONMENT);
|
this.environment = Object.assign(this.DEFAULT_ENVIRONMENT);
|
||||||
this.resetOSM();
|
this.resetOSM();
|
||||||
|
|
||||||
|
|||||||
@@ -180,11 +180,6 @@ module.exports = function () {
|
|||||||
return merged;
|
return merged;
|
||||||
};
|
};
|
||||||
|
|
||||||
this.alternativesList = (instructions) => {
|
|
||||||
// alternatives_count come from tracepoints list
|
|
||||||
return instructions.tracepoints.map(t => t.alternatives_count.toString()).join(',');
|
|
||||||
};
|
|
||||||
|
|
||||||
this.lanesList = (instructions) => {
|
this.lanesList = (instructions) => {
|
||||||
return this.extractInstructionList(instructions, instruction => {
|
return this.extractInstructionList(instructions, instruction => {
|
||||||
if( 'lanes' in instruction.intersections[0] )
|
if( 'lanes' in instruction.intersections[0] )
|
||||||
|
|||||||
@@ -46,10 +46,6 @@ module.exports = function () {
|
|||||||
let child = child_process.execFile(cmd, opts, {maxBuffer: 1024 * 1024 * 1000, env: env}, callback);
|
let child = child_process.execFile(cmd, opts, {maxBuffer: 1024 * 1024 * 1000, env: env}, callback);
|
||||||
child.on('exit', function(code) {
|
child.on('exit', function(code) {
|
||||||
log.write(util.format('*** %s exited with code %d\n', bin, code));
|
log.write(util.format('*** %s exited with code %d\n', bin, code));
|
||||||
// remove listeners and close log file -> some tail messages can be lost
|
|
||||||
child.stdout.removeListener('data', child.logFunc);
|
|
||||||
child.stderr.removeListener('data', child.logFunc);
|
|
||||||
log.end();
|
|
||||||
}.bind(this));
|
}.bind(this));
|
||||||
this.setupOutputLog(child, log);
|
this.setupOutputLog(child, log);
|
||||||
return child;
|
return child;
|
||||||
|
|||||||
@@ -39,8 +39,6 @@ module.exports = function () {
|
|||||||
|
|
||||||
let json = JSON.parse(body);
|
let json = JSON.parse(body);
|
||||||
|
|
||||||
got.code = json.code;
|
|
||||||
|
|
||||||
let hasRoute = json.code === 'Ok';
|
let hasRoute = json.code === 'Ok';
|
||||||
|
|
||||||
if (hasRoute) {
|
if (hasRoute) {
|
||||||
@@ -81,101 +79,101 @@ module.exports = function () {
|
|||||||
|
|
||||||
if (headers.has('route')) {
|
if (headers.has('route')) {
|
||||||
got.route = (instructions || '').trim();
|
got.route = (instructions || '').trim();
|
||||||
}
|
|
||||||
|
|
||||||
if (headers.has('summary')) {
|
if (headers.has('summary')) {
|
||||||
got.summary = (summary || '').trim();
|
got.summary = (summary || '').trim();
|
||||||
}
|
|
||||||
|
|
||||||
if (headers.has('alternative')) {
|
|
||||||
// TODO examine more than first alternative?
|
|
||||||
got.alternative ='';
|
|
||||||
if (json.routes && json.routes.length > 1)
|
|
||||||
got.alternative = this.wayList(json.routes[1]);
|
|
||||||
}
|
|
||||||
|
|
||||||
var distance = hasRoute && json.routes[0].distance,
|
|
||||||
time = hasRoute && json.routes[0].duration,
|
|
||||||
weight = hasRoute && json.routes[0].weight;
|
|
||||||
|
|
||||||
if (headers.has('distance')) {
|
|
||||||
if (row.distance.length) {
|
|
||||||
if (!row.distance.match(/\d+m/))
|
|
||||||
return cb(new Error('*** Distance must be specified in meters. (ex: 250m)'));
|
|
||||||
got.distance = instructions ? util.format('%dm', distance) : '';
|
|
||||||
} else {
|
|
||||||
got.distance = '';
|
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
if (headers.has('weight')) {
|
if (headers.has('alternative')) {
|
||||||
if (row.weight.length) {
|
// TODO examine more than first alternative?
|
||||||
if (!row.weight.match(/[\d\.]+/))
|
got.alternative ='';
|
||||||
return cb(new Error('*** Weight must be specified as a numeric value. (ex: 8)'));
|
if (json.routes && json.routes.length > 1)
|
||||||
got.weight = instructions ? util.format('%d', weight) : '';
|
got.alternative = this.wayList(json.routes[1]);
|
||||||
} else {
|
|
||||||
got.weight = '';
|
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
if (headers.has('time')) {
|
var distance = hasRoute && json.routes[0].distance,
|
||||||
if (!row.time.match(/\d+s/))
|
time = hasRoute && json.routes[0].duration,
|
||||||
return cb(new Error('*** Time must be specied in seconds. (ex: 60s)'));
|
weight = hasRoute && json.routes[0].weight;
|
||||||
got.time = instructions ? util.format('%ds', time) : '';
|
|
||||||
}
|
|
||||||
|
|
||||||
if (headers.has('lanes')) {
|
if (headers.has('distance')) {
|
||||||
got.lanes = (lanes || '').trim();
|
if (row.distance.length) {
|
||||||
}
|
if (!row.distance.match(/\d+m/))
|
||||||
|
return cb(new Error('*** Distance must be specified in meters. (ex: 250m)'));
|
||||||
if (headers.has('speed')) {
|
got.distance = instructions ? util.format('%dm', distance) : '';
|
||||||
if (row.speed !== '' && instructions) {
|
} else {
|
||||||
if (!row.speed.match(/\d+ km\/h/))
|
got.distance = '';
|
||||||
cb(new Error('*** Speed must be specied in km/h. (ex: 50 km/h)'));
|
}
|
||||||
var speed = time > 0 ? Math.round(3.6*distance/time) : null;
|
|
||||||
got.speed = util.format('%d km/h', speed);
|
|
||||||
} else {
|
|
||||||
got.speed = '';
|
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
if (headers.has('intersections')) {
|
if (headers.has('weight')) {
|
||||||
got.intersections = (intersections || '').trim();
|
if (row.weight.length) {
|
||||||
}
|
if (!row.weight.match(/[\d\.]+/))
|
||||||
|
return cb(new Error('*** Weight must be specified as a numeric value. (ex: 8)'));
|
||||||
if (headers.has('locations')){
|
got.weight = instructions ? util.format('%d', weight) : '';
|
||||||
got.locations = (locations || '').trim();
|
} else {
|
||||||
}
|
got.weight = '';
|
||||||
|
}
|
||||||
// if header matches 'a:*', parse out the values for *
|
|
||||||
// and return in that header
|
|
||||||
headers.forEach((k) => {
|
|
||||||
let whitelist = ['duration', 'distance', 'datasources', 'nodes', 'weight', 'speed'];
|
|
||||||
if (k.match(/^a:/)) {
|
|
||||||
let a_type = k.slice(2);
|
|
||||||
if (whitelist.indexOf(a_type) == -1)
|
|
||||||
return cb(new Error('Unrecognized annotation field', a_type));
|
|
||||||
if (annotation && !annotation[a_type])
|
|
||||||
return cb(new Error('Annotation not found in response', a_type));
|
|
||||||
got[k] = annotation && annotation[a_type] || '';
|
|
||||||
}
|
}
|
||||||
});
|
|
||||||
|
|
||||||
var putValue = (key, value) => {
|
if (headers.has('time')) {
|
||||||
if (headers.has(key)) got[key] = instructions ? value : '';
|
if (!row.time.match(/\d+s/))
|
||||||
};
|
return cb(new Error('*** Time must be specied in seconds. (ex: 60s)'));
|
||||||
|
got.time = instructions ? util.format('%ds', time) : '';
|
||||||
|
}
|
||||||
|
|
||||||
putValue('ref', refs);
|
if (headers.has('lanes')) {
|
||||||
putValue('bearing', bearings);
|
got.lanes = (lanes || '').trim();
|
||||||
putValue('turns', turns);
|
}
|
||||||
putValue('modes', modes);
|
|
||||||
putValue('times', times);
|
if (headers.has('speed')) {
|
||||||
putValue('distances', distances);
|
if (row.speed !== '' && instructions) {
|
||||||
putValue('pronunciations', pronunciations);
|
if (!row.speed.match(/\d+ km\/h/))
|
||||||
putValue('destinations', destinations);
|
cb(new Error('*** Speed must be specied in km/h. (ex: 50 km/h)'));
|
||||||
putValue('weight_name', weight_name);
|
var speed = time > 0 ? Math.round(3.6*distance/time) : null;
|
||||||
putValue('weights', weights);
|
got.speed = util.format('%d km/h', speed);
|
||||||
putValue('weight', weight);
|
} else {
|
||||||
|
got.speed = '';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (headers.has('intersections')) {
|
||||||
|
got.intersections = (intersections || '').trim();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (headers.has('locations')){
|
||||||
|
got.locations = (locations || '').trim();
|
||||||
|
}
|
||||||
|
|
||||||
|
// if header matches 'a:*', parse out the values for *
|
||||||
|
// and return in that header
|
||||||
|
headers.forEach((k) => {
|
||||||
|
let whitelist = ['duration', 'distance', 'datasources', 'nodes', 'weight', 'speed'];
|
||||||
|
if (k.match(/^a:/)) {
|
||||||
|
let a_type = k.slice(2);
|
||||||
|
if (whitelist.indexOf(a_type) == -1)
|
||||||
|
return cb(new Error('Unrecognized annotation field', a_type));
|
||||||
|
if (!annotation[a_type])
|
||||||
|
return cb(new Error('Annotation not found in response', a_type));
|
||||||
|
got[k] = annotation[a_type];
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
var putValue = (key, value) => {
|
||||||
|
if (headers.has(key)) got[key] = instructions ? value : '';
|
||||||
|
};
|
||||||
|
|
||||||
|
putValue('ref', refs);
|
||||||
|
putValue('bearing', bearings);
|
||||||
|
putValue('turns', turns);
|
||||||
|
putValue('modes', modes);
|
||||||
|
putValue('times', times);
|
||||||
|
putValue('distances', distances);
|
||||||
|
putValue('pronunciations', pronunciations);
|
||||||
|
putValue('destinations', destinations);
|
||||||
|
putValue('weight_name', weight_name);
|
||||||
|
putValue('weights', weights);
|
||||||
|
putValue('weight', weight);
|
||||||
|
}
|
||||||
|
|
||||||
for (var key in row) {
|
for (var key in row) {
|
||||||
if (this.FuzzyMatch.match(got[key], row[key])) {
|
if (this.FuzzyMatch.match(got[key], row[key])) {
|
||||||
|
|||||||
@@ -3,7 +3,6 @@ Feature: Alternative route
|
|||||||
|
|
||||||
Background:
|
Background:
|
||||||
Given the profile "testbot"
|
Given the profile "testbot"
|
||||||
Given a grid size of 200 meters
|
|
||||||
|
|
||||||
Scenario: Alternative Loop Paths
|
Scenario: Alternative Loop Paths
|
||||||
Given the node map
|
Given the node map
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user