Organic Maps sources as of 02.04.2025 (fad26bbf22ac3da75e01e62aa01e5c8e11861005)

To expand with full Organic Maps and Maps.ME commits history run:
  git remote add om-historic [om-historic.git repo url]
  git fetch --tags om-historic
  git replace squashed-history historic-commits
This commit is contained in:
Konstantin Pastbin
2025-04-13 16:37:30 +07:00
commit e3e4a1985a
12931 changed files with 13195100 additions and 0 deletions

View File

@@ -0,0 +1,50 @@
#include "indexer/data_source_helpers.hpp"
#include "indexer/data_source.hpp"
#include "indexer/feature_algo.hpp"
#include "indexer/scales.hpp"
namespace indexer
{
using namespace std;
void ForEachFeatureAtPoint(DataSource const & dataSource, function<void(FeatureType &)> && fn,
m2::PointD const & mercator, double toleranceInMeters)
{
double constexpr kSelectRectWidthInMeters = 1.1;
double constexpr kMetersToLinearFeature = 3;
int constexpr kScale = scales::GetUpperScale();
m2::RectD const rect =
mercator::RectByCenterXYAndSizeInMeters(mercator, kSelectRectWidthInMeters);
auto const emitter = [&fn, &rect, &mercator, toleranceInMeters](FeatureType & ft) {
switch (ft.GetGeomType())
{
case feature::GeomType::Point:
if (rect.IsPointInside(ft.GetCenter()))
fn(ft);
break;
case feature::GeomType::Line:
if (feature::GetMinDistanceMeters(ft, mercator) < kMetersToLinearFeature)
fn(ft);
break;
case feature::GeomType::Area:
{
auto limitRect = ft.GetLimitRect(kScale);
// Be a little more tolerant. When used by editor mercator is given
// with some error, so we must extend limit rect a bit.
limitRect.Inflate(kMwmPointAccuracy, kMwmPointAccuracy);
if (limitRect.IsPointInside(mercator) &&
feature::GetMinDistanceMeters(ft, mercator) <= toleranceInMeters)
{
fn(ft);
}
}
break;
case feature::GeomType::Undefined: ASSERT(false, ("case feature::GeomType::Undefined")); break;
}
};
dataSource.ForEachInRect(emitter, rect, kScale);
}
} // namespace indexer