196 if(item->next &&
cmp_n <= 0)
213 const double lat1 =
tp->latitude;
214 const double lon1 =
tp->longitude;
215 const double lat2 =
tp_next->latitude;
216 const double lon2 =
tp_next->longitude;
226 lon = lon1 + (lon2 - lon1) *
f;
227 lat = lat1 + (lat2 - lat1) *
f;
296 fprintf(
stderr,
"broken GPX file, new trkpt element before the previous ended.\n");
330 fprintf(
stderr,
"broken GPX file, failed to get lon/lat attribute values for trkpt\n");
335 fprintf(
stderr,
"broken GPX file, trkpt element doesn't have lon/lat attributes\n");
426 fprintf(
stderr,
"broken GPX file, failed to pars is8601 time '%s' for trackpoint\n", text);
460 if(
tpd->segid != segid)
return pts;
462 p->lat =
tpd->latitude;
463 p->lon =
tpd->longitude;
474 double lat2,
double lon2,
495 const double lat2,
const double lon2,
static void error(char *msg)
static gboolean g_list_shorter_than(const GList *list, unsigned len)
void dt_gpx_destroy(struct dt_gpx_t *gpx)
GList * dt_gpx_get_trkpts(struct dt_gpx_t *gpx, const guint segid)
static gint _sort_track(gconstpointer a, gconstpointer b)
static void _gpx_parser_text(GMarkupParseContext *context, const gchar *text, gsize text_len, gpointer user_data, GError **error)
static GMarkupParser _gpx_parser
void _track_seg_free(dt_gpx_track_segment_t *trkseg)
static void _gpx_parser_end_element(GMarkupParseContext *context, const gchar *element_name, gpointer user_data, GError **error)
gboolean dt_gpx_get_location(struct dt_gpx_t *gpx, GDateTime *timestamp, dt_image_geoloc_t *geoloc)
@ GPX_PARSER_ELEMENT_NAME
@ GPX_PARSER_ELEMENT_TRKPT
@ GPX_PARSER_ELEMENT_NONE
@ GPX_PARSER_ELEMENT_TIME
static gint _sort_segment(gconstpointer a, gconstpointer b)
dt_gpx_t * dt_gpx_new(const gchar *filename)
void _track_pts_free(dt_gpx_track_point_t *trkpt)
void dt_gpx_geodesic_intermediate_point(const double lat1, const double lon1, const double lat2, const double lon2, const double delta, const gboolean first_time, double f, double *lat, double *lon)
GList * dt_gpx_get_trkseg(struct dt_gpx_t *gpx)
static void _gpx_parser_start_element(GMarkupParseContext *ctx, const gchar *element_name, const gchar **attribute_names, const gchar **attribute_values, gpointer ueer_data, GError **error)
void dt_gpx_geodesic_distance(double lat1, double lon1, double lat2, double lon2, double *d, double *delta)
#define DT_MINIMUM_ANGULAR_DELTA_FOR_GEODESIC
#define IS_NULL_PTR(p)
C is way too permissive with !=, == and if(var) checks, which can mean too many things depending on w...
#define dt_free(ptr)
g_free() ptr and set it to NULL, skipping both if it is already NULL.
gboolean invalid_track_point
_gpx_parser_element_t current_parser_element
dt_gpx_track_point_t * current_track_point
dt_gpx_track_point_t * trkpt
typedef double((*spd)(unsigned long int wavelength, double TempK))