Compare commits

...

18 Commits

Author SHA1 Message Date
Patrick Niklaus
851ae2ce4f Bump OSRM version to final 5.13.0 release 2017-10-30 19:48:38 +00:00
Patrick Niklaus
577801ad38 Bump version to RC4 2017-10-26 19:54:23 +00:00
Daniel J. Hofmann
7a86b7985f Adds cardinal_directions flag to profiles and disables ref-rewriting by default 2017-10-26 19:51:09 +00:00
Denis Koronchik
41551119f2 Review fixes 2017-10-26 19:51:00 +00:00
Denis Koronchik
521636c854 Work on forward/backward ref's support 2017-10-26 19:50:49 +00:00
Patrick Niklaus
6172dffd35 Bump version 2017-10-24 10:42:59 +00:00
Michael Krasnyk
57099e4a85 Add unclassified roads to restricted_highway_whitelist, #4631 2017-10-24 10:04:44 +00:00
Patrick Niklaus
6be468bdb4 Contract the exclude-flag sub-graphs as well 2017-10-24 10:04:44 +00:00
Patrick Niklaus
29ce651493 Enable building the 5.13 branch 2017-10-20 15:24:29 +00:00
Patrick Niklaus
1b53b90eec Add missing entry to changelog 2017-10-20 15:08:18 +00:00
Patrick Niklaus
5f84032261 Bump version to RC2 2017-10-20 14:57:08 +00:00
Patrick Niklaus
9c73e42f5f Rename locations-cache -> location-cache 2017-10-20 14:56:10 +00:00
Patrick Niklaus
c638499c0f Add changelog entry for changed behavior 2017-10-20 14:56:10 +00:00
Patrick Niklaus
7c5977daf6 Change --use-location-cache=false to --disbale-location-cache 2017-10-20 14:56:10 +00:00
Patrick Niklaus
253522c406 Fix tests 2017-10-20 14:56:10 +00:00
Patrick Niklaus
1e2d3882d1 Replace use of implicit_value since that broke with boost 1.65 2017-10-20 14:56:10 +00:00
Patrick Niklaus
fd43586b60 Update package-lock 2017-10-18 15:02:51 +00:00
Patrick Niklaus
fd13ffe7ba Version bump for RC1 2017-10-17 14:11:27 +00:00
18 changed files with 399 additions and 233 deletions

View File

@ -13,6 +13,7 @@ notifications:
branches: branches:
only: only:
- master - master
- "5.13"
# enable building tags # enable building tags
- /^v\d+\.\d+(\.\d+)?(-\S*)?$/ - /^v\d+\.\d+(\.\d+)?(-\S*)?$/

View File

@ -1,15 +1,22 @@
# UNRELEASED # 5.13.0
- Changes from 5.12: - Changes from 5.12:
- Profile: - Profile:
- Append cardinal directions from route relations to ref fields to improve instructions - Append cardinal directions from route relations to ref fields to improve instructions; off by default see `profile.cardinal_directions`
- Support of `distance` weight in foot and bicycle profiles - Support of `distance` weight in foot and bicycle profiles
- Support of relations processing - Support of relations processing
- Added `way:get_location_tag(key)` method to get location-dependent tags https://github.com/Project-OSRM/osrm-backend/wiki/Using-location-dependent-data-in-profiles - Added `way:get_location_tag(key)` method to get location-dependent tags https://github.com/Project-OSRM/osrm-backend/wiki/Using-location-dependent-data-in-profiles
- Added `forward_ref` and `backward_ref` support
- Left-side driving mode is specified by a local Boolean flag `is_left_hand_driving` in `ExtractionWay` and `ExtractionTurn` - Left-side driving mode is specified by a local Boolean flag `is_left_hand_driving` in `ExtractionWay` and `ExtractionTurn`
- Support literal values for maxspeeds in NO, PL and ZA - Support literal values for maxspeeds in NO, PL and ZA
- Infrastructure: - Infrastructure:
- Lua 5.1 support is removed due to lack of support in sol2 https://github.com/ThePhD/sol2/issues/302 - Lua 5.1 support is removed due to lack of support in sol2 https://github.com/ThePhD/sol2/issues/302
- Fixed pkg-config version of OSRM - Fixed pkg-config version of OSRM
- Removed `.osrm.core` file since CoreCH is deprecated now.
- Tools:
- Because of boost/program_options#32 with boost 1.65+ we needed to change the behavior of the following flags to not accept `={true|false}` anymore:
- `--use-locations-cache=false` becomes `--disable-location-cache`
- `--parse-conditional-restrictions=true` becomes `--parse-conditional-restrictions`
- The deprecated options `--use-level-cache` and `--generate-edge-lookup`
- Bugfixes: - Bugfixes:
- Fixed #4348: Some cases of sliproads pre-processing were broken - Fixed #4348: Some cases of sliproads pre-processing were broken
- Fixed #4331: Correctly compute left/right modifiers of forks in case the fork is curved. - Fixed #4331: Correctly compute left/right modifiers of forks in case the fork is curved.

View File

@ -171,7 +171,9 @@ is_startpoint | Boolean | Can a journey start on this
roundabout | Boolean | Is this part of a roundabout? roundabout | Boolean | Is this part of a roundabout?
circular | Boolean | Is this part of a non-roundabout circular junction? circular | Boolean | Is this part of a non-roundabout circular junction?
name | String | Name of the way name | String | Name of the way
ref | String | Road number ref | String | Road number (equal to set `forward_ref` and `backward_ref` with one value)
forward_ref | String | Road number in forward way direction
backward_ref | String | Road number in backward way direction
destinations | String | The road's destinations destinations | String | The road's destinations
exits | String | The ramp's exit numbers or names exits | String | The ramp's exit numbers or names
pronunciation | String | Name pronunciation pronunciation | String | Name pronunciation

View File

@ -161,6 +161,7 @@ Feature: Car - Restricted access
| runway | private | | | permissive | x | x | | | runway | private | | | permissive | x | x | |
| primary | forestry | | yes | | x | x | | | primary | forestry | | yes | | x | x | |
| cycleway | | | designated | | x | x | | | cycleway | | | designated | | x | x | |
| unclassified | | | destination | destination | x | x | |
| residential | | yes | no | | | | | | residential | | yes | no | | | | |
| motorway | yes | permissive | | private | x | | implied oneway | | motorway | yes | permissive | | private | x | | implied oneway |
| trunk | agricultural | designated | permissive | no | | | | | trunk | agricultural | designated | permissive | no | | | |

View File

