From c566cde6fcc3350738fee6108db26888a5fd4beb Mon Sep 17 00:00:00 2001 From: vng Date: Sun, 12 Jun 2011 11:38:40 +0300 Subject: [PATCH] Add GetScaleLevelD functions (return double factors without conversion to int). --- indexer/scales.cpp | 20 +++++++++++++++----- indexer/scales.hpp | 3 +++ 2 files changed, 18 insertions(+), 5 deletions(-) diff --git a/indexer/scales.cpp b/indexer/scales.cpp index b4e08a1f66..88e20afe8a 100644 --- a/indexer/scales.cpp +++ b/indexer/scales.cpp @@ -25,20 +25,30 @@ namespace scales } //@} - int GetScaleLevel(double ratio) + double GetScaleLevelD(double ratio) { double const level = min(static_cast(GetUpperScale()), log(ratio) / log(2.0) + initial_level); - return (level < 0 ? 0 : static_cast(level + 0.5)); + return (level < 0.0 ? 0.0 : level); } - int GetScaleLevel(m2::RectD const & r) + double GetScaleLevelD(m2::RectD const & r) { - // TODO: fix scale coefficients for mercator + // TODO: fix scale factors for mercator projection double const dx = (MercatorBounds::maxX - MercatorBounds::minX) / r.SizeX(); double const dy = (MercatorBounds::maxY - MercatorBounds::minY) / r.SizeY(); // get the average ratio - return GetScaleLevel((dx + dy) / 2.0); + return GetScaleLevelD((dx + dy) / 2.0); + } + + int GetScaleLevel(double ratio) + { + return my::rounds(GetScaleLevelD(ratio)); + } + + int GetScaleLevel(m2::RectD const & r) + { + return my::rounds(GetScaleLevelD(r)); } double GetRationForLevel(int level) diff --git a/indexer/scales.hpp b/indexer/scales.hpp index e09124ddbe..a6dade1ca3 100644 --- a/indexer/scales.hpp +++ b/indexer/scales.hpp @@ -9,6 +9,9 @@ namespace scales inline int GetUpperWorldScale() { return 9; } double GetM2PFactor(int level); + + double GetScaleLevelD(double ratio); + double GetScaleLevelD(m2::RectD const & r); int GetScaleLevel(double ratio); int GetScaleLevel(m2::RectD const & r);