added metadata_read_GPS_coord
authorVladimir Nadvornik <nadvornik@suse.cz>
Sat, 4 Apr 2009 19:10:49 +0000 (19:10 +0000)
committerVladimir Nadvornik <nadvornik@suse.cz>
Sat, 4 Apr 2009 19:10:49 +0000 (19:10 +0000)
src/metadata.c
src/metadata.h

index e6fea0e..02439b2 100644 (file)
@@ -515,6 +515,43 @@ guint64 metadata_read_int(FileData *fd, const gchar *key, guint64 fallback)
        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)
 {
index 46ccc0b..ea13ee5 100644 (file)
@@ -30,6 +30,7 @@ gboolean metadata_write_string(FileData *fd, const gchar *key, const char *value
 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);