Optimise R-tree queries in the case if there is no need to limit maximum number of results

This commit is contained in:
Siarhei Fedartsou 2024-05-12 11:56:03 +02:00
parent 1d17ff2fb5
commit 717407e470

View File

@ -87,7 +87,15 @@ template <typename RTreeT, typename DataFacadeT> class GeospatialQuery
: std::make_pair(true, true));
return valid;
});
return MakePhantomNodes(input_coordinate, results);
auto phantom_nodes = MakePhantomNodes(input_coordinate, results);
// there is no guarantee that `SearchInRange` will return results sorted by distance,
// but we may rely on it somewhere
std::sort(phantom_nodes.begin(), phantom_nodes.end(), [](const auto &lhs,
const auto &rhs)
{
return lhs.distance < rhs.distance;
});
return phantom_nodes;
#endif
}
@ -338,11 +346,6 @@ template <typename RTreeT, typename DataFacadeT> class GeospatialQuery
distance_and_phantoms.begin(),
[this, &input_coordinate](const CandidateSegment &segment)
{ return MakePhantomNode(input_coordinate, segment.data); });
std::sort(distance_and_phantoms.begin(), distance_and_phantoms.end(), [](const auto &lhs,
const auto &rhs)
{
return lhs.distance < rhs.distance;
});
return distance_and_phantoms;
}