7 * @param pos_c char for positive value
8 * @param neg_c char for negative value
10 static gchar *convert_dec_to_dmm(gdouble dec, gchar pos_c, gchar neg_c)
30 val_m = (tmp - val_d) * 60;
33 /* TODO : replace "°" as UTF-8 */
34 result = g_strdup_printf ( "%c%d°%f'",
35 sign_c, val_d, val_m );
39 gchar *convert_lat_dec_to_dmm(gdouble lat)
41 return convert_dec_to_dmm(lat, 'N', 'S');
44 gchar *convert_lon_dec_to_dmm(gdouble lon)
46 return convert_dec_to_dmm(lon, 'E', 'W');
50 * @param pos_c char for positive value
51 * @param neg_c char for negative value
53 static gchar *convert_dec_to_dms(gdouble dec, gchar pos_c, gchar neg_c)
73 tmp = (tmp - val_d) * 60;
77 val_s = (tmp - val_m) * 60;
80 /* TODO : replace "°" as UTF-8 */
81 result = g_strdup_printf ( "%c%d°%d'%f\"",
82 sign_c, val_d, val_m, val_s );
86 gchar *convert_lat_dec_to_dms(gdouble lat)
88 return convert_dec_to_dms(lat, 'N', 'S');
91 gchar *convert_lon_dec_to_dms(gdouble lon)
93 return convert_dec_to_dms(lon, 'E', 'W');
96 gdouble convert_dms_to_dec(const gchar *dms)
98 gdouble d = 0.0; /* Degree */
99 gdouble m = 0.0; /* Minutes */
100 gdouble s = 0.0; /* Seconds */
106 const gchar *ptr, *endptr;
109 // It is negative if:
110 // - the '-' sign occurs
111 // - it is a west longitude or south latitude
112 if (strpbrk (dms, "-wWsS") != NULL)
115 // Peek the différent components
119 ptr = strpbrk (endptr, "0123456789,.");
121 value = g_strtod(ptr, &endptr);
135 } while (ptr != NULL && endptr != NULL);
138 // Compute the result
139 result = d + m/60 + s/3600;
141 if (neg) result = - result;