summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormvglasow <michael@vonglasow.com>2015-11-12 14:32:20 +0100
committermvglasow <michael@vonglasow.com>2015-11-12 14:32:20 +0100
commit8f416fffaddeb3cce7172359222cf390e88f2ec9 (patch)
tree935ba477bfe45bde10c7bbc70fba9d9ccffec07a
parentfc19b6bc98c5c8a453a8d53e4ecd687f06e6b465 (diff)
parent5181de37a465e643ce3857321989a0d6beed027a (diff)
downloadnavit-R6351.tar.gz
Merge pull request #38 from mvglasow/trac1331R6351
Fix:gui_internal:Format coordinates properly on Android Lollipop
-rw-r--r--navit/gui/internal/gui_internal_command.c27
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 *