# HG changeset patch # User nadvornik # Date 1238872249 0 # Node ID e70bbc97acc5e5f16d54f677d7918fce388f21fa # Parent 23d24af93ab0f4bc51c2d3efc4d81d366f1be6c4 added metadata_read_GPS_coord diff -r 23d24af93ab0 -r e70bbc97acc5 src/metadata.c --- a/src/metadata.c Sat Apr 04 16:42:54 2009 +0000 +++ b/src/metadata.c Sat Apr 04 19:10:49 2009 +0000 @@ -515,6 +515,43 @@ g_free(string); return ret; } + +gdouble metadata_read_GPS_coord(FileData *fd, const gchar *key, gdouble fallback) +{ + gdouble coord; + gchar *endptr; + gdouble deg, min, sec; + gboolean ok = FALSE; + gchar *string = metadata_read_string(fd, key, METADATA_PLAIN); + if (!string) return fallback; + + deg = g_ascii_strtod(string, &endptr); + if (*endptr == ',') + { + min = g_ascii_strtod(endptr + 1, &endptr); + if (*endptr == ',') + sec = g_ascii_strtod(endptr + 1, &endptr); + else + sec = 0.0; + + + if (*endptr == 'S' || *endptr == 'W' || *endptr == 'N' || *endptr == 'E') + { + coord = deg + min /60.0 + sec / 3600.0; + ok = TRUE; + if (*endptr == 'S' || *endptr == 'W') coord = -coord; + } + } + + if (!ok) + { + coord = fallback; + log_printf("unable to parse GPS coordinate '%s'\n", string); + } + + g_free(string); + return coord; +} gboolean metadata_append_string(FileData *fd, const gchar *key, const char *value) { diff -r 23d24af93ab0 -r e70bbc97acc5 src/metadata.h --- a/src/metadata.h Sat Apr 04 16:42:54 2009 +0000 +++ b/src/metadata.h Sat Apr 04 19:10:49 2009 +0000 @@ -30,6 +30,7 @@ GList *metadata_read_list(FileData *fd, const gchar *key, MetadataFormat format); gchar *metadata_read_string(FileData *fd, const gchar *key, MetadataFormat format); guint64 metadata_read_int(FileData *fd, const gchar *key, guint64 fallback); +gdouble metadata_read_GPS_coord(FileData *fd, const gchar *key, gdouble fallback); gboolean metadata_append_string(FileData *fd, const gchar *key, const char *value); gboolean metadata_append_list(FileData *fd, const gchar *key, const GList *values);