Fix distance calculation consistency. (#6315)
Consolidate great circle distance calculations to use cheap ruler library.
This commit is contained in:
committed by
GitHub
parent
8f0cd5cf7b
commit
aadc088084
@@ -25,7 +25,8 @@ std::pair<short, short> getDepartBearings(const LegGeometry &leg_geometry,
|
||||
const auto turn_coordinate = leg_geometry.locations.front();
|
||||
const auto post_turn_coordinate = *(leg_geometry.locations.begin() + 1);
|
||||
|
||||
if (util::coordinate_calculation::haversineDistance(turn_coordinate, post_turn_coordinate) <= 1)
|
||||
if (util::coordinate_calculation::greatCircleDistance(turn_coordinate, post_turn_coordinate) <=
|
||||
1)
|
||||
{
|
||||
return std::make_pair<short, short>(0, source_node.GetBearing(traversed_in_reverse));
|
||||
}
|
||||
@@ -41,7 +42,8 @@ std::pair<short, short> getArriveBearings(const LegGeometry &leg_geometry,
|
||||
BOOST_ASSERT(leg_geometry.locations.size() >= 2);
|
||||
const auto turn_coordinate = leg_geometry.locations.back();
|
||||
const auto pre_turn_coordinate = *(leg_geometry.locations.end() - 2);
|
||||
if (util::coordinate_calculation::haversineDistance(turn_coordinate, pre_turn_coordinate) <= 1)
|
||||
if (util::coordinate_calculation::greatCircleDistance(turn_coordinate, pre_turn_coordinate) <=
|
||||
1)
|
||||
{
|
||||
return std::make_pair<short, short>(target_node.GetBearing(traversed_in_reverse), 0);
|
||||
}
|
||||
|
||||
@@ -263,7 +263,7 @@ void trimShortSegments(std::vector<RouteStep> &steps, LegGeometry &geometry)
|
||||
BOOST_ASSERT(geometry.locations.size() >= steps.size());
|
||||
// Look for distances under 1m
|
||||
const bool zero_length_step = steps.front().distance <= 1 && steps.size() > 2;
|
||||
const bool duplicated_coordinate = util::coordinate_calculation::haversineDistance(
|
||||
const bool duplicated_coordinate = util::coordinate_calculation::greatCircleDistance(
|
||||
geometry.locations[0], geometry.locations[1]) <= 1;
|
||||
if (zero_length_step || duplicated_coordinate)
|
||||
{
|
||||
@@ -406,7 +406,7 @@ void trimShortSegments(std::vector<RouteStep> &steps, LegGeometry &geometry)
|
||||
next_to_last_step.mode = new_next_to_last.mode;
|
||||
// the geometry indices of the last step are already correct;
|
||||
}
|
||||
else if (util::coordinate_calculation::haversineDistance(
|
||||
else if (util::coordinate_calculation::greatCircleDistance(
|
||||
geometry.locations[geometry.locations.size() - 2],
|
||||
geometry.locations[geometry.locations.size() - 1]) <= 1)
|
||||
{
|
||||
@@ -463,7 +463,7 @@ std::vector<RouteStep> assignRelativeLocations(std::vector<RouteStep> steps,
|
||||
BOOST_ASSERT(steps.size() >= 2);
|
||||
BOOST_ASSERT(leg_geometry.locations.size() >= 2);
|
||||
const constexpr double MINIMAL_RELATIVE_DISTANCE = 5., MAXIMAL_RELATIVE_DISTANCE = 300.;
|
||||
const auto distance_to_start = util::coordinate_calculation::haversineDistance(
|
||||
const auto distance_to_start = util::coordinate_calculation::greatCircleDistance(
|
||||
source_node.input_location, leg_geometry.locations[0]);
|
||||
const auto initial_modifier =
|
||||
distance_to_start >= MINIMAL_RELATIVE_DISTANCE &&
|
||||
@@ -474,7 +474,7 @@ std::vector<RouteStep> assignRelativeLocations(std::vector<RouteStep> steps,
|
||||
|
||||
steps.front().maneuver.instruction.direction_modifier = initial_modifier;
|
||||
|
||||
const auto distance_from_end = util::coordinate_calculation::haversineDistance(
|
||||
const auto distance_from_end = util::coordinate_calculation::greatCircleDistance(
|
||||
target_node.input_location, leg_geometry.locations.back());
|
||||
const auto final_modifier =
|
||||
distance_from_end >= MINIMAL_RELATIVE_DISTANCE &&
|
||||
|
||||
@@ -116,9 +116,9 @@ Status TablePlugin::HandleRequest(const RoutingAlgorithmsInterface &algorithms,
|
||||
auto distance_estimate =
|
||||
params.fallback_coordinate_type ==
|
||||
api::TableParameters::FallbackCoordinateType::Input
|
||||
? util::coordinate_calculation::fccApproximateDistance(
|
||||
? util::coordinate_calculation::greatCircleDistance(
|
||||
source.input_location, destination.input_location)
|
||||
: util::coordinate_calculation::fccApproximateDistance(
|
||||
: util::coordinate_calculation::greatCircleDistance(
|
||||
source.location, destination.location);
|
||||
|
||||
result_tables_pair.first[table_index] =
|
||||
|
||||
@@ -464,7 +464,7 @@ void encodeVectorTile(const DataFacadeBase &facade,
|
||||
const auto b = facade.GetCoordinateOfNode(edge.v);
|
||||
// Calculate the length in meters
|
||||
const double length =
|
||||
osrm::util::coordinate_calculation::haversineDistance(a, b);
|
||||
osrm::util::coordinate_calculation::greatCircleDistance(a, b);
|
||||
|
||||
const auto forward_weight_range =
|
||||
facade.GetUncompressedForwardWeights(geometry_id);
|
||||
|
||||
@@ -137,7 +137,7 @@ Parameters parametersFromRequest(const PhantomNodes &phantom_node_pair)
|
||||
{
|
||||
Parameters parameters;
|
||||
|
||||
const auto distance = util::coordinate_calculation::haversineDistance(
|
||||
const auto distance = util::coordinate_calculation::greatCircleDistance(
|
||||
phantom_node_pair.source_phantom.location, phantom_node_pair.target_phantom.location);
|
||||
|
||||
// 10km
|
||||
|
||||
@@ -214,7 +214,7 @@ SubMatchingList mapMatching(SearchEngineData<Algorithm> &engine_working_data,
|
||||
const auto ¤t_timestamps_list = candidates_list[t];
|
||||
const auto ¤t_coordinate = trace_coordinates[t];
|
||||
|
||||
const auto haversine_distance = util::coordinate_calculation::haversineDistance(
|
||||
const auto haversine_distance = util::coordinate_calculation::greatCircleDistance(
|
||||
prev_coordinate, current_coordinate);
|
||||
// assumes minumum of 4 m/s
|
||||
const EdgeWeight weight_upper_bound =
|
||||
@@ -424,7 +424,7 @@ SubMatchingList mapMatching(SearchEngineData<Algorithm> &engine_working_data,
|
||||
reconstructed_indices,
|
||||
[&trace_distance, &trace_coordinates](const std::pair<std::size_t, std::size_t> &prev,
|
||||
const std::pair<std::size_t, std::size_t> &curr) {
|
||||
trace_distance += util::coordinate_calculation::haversineDistance(
|
||||
trace_distance += util::coordinate_calculation::greatCircleDistance(
|
||||
trace_coordinates[prev.first], trace_coordinates[curr.first]);
|
||||
});
|
||||
|
||||
|
||||
Reference in New Issue
Block a user