7 * @param pos_c char for positive value
8 * @param neg_c char for negative value
10 static gchar *convert_dec_to_ddd(gdouble dec, gchar pos_c, gchar neg_c)
27 /* TODO : replace "°" as UTF-8 */
28 result = g_strdup_printf ( "%c%f°", sign_c, val_d );
32 gchar *convert_lat_dec_to_ddd(gdouble lat)
34 return convert_dec_to_ddd(lat, 'N', 'S');
37 gchar *convert_lon_dec_to_ddd(gdouble lon)
39 return convert_dec_to_ddd(lon, 'E', 'W');
43 * @param pos_c char for positive value
44 * @param neg_c char for negative value
46 static gchar *convert_dec_to_dmm(gdouble dec, gchar pos_c, gchar neg_c)
66 val_m = (tmp - val_d) * 60;
69 /* TODO : replace "°" as UTF-8 */
70 result = g_strdup_printf ( "%c%d°%f'",
71 sign_c, val_d, val_m );
75 gchar *convert_lat_dec_to_dmm(gdouble lat)
77 return convert_dec_to_dmm(lat, 'N', 'S');
80 gchar *convert_lon_dec_to_dmm(gdouble lon)
82 return convert_dec_to_dmm(lon, 'E', 'W');
86 * @param pos_c char for positive value
87 * @param neg_c char for negative value
89 static gchar *convert_dec_to_dms(gdouble dec, gchar pos_c, gchar neg_c)
109 tmp = (tmp - val_d) * 60;
113 val_s = (tmp - val_m) * 60;
116 /* TODO : replace "°" as UTF-8 */
117 result = g_strdup_printf ( "%c%d°%d'%f\"",
118 sign_c, val_d, val_m, val_s );
122 gchar *convert_lat_dec_to_dms(gdouble lat)
124 return convert_dec_to_dms(lat, 'N', 'S');
127 gchar *convert_lon_dec_to_dms(gdouble lon)
129 return convert_dec_to_dms(lon, 'E', 'W');
132 gdouble convert_dms_to_dec(const gchar *dms)
134 gdouble d = 0.0; /* Degree */
135 gdouble m = 0.0; /* Minutes */
136 gdouble s = 0.0; /* Seconds */
142 const gchar *ptr, *endptr;
145 // It is negative if:
146 // - the '-' sign occurs
147 // - it is a west longitude or south latitude
148 if (strpbrk (dms, "-wWsS") != NULL)
151 // Peek the différent components
155 ptr = strpbrk (endptr, "0123456789,.");
157 value = g_strtod(ptr, &endptr);
171 } while (ptr != NULL && endptr != NULL);
174 // Compute the result
175 result = d + m/60 + s/3600;
177 if (neg) result = - result;