diff --git a/map/framework.cpp b/map/framework.cpp index 05262a9308..f5a0ded931 100644 --- a/map/framework.cpp +++ b/map/framework.cpp @@ -1627,6 +1627,23 @@ bool Framework::GetVisiblePOI(m2::PointD const & glbPoint, search::AddressInfo & return true; } +bool Framework::GetVisiblePOI(m2::PointD const & ptMercator, FeatureType & outPOI) const +{ + ASSERT(m_drapeEngine != nullptr, ()); + FeatureID const fid = m_drapeEngine->GetVisiblePOI(ptMercator); + if (!fid.IsValid()) + return false; + + // Note: all parse methods should be called with guard alive. + Index::FeaturesLoaderGuard guard(m_model.GetIndex(), fid.m_mwmId); + guard.GetFeatureByIndex(fid.m_index, outPOI); + outPOI.ParseHeader2(); + outPOI.ParseGeometry(FeatureType::BEST_GEOMETRY); + outPOI.ParseTriangles(FeatureType::BEST_GEOMETRY); + outPOI.ParseMetadata(); + return true; +} + m2::PointD Framework::GetVisiblePOI(FeatureID const & id, search::AddressInfo & info, feature::Metadata & metadata) const { ASSERT(id.IsValid(), ()); diff --git a/map/framework.hpp b/map/framework.hpp index 1ef91ba895..43ac3e7778 100644 --- a/map/framework.hpp +++ b/map/framework.hpp @@ -486,6 +486,8 @@ private: public: bool GetVisiblePOI(m2::PointD const & glbPoint, search::AddressInfo & info, feature::Metadata & metadata) const; + // TODO(AlexZ): Refactor similar getters to share common interface. + bool GetVisiblePOI(m2::PointD const & ptMercator, FeatureType & outPOI) const; m2::PointD GetVisiblePOI(FeatureID const & id, search::AddressInfo & info, feature::Metadata & metadata) const; void FindClosestPOIMetadata(m2::PointD const & pt, feature::Metadata & metadata) const;