Handle oneways in get_forward_backward_by_key
This commit is contained in:
parent
7c8c25f7bc
commit
6f4af330ed
@ -201,7 +201,7 @@ Feature: Motorway Guidance
|
||||
| a,e | abcde,abcde | depart,arrive |
|
||||
| f,e | fgc,abcde,abcde | depart,merge slight left,arrive |
|
||||
| a,i | abcde,chi,chi | depart,off ramp slight right,arrive |
|
||||
| f,i | fgc,chi,chi | depart,off ramp right,arrive |
|
||||
| f,i | fgc,chi,chi | depart,off ramp slight right,arrive |
|
||||
|
||||
Scenario: On And Off Ramp Left
|
||||
Given the node map
|
||||
@ -221,7 +221,7 @@ Feature: Motorway Guidance
|
||||
| a,e | abcde,abcde | depart,arrive |
|
||||
| f,e | fgc,abcde,abcde | depart,merge slight right,arrive |
|
||||
| a,i | abcde,chi,chi | depart,off ramp slight left,arrive |
|
||||
| f,i | fgc,chi,chi | depart,off ramp left,arrive |
|
||||
| f,i | fgc,chi,chi | depart,off ramp slight left,arrive |
|
||||
|
||||
Scenario: Merging Motorways
|
||||
Given the node map
|
||||
|
@ -14,13 +14,23 @@ function Tags.get_forward_backward_by_key(way,data,key)
|
||||
local forward = way:get_value_by_key(key .. ':forward')
|
||||
local backward = way:get_value_by_key(key .. ':backward')
|
||||
|
||||
if forward and backward then
|
||||
return forward, backward
|
||||
if not forward or not backward then
|
||||
local common = way:get_value_by_key(key)
|
||||
|
||||
if (data.oneway) then
|
||||
if data.is_forward_oneway then
|
||||
forward = forward or common
|
||||
end
|
||||
if data.is_reverse_oneway then
|
||||
backward = backward or common
|
||||
end
|
||||
else
|
||||
forward = forward or common
|
||||
backward = backward or common
|
||||
end
|
||||
end
|
||||
|
||||
local common = way:get_value_by_key(key)
|
||||
return forward or common,
|
||||
backward or common
|
||||
return forward, backward
|
||||
end
|
||||
|
||||
-- return [forward,backward] values, searching a
|
||||
|
@ -185,7 +185,7 @@ util::Coordinate CoordinateExtractor::ExtractRepresentativeCoordinate(
|
||||
*/
|
||||
const bool first_coordinate_is_far_away = [&first_distance, considered_lanes]() {
|
||||
const auto required_distance =
|
||||
considered_lanes * 0.5 * ASSUMED_LANE_WIDTH + LOOKAHEAD_DISTANCE_WITHOUT_LANES;
|
||||
considered_lanes * ASSUMED_LANE_WIDTH + LOOKAHEAD_DISTANCE_WITHOUT_LANES;
|
||||
return first_distance > required_distance;
|
||||
}();
|
||||
|
||||
@ -196,8 +196,7 @@ util::Coordinate CoordinateExtractor::ExtractRepresentativeCoordinate(
|
||||
}
|
||||
|
||||
// now, after the simple checks have succeeded make our further computations simpler
|
||||
const auto lookahead_distance =
|
||||
FAR_LOOKAHEAD_DISTANCE + considered_lanes * ASSUMED_LANE_WIDTH * 0.5;
|
||||
const auto lookahead_distance = FAR_LOOKAHEAD_DISTANCE + considered_lanes * ASSUMED_LANE_WIDTH;
|
||||
|
||||
/*
|
||||
* The coordinates along the road are in different distances from the source. If only very few
|
||||
@ -286,7 +285,7 @@ util::Coordinate CoordinateExtractor::ExtractRepresentativeCoordinate(
|
||||
|
||||
const bool starts_of_without_turn = [&]() {
|
||||
return straight_distance >=
|
||||
considered_lanes * 0.5 * ASSUMED_LANE_WIDTH + LOOKAHEAD_DISTANCE_WITHOUT_LANES;
|
||||
considered_lanes * ASSUMED_LANE_WIDTH + LOOKAHEAD_DISTANCE_WITHOUT_LANES;
|
||||
}();
|
||||
|
||||
if (starts_of_without_turn)
|
||||
@ -355,7 +354,7 @@ util::Coordinate CoordinateExtractor::ExtractRepresentativeCoordinate(
|
||||
if (IsCurve(coordinates,
|
||||
segment_distances,
|
||||
total_distance,
|
||||
considered_lanes * 0.5 * ASSUMED_LANE_WIDTH,
|
||||
considered_lanes * ASSUMED_LANE_WIDTH,
|
||||
turn_edge_data))
|
||||
{
|
||||
if (total_distance <= skipping_inaccuracies_distance)
|
||||
|
@ -10,7 +10,7 @@ exports.three_test_coordinates = [[7.41337, 43.72956],
|
||||
|
||||
exports.two_test_coordinates = exports.three_test_coordinates.slice(0, 2)
|
||||
|
||||
exports.test_tile = {'at': [17059, 11948, 15], 'size': 168612};
|
||||
exports.test_tile = {'at': [17059, 11948, 15], 'size': 168605};
|
||||
|
||||
// Test files generated by the routing engine; check test/data
|
||||
if (process.env.OSRM_DATA_PATH !== undefined) {
|
||||
|
Loading…
Reference in New Issue
Block a user