#define RAD2DEG(x) ((x)*(180/M_PI))
#endif
#include "degrees_converters.h"
+#include "misc/fpconv.h"
+
+/**
+ *
+ */
+void a_coords_dtostr_buffer ( double d, char buffer[COORDS_STR_BUFFER_SIZE] )
+{
+ int str_len = fpconv_dtoa(d, buffer);
+ if ( str_len < COORDS_STR_BUFFER_SIZE )
+ buffer[str_len] = '\0';
+ else
+ buffer[COORDS_STR_BUFFER_SIZE-1] = '\0';
+}
/**
* Convert a double to a string WITHOUT LOCALE.
char *a_coords_dtostr ( double d )
{
gchar *buffer = g_malloc(G_ASCII_DTOSTR_BUF_SIZE*sizeof(gchar));
- g_ascii_dtostr (buffer, G_ASCII_DTOSTR_BUF_SIZE, (gdouble) d);
+ // Note that this doesn't necessary produce the shortest string
+ //g_ascii_formatd (buffer, G_ASCII_DTOSTR_BUF_SIZE, "%.9lf", (gdouble)d);
+ // Thus use third party code:
+ a_coords_dtostr_buffer ( d, buffer );
return buffer;
}
double N1, T1, C1, R1, D, M;
double long_origin;
double mu, phi1_rad;
- int northernHemisphere; /* 1 for northern hemisphere, 0 for southern */
double latitude, longitude;
northing = utm->northing;
/* Now convert. */
x = easting - 500000.0; /* remove 500000 meter offset */
y = northing;
- if ( ( *letter - 'N' ) >= 0 )
- northernHemisphere = 1; /* northern hemisphere */
- else
- {
- northernHemisphere = 0; /* southern hemisphere */
- y -= 10000000.0; /* remove 1e7 meter offset */
- }
+ if ( ( *letter - 'N' ) < 0 ) {
+ /* southern hemisphere */
+ y -= 10000000.0; /* remove 1e7 meter offset */
+ }
+
long_origin = ( zone - 1 ) * 6 - 180 + 3; /* +3 puts origin in middle of zone */
eccPrimeSquared = EccentricitySquared / ( 1.0 - EccentricitySquared );
e1 = ( 1.0 - sqrt( 1.0 - EccentricitySquared ) ) / ( 1.0 + sqrt( 1.0 - EccentricitySquared ) );
*lat = convert_lat_dec_to_dms ( latlon->lat );
*lon = convert_lon_dec_to_dms ( latlon->lon );
break;
+ case VIK_DEGREE_FORMAT_RAW:
+ *lat = g_strdup_printf ( "%.6f", latlon->lat );
+ *lon = g_strdup_printf ( "%.6f", latlon->lon );
+ break;
default:
g_critical("Houston, we've had a problem. format=%d", format);
}