From 6f3665fb8bf9ac02410569774dd705e8e6328ec3 Mon Sep 17 00:00:00 2001 From: Patrick Niklaus Date: Tue, 24 Jul 2018 12:39:04 +0000 Subject: [PATCH] Fix bug in computation of distance offset for phantom node --- include/engine/geospatial_query.hpp | 27 +++++++++++++-------------- 1 file changed, 13 insertions(+), 14 deletions(-) diff --git a/include/engine/geospatial_query.hpp b/include/engine/geospatial_query.hpp index 4ecfc8118..ded53c7cb 100644 --- a/include/engine/geospatial_query.hpp +++ b/include/engine/geospatial_query.hpp @@ -449,6 +449,7 @@ template class GeospatialQuery const auto reverse_durations = datafacade.GetUncompressedReverseDurations(geometry_id); const auto forward_geometry = datafacade.GetUncompressedForwardGeometry(geometry_id); + const auto reverse_geometry = datafacade.GetUncompressedReverseGeometry(geometry_id); const auto forward_weight_offset = std::accumulate(forward_weights.begin(), @@ -479,19 +480,19 @@ template class GeospatialQuery datafacade.GetCoordinateOfNode(forward_geometry(data.fwd_segment_position)), point_on_segment); - const auto reverse_weight_offset = - std::accumulate(reverse_weights.begin(), - reverse_weights.end() - data.fwd_segment_position - 1, - EdgeWeight{0}); + const auto rev_segment_position = reverse_weights.size() - data.fwd_segment_position - 1; + + const auto reverse_weight_offset = std::accumulate( + reverse_weights.begin(), reverse_weights.begin() + rev_segment_position, EdgeWeight{0}); const auto reverse_duration_offset = std::accumulate(reverse_durations.begin(), - reverse_durations.end() - data.fwd_segment_position - 1, + reverse_durations.begin() + rev_segment_position, EdgeDuration{0}); EdgeDistance reverse_distance_offset = 0; - for (auto current = forward_geometry.begin(); - current < forward_geometry.end() - data.fwd_segment_position - 2; + for (auto current = reverse_geometry.begin(); + current < reverse_geometry.begin() + rev_segment_position; ++current) { reverse_distance_offset += util::coordinate_calculation::fccApproximateDistance( @@ -499,13 +500,11 @@ template class GeospatialQuery datafacade.GetCoordinateOfNode(*std::next(current))); } - EdgeWeight reverse_weight = - reverse_weights[reverse_weights.size() - data.fwd_segment_position - 1]; - EdgeDuration reverse_duration = - reverse_durations[reverse_durations.size() - data.fwd_segment_position - 1]; + EdgeWeight reverse_weight = reverse_weights[rev_segment_position]; + EdgeDuration reverse_duration = reverse_durations[rev_segment_position]; EdgeDistance reverse_distance = util::coordinate_calculation::fccApproximateDistance( point_on_segment, - datafacade.GetCoordinateOfNode(forward_geometry(data.fwd_segment_position + 1))); + datafacade.GetCoordinateOfNode(reverse_geometry(rev_segment_position))); ratio = std::min(1.0, std::max(0.0, ratio)); if (data.forward_segment_id.id != SPECIAL_SEGMENTID) @@ -693,7 +692,7 @@ template class GeospatialQuery const CoordinateList &coordinates; DataFacadeT &datafacade; }; -} -} +} // namespace engine +} // namespace osrm #endif