@ -677,7 +677,7 @@ Feature: Car - Turn restrictions
# https://www.openstreetmap.org/#map=18/38.91099/-77.00888 # https://www.openstreetmap.org/#map=18/38.91099/-77.00888
@no_turning @conditionals @no_turning @conditionals
Scenario: Car - DC North capitol situation, two on one off Scenario: Car - DC North capitol situation, two on one off
Given the extract extra arguments "--parse-conditional-restrictions=1" Given the extract extra arguments "--parse-conditional-restrictions"
# 9pm Wed 02 May, 2017 UTC, 5pm EDT # 9pm Wed 02 May, 2017 UTC, 5pm EDT
Given the contract extra arguments "--time-zone-file=test/data/tz/{timezone_names}/dc.geojson --parse-conditionals-from-now=1493845200" Given the contract extra arguments "--time-zone-file=test/data/tz/{timezone_names}/dc.geojson --parse-conditionals-from-now=1493845200"
Given the customize extra arguments "--time-zone-file=test/data/tz/{timezone_names}/dc.geojson --parse-conditionals-from-now=1493845200" Given the customize extra arguments "--time-zone-file=test/data/tz/{timezone_names}/dc.geojson --parse-conditionals-from-now=1493845200"
@ -724,7 +724,7 @@ Feature: Car - Turn restrictions
@no_turning @conditionals @no_turning @conditionals
Scenario: Car - DC North capitol situation, one on two off Scenario: Car - DC North capitol situation, one on two off
Given the extract extra arguments "--parse-conditional-restrictions=1" Given the extract extra arguments "--parse-conditional-restrictions"
# 10:30am utc, wed, 6:30am est # 10:30am utc, wed, 6:30am est
Given the contract extra arguments "--time-zone-file=test/data/tz/{timezone_names}/dc.geojson --parse-conditionals-from-now=1493807400" Given the contract extra arguments "--time-zone-file=test/data/tz/{timezone_names}/dc.geojson --parse-conditionals-from-now=1493807400"
Given the customize extra arguments "--time-zone-file=test/data/tz/{timezone_names}/dc.geojson --parse-conditionals-from-now=1493807400" Given the customize extra arguments "--time-zone-file=test/data/tz/{timezone_names}/dc.geojson --parse-conditionals-from-now=1493807400"
@ -848,7 +848,7 @@ Feature: Car - Turn restrictions
@only_turning @conditionals @only_turning @conditionals
Scenario: Car - Somewhere in London, the UK, GMT timezone Scenario: Car - Somewhere in London, the UK, GMT timezone
Given the extract extra arguments "--parse-conditional-restrictions=1" Given the extract extra arguments "--parse-conditional-restrictions"
# 9am UTC, 10am BST # 9am UTC, 10am BST
Given the contract extra arguments "--time-zone-file=test/data/tz/{timezone_names}/london.geojson --parse-conditionals-from-now=1493802000" Given the contract extra arguments "--time-zone-file=test/data/tz/{timezone_names}/london.geojson --parse-conditionals-from-now=1493802000"
Given the customize extra arguments "--time-zone-file=test/data/tz/{timezone_names}/london.geojson --parse-conditionals-from-now=1493802000" Given the customize extra arguments "--time-zone-file=test/data/tz/{timezone_names}/london.geojson --parse-conditionals-from-now=1493802000"

View File

@ -4,6 +4,11 @@ Feature: Car - route relations
Given the profile "car" Given the profile "car"
Scenario: Assignment using relation membership roles Scenario: Assignment using relation membership roles
Given the profile file "car" initialized with
"""
profile.cardinal_directions = true
"""
Given the node map Given the node map
""" """
a----------------b a----------------b
@ -26,7 +31,63 @@ Feature: Car - route relations
| b,a | westbound,westbound | I 80 $west,I 80 $west | | b,a | westbound,westbound | I 80 $west,I 80 $west |
| c,d | eastbound,eastbound | I 80 $east; CO 93 $east,I 80 $east; CO 93 $east | | c,d | eastbound,eastbound | I 80 $east; CO 93 $east,I 80 $east; CO 93 $east |
Scenario: No cardinal directions by default
Given the profile file "car" initialized with
"""
profile.cardinal_directions = false
"""
Given the node map
"""
a----------------b
c----------------d
"""
And the ways
| nodes | name | highway | ref |
| ba | westbound | motorway | I 80 |
| cd | eastbound | motorway | I 80;CO 93 |
And the relations
| type | way:east | way:west | route | ref | network |
| route | cd | ba | road | 80 | US:I |
| route | cd | ba | road | 93 | US:CO |
When I route I should get
| waypoints | route | ref |
| b,a | westbound,westbound | I 80,I 80 |
| c,d | eastbound,eastbound | I 80; CO 93,I 80; CO 93 |
Scenario: No cardinal directions by default
Given the node map
"""
a----------------b
c----------------d
"""
And the ways
| nodes | name | highway | ref |
| ba | westbound | motorway | I 80 |
| cd | eastbound | motorway | I 80;CO 93 |
And the relations
| type | way:east | way:west | route | ref | network |
| route | cd | ba | road | 80 | US:I |
| route | cd | ba | road | 93 | US:CO |
When I route I should get
| waypoints | route | ref |
| b,a | westbound,westbound | I 80,I 80 |
| c,d | eastbound,eastbound | I 80; CO 93,I 80; CO 93 |
Scenario: Assignment using relation direction property (no role on members) Scenario: Assignment using relation direction property (no role on members)
Given the profile file "car" initialized with
"""
profile.cardinal_directions = true
"""
Given the node map Given the node map
""" """
a----------------b a----------------b
@ -51,6 +112,11 @@ Feature: Car - route relations
Scenario: Forward assignment on one-way roads using relation direction property Scenario: Forward assignment on one-way roads using relation direction property
Given the profile file "car" initialized with
"""
profile.cardinal_directions = true
"""
Given the node map Given the node map
""" """
a----------------b a----------------b
@ -74,31 +140,41 @@ Feature: Car - route relations
| c,d | eastbound,eastbound | I 80 $east; CO 93 $east,I 80 $east; CO 93 $east | | c,d | eastbound,eastbound | I 80 $east; CO 93 $east,I 80 $east; CO 93 $east |
# Scenario: Forward/backward assignment on non-divided roads with role direction tag Scenario: Forward/backward assignment on non-divided roads with role direction tag
# Given the node map Given the profile file "car" initialized with
# """ """
# a----------------b profile.cardinal_directions = true
# """ """
#
# And the ways Given the node map
# | nodes | name | highway | ref | oneway | """
# | ab | mainroad | motorway | I 80 | no | a----------------b
# """
# And the relations
# | type | direction | way:forward | route | ref | network | And the ways
# | route | west | ab | road | 80 | US:I | | nodes | name | highway | ref | oneway |
# | ab | mainroad | motorway | I 80 | no |
# And the relations
# | type | direction | way:backward | route | ref | network | And the relations
# | route | east | ab | road | 80 | US:I | | type | direction | way:forward | route | ref | network |
# | route | west | ab | road | 80 | US:I |
# When I route I should get
# | waypoints | route | ref | And the relations
# | b,a | mainroad,mainroad | I 80 $west,I 80 $west | | type | direction | way:backward | route | ref | network |
# | a,b | mainroad,mainroad | I 80 $east,I 80 $east | | route | east | ab | road | 80 | US:I |
When I route I should get
| waypoints | route | ref |
| a,b | mainroad,mainroad | I 80 $west,I 80 $west |
| b,a | mainroad,mainroad | I 80 $east,I 80 $east |
Scenario: Conflict between role and direction Scenario: Conflict between role and direction
Given the profile file "car" initialized with
"""
profile.cardinal_directions = true
"""
Given the node map Given the node map
""" """
a----------------b a----------------b
@ -118,6 +194,11 @@ Feature: Car - route relations
Scenario: Conflict between role and superrelation direction Scenario: Conflict between role and superrelation direction
Given the profile file "car" initialized with
"""
profile.cardinal_directions = true
"""
Given the node map Given the node map
""" """
a----------------b a----------------b
@ -140,6 +221,11 @@ Feature: Car - route relations
| a,b | eastbound,eastbound | I 80,I 80 | | a,b | eastbound,eastbound | I 80,I 80 |
Scenario: Conflict between role and superrelation role Scenario: Conflict between role and superrelation role
Given the profile file "car" initialized with
"""
profile.cardinal_directions = true
"""
Given the node map Given the node map
""" """
a----------------b a----------------b
@ -162,6 +248,11 @@ Feature: Car - route relations
| a,b | eastbound,eastbound | I 80,I 80 | | a,b | eastbound,eastbound | I 80,I 80 |
Scenario: Direction only available via superrelation role Scenario: Direction only available via superrelation role
Given the profile file "car" initialized with
"""
profile.cardinal_directions = true
"""
Given the node map Given the node map
""" """
a----------------b a----------------b
@ -184,6 +275,11 @@ Feature: Car - route relations
| a,b | eastbound,eastbound | I 80 $east,I 80 $east | | a,b | eastbound,eastbound | I 80 $east,I 80 $east |
Scenario: Direction only available via superrelation direction Scenario: Direction only available via superrelation direction
Given the profile file "car" initialized with
"""
profile.cardinal_directions = true
"""
Given the node map Given the node map
""" """
a----------------b a----------------b
@ -205,6 +301,7 @@ Feature: Car - route relations
| waypoints | route | ref | | waypoints | route | ref |
| a,b | eastbound,eastbound | I 80 $east,I 80 $east | | a,b | eastbound,eastbound | I 80 $east,I 80 $east |
# Scenario: Three levels of indirection # Scenario: Three levels of indirection
# Given the node map # Given the node map
# """ # """

