From 520ac0224a5e55be304edfee0dd5d7948028f50c Mon Sep 17 00:00:00 2001 From: Alex Zolotarev Date: Mon, 16 Jun 2014 22:42:35 -1000 Subject: [PATCH] Added helper functions to coordinates formatting --- map/measurement_utils.cpp | 18 ++++++++++++++++++ map/measurement_utils.hpp | 8 +++++++- search/intermediate_result.cpp | 4 +++- 3 files changed, 28 insertions(+), 2 deletions(-) diff --git a/map/measurement_utils.cpp b/map/measurement_utils.cpp index e9785b5818..45ff88ac09 100644 --- a/map/measurement_utils.cpp +++ b/map/measurement_utils.cpp @@ -2,6 +2,8 @@ #include "../platform/settings.hpp" +#include "../indexer/mercator.hpp" + #include "../base/string_utils.hpp" #include "../base/math.hpp" @@ -106,4 +108,20 @@ string FormatLatLonAsDMS(double lat, double lon, int dac) FormatLatLonAsDMSImpl(lon, 'E', 'W', dac)); } +string FormatMercatorAsDMS(m2::PointD const & mercator, int dac) +{ + return FormatLatLonAsDMS(MercatorBounds::YToLat(mercator.y), MercatorBounds::XToLon(mercator.x), dac); +} + +// @TODO take into account decimal points or commas as separators in different locales +string FormatLatLon(double lat, double lon, int dac) +{ + return strings::to_string_dac(lat, dac) + ", " + strings::to_string_dac(lon, dac); +} + +string FormatMercator(m2::PointD const & mercator, int dac) +{ + return FormatLatLon(MercatorBounds::YToLat(mercator.y), MercatorBounds::XToLon(mercator.x), dac); +} + } // namespace MeasurementUtils diff --git a/map/measurement_utils.hpp b/map/measurement_utils.hpp index f452c68e69..28d41a9ac3 100644 --- a/map/measurement_utils.hpp +++ b/map/measurement_utils.hpp @@ -1,5 +1,7 @@ #pragma once +#include "../geometry/point2d.hpp" + #include "../std/string.hpp" namespace MeasurementUtils @@ -22,6 +24,10 @@ bool FormatDistance(double m, string & res); /// @param[in] dac Digits after comma in seconds. /// Use dac == 3 for our common conversions. -string FormatLatLonAsDMS(double lat, double lon, int dac = 0); +string FormatLatLonAsDMS(double lat, double lon, int dac = 3); +string FormatMercatorAsDMS(m2::PointD const & mercator, int dac = 3); +/// Simple decimal degrees formating +string FormatLatLon(double lat, double lon, int dac = 6); +string FormatMercator(m2::PointD const & mercator, int dac = 6); } diff --git a/search/intermediate_result.cpp b/search/intermediate_result.cpp index 01af226039..6145b41377 100644 --- a/search/intermediate_result.cpp +++ b/search/intermediate_result.cpp @@ -2,6 +2,8 @@ #include "ftypes_matcher.hpp" #include "geometry_utils.hpp" +#include "../map/measurement_utils.hpp" + #include "../storage/country_info.hpp" #include "../indexer/classificator.hpp" @@ -166,7 +168,7 @@ PreResult2::PreResult2(FeatureType const & f, PreResult1 const * p, } PreResult2::PreResult2(m2::RectD const & viewport, m2::PointD const & pos, double lat, double lon) - : m_str("(" + strings::to_string_dac(lat, 5) + ", " + strings::to_string_dac(lon, 5) + ")"), + : m_str("(" + MeasurementUtils::FormatLatLon(lat, lon) + ")"), m_resultType(RESULT_LATLON), m_rank(255), m_geomType(feature::GEOM_UNDEFINED)