From 5181de37a465e643ce3857321989a0d6beed027a Mon Sep 17 00:00:00 2001 From: mvglasow Date: Thu, 12 Nov 2015 14:15:36 +0100 Subject: Fix:gui_internal:Format coordinates properly on Android Lollipop Signed-off-by: mvglasow --- navit/gui/internal/gui_internal_command.c | 27 ++++++++++++++++++++++++++- 1 file changed, 26 insertions(+), 1 deletion(-) (limited to 'navit/gui') diff --git a/navit/gui/internal/gui_internal_command.c b/navit/gui/internal/gui_internal_command.c index 2c9ac2f64..62d7a0f35 100644 --- a/navit/gui/internal/gui_internal_command.c +++ b/navit/gui/internal/gui_internal_command.c @@ -39,6 +39,15 @@ extern char *version; +/** + * @brief Converts a WGS84 coordinate pair to its string representation. + * + * This function takes a coordinate pair with latitude and longitude in degrees and converts them to a + * string of the form {@code 45°28'0" N 9°11'26" E}. + * + * @param gc A WGS84 coordinate pair + * @param sep The separator character to insert between latitude and longitude + */ static char * coordinates_geo(const struct coord_geo *gc, char sep) { @@ -46,6 +55,7 @@ coordinates_geo(const struct coord_geo *gc, char sep) int lat_deg,lat_min,lat_sec; int lng_deg,lng_min,lng_sec; struct coord_geo g=*gc; + char *ret; if (g.lat < 0) { g.lat=-g.lat; @@ -61,7 +71,22 @@ coordinates_geo(const struct coord_geo *gc, char sep) lng_sec=fmod(g.lng*3600+0.5,60); lng_min=fmod(g.lng*60-lng_sec/60.0+0.5,60); lng_deg=g.lng-lng_min/60.0-lng_sec/3600.0+0.5;; - return g_strdup_printf("%d°%d'%d\" %c%c%d°%d'%d\" %c",lat_deg,lat_min,lat_sec,latc,sep,lng_deg,lng_min,lng_sec,lngc); + + /* Don't use g_strdup_printf for the full string because it has issues with extended ANSI characters + * (notably the degree sign, 0xb0) on Android Lollipop. + */ + ret = g_strjoin(NULL, + g_strdup_printf("%d", lat_deg), "°", + g_strdup_printf("%d", lat_min), "'", + g_strdup_printf("%d", lat_sec), "\" ", + g_strnfill(1, latc), + g_strnfill(1, sep), + g_strdup_printf("%d", lng_deg), "°", + g_strdup_printf("%d", lng_min), "'", + g_strdup_printf("%d", lng_sec), "\" ", + g_strnfill(1, lngc), + NULL); + return ret; } char * -- cgit v1.2.1