View File

@ -51,7 +51,7 @@ Feature: osrm-extract lua ways:get_nodes()
| ab | | ab |
And the data has been saved to disk And the data has been saved to disk
When I try to run "osrm-extract --profile {profile_file} {osm_file} --location-dependent-data test/data/regions/null-island.geojson --use-locations-cache=false" When I try to run "osrm-extract --profile {profile_file} {osm_file} --location-dependent-data test/data/regions/null-island.geojson --disable-location-cache"
Then it should exit with an error Then it should exit with an error
And stderr should contain "invalid location" And stderr should contain "invalid location"
@ -79,7 +79,7 @@ Feature: osrm-extract lua ways:get_nodes()
| ab | | ab |
And the data has been saved to disk And the data has been saved to disk
When I run "osrm-extract --profile {profile_file} {osm_file} --location-dependent-data test/data/regions/null-island.geojson --use-locations-cache=false" When I run "osrm-extract --profile {profile_file} {osm_file} --location-dependent-data test/data/regions/null-island.geojson --disable-location-cache"
Then it should exit successfully Then it should exit successfully
And stdout should contain "answer 42" And stdout should contain "answer 42"
And stdout should contain "boolean true" And stdout should contain "boolean true"
@ -116,7 +116,7 @@ Feature: osrm-extract lua ways:get_nodes()
| ef | Null Island | | ef | Null Island |
And the data has been saved to disk And the data has been saved to disk
When I run "osrm-extract --profile {profile_file} {osm_file} --location-dependent-data test/data/regions/null-island.geojson --location-dependent-data test/data/regions/hong-kong.geojson --use-locations-cache=false" When I run "osrm-extract --profile {profile_file} {osm_file} --location-dependent-data test/data/regions/null-island.geojson --location-dependent-data test/data/regions/hong-kong.geojson --disable-location-cache"
Then it should exit successfully Then it should exit successfully
And stdout should not contain "1 GeoJSON polygon" And stdout should not contain "1 GeoJSON polygon"
And stdout should contain "2 GeoJSON polygons" And stdout should contain "2 GeoJSON polygons"

View File

@ -81,6 +81,8 @@ inline auto contractExcludableGraph(ContractorGraph contractor_graph_,
auto filtered_core_graph = auto filtered_core_graph =
shared_core_graph.Filter([&filter](const NodeID node) { return filter[node]; }); shared_core_graph.Filter([&filter](const NodeID node) { return filter[node]; });
contractGraph(filtered_core_graph, is_shared_core, is_shared_core, node_weights);
edge_container.Merge(toEdges<QueryEdge>(std::move(filtered_core_graph))); edge_container.Merge(toEdges<QueryEdge>(std::move(filtered_core_graph)));
} }

View File

@ -47,7 +47,8 @@ struct ExtractionWay
duration = -1; duration = -1;
weight = -1; weight = -1;
name.clear(); name.clear();
ref.clear(); forward_ref.clear();
backward_ref.clear();
pronunciation.clear(); pronunciation.clear();
destinations.clear(); destinations.clear();
exits.clear(); exits.clear();
@ -67,8 +68,10 @@ struct ExtractionWay
// wrappers to allow assigning nil (nullptr) to string values // wrappers to allow assigning nil (nullptr) to string values
void SetName(const char *value) { detail::maybeSetString(name, value); } void SetName(const char *value) { detail::maybeSetString(name, value); }
const char *GetName() const { return name.c_str(); } const char *GetName() const { return name.c_str(); }
void SetRef(const char *value) { detail::maybeSetString(ref, value); } void SetForwardRef(const char *value) { detail::maybeSetString(forward_ref, value); }
const char *GetRef() const { return ref.c_str(); } const char *GetForwardRef() const { return forward_ref.c_str(); }
void SetBackwardRef(const char *value) { detail::maybeSetString(backward_ref, value); }
const char *GetBackwardRef() const { return backward_ref.c_str(); }
void SetDestinations(const char *value) { detail::maybeSetString(destinations, value); } void SetDestinations(const char *value) { detail::maybeSetString(destinations, value); }
const char *GetDestinations() const { return destinations.c_str(); } const char *GetDestinations() const { return destinations.c_str(); }
void SetExits(const char *value) { detail::maybeSetString(exits, value); } void SetExits(const char *value) { detail::maybeSetString(exits, value); }
@ -101,7 +104,8 @@ struct ExtractionWay
// weight of the whole way in both directions // weight of the whole way in both directions
double weight; double weight;
std::string name; std::string name;
std::string ref; std::string forward_ref;
std::string backward_ref;
std::string pronunciation; std::string pronunciation;
std::string destinations; std::string destinations;
std::string exits; std::string exits;

