diff --git a/android/jni/com/mapswithme/maps/Framework.cpp b/android/jni/com/mapswithme/maps/Framework.cpp index e9979803b1..eafe6a622d 100644 --- a/android/jni/com/mapswithme/maps/Framework.cpp +++ b/android/jni/com/mapswithme/maps/Framework.cpp @@ -859,6 +859,24 @@ extern "C" return jni::ToJavaString(env, MeasurementUtils::FormatLatLon(lat, lon, 6)); } + JNIEXPORT jobjectArray JNICALL + Java_com_mapswithme_maps_Framework_nativeFormatLatLonToArr(JNIEnv * env, jclass clazz, jdouble lat, jdouble lon, jboolean useDMSFormat) + { + string slat, slon; + if (useDMSFormat) + MeasurementUtils::FormatLatLonAsDMS(lat, lon, slat, slon, 2); + else + MeasurementUtils::FormatLatLon(lat, lon, slat, slon, 6); + + jclass klass = env->FindClass("java/lang/String"); + jobjectArray arr = env->NewObjectArray(2, klass, 0); + + env->SetObjectArrayElement(arr, 0, jni::ToJavaString(env, slat)); + env->SetObjectArrayElement(arr, 1, jni::ToJavaString(env, slon)); + + return arr; + } + JNIEXPORT jobject JNICALL Java_com_mapswithme_maps_Framework_nativeFormatAltitude(JNIEnv * env, jclass clazz, jdouble alt) { diff --git a/android/src/com/mapswithme/maps/Framework.java b/android/src/com/mapswithme/maps/Framework.java index 096e34e9de..a4039bc040 100644 --- a/android/src/com/mapswithme/maps/Framework.java +++ b/android/src/com/mapswithme/maps/Framework.java @@ -79,6 +79,8 @@ public class Framework public native static String nativeFormatLatLon(double lat, double lon, boolean useDMSFormat); + public native static String[] nativeFormatLatLonToArr(double lat, double lon, boolean useDMSFormat); + public native static String nativeFormatAltitude(double alt); public native static String nativeFormatSpeed(double speed); diff --git a/android/src/com/mapswithme/maps/widget/MapInfoView.java b/android/src/com/mapswithme/maps/widget/MapInfoView.java index d26abd323d..98a8da3bad 100644 --- a/android/src/com/mapswithme/maps/widget/MapInfoView.java +++ b/android/src/com/mapswithme/maps/widget/MapInfoView.java @@ -554,7 +554,7 @@ public class MapInfoView extends LinearLayout implements View.OnClickListener { final double lat = mMapObject.getLat(); final double lon = mMapObject.getLon(); - final String[] latLon = Framework.nativeFormatLatLon(lat, lon, mIsLatLonDms).split(" "); + final String[] latLon = Framework.nativeFormatLatLonToArr(lat, lon, mIsLatLonDms); if (latLon.length == 2) { mTvLat.setText(latLon[0]); diff --git a/map/measurement_utils.cpp b/map/measurement_utils.cpp index c6de1aa8e0..d44aaad9b7 100644 --- a/map/measurement_utils.cpp +++ b/map/measurement_utils.cpp @@ -108,6 +108,12 @@ string FormatLatLonAsDMS(double lat, double lon, int dac) FormatLatLonAsDMSImpl(lon, 'E', 'W', dac)); } +void FormatLatLonAsDMS(double lat, double lon, string & latText, string & lonText, int dac) +{ + latText = FormatLatLonAsDMSImpl(lat, 'N', 'S', dac); + lonText = FormatLatLonAsDMSImpl(lon, 'E', 'W', dac); +} + void FormatMercatorAsDMS(m2::PointD const & mercator, string & lat, string & lon, int dac) { lat = FormatLatLonAsDMSImpl(MercatorBounds::YToLat(mercator.y), 'N', 'S', dac); @@ -125,6 +131,12 @@ string FormatLatLon(double lat, double lon, int dac) return strings::to_string_dac(lat, dac) + " " + strings::to_string_dac(lon, dac); } +void FormatLatLon(double lat, double lon, string & latText, string & lonText, int dac) +{ + latText = strings::to_string_dac(lat, dac); + lonText = 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); diff --git a/map/measurement_utils.hpp b/map/measurement_utils.hpp index c19e826dd6..9ead0bbd2b 100644 --- a/map/measurement_utils.hpp +++ b/map/measurement_utils.hpp @@ -30,10 +30,12 @@ string FormatSpeed(double metersPerSecond); /// @param[in] dac Digits after comma in seconds. /// Use dac == 3 for our common conversions. string FormatLatLonAsDMS(double lat, double lon, int dac = 3); +void FormatLatLonAsDMS(double lat, double lon, string & latText, string & lonText, int dac = 3); string FormatMercatorAsDMS(m2::PointD const & mercator, int dac = 3); void FormatMercatorAsDMS(m2::PointD const & mercator, string & lat, string & lon, int dac = 3); /// Simple decimal degrees formating string FormatLatLon(double lat, double lon, int dac = 6); +void FormatLatLon(double lat, double lon, string & latText, string & lonText, int dac = 6); string FormatMercator(m2::PointD const & mercator, int dac = 6); void FormatMercator(m2::PointD const & mercator, string & lat, string & lon, int dac = 6);