Add GetScaleLevelD functions (return double factors without conversion to int).

This commit is contained in:
vng 2011-06-12 11:38:40 +03:00 committed by Alex Zolotarev
parent 2ac332749e
commit c566cde6fc
2 changed files with 18 additions and 5 deletions

View file

@ -25,20 +25,30 @@ namespace scales
}
//@}
int GetScaleLevel(double ratio)
double GetScaleLevelD(double ratio)
{
double const level = min(static_cast<double>(GetUpperScale()), log(ratio) / log(2.0) + initial_level);
return (level < 0 ? 0 : static_cast<int>(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)

View file

@ -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);