Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mapsme/omim.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorvng <viktor.govako@gmail.com>2012-10-24 17:37:29 +0400
committerAlex Zolotarev <alex@maps.me>2015-09-23 01:46:11 +0300
commitf39b440fccd3decf8338c6422dd5de695900e255 (patch)
treebf9f2f224ce36fe5928f756bd582e9be6a8a4010 /indexer
parent81b8ae2642d91b1f01089f6543e1201d4e872b6f (diff)
Fix ruler drawing. Add a lot of todo's for future (just code optimizing).
Diffstat (limited to 'indexer')
-rw-r--r--indexer/mercator.cpp17
-rw-r--r--indexer/mercator.hpp2
2 files changed, 19 insertions, 0 deletions
diff --git a/indexer/mercator.cpp b/indexer/mercator.cpp
index ff22035db5..7ee65eebbe 100644
--- a/indexer/mercator.cpp
+++ b/indexer/mercator.cpp
@@ -23,3 +23,20 @@ m2::RectD MercatorBounds::MetresToXY(double lon, double lat,
return m2::RectD(m2::PointD(LonToX(minLon), LatToY(minLat)),
m2::PointD(LonToX(maxLon), LatToY(maxLat)));
}
+
+m2::PointD MercatorBounds::GetSmPoint(m2::PointD const & pt, double lonMetresR, double latMetresR)
+{
+ double const lat = YToLat(pt.y);
+ double const lon = XToLon(pt.x);
+
+ double const latDegreeOffset = latMetresR * degreeInMetres;
+ double const newLat = min(90.0, max(-90.0, lat + latDegreeOffset));
+
+ double const cosL = max(cos(my::DegToRad(newLat)), 0.00001);
+ ASSERT_GREATER ( cosL, 0.0, () );
+
+ double const lonDegreeOffset = lonMetresR * degreeInMetres / cosL;
+ double const newLon = min(180.0, max(-180.0, lon + lonDegreeOffset));
+
+ return m2::PointD(LonToX(newLon), LatToY(newLat));
+}
diff --git a/indexer/mercator.hpp b/indexer/mercator.hpp
index 261931c141..b3bd4f42a6 100644
--- a/indexer/mercator.hpp
+++ b/indexer/mercator.hpp
@@ -91,5 +91,7 @@ struct MercatorBounds
return RectByCenterXYAndSizeInMeters(center.x, center.y, size, size);
}
+ static m2::PointD GetSmPoint(m2::PointD const & pt, double lonMetresR, double latMetresR);
+
static double GetCellID2PointAbsEpsilon() { return 1.0E-4; }
};