#pragma once #include "routing/road_graph.hpp" #include "routing_common/vehicle_model.hpp" #include "geometry/point2d.hpp" #include "indexer/feature_altitude.hpp" #include "indexer/feature_decl.hpp" #include "indexer/mwm_set.hpp" #include #include #include #include #include namespace routing { /// Helper functor class to filter nearest roads to the given starting point. /// Class returns pairs of outgoing edge and projection point on the edge class NearestEdgeFinder { struct Candidate { double m_dist = std::numeric_limits::max(); uint32_t m_segId = 0; Junction m_segStart; Junction m_segEnd; Junction m_projPoint; FeatureID m_fid; bool m_bidirectional = true; }; m2::PointD const m_point; std::vector m_candidates; public: explicit NearestEdgeFinder(m2::PointD const & point); inline bool HasCandidates() const { return !m_candidates.empty(); } void AddInformationSource(FeatureID const & featureId, IRoadGraph::JunctionVec const & junctions, bool bidirectiona); void MakeResult(std::vector> & res, size_t const maxCountFeatures); }; } // namespace routing