diff options
author | vng <viktor.govako@gmail.com> | 2012-10-24 17:37:29 +0400 |
---|---|---|
committer | Alex Zolotarev <alex@maps.me> | 2015-09-23 01:46:11 +0300 |
commit | f39b440fccd3decf8338c6422dd5de695900e255 (patch) | |
tree | bf9f2f224ce36fe5928f756bd582e9be6a8a4010 /indexer | |
parent | 81b8ae2642d91b1f01089f6543e1201d4e872b6f (diff) |
Fix ruler drawing. Add a lot of todo's for future (just code optimizing).
Diffstat (limited to 'indexer')
-rw-r--r-- | indexer/mercator.cpp | 17 | ||||
-rw-r--r-- | indexer/mercator.hpp | 2 |
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; } }; |