]> git.street.me.uk Git - andy/viking.git/blobdiff - src/viktrack.c
Add a function to find out the distance along a track to a particular trackpoint.
[andy/viking.git] / src / viktrack.c
index 366b90fe8b67b33b646207f1c8a994b68a28e83a..28b889014e02971fb46e37ee0cef2582e34ae6bc 100644 (file)
@@ -222,6 +222,33 @@ void vik_track_add_trackpoint ( VikTrack *tr, VikTrackpoint *tp, gboolean recalc
     track_recalculate_bounds_last_tp ( tr );
 }
 
+/**
+ * vik_track_get_length_to_trackpoint:
+ *
+ */
+gdouble vik_track_get_length_to_trackpoint (const VikTrack *tr, const VikTrackpoint *tp)
+{
+  gdouble len = 0.0;
+  if ( tr->trackpoints )
+  {
+    GList *iter = tr->trackpoints->next;
+    while (iter)
+    {
+      VikTrackpoint *tp1 = VIK_TRACKPOINT(iter->data);
+      if ( ! tp1->newsegment )
+        len += vik_coord_diff ( &(tp1->coord),
+                                &(VIK_TRACKPOINT(iter->prev->data)->coord) );
+
+      // Exit when we reach the desired point
+      if ( tp1 == tp )
+       break;
+
+      iter = iter->next;
+    }
+  }
+  return len;
+}
+
 gdouble vik_track_get_length(const VikTrack *tr)
 {
   gdouble len = 0.0;