View File

@ -63,7 +63,8 @@ class ExtractorCallbacks
// actually maps to name ids // actually maps to name ids
using MapKey = std::tuple<std::string, std::string, std::string, std::string, std::string>; using MapKey = std::tuple<std::string, std::string, std::string, std::string, std::string>;
using MapVal = unsigned; using MapVal = unsigned;
std::unordered_map<MapKey, MapVal> string_map; using StringMap = std::unordered_map<MapKey, MapVal>;
StringMap string_map;
ExtractionContainers &external_memory; ExtractionContainers &external_memory;
std::unordered_map<std::string, ClassData> &classes_map; std::unordered_map<std::string, ClassData> &classes_map;
guidance::LaneDescriptionMap &lane_description_map; guidance::LaneDescriptionMap &lane_description_map;

188
package-lock.json generated
View File

@ -1,6 +1,6 @@
{ {
"name": "osrm", "name": "osrm",
"version": "5.13.0-latest.1", "version": "5.13.0-rc.1",
"lockfileVersion": 1, "lockfileVersion": 1,
"dependencies": { "dependencies": {
"abbrev": { "abbrev": {
@ -372,9 +372,9 @@
"dev": true "dev": true
}, },
"chalk": { "chalk": {
"version": "2.1.0", "version": "2.2.0",
"resolved": "https://registry.npmjs.org/chalk/-/chalk-2.1.0.tgz", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.2.0.tgz",
"integrity": "sha512-LUHGS/dge4ujbXMJrnihYMcL4AoOweGnw9Tp3kQuqy1Kx5c1qKjqvMJZ6nVJPMWJtKCTN72ZogH3oeSO9g9rXQ==", "integrity": "sha512-0BMM/2hG3ZaoPfR6F+h/oWpZtsh3b/s62TjSM6MGCJWEbJDN1acqCXvyhhZsDSVFklpebUoQ5O1kKC7lOzrn9g==",
"dev": true "dev": true
}, },
"debug": { "debug": {
@ -390,9 +390,9 @@
"dev": true "dev": true
}, },
"supports-color": { "supports-color": {
"version": "4.4.0", "version": "4.5.0",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.4.0.tgz", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.5.0.tgz",
"integrity": "sha512-rKC3+DyXWgK0ZLKwmRsrkyHVZAjNkfzeehuFWdGGcqGDTZFH73+RH6S/RDAAxl9GusSjZSUWYLmT9N5pzXFOXQ==", "integrity": "sha1-vnoN5ITexcXN34s9WRJQRJEvY1s=",
"dev": true "dev": true
}, },
"to-fast-properties": { "to-fast-properties": {
@ -1088,9 +1088,9 @@
} }
}, },
"browserify-aes": { "browserify-aes": {
"version": "1.0.8", "version": "1.1.0",
"resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.0.8.tgz", "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.1.0.tgz",
"integrity": "sha512-WYCMOT/PtGTlpOKFht0YJFYcPy6pLCR98CtWfzK13zoynLlBMvAdEMSRGmgnJCw2M2j/5qxBkinZQFobieM8dQ==", "integrity": "sha512-W2bIMLYoZ9oow7TyePpMJk9l9LY7O3R61a/68bVCDOtnJynnwe3ZeW2IzzSkrQnPKNdJrxVDn3ALZNisSBwb7g==",
"dev": true "dev": true
}, },
"browserify-cipher": { "browserify-cipher": {
@ -1242,9 +1242,9 @@
} }
}, },
"caniuse-db": { "caniuse-db": {
"version": "1.0.30000743", "version": "1.0.30000747",
"resolved": "https://registry.npmjs.org/caniuse-db/-/caniuse-db-1.0.30000743.tgz", "resolved": "https://registry.npmjs.org/caniuse-db/-/caniuse-db-1.0.30000747.tgz",
"integrity": "sha1-vI3yolfPkboCQyImYpWvPe2FIwY=", "integrity": "sha1-j1vWweXmBFpNTmxqOlktGeGotRQ=",
"dev": true "dev": true
}, },
"caseless": { "caseless": {
@ -1343,9 +1343,9 @@
"dev": true "dev": true
}, },
"kind-of": { "kind-of": {
"version": "5.0.2", "version": "5.1.0",
"resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.0.2.tgz", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
"integrity": "sha512-ru8+TQHbN8956c7ZlkgK5Imjx0GMat3jN45GNIthpPeb+SzLrqSg/NG7llQtIqUTbrdu5Oi0lSnIoJmDTwwSzw==", "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==",
"dev": true "dev": true
}, },
"lazy-cache": { "lazy-cache": {
@ -1926,9 +1926,9 @@
"dev": true "dev": true
}, },
"chalk": { "chalk": {
"version": "2.1.0", "version": "2.2.0",
"resolved": "https://registry.npmjs.org/chalk/-/chalk-2.1.0.tgz", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.2.0.tgz",
"integrity": "sha512-LUHGS/dge4ujbXMJrnihYMcL4AoOweGnw9Tp3kQuqy1Kx5c1qKjqvMJZ6nVJPMWJtKCTN72ZogH3oeSO9g9rXQ==", "integrity": "sha512-0BMM/2hG3ZaoPfR6F+h/oWpZtsh3b/s62TjSM6MGCJWEbJDN1acqCXvyhhZsDSVFklpebUoQ5O1kKC7lOzrn9g==",
"dev": true "dev": true
}, },
"debug": { "debug": {
@ -1938,9 +1938,9 @@
"dev": true "dev": true
}, },
"eslint": { "eslint": {
"version": "4.8.0", "version": "4.9.0",
"resolved": "https://registry.npmjs.org/eslint/-/eslint-4.8.0.tgz", "resolved": "https://registry.npmjs.org/eslint/-/eslint-4.9.0.tgz",
"integrity": "sha1-Ip7w41Tg5h2DfHqA/fuoJeGZgV4=", "integrity": "sha1-doedJ0BoJhsZH+Dy9Wx0wvQgjos=",
"dev": true "dev": true
}, },
"esprima": { "esprima": {
@ -1968,9 +1968,9 @@
"dev": true "dev": true
}, },
"supports-color": { "supports-color": {
"version": "4.4.0", "version": "4.5.0",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.4.0.tgz", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.5.0.tgz",
"integrity": "sha512-rKC3+DyXWgK0ZLKwmRsrkyHVZAjNkfzeehuFWdGGcqGDTZFH73+RH6S/RDAAxl9GusSjZSUWYLmT9N5pzXFOXQ==", "integrity": "sha1-vnoN5ITexcXN34s9WRJQRJEvY1s=",
"dev": true "dev": true
} }
} }
@ -2024,9 +2024,9 @@
"dev": true "dev": true
}, },
"chalk": { "chalk": {
"version": "2.1.0", "version": "2.2.0",
"resolved": "https://registry.npmjs.org/chalk/-/chalk-2.1.0.tgz", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.2.0.tgz",
"integrity": "sha512-LUHGS/dge4ujbXMJrnihYMcL4AoOweGnw9Tp3kQuqy1Kx5c1qKjqvMJZ6nVJPMWJtKCTN72ZogH3oeSO9g9rXQ==", "integrity": "sha512-0BMM/2hG3ZaoPfR6F+h/oWpZtsh3b/s62TjSM6MGCJWEbJDN1acqCXvyhhZsDSVFklpebUoQ5O1kKC7lOzrn9g==",
"dev": true "dev": true
}, },
"duplexer2": { "duplexer2": {
@ -2112,9 +2112,9 @@
"dev": true "dev": true
}, },
"kind-of": { "kind-of": {
"version": "5.0.2", "version": "5.1.0",
"resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.0.2.tgz", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
"integrity": "sha512-ru8+TQHbN8956c7ZlkgK5Imjx0GMat3jN45GNIthpPeb+SzLrqSg/NG7llQtIqUTbrdu5Oi0lSnIoJmDTwwSzw==", "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==",
"dev": true "dev": true
}, },
"load-json-file": { "load-json-file": {
@ -2204,9 +2204,9 @@
"dev": true "dev": true
}, },
"supports-color": { "supports-color": {
"version": "4.4.0", "version": "4.5.0",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.4.0.tgz", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.5.0.tgz",
"integrity": "sha512-rKC3+DyXWgK0ZLKwmRsrkyHVZAjNkfzeehuFWdGGcqGDTZFH73+RH6S/RDAAxl9GusSjZSUWYLmT9N5pzXFOXQ==", "integrity": "sha1-vnoN5ITexcXN34s9WRJQRJEvY1s=",
"dev": true "dev": true
}, },
"yargs": { "yargs": {
@ -2330,9 +2330,9 @@
"optional": true "optional": true
}, },
"electron-to-chromium": { "electron-to-chromium": {
"version": "1.3.24", "version": "1.3.26",
"resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.24.tgz", "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.26.tgz",
"integrity": "sha1-m3uIuwXOufoBahd4M8wt3jiPIbY=", "integrity": "sha1-mWQnKUhhp02cfIK5Jg6jAejALWY=",
"dev": true "dev": true
}, },
"elliptic": { "elliptic": {
@ -2389,15 +2389,15 @@
"dev": true "dev": true
}, },
"es5-ext": { "es5-ext": {
"version": "0.10.30", "version": "0.10.35",
"resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.30.tgz", "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.35.tgz",
"integrity": "sha1-cUGhaDZpfbq/qq7uQUlc4p9SyTk=", "integrity": "sha1-GO6FjOajxFx9eekcFfzKnsVoSU8=",
"dev": true "dev": true
}, },
"es6-iterator": { "es6-iterator": {
"version": "2.0.1", "version": "2.0.3",
"resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.1.tgz", "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz",
"integrity": "sha1-jjGcnwRTv1ddN0lAplWSDlnKVRI=", "integrity": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=",
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"d": { "d": {
@ -3941,9 +3941,9 @@
} }
}, },
"handlebars": { "handlebars": {
"version": "4.0.10", "version": "4.0.11",
"resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.0.10.tgz", "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.0.11.tgz",
"integrity": "sha1-PTDHGLCaPZbyPqTMH0A8TTup/08=", "integrity": "sha1-Ywo13+ApS8KB7a5v/F0yn8eYLcw=",
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"source-map": { "source-map": {
@ -4215,9 +4215,9 @@
"dev": true "dev": true
}, },
"chalk": { "chalk": {
"version": "2.1.0", "version": "2.2.0",
"resolved": "https://registry.npmjs.org/chalk/-/chalk-2.1.0.tgz", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.2.0.tgz",
"integrity": "sha512-LUHGS/dge4ujbXMJrnihYMcL4AoOweGnw9Tp3kQuqy1Kx5c1qKjqvMJZ6nVJPMWJtKCTN72ZogH3oeSO9g9rXQ==", "integrity": "sha512-0BMM/2hG3ZaoPfR6F+h/oWpZtsh3b/s62TjSM6MGCJWEbJDN1acqCXvyhhZsDSVFklpebUoQ5O1kKC7lOzrn9g==",
"dev": true "dev": true
}, },
"figures": { "figures": {
@ -4245,9 +4245,9 @@
"dev": true "dev": true
}, },
"supports-color": { "supports-color": {
"version": "4.4.0", "version": "4.5.0",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.4.0.tgz", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.5.0.tgz",
"integrity": "sha512-rKC3+DyXWgK0ZLKwmRsrkyHVZAjNkfzeehuFWdGGcqGDTZFH73+RH6S/RDAAxl9GusSjZSUWYLmT9N5pzXFOXQ==", "integrity": "sha1-vnoN5ITexcXN34s9WRJQRJEvY1s=",
"dev": true "dev": true
} }
} }
@ -4384,9 +4384,9 @@
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"kind-of": { "kind-of": {
"version": "5.0.2", "version": "5.1.0",
"resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.0.2.tgz", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
"integrity": "sha512-ru8+TQHbN8956c7ZlkgK5Imjx0GMat3jN45GNIthpPeb+SzLrqSg/NG7llQtIqUTbrdu5Oi0lSnIoJmDTwwSzw==", "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==",
"dev": true "dev": true
} }
} }
@ -5040,9 +5040,9 @@
"dev": true "dev": true
}, },
"mdast-util-to-hast": { "mdast-util-to-hast": {
"version": "2.4.3", "version": "2.5.0",
"resolved": "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-2.4.3.tgz", "resolved": "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-2.5.0.tgz",
"integrity": "sha1-zXh0yYMmJ/E0/TdWFjhz+T8rHeM=", "integrity": "sha1-8IeETSVcdUDzaQbaMLoQbA7l7i8=",
"dev": true "dev": true
}, },
"mdast-util-to-string": { "mdast-util-to-string": {
@ -5251,9 +5251,9 @@
"dev": true "dev": true
}, },
"kind-of": { "kind-of": {
"version": "5.0.2", "version": "5.1.0",
"resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.0.2.tgz", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
"integrity": "sha512-ru8+TQHbN8956c7ZlkgK5Imjx0GMat3jN45GNIthpPeb+SzLrqSg/NG7llQtIqUTbrdu5Oi0lSnIoJmDTwwSzw==", "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==",
"dev": true "dev": true
} }
} }
@ -5383,9 +5383,9 @@
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"kind-of": { "kind-of": {
"version": "5.0.2", "version": "5.1.0",
"resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.0.2.tgz", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
"integrity": "sha512-ru8+TQHbN8956c7ZlkgK5Imjx0GMat3jN45GNIthpPeb+SzLrqSg/NG7llQtIqUTbrdu5Oi0lSnIoJmDTwwSzw==", "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==",
"dev": true "dev": true
} }
} }
@ -5910,9 +5910,9 @@
"dev": true "dev": true
}, },
"private": { "private": {
"version": "0.1.7", "version": "0.1.8",
"resolved": "https://registry.npmjs.org/private/-/private-0.1.7.tgz", "resolved": "https://registry.npmjs.org/private/-/private-0.1.8.tgz",
"integrity": "sha1-aM5eih7woju1cMwoU3tTMqumPvE=", "integrity": "sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg==",
"dev": true "dev": true
}, },
"process": { "process": {
@ -6065,9 +6065,9 @@
} }
}, },
"rc": { "rc": {
"version": "1.2.1", "version": "1.2.2",
"resolved": "https://registry.npmjs.org/rc/-/rc-1.2.1.tgz", "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.2.tgz",
"integrity": "sha1-LgPo5C7kULjLPc5lvhv4l04d/ZU=", "integrity": "sha1-2M6ctX6NZNnHut2YdsfDTL48cHc=",
"dependencies": { "dependencies": {
"minimist": { "minimist": {
"version": "1.2.0", "version": "1.2.0",
@ -6536,9 +6536,9 @@
"dev": true "dev": true
}, },
"kind-of": { "kind-of": {
"version": "5.0.2", "version": "5.1.0",
"resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.0.2.tgz", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
"integrity": "sha512-ru8+TQHbN8956c7ZlkgK5Imjx0GMat3jN45GNIthpPeb+SzLrqSg/NG7llQtIqUTbrdu5Oi0lSnIoJmDTwwSzw==", "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==",
"dev": true "dev": true
} }
} }
@ -6854,9 +6854,9 @@
"dev": true "dev": true
}, },
"kind-of": { "kind-of": {
"version": "5.0.2", "version": "5.1.0",
"resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.0.2.tgz", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
"integrity": "sha512-ru8+TQHbN8956c7ZlkgK5Imjx0GMat3jN45GNIthpPeb+SzLrqSg/NG7llQtIqUTbrdu5Oi0lSnIoJmDTwwSzw==", "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==",
"dev": true "dev": true
} }
} }
@ -7114,9 +7114,9 @@
"dev": true "dev": true
}, },
"chalk": { "chalk": {
"version": "2.1.0", "version": "2.2.0",
"resolved": "https://registry.npmjs.org/chalk/-/chalk-2.1.0.tgz", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.2.0.tgz",
"integrity": "sha512-LUHGS/dge4ujbXMJrnihYMcL4AoOweGnw9Tp3kQuqy1Kx5c1qKjqvMJZ6nVJPMWJtKCTN72ZogH3oeSO9g9rXQ==", "integrity": "sha512-0BMM/2hG3ZaoPfR6F+h/oWpZtsh3b/s62TjSM6MGCJWEbJDN1acqCXvyhhZsDSVFklpebUoQ5O1kKC7lOzrn9g==",
"dev": true "dev": true
}, },
"is-fullwidth-code-point": { "is-fullwidth-code-point": {
@ -7138,9 +7138,9 @@
"dev": true "dev": true
}, },
"supports-color": { "supports-color": {
"version": "4.4.0", "version": "4.5.0",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.4.0.tgz", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.5.0.tgz",
"integrity": "sha512-rKC3+DyXWgK0ZLKwmRsrkyHVZAjNkfzeehuFWdGGcqGDTZFH73+RH6S/RDAAxl9GusSjZSUWYLmT9N5pzXFOXQ==", "integrity": "sha1-vnoN5ITexcXN34s9WRJQRJEvY1s=",
"dev": true "dev": true
} }
} }
@ -7312,9 +7312,9 @@
"dev": true "dev": true
}, },
"kind-of": { "kind-of": {
"version": "5.0.2", "version": "5.1.0",
"resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.0.2.tgz", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
"integrity": "sha512-ru8+TQHbN8956c7ZlkgK5Imjx0GMat3jN45GNIthpPeb+SzLrqSg/NG7llQtIqUTbrdu5Oi0lSnIoJmDTwwSzw==", "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==",
"dev": true "dev": true
} }
} }
@ -7422,9 +7422,9 @@
"dev": true "dev": true
}, },
"ua-parser-js": { "ua-parser-js": {
"version": "0.7.14", "version": "0.7.17",
"resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.14.tgz", "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.17.tgz",
"integrity": "sha1-EQ1T+kw/MmwSEpK76skE0uAzh8o=", "integrity": "sha512-uRdSdu1oA1rncCQL7sCj8vSyZkgtL7faaw9Tc9rZ3mGgraQ7+Pdx7w5mnOSF3gw9ZNG6oc+KXfkon3bKuROm0g==",
"dev": true "dev": true
}, },
"uglify-js": { "uglify-js": {
@ -7672,9 +7672,9 @@
"dev": true "dev": true
}, },
"kind-of": { "kind-of": {
"version": "5.0.2", "version": "5.1.0",
"resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.0.2.tgz", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
"integrity": "sha512-ru8+TQHbN8956c7ZlkgK5Imjx0GMat3jN45GNIthpPeb+SzLrqSg/NG7llQtIqUTbrdu5Oi0lSnIoJmDTwwSzw==", "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==",
"dev": true "dev": true
}, },
"lazy-cache": { "lazy-cache": {
@ -7769,9 +7769,9 @@
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"supports-color": { "supports-color": {
"version": "4.4.0", "version": "4.5.0",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.4.0.tgz", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.5.0.tgz",
"integrity": "sha512-rKC3+DyXWgK0ZLKwmRsrkyHVZAjNkfzeehuFWdGGcqGDTZFH73+RH6S/RDAAxl9GusSjZSUWYLmT9N5pzXFOXQ==", "integrity": "sha1-vnoN5ITexcXN34s9WRJQRJEvY1s=",
"dev": true "dev": true
} }
} }

