diff options
author | vng <viktor.govako@gmail.com> | 2011-06-06 23:05:26 +0400 |
---|---|---|
committer | Alex Zolotarev <alex@maps.me> | 2015-09-23 01:19:17 +0300 |
commit | 665dc21283165c2efec23c9815238648607cd3eb (patch) | |
tree | f39a2ca7b6cedd186674df20d7f8cbd03557e549 /indexer/scales.cpp | |
parent | 5e7f1f38849ff59ae29c82b4395949e23f3617fd (diff) |
GetRationForLevel, GetRectForLevel implementation.
Diffstat (limited to 'indexer/scales.cpp')
-rw-r--r-- | indexer/scales.cpp | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/indexer/scales.cpp b/indexer/scales.cpp index 978698663e..b4e08a1f66 100644 --- a/indexer/scales.cpp +++ b/indexer/scales.cpp @@ -41,6 +41,27 @@ namespace scales return GetScaleLevel((dx + dy) / 2.0); } + double GetRationForLevel(int level) + { + if (level < initial_level) level = initial_level; + return pow(2.0, level - initial_level); + } + + m2::RectD GetRectForLevel(int level, m2::PointD const & center, double X2YRatio) + { + double const dy = 2.0*GetRationForLevel(level) / (1.0 + X2YRatio); + double const dx = X2YRatio * dy; + ASSERT_GREATER ( dy, 0.0, () ); + ASSERT_GREATER ( dx, 0.0, () ); + + double const xL = (MercatorBounds::maxX - MercatorBounds::minX) / (2.0*dx); + double const yL = (MercatorBounds::maxY - MercatorBounds::minY) / (2.0*dy); + ASSERT_GREATER ( xL, 0.0, () ); + ASSERT_GREATER ( yL, 0.0, () ); + + return m2::RectD(center.x - xL, center.y - yL, center.x + xL, center.y + yL); + } + namespace { double GetEpsilonImpl(int level, int logEps) |