diff --git a/features/guidance/motorway.feature b/features/guidance/motorway.feature index 379b73826..dc657f50a 100644 --- a/features/guidance/motorway.feature +++ b/features/guidance/motorway.feature @@ -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 diff --git a/profiles/lib/tags.lua b/profiles/lib/tags.lua index a1a8f0a9b..6f4131e8c 100644 --- a/profiles/lib/tags.lua +++ b/profiles/lib/tags.lua @@ -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 diff --git a/src/extractor/intersection/coordinate_extractor.cpp b/src/extractor/intersection/coordinate_extractor.cpp index 389271b15..d4551e253 100644 --- a/src/extractor/intersection/coordinate_extractor.cpp +++ b/src/extractor/intersection/coordinate_extractor.cpp @@ -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) diff --git a/test/nodejs/constants.js b/test/nodejs/constants.js index b14bd3674..79aa90e6e 100644 --- a/test/nodejs/constants.js +++ b/test/nodejs/constants.js @@ -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) {