Compare commits
12 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 28a5fe06bb | |||
| 4c817de697 | |||
| 5133f39d76 | |||
| a29dcfa951 | |||
| e546ddd777 | |||
| c21c9c9106 | |||
| 511f3cff33 | |||
| d5ffbc6a9a | |||
| 60551d209d | |||
| 57be7beb5d | |||
| a8d0c115da | |||
| d9fcf1ecf7 |
@@ -1,9 +1,23 @@
|
|||||||
|
# 5.14.3
|
||||||
|
- Changes from 5.14.2:
|
||||||
|
- Bugfixes:
|
||||||
|
- FIXED #4754: U-Turn penalties are applied to straight turns.
|
||||||
|
- FIXED #4756: Removed too restrictive road name check in the sliproad handler
|
||||||
|
- FIXED #4731: Use correct weights for edge-based graph duplicated via nodes.
|
||||||
|
- Profile:
|
||||||
|
- CHANGED: added Belarus speed limits
|
||||||
|
- CHANGED: set default urban speed in Ukraine to 50kmh
|
||||||
|
|
||||||
# 5.14.2
|
# 5.14.2
|
||||||
- Changes from 5.14.1:
|
- Changes from 5.14.1:
|
||||||
- Bugfixes:
|
- Bugfixes:
|
||||||
- FIXED #4727: Erroring when a old .core file is present.
|
- FIXED #4727: Erroring when a old .core file is present.
|
||||||
- FIXED #4642: Update checks for EMPTY_NAMEID to check for empty name strings
|
- FIXED #4642: Update checks for EMPTY_NAMEID to check for empty name strings
|
||||||
- FIXED #4738: Fix potential segmentation fault
|
- FIXED #4738: Fix potential segmentation fault
|
||||||
|
- Node.js Bindings:
|
||||||
|
- ADDED: Exposed new `max_radiuses_map_matching` option from `EngingConfig` options
|
||||||
|
- Tools:
|
||||||
|
- ADDED: New osrm-routed `max_radiuses_map_matching` command line flag to optionally set a maximum radius for map matching
|
||||||
|
|
||||||
# 5.14.1
|
# 5.14.1
|
||||||
- Changes from 5.14.0
|
- Changes from 5.14.0
|
||||||
|
|||||||
+1
-1
@@ -62,7 +62,7 @@ endif()
|
|||||||
project(OSRM C CXX)
|
project(OSRM C CXX)
|
||||||
set(OSRM_VERSION_MAJOR 5)
|
set(OSRM_VERSION_MAJOR 5)
|
||||||
set(OSRM_VERSION_MINOR 14)
|
set(OSRM_VERSION_MINOR 14)
|
||||||
set(OSRM_VERSION_PATCH 2)
|
set(OSRM_VERSION_PATCH 3)
|
||||||
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}")
|
||||||
|
|||||||
@@ -992,7 +992,6 @@ Feature: Slipways and Dedicated Turn Lanes
|
|||||||
| dbef | primary | dbef | |
|
| dbef | primary | dbef | |
|
||||||
| ae | primary_link | ae | yes |
|
| ae | primary_link | ae | yes |
|
||||||
|
|
||||||
|
|
||||||
When I route I should get
|
When I route I should get
|
||||||
| waypoints | route | turns | locations |
|
| waypoints | route | turns | locations |
|
||||||
| s,f | sabc,dbef,dbef | depart,turn right,arrive | s,a,f |
|
| s,f | sabc,dbef,dbef | depart,turn right,arrive | s,a,f |
|
||||||
@@ -1019,7 +1018,6 @@ Feature: Slipways and Dedicated Turn Lanes
|
|||||||
| dbcf | primary | dbcf | |
|
| dbcf | primary | dbcf | |
|
||||||
| ac | primary_link | ae | yes |
|
| ac | primary_link | ae | yes |
|
||||||
|
|
||||||
|
|
||||||
When I route I should get
|
When I route I should get
|
||||||
| waypoints | route | turns | locations |
|
| waypoints | route | turns | locations |
|
||||||
| s,f | sab,dbcf,dbcf | depart,turn right,arrive | s,a,f |
|
| s,f | sab,dbcf,dbcf | depart,turn right,arrive | s,a,f |
|
||||||
@@ -1047,7 +1045,55 @@ Feature: Slipways and Dedicated Turn Lanes
|
|||||||
| ae | primary_link | sab | yes |
|
| ae | primary_link | sab | yes |
|
||||||
| cg | primary | cg | |
|
| cg | primary | cg | |
|
||||||
|
|
||||||
|
|
||||||
When I route I should get
|
When I route I should get
|
||||||
| waypoints | route | turns | locations |
|
| waypoints | route | turns | locations |
|
||||||
| s,f | sab,dbcef,dbcef | depart,turn right,arrive | s,a,f |
|
| s,f | sab,dbcef,dbcef | depart,turn right,arrive | s,a,f |
|
||||||
|
|
||||||
|
|
||||||
|
@sliproads
|
||||||
|
Scenario: Sliproad converted from a fork
|
||||||
|
Given the node map
|
||||||
|
"""
|
||||||
|
d
|
||||||
|
.
|
||||||
|
b
|
||||||
|
s . a '.
|
||||||
|
`c
|
||||||
|
.
|
||||||
|
f
|
||||||
|
"""
|
||||||
|
|
||||||
|
And the ways
|
||||||
|
| nodes | highway | name | ref | oneway |
|
||||||
|
| sa | tertiary | | D 60A | yes |
|
||||||
|
| ab | tertiary | ab | D 60A | yes |
|
||||||
|
| ac | tertiary | | D 60A | yes |
|
||||||
|
| dbcf | tertiary | dbcf | D 543 | yes |
|
||||||
|
|
||||||
|
When I route I should get
|
||||||
|
| waypoints | route | turns | locations |
|
||||||
|
| s,f | ,dbcf,dbcf | depart,turn right,arrive | s,a,f |
|
||||||
|
|
||||||
|
|
||||||
|
@sliproads
|
||||||
|
Scenario: Sliproad to a road with a reference only
|
||||||
|
Given the node map
|
||||||
|
"""
|
||||||
|
s . a . b . d
|
||||||
|
` .
|
||||||
|
' .
|
||||||
|
..
|
||||||
|
c
|
||||||
|
.
|
||||||
|
f
|
||||||
|
"""
|
||||||
|
|
||||||
|
And the ways
|
||||||
|
| nodes | highway | name | ref | oneway |
|
||||||
|
| sabd | primary | road | | |
|
||||||
|
| bcf | primary | | K108 | |
|
||||||
|
| ac | primary_link | | | yes |
|
||||||
|
|
||||||
|
When I route I should get
|
||||||
|
| waypoints | route | turns | locations |
|
||||||
|
| s,f | road,, | depart,turn right,arrive | s,a,f |
|
||||||
|
|||||||
@@ -745,11 +745,14 @@ Feature: Basic Roundabout
|
|||||||
|
|
||||||
|
|
||||||
Scenario: Drive through roundabout
|
Scenario: Drive through roundabout
|
||||||
|
Given a grid size of 5 meters
|
||||||
Given the node map
|
Given the node map
|
||||||
"""
|
"""
|
||||||
a
|
. a .
|
||||||
b e d f
|
. .
|
||||||
c
|
b e --- d ---- f
|
||||||
|
. .
|
||||||
|
.c.
|
||||||
g h
|
g h
|
||||||
"""
|
"""
|
||||||
|
|
||||||
@@ -762,10 +765,10 @@ Feature: Basic Roundabout
|
|||||||
When I route I should get
|
When I route I should get
|
||||||
| waypoints | bearings | route | turns |
|
| waypoints | bearings | route | turns |
|
||||||
| e,f | 90 90 | edf,edf | depart,arrive |
|
| e,f | 90 90 | edf,edf | depart,arrive |
|
||||||
| e,h | 90 135 | edf,gch,gch,gch | depart,roundabout-exit-2,exit roundabout straight,arrive |
|
| e,h | 90 130 | edf,gch,gch,gch | depart,roundabout-exit-2,exit roundabout straight,arrive |
|
||||||
| g,f | 45 90 | gch,edf,edf,edf | depart,roundabout-exit-2,exit roundabout right,arrive |
|
| g,f | 50 90 | gch,edf,edf,edf | depart,roundabout-exit-2,exit roundabout slight right,arrive |
|
||||||
| g,h | 45 135 | gch,gch,gch | depart,exit roundabout right,arrive |
|
| g,h | 50 130 | gch,gch,gch | depart,exit roundabout right,arrive |
|
||||||
| e,e | 90 270 | edf,edf,edf | depart,continue uturn,arrive |
|
| e,e | 90 270 | edf,edf,edf,edf | depart,roundabout-exit-3,exit roundabout sharp left,arrive |
|
||||||
|
|
||||||
Scenario: CCW and CW roundabouts with overlaps
|
Scenario: CCW and CW roundabouts with overlaps
|
||||||
Given the node map
|
Given the node map
|
||||||
|
|||||||
@@ -77,7 +77,11 @@ struct TurnInstruction
|
|||||||
|
|
||||||
TurnType::Enum type : 5;
|
TurnType::Enum type : 5;
|
||||||
DirectionModifier::Enum direction_modifier : 3;
|
DirectionModifier::Enum direction_modifier : 3;
|
||||||
// the lane tupel that is used for the turn
|
|
||||||
|
bool IsUTurn() const
|
||||||
|
{
|
||||||
|
return type != TurnType::NoTurn && direction_modifier == DirectionModifier::UTurn;
|
||||||
|
}
|
||||||
|
|
||||||
static TurnInstruction INVALID() { return {TurnType::Invalid, DirectionModifier::UTurn}; }
|
static TurnInstruction INVALID() { return {TurnType::Invalid, DirectionModifier::UTurn}; }
|
||||||
|
|
||||||
|
|||||||
@@ -26,7 +26,8 @@ namespace guidance
|
|||||||
// Name Change Logic
|
// Name Change Logic
|
||||||
// Used both during Extraction as well as during Post-Processing
|
// Used both during Extraction as well as during Post-Processing
|
||||||
|
|
||||||
inline std::string longest_common_substring(const std::string &lhs, const std::string &rhs)
|
inline util::StringView longest_common_substring(const util::StringView &lhs,
|
||||||
|
const util::StringView &rhs)
|
||||||
{
|
{
|
||||||
if (lhs.empty() || rhs.empty())
|
if (lhs.empty() || rhs.empty())
|
||||||
return "";
|
return "";
|
||||||
@@ -60,15 +61,15 @@ inline std::string longest_common_substring(const std::string &lhs, const std::s
|
|||||||
|
|
||||||
// TODO US-ASCII support only, no UTF-8 support
|
// TODO US-ASCII support only, no UTF-8 support
|
||||||
// While UTF-8 might work in some cases, we do not guarantee full functionality
|
// While UTF-8 might work in some cases, we do not guarantee full functionality
|
||||||
inline auto decompose(const std::string &lhs, const std::string &rhs)
|
template <typename StringView> inline auto decompose(const StringView &lhs, const StringView &rhs)
|
||||||
{
|
{
|
||||||
auto const lcs = longest_common_substring(lhs, rhs);
|
auto const lcs = longest_common_substring(lhs, rhs);
|
||||||
|
|
||||||
// trim spaces, transform to lower
|
// trim spaces, transform to lower
|
||||||
const auto trim = [](auto str) {
|
const auto trim = [](StringView view) {
|
||||||
// we compare suffixes based on this value, it might break UTF chars, but as long as we are
|
// we compare suffixes based on this value, it might break UTF chars, but as long as we are
|
||||||
// consistent in handling, we do not create bad results
|
// consistent in handling, we do not create bad results
|
||||||
boost::to_lower(str);
|
std::string str = boost::to_lower_copy(view.to_string());
|
||||||
auto front = str.find_first_not_of(" ");
|
auto front = str.find_first_not_of(" ");
|
||||||
|
|
||||||
if (front == std::string::npos)
|
if (front == std::string::npos)
|
||||||
@@ -80,8 +81,7 @@ inline auto decompose(const std::string &lhs, const std::string &rhs)
|
|||||||
|
|
||||||
if (lcs.empty())
|
if (lcs.empty())
|
||||||
{
|
{
|
||||||
std::string empty = "";
|
return std::make_tuple(trim(lhs), trim(rhs), std::string(), std::string());
|
||||||
return std::make_tuple(trim(lhs), trim(rhs), empty, empty);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// find the common substring in both
|
// find the common substring in both
|
||||||
@@ -92,32 +92,27 @@ inline auto decompose(const std::string &lhs, const std::string &rhs)
|
|||||||
BOOST_ASSERT(rhs_pos + lcs.size() <= rhs.size());
|
BOOST_ASSERT(rhs_pos + lcs.size() <= rhs.size());
|
||||||
|
|
||||||
// prefixes
|
// prefixes
|
||||||
std::string lhs_prefix = (lhs_pos > 0) ? lhs.substr(0, lhs_pos) : "";
|
auto lhs_prefix = (lhs_pos > 0) ? lhs.substr(0, lhs_pos) : StringView();
|
||||||
std::string rhs_prefix = (rhs_pos > 0) ? rhs.substr(0, rhs_pos) : "";
|
auto rhs_prefix = (rhs_pos > 0) ? rhs.substr(0, rhs_pos) : StringView();
|
||||||
|
|
||||||
// suffices
|
// suffices
|
||||||
std::string lhs_suffix = lhs.substr(lhs_pos + lcs.size());
|
auto lhs_suffix = lhs.substr(lhs_pos + lcs.size());
|
||||||
std::string rhs_suffix = rhs.substr(rhs_pos + lcs.size());
|
auto rhs_suffix = rhs.substr(rhs_pos + lcs.size());
|
||||||
|
|
||||||
lhs_prefix = trim(std::move(lhs_prefix));
|
return std::make_tuple(trim(lhs_prefix), trim(lhs_suffix), trim(rhs_prefix), trim(rhs_suffix));
|
||||||
lhs_suffix = trim(std::move(lhs_suffix));
|
|
||||||
rhs_prefix = trim(std::move(rhs_prefix));
|
|
||||||
rhs_suffix = trim(std::move(rhs_suffix));
|
|
||||||
|
|
||||||
return std::make_tuple(lhs_prefix, lhs_suffix, rhs_prefix, rhs_suffix);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Note: there is an overload without suffix checking below.
|
// Note: there is an overload without suffix checking below.
|
||||||
// (that's the reason we template the suffix table here)
|
// (that's the reason we template the suffix table here)
|
||||||
template <typename SuffixTable>
|
template <typename StringView, typename SuffixTable>
|
||||||
inline bool requiresNameAnnounced(const std::string &from_name,
|
inline bool requiresNameAnnounced(const StringView &from_name,
|
||||||
const std::string &from_ref,
|
const StringView &from_ref,
|
||||||
const std::string &from_pronunciation,
|
const StringView &from_pronunciation,
|
||||||
const std::string &from_exits,
|
const StringView &from_exits,
|
||||||
const std::string &to_name,
|
const StringView &to_name,
|
||||||
const std::string &to_ref,
|
const StringView &to_ref,
|
||||||
const std::string &to_pronunciation,
|
const StringView &to_pronunciation,
|
||||||
const std::string &to_exits,
|
const StringView &to_exits,
|
||||||
const SuffixTable &suffix_table)
|
const SuffixTable &suffix_table)
|
||||||
{
|
{
|
||||||
// first is empty and the second is not
|
// first is empty and the second is not
|
||||||
@@ -134,7 +129,7 @@ inline bool requiresNameAnnounced(const std::string &from_name,
|
|||||||
boost::starts_with(from_name, to_name) || boost::starts_with(to_name, from_name);
|
boost::starts_with(from_name, to_name) || boost::starts_with(to_name, from_name);
|
||||||
|
|
||||||
const auto checkForPrefixOrSuffixChange =
|
const auto checkForPrefixOrSuffixChange =
|
||||||
[](const std::string &first, const std::string &second, const SuffixTable &suffix_table) {
|
[](const StringView &first, const StringView &second, const SuffixTable &suffix_table) {
|
||||||
std::string first_prefix, first_suffix, second_prefix, second_suffix;
|
std::string first_prefix, first_suffix, second_prefix, second_suffix;
|
||||||
std::tie(first_prefix, first_suffix, second_prefix, second_suffix) =
|
std::tie(first_prefix, first_suffix, second_prefix, second_suffix) =
|
||||||
decompose(first, second);
|
decompose(first, second);
|
||||||
@@ -203,17 +198,17 @@ inline bool requiresNameAnnounced(const std::string &from_name,
|
|||||||
struct NopSuffixTable final
|
struct NopSuffixTable final
|
||||||
{
|
{
|
||||||
NopSuffixTable() {}
|
NopSuffixTable() {}
|
||||||
bool isSuffix(const std::string &) const { return false; }
|
bool isSuffix(const StringView &) const { return false; }
|
||||||
} static const table;
|
} static const table;
|
||||||
|
|
||||||
return requiresNameAnnounced(from_name,
|
return requiresNameAnnounced(util::StringView(from_name),
|
||||||
from_ref,
|
util::StringView(from_ref),
|
||||||
from_pronunciation,
|
util::StringView(from_pronunciation),
|
||||||
from_exits,
|
util::StringView(from_exits),
|
||||||
to_name,
|
util::StringView(to_name),
|
||||||
to_ref,
|
util::StringView(to_ref),
|
||||||
to_pronunciation,
|
util::StringView(to_pronunciation),
|
||||||
to_exits,
|
util::StringView(to_exits),
|
||||||
table);
|
table);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -225,37 +220,17 @@ inline bool requiresNameAnnounced(const NameID from_name_id,
|
|||||||
if (from_name_id == to_name_id)
|
if (from_name_id == to_name_id)
|
||||||
return false;
|
return false;
|
||||||
else
|
else
|
||||||
return requiresNameAnnounced(name_table.GetNameForID(from_name_id).to_string(),
|
return requiresNameAnnounced(name_table.GetNameForID(from_name_id),
|
||||||
name_table.GetRefForID(from_name_id).to_string(),
|
name_table.GetRefForID(from_name_id),
|
||||||
name_table.GetPronunciationForID(from_name_id).to_string(),
|
name_table.GetPronunciationForID(from_name_id),
|
||||||
name_table.GetExitsForID(from_name_id).to_string(),
|
name_table.GetExitsForID(from_name_id),
|
||||||
//
|
//
|
||||||
name_table.GetNameForID(to_name_id).to_string(),
|
name_table.GetNameForID(to_name_id),
|
||||||
name_table.GetRefForID(to_name_id).to_string(),
|
name_table.GetRefForID(to_name_id),
|
||||||
name_table.GetPronunciationForID(to_name_id).to_string(),
|
name_table.GetPronunciationForID(to_name_id),
|
||||||
name_table.GetExitsForID(to_name_id).to_string(),
|
name_table.GetExitsForID(to_name_id),
|
||||||
//
|
//
|
||||||
suffix_table);
|
suffix_table);
|
||||||
// FIXME: converts StringViews to strings since the name change heuristics mutates in place
|
|
||||||
}
|
|
||||||
|
|
||||||
inline bool requiresNameAnnounced(const NameID from_name_id,
|
|
||||||
const NameID to_name_id,
|
|
||||||
const util::NameTable &name_table)
|
|
||||||
{
|
|
||||||
if (from_name_id == to_name_id)
|
|
||||||
return false;
|
|
||||||
else
|
|
||||||
return requiresNameAnnounced(name_table.GetNameForID(from_name_id).to_string(),
|
|
||||||
name_table.GetRefForID(from_name_id).to_string(),
|
|
||||||
name_table.GetPronunciationForID(from_name_id).to_string(),
|
|
||||||
name_table.GetExitsForID(from_name_id).to_string(),
|
|
||||||
//
|
|
||||||
name_table.GetNameForID(to_name_id).to_string(),
|
|
||||||
name_table.GetRefForID(to_name_id).to_string(),
|
|
||||||
name_table.GetExitsForID(to_name_id).to_string(),
|
|
||||||
name_table.GetPronunciationForID(to_name_id).to_string());
|
|
||||||
// FIXME: converts StringViews to strings since the name change heuristics mutates in place
|
|
||||||
}
|
}
|
||||||
|
|
||||||
} // namespace guidance
|
} // namespace guidance
|
||||||
|
|||||||
+1
-1
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "osrm",
|
"name": "osrm",
|
||||||
"version": "5.14.2",
|
"version": "5.14.3",
|
||||||
"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": {
|
||||||
|
|||||||
+2
-1
@@ -253,6 +253,8 @@ function setup()
|
|||||||
["at:rural"] = 100,
|
["at:rural"] = 100,
|
||||||
["at:trunk"] = 100,
|
["at:trunk"] = 100,
|
||||||
["be:motorway"] = 120,
|
["be:motorway"] = 120,
|
||||||
|
["by:urban"] = 60,
|
||||||
|
["by:motorway"] = 110,
|
||||||
["ch:rural"] = 80,
|
["ch:rural"] = 80,
|
||||||
["ch:trunk"] = 100,
|
["ch:trunk"] = 100,
|
||||||
["ch:motorway"] = 120,
|
["ch:motorway"] = 120,
|
||||||
@@ -276,7 +278,6 @@ function setup()
|
|||||||
["ru:living_street"] = 20,
|
["ru:living_street"] = 20,
|
||||||
["ru:urban"] = 60,
|
["ru:urban"] = 60,
|
||||||
["ru:motorway"] = 110,
|
["ru:motorway"] = 110,
|
||||||
["ua:urban"] = 60,
|
|
||||||
["uk:nsl_single"] = (60*1609)/1000,
|
["uk:nsl_single"] = (60*1609)/1000,
|
||||||
["uk:nsl_dual"] = (70*1609)/1000,
|
["uk:nsl_dual"] = (70*1609)/1000,
|
||||||
["uk:motorway"] = (70*1609)/1000,
|
["uk:motorway"] = (70*1609)/1000,
|
||||||
|
|||||||
@@ -375,7 +375,9 @@ EdgeBasedGraphFactory::GenerateEdgeExpandedNodes(const WayRestrictionMap &way_re
|
|||||||
m_edge_based_node_container.nodes[edge_based_node_id].segregated =
|
m_edge_based_node_container.nodes[edge_based_node_id].segregated =
|
||||||
segregated_edges.count(eid) > 0;
|
segregated_edges.count(eid) > 0;
|
||||||
|
|
||||||
m_edge_based_node_weights.push_back(m_edge_based_node_weights[eid]);
|
const auto ebn_weight = m_edge_based_node_weights[nbe_to_ebn_mapping[eid]];
|
||||||
|
BOOST_ASSERT(ebn_weight == INVALID_EDGE_WEIGHT || ebn_weight == edge_data.weight);
|
||||||
|
m_edge_based_node_weights.push_back(ebn_weight);
|
||||||
|
|
||||||
edge_based_node_id++;
|
edge_based_node_id++;
|
||||||
progress.PrintStatus(progress_counter++);
|
progress.PrintStatus(progress_counter++);
|
||||||
@@ -580,7 +582,7 @@ void EdgeBasedGraphFactory::GenerateEdgeExpandedEdges(
|
|||||||
ExtractionTurn extracted_turn(
|
ExtractionTurn extracted_turn(
|
||||||
turn.angle,
|
turn.angle,
|
||||||
m_node_based_graph.GetOutDegree(node_at_center_of_intersection),
|
m_node_based_graph.GetOutDegree(node_at_center_of_intersection),
|
||||||
turn.instruction.direction_modifier == guidance::DirectionModifier::UTurn,
|
turn.instruction.IsUTurn(),
|
||||||
is_traffic_light,
|
is_traffic_light,
|
||||||
edge_data1.flags.restricted,
|
edge_data1.flags.restricted,
|
||||||
edge_data2.flags.restricted,
|
edge_data2.flags.restricted,
|
||||||
|
|||||||
@@ -475,10 +475,7 @@ operator()(const NodeID /*nid*/, const EdgeID source_edge_id, Intersection inter
|
|||||||
|
|
||||||
// Name mismatch: check roads at `c` and `d` for same name
|
// Name mismatch: check roads at `c` and `d` for same name
|
||||||
const auto name_mismatch = [&](const NameID road_name_id) {
|
const auto name_mismatch = [&](const NameID road_name_id) {
|
||||||
const auto unnamed = name_table.GetNameForID(road_name_id).empty();
|
return util::guidance::requiresNameAnnounced(road_name_id, //
|
||||||
|
|
||||||
return unnamed ||
|
|
||||||
util::guidance::requiresNameAnnounced(road_name_id, //
|
|
||||||
candidate_data.name_id, //
|
candidate_data.name_id, //
|
||||||
name_table, //
|
name_table, //
|
||||||
street_name_suffix_table); //
|
street_name_suffix_table); //
|
||||||
@@ -582,7 +579,6 @@ operator()(const NodeID /*nid*/, const EdgeID source_edge_id, Intersection inter
|
|||||||
}
|
}
|
||||||
else if (!name_table.GetNameForID(main_annotation.name_id).empty())
|
else if (!name_table.GetNameForID(main_annotation.name_id).empty())
|
||||||
{
|
{
|
||||||
OSRM_ASSERT(false, coordinates[intersection_node_id]);
|
|
||||||
intersection[*obvious].instruction.type = TurnType::NewName;
|
intersection[*obvious].instruction.type = TurnType::NewName;
|
||||||
intersection[*obvious].instruction.direction_modifier =
|
intersection[*obvious].instruction.direction_modifier =
|
||||||
getTurnDirection(intersection[*obvious].angle);
|
getTurnDirection(intersection[*obvious].angle);
|
||||||
|
|||||||
+2
-1
@@ -147,6 +147,8 @@
|
|||||||
{"key": "maxspeed", "value": "AT:rural"},
|
{"key": "maxspeed", "value": "AT:rural"},
|
||||||
{"key": "maxspeed", "value": "AT:trunk"},
|
{"key": "maxspeed", "value": "AT:trunk"},
|
||||||
{"key": "maxspeed", "value": "BE:motorway"},
|
{"key": "maxspeed", "value": "BE:motorway"},
|
||||||
|
{"key": "maxspeed", "value": "BY:urban"},
|
||||||
|
{"key": "maxspeed", "value": "BY:motorway"},
|
||||||
{"key": "maxspeed", "value": "CH:rural"},
|
{"key": "maxspeed", "value": "CH:rural"},
|
||||||
{"key": "maxspeed", "value": "CH:trunk"},
|
{"key": "maxspeed", "value": "CH:trunk"},
|
||||||
{"key": "maxspeed", "value": "CH:motorway"},
|
{"key": "maxspeed", "value": "CH:motorway"},
|
||||||
@@ -170,7 +172,6 @@
|
|||||||
{"key": "maxspeed", "value": "RU:living_street"},
|
{"key": "maxspeed", "value": "RU:living_street"},
|
||||||
{"key": "maxspeed", "value": "RU:urban"},
|
{"key": "maxspeed", "value": "RU:urban"},
|
||||||
{"key": "maxspeed", "value": "RU:motorway"},
|
{"key": "maxspeed", "value": "RU:motorway"},
|
||||||
{"key": "maxspeed", "value": "UA:urban"},
|
|
||||||
{"key": "maxspeed", "value": "UK:nsl_single"},
|
{"key": "maxspeed", "value": "UK:nsl_single"},
|
||||||
{"key": "maxspeed", "value": "UK:nsl_dual"},
|
{"key": "maxspeed", "value": "UK:nsl_dual"},
|
||||||
{"key": "maxspeed", "value": "UK:motorway"},
|
{"key": "maxspeed", "value": "UK:motorway"},
|
||||||
|
|||||||
Reference in New Issue
Block a user