X-Git-Url: https://git.street.me.uk/andy/viking.git/blobdiff_plain/bb3c38aff330a892b8001a15ee17fe8f9e73efce..db771541ff9b86b3ef5e204d5d5d659ccf66e7e6:/src/file.c diff --git a/src/file.c b/src/file.c index 49f35588..d2692a35 100644 --- a/src/file.c +++ b/src/file.c @@ -28,6 +28,7 @@ #include "jpg.h" #include "gpx.h" +#include "geojson.h" #include "babel.h" #include @@ -44,6 +45,7 @@ #include #include "file.h" +#include "misc/strtod.h" #define TEST_BOOLEAN(str) (! ((str)[0] == '\0' || (str)[0] == '0' || (str)[0] == 'n' || (str)[0] == 'N' || (str)[0] == 'f' || (str)[0] == 'F') ) #define VIK_MAGIC "#VIK" @@ -432,13 +434,13 @@ static gboolean file_read ( VikAggregateLayer *top, FILE *f, const gchar *dirpat // However we'll still carry and attempt to read whatever we can } else if ( stack->under == NULL && eq_pos == 4 && strncasecmp ( line, "xmpp", eq_pos ) == 0) /* "hard coded" params: global & for all layer-types */ - vik_viewport_set_xmpp ( VIK_VIEWPORT(vp), strtod ( line+5, NULL ) ); + vik_viewport_set_xmpp ( VIK_VIEWPORT(vp), strtod_i8n ( line+5, NULL ) ); else if ( stack->under == NULL && eq_pos == 4 && strncasecmp ( line, "ympp", eq_pos ) == 0) - vik_viewport_set_ympp ( VIK_VIEWPORT(vp), strtod ( line+5, NULL ) ); + vik_viewport_set_ympp ( VIK_VIEWPORT(vp), strtod_i8n ( line+5, NULL ) ); else if ( stack->under == NULL && eq_pos == 3 && strncasecmp ( line, "lat", eq_pos ) == 0 ) - ll.lat = strtod ( line+4, NULL ); + ll.lat = strtod_i8n ( line+4, NULL ); else if ( stack->under == NULL && eq_pos == 3 && strncasecmp ( line, "lon", eq_pos ) == 0 ) - ll.lon = strtod ( line+4, NULL ); + ll.lon = strtod_i8n ( line+4, NULL ); else if ( stack->under == NULL && eq_pos == 4 && strncasecmp ( line, "mode", eq_pos ) == 0 && strcasecmp ( line+5, "utm" ) == 0) vik_viewport_set_drawmode ( VIK_VIEWPORT(vp), VIK_VIEWPORT_DRAWMODE_UTM); else if ( stack->under == NULL && eq_pos == 4 && strncasecmp ( line, "mode", eq_pos ) == 0 && strcasecmp ( line+5, "expedia" ) == 0) @@ -499,7 +501,7 @@ static gboolean file_read ( VikAggregateLayer *top, FILE *f, const gchar *dirpat } else { switch ( params[i].type ) { - case VIK_LAYER_PARAM_DOUBLE: x.d = strtod(line, NULL); break; + case VIK_LAYER_PARAM_DOUBLE: x.d = strtod_i8n(line, NULL); break; case VIK_LAYER_PARAM_UINT: x.u = strtoul(line, NULL, 10); break; case VIK_LAYER_PARAM_INT: x.i = strtol(line, NULL, 10); break; case VIK_LAYER_PARAM_BOOLEAN: x.b = TEST_BOOLEAN(line); break; @@ -626,6 +628,9 @@ gchar *append_file_ext ( const gchar *filename, VikFileType_t type ) case FILE_TYPE_KML: ext = ".kml"; break; + case FILE_TYPE_GEOJSON: + ext = ".geojson"; + break; case FILE_TYPE_GPSMAPPER: case FILE_TYPE_GPSPOINT: default: @@ -797,6 +802,8 @@ gboolean a_file_export ( VikTrwLayer *vtl, const gchar *filename, VikFileType_t FILE *f = g_fopen ( filename, "w" ); if ( f ) { + gboolean result = TRUE; + if ( trk ) { switch ( file_type ) { case FILE_TYPE_GPX: @@ -818,6 +825,9 @@ gboolean a_file_export ( VikTrwLayer *vtl, const gchar *filename, VikFileType_t case FILE_TYPE_GPSPOINT: a_gpspoint_write_file ( vtl, f ); break; + case FILE_TYPE_GEOJSON: + result = a_geojson_write_file ( vtl, f ); + break; case FILE_TYPE_KML: fclose ( f ); f = NULL; @@ -840,7 +850,7 @@ gboolean a_file_export ( VikTrwLayer *vtl, const gchar *filename, VikFileType_t } fclose ( f ); f = NULL; - return TRUE; + return result; } return FALSE; }