diff options
author | mvglasow <michael -at- vonglasow.com> | 2015-11-12 14:15:36 +0100 |
---|---|---|
committer | mvglasow <michael -at- vonglasow.com> | 2015-11-12 14:15:36 +0100 |
commit | 5181de37a465e643ce3857321989a0d6beed027a (patch) | |
tree | 935ba477bfe45bde10c7bbc70fba9d9ccffec07a /navit/gui | |
parent | fc19b6bc98c5c8a453a8d53e4ecd687f06e6b465 (diff) | |
download | navit-5181de37a465e643ce3857321989a0d6beed027a.tar.gz |
Fix:gui_internal:Format coordinates properly on Android Lollipop
Signed-off-by: mvglasow <michael -at- vonglasow.com>
Diffstat (limited to 'navit/gui')
-rw-r--r-- | navit/gui/internal/gui_internal_command.c | 27 |
1 files changed, 26 insertions, 1 deletions
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 * |