View File

@ -1,6 +1,6 @@
{ {
"name": "osrm", "name": "osrm",
"version": "5.13.0-latest.1", "version": "5.13.0",
"private": false, "private": false,
"description": "The Open Source Routing Machine is a high performance routing engine written in C++14 designed to run on OpenStreetMap data.", "description": "The Open Source Routing Machine is a high performance routing engine written in C++14 designed to run on OpenStreetMap data.",
"dependencies": { "dependencies": {

View File

@ -35,6 +35,7 @@ function setup()
turn_penalty = 7.5, turn_penalty = 7.5,
speed_reduction = 0.8, speed_reduction = 0.8,
turn_bias = 1.075, turn_bias = 1.075,
cardinal_directions = false,
-- a list of suffixes to suppress in name change instructions. The suffixes also include common substrings of each other -- a list of suffixes to suppress in name change instructions. The suffixes also include common substrings of each other
suffix_list = { suffix_list = {
@ -161,6 +162,7 @@ function setup()
'tertiary_link', 'tertiary_link',
'residential', 'residential',
'living_street', 'living_street',
'unclassified'
}, },
construction_whitelist = Set { construction_whitelist = Set {
@ -402,34 +404,8 @@ function process_way(profile, way, result, relations)
WayHandlers.run(profile, way, result, data, handlers, relations) WayHandlers.run(profile, way, result, data, handlers, relations)
local parsed_rel_list = {} if profile.cardinal_directions then
local rel_id_list = relations:get_relations(way) Relations.process_way_refs(way, relations, result)
for i, rel_id in ipairs(rel_id_list) do
local rel = relations:relation(rel_id)
parsed_rel_list[i] = Relations.parse_route_relation(rel, way, relations)
end
-- now process relations data
local matched_refs = nil;
if result.ref then
local match_res = Relations.match_to_ref(parsed_rel_list, result.ref)
local ref = ''
for _, m in pairs(match_res) do
if ref ~= '' then
ref = ref .. '; '
end
if m.dir then
ref = ref .. m.ref .. ' $' .. m.dir
else
ref = ref .. m.ref
end
end
-- print(result.name, ref)
result.ref = ref
end end
end end

View File

@ -41,7 +41,7 @@ function Relations.match_to_ref(relations, ref)
local result_match = {} local result_match = {}
local order = {} local order = {}
for i, r in ipairs(references) do for i, r in ipairs(references) do
result_match[r] = false result_match[r] = { forward = nil, backward = nil }
order[i] = r order[i] = r
end end
@ -81,7 +81,19 @@ function Relations.match_to_ref(relations, ref)
find_best(ref_scores) find_best(ref_scores)
if best_ref then if best_ref then
result_match[best_ref] = direction local result_direction = result_match[best_ref]
local is_forward = rel["route_forward"]
if is_forward == nil then
result_direction.forward = direction
result_direction.backward = direction
elseif is_forward == true then
result_direction.forward = direction
else
result_direction.backward = direction
end
result_match[best_ref] = result_direction
end end
end end
@ -182,7 +194,6 @@ function Relations.parse_route_relation(rel, way, relations)
local super_dir = get_direction_from_superrel(rel, relations) local super_dir = get_direction_from_superrel(rel, relations)
-- check if there are data error -- check if there are data error
if (result_direction ~= nil) and (super_dir ~= nil) and (result_direction ~= super_dir) then if (result_direction ~= nil) and (super_dir ~= nil) and (result_direction ~= super_dir) then
print('ERROR: conflicting relation directions found for way ' .. way:id() .. print('ERROR: conflicting relation directions found for way ' .. way:id() ..
' relation direction is ' .. result_direction .. ' superrelation direction is ' .. super_dir) ' relation direction is ' .. result_direction .. ' superrelation direction is ' .. super_dir)
@ -192,11 +203,59 @@ function Relations.parse_route_relation(rel, way, relations)
end end
result['route_direction'] = result_direction result['route_direction'] = result_direction
add_extra_data(m)
if role == 'forward' then
result['route_forward'] = true
elseif role == 'backward' then
result['route_forward'] = false
else
result['route_forward'] = nil
end end
add_extra_data(m)
end
return result return result
end end
function Relations.process_way_refs(way, relations, result)
local parsed_rel_list = {}
local rel_id_list = relations:get_relations(way)
for i, rel_id in ipairs(rel_id_list) do
local rel = relations:relation(rel_id)
parsed_rel_list[i] = Relations.parse_route_relation(rel, way, relations)
end
-- now process relations data
local matched_refs = nil;
if result.ref then
local match_res = Relations.match_to_ref(parsed_rel_list, result.ref)
function gen_ref(is_forward)
local ref = ''
for _, m in pairs(match_res) do
if ref ~= '' then
ref = ref .. '; '
end
local dir = m.dir.forward
if is_forward == false then
dir = m.dir.backward
end
if dir then
ref = ref .. m.ref .. ' $' .. dir
else
ref = ref .. m.ref
end
end
return ref
end
result.forward_ref = gen_ref(true)
result.backward_ref = gen_ref(false)
end
end
return Relations return Relations

View File

@ -318,12 +318,15 @@ void ExtractorCallbacks::ProcessWay(const osmium::Way &input_way, const Extracti
road_classification.SetNumberOfLanes(std::max(road_deduced_num_lanes, // len(turn:lanes) road_classification.SetNumberOfLanes(std::max(road_deduced_num_lanes, // len(turn:lanes)
road_classification.GetNumberOfLanes())); road_classification.GetNumberOfLanes()));
const auto GetNameID = [this, &parsed_way](bool is_forward) -> NameID {
const std::string &ref = is_forward ? parsed_way.forward_ref : parsed_way.backward_ref;
// Get the unique identifier for the street name, destination, and ref // Get the unique identifier for the street name, destination, and ref
const auto name_iterator = string_map.find(MapKey(parsed_way.name, const auto name_iterator = string_map.find(MapKey(parsed_way.name,
parsed_way.destinations, parsed_way.destinations,
parsed_way.ref, ref,
parsed_way.pronunciation, parsed_way.pronunciation,
parsed_way.exits)); parsed_way.exits));
NameID name_id = EMPTY_NAMEID; NameID name_id = EMPTY_NAMEID;
if (string_map.end() == name_iterator) if (string_map.end() == name_iterator)
{ {
@ -347,9 +350,7 @@ void ExtractorCallbacks::ProcessWay(const osmium::Way &input_way, const Extracti
std::back_inserter(external_memory.name_char_data)); std::back_inserter(external_memory.name_char_data));
external_memory.name_offsets.push_back(external_memory.name_char_data.size()); external_memory.name_offsets.push_back(external_memory.name_char_data.size());
std::copy(parsed_way.ref.begin(), std::copy(ref.begin(), ref.end(), std::back_inserter(external_memory.name_char_data));
parsed_way.ref.end(),
std::back_inserter(external_memory.name_char_data));
external_memory.name_offsets.push_back(external_memory.name_char_data.size()); external_memory.name_offsets.push_back(external_memory.name_char_data.size());
std::copy(parsed_way.exits.begin(), std::copy(parsed_way.exits.begin(),
@ -359,7 +360,7 @@ void ExtractorCallbacks::ProcessWay(const osmium::Way &input_way, const Extracti
auto k = MapKey{parsed_way.name, auto k = MapKey{parsed_way.name,
parsed_way.destinations, parsed_way.destinations,
parsed_way.ref, ref,
parsed_way.pronunciation, parsed_way.pronunciation,
parsed_way.exits}; parsed_way.exits};
auto v = MapVal{name_id}; auto v = MapVal{name_id};
@ -370,6 +371,12 @@ void ExtractorCallbacks::ProcessWay(const osmium::Way &input_way, const Extracti
name_id = name_iterator->second; name_id = name_iterator->second;
} }
return name_id;
};
const NameID forward_name_id = GetNameID(true);
const NameID backward_name_id = GetNameID(false);
const bool in_forward_direction = const bool in_forward_direction =
(parsed_way.forward_speed > 0 || parsed_way.forward_rate > 0 || parsed_way.duration > 0 || (parsed_way.forward_speed > 0 || parsed_way.forward_rate > 0 || parsed_way.duration > 0 ||
parsed_way.weight > 0) && parsed_way.weight > 0) &&
@ -386,12 +393,13 @@ void ExtractorCallbacks::ProcessWay(const osmium::Way &input_way, const Extracti
(force_split_edges || (parsed_way.forward_rate != parsed_way.backward_rate) || (force_split_edges || (parsed_way.forward_rate != parsed_way.backward_rate) ||
(parsed_way.forward_speed != parsed_way.backward_speed) || (parsed_way.forward_speed != parsed_way.backward_speed) ||
(parsed_way.forward_travel_mode != parsed_way.backward_travel_mode) || (parsed_way.forward_travel_mode != parsed_way.backward_travel_mode) ||
(turn_lane_id_forward != turn_lane_id_backward) || (forward_classes != backward_classes)); (turn_lane_id_forward != turn_lane_id_backward) || (forward_classes != backward_classes) ||
(parsed_way.forward_ref != parsed_way.backward_ref));
if (in_forward_direction) if (in_forward_direction)
{ // add (forward) segments or (forward,backward) for non-split edges in backward direction { // add (forward) segments or (forward,backward) for non-split edges in backward direction
const auto annotation_data_id = external_memory.all_edges_annotation_data_list.size(); const auto annotation_data_id = external_memory.all_edges_annotation_data_list.size();
external_memory.all_edges_annotation_data_list.push_back({name_id, external_memory.all_edges_annotation_data_list.push_back({forward_name_id,
turn_lane_id_forward, turn_lane_id_forward,
forward_classes, forward_classes,
parsed_way.forward_travel_mode, parsed_way.forward_travel_mode,
@ -424,7 +432,7 @@ void ExtractorCallbacks::ProcessWay(const osmium::Way &input_way, const Extracti
if (in_backward_direction && (!in_forward_direction || split_edge)) if (in_backward_direction && (!in_forward_direction || split_edge))
{ // add (backward) segments for split edges or not in forward direction { // add (backward) segments for split edges or not in forward direction
const auto annotation_data_id = external_memory.all_edges_annotation_data_list.size(); const auto annotation_data_id = external_memory.all_edges_annotation_data_list.size();
external_memory.all_edges_annotation_data_list.push_back({name_id, external_memory.all_edges_annotation_data_list.push_back({backward_name_id,
turn_lane_id_backward, turn_lane_id_backward,
backward_classes, backward_classes,
parsed_way.backward_travel_mode, parsed_way.backward_travel_mode,

View File

@ -369,8 +369,16 @@ void Sol2ScriptingEnvironment::InitContext(LuaScriptingContext &context)
&ExtractionWay::backward_rate, &ExtractionWay::backward_rate,
"name", "name",
sol::property(&ExtractionWay::GetName, &ExtractionWay::SetName), sol::property(&ExtractionWay::GetName, &ExtractionWay::SetName),
"ref", "ref", // backward compatibility
sol::property(&ExtractionWay::GetRef, &ExtractionWay::SetRef), sol::property(&ExtractionWay::GetForwardRef,
[](ExtractionWay &way, const char *ref) {
way.SetForwardRef(ref);
way.SetBackwardRef(ref);
}),
"forward_ref",
sol::property(&ExtractionWay::GetForwardRef, &ExtractionWay::SetForwardRef),
"backward_ref",
sol::property(&ExtractionWay::GetBackwardRef, &ExtractionWay::SetBackwardRef),
"pronunciation", "pronunciation",
sol::property(&ExtractionWay::GetPronunciation, &ExtractionWay::SetPronunciation), sol::property(&ExtractionWay::GetPronunciation, &ExtractionWay::SetPronunciation),
"destinations", "destinations",

View File

@ -61,7 +61,7 @@ return_code parseArguments(int argc,
->composing(), ->composing(),
"Lookup files containing from_, to_, via_nodes, and turn penalties to adjust turn weights")( "Lookup files containing from_, to_, via_nodes, and turn penalties to adjust turn weights")(
"level-cache,o", "level-cache,o",
boost::program_options::value<bool>(&contractor_config.use_cached_priority) boost::program_options::bool_switch(&contractor_config.use_cached_priority)
->default_value(false), ->default_value(false),
"DEPRECATED: Will always be false. Use .level file to retain the contraction level for " "DEPRECATED: Will always be false. Use .level file to retain the contraction level for "
"each " "each "

View File

@ -58,7 +58,7 @@ return_code parseArguments(int argc,
->default_value(false), ->default_value(false),
"Use metadata during osm parsing (This can affect the extraction performance).")( "Use metadata during osm parsing (This can affect the extraction performance).")(
"parse-conditional-restrictions", "parse-conditional-restrictions",
boost::program_options::value<bool>(&extractor_config.parse_conditionals) boost::program_options::bool_switch(&extractor_config.parse_conditionals)
->implicit_value(true) ->implicit_value(true)
->default_value(false), ->default_value(false),
"Save conditional restrictions found during extraction to disk for use " "Save conditional restrictions found during extraction to disk for use "
@ -67,10 +67,10 @@ return_code parseArguments(int argc,
&extractor_config.location_dependent_data_paths) &extractor_config.location_dependent_data_paths)
->composing(), ->composing(),
"GeoJSON files with location-dependent data")( "GeoJSON files with location-dependent data")(
"use-locations-cache", "disable-location-cache",
boost::program_options::value<bool>(&extractor_config.use_locations_cache) boost::program_options::bool_switch(&extractor_config.use_locations_cache)
->implicit_value(true) ->implicit_value(false)
->default_value(extractor_config.use_locations_cache), ->default_value(true),
"Use internal nodes locations cache for location-dependent data lookups"); "Use internal nodes locations cache for location-dependent data lookups");
bool dummy; bool dummy;
@ -82,7 +82,7 @@ return_code parseArguments(int argc,
boost::program_options::value<boost::filesystem::path>(&extractor_config.input_path), boost::program_options::value<boost::filesystem::path>(&extractor_config.input_path),
"Input file in .osm, .osm.bz2 or .osm.pbf format")( "Input file in .osm, .osm.bz2 or .osm.pbf format")(
"generate-edge-lookup", "generate-edge-lookup",
boost::program_options::value<bool>(&dummy)->implicit_value(true)->default_value(false), boost::program_options::bool_switch(&dummy)->implicit_value(true)->default_value(false),
"Not used anymore"); "Not used anymore");
// positional option // positional option