viktrack

viktrack

Functions

#define VIK_TRACK()
#define VIK_TRACKPOINT()
VikTrack * vik_track_new ()
void vik_track_set_defaults ()
void vik_track_set_name ()
void vik_track_set_comment ()
void vik_track_set_description ()
void vik_track_ref ()
void vik_track_free ()
VikTrack * vik_track_copy ()
void vik_track_set_comment_no_copy ()
VikTrackpoint * vik_trackpoint_new ()
void vik_trackpoint_free ()
VikTrackpoint * vik_trackpoint_copy ()
void vik_trackpoint_set_name ()
void vik_track_add_trackpoint ()
gdouble vik_track_get_length_to_trackpoint ()
gdouble vik_track_get_length ()
gdouble vik_track_get_length_including_gaps ()
gulong vik_track_get_tp_count ()
guint vik_track_get_segment_count ()
VikTrack ** vik_track_split_into_segments ()
guint vik_track_merge_segments ()
void vik_track_reverse ()
gdouble vik_track_get_duration ()
gulong vik_track_get_dup_point_count ()
gulong vik_track_remove_dup_points ()
gulong vik_track_get_same_time_point_count ()
gulong vik_track_remove_same_time_points ()
void vik_track_to_routepoints ()
gdouble vik_track_get_max_speed ()
gdouble vik_track_get_average_speed ()
gdouble vik_track_get_average_speed_moving ()
void vik_track_convert ()
gdouble * vik_track_make_elevation_map ()
void vik_track_get_total_elevation_gain ()
VikTrackpoint * vik_track_get_tp_by_dist ()
VikTrackpoint * vik_track_get_closest_tp_by_percentage_dist ()
VikTrackpoint * vik_track_get_closest_tp_by_percentage_time ()
VikTrackpoint * vik_track_get_tp_by_max_speed ()
VikTrackpoint * vik_track_get_tp_by_max_alt ()
VikTrackpoint * vik_track_get_tp_by_min_alt ()
VikTrackpoint * vik_track_get_tp_first ()
VikTrackpoint * vik_track_get_tp_last ()
VikTrackpoint * vik_track_get_tp_prev ()
gdouble * vik_track_make_gradient_map ()
gdouble * vik_track_make_speed_map ()
gdouble * vik_track_make_distance_map ()
gdouble * vik_track_make_elevation_time_map ()
gdouble * vik_track_make_speed_dist_map ()
gboolean vik_track_get_minmax_alt ()
void vik_track_marshall ()
VikTrack * vik_track_unmarshall ()
void vik_track_calculate_bounds ()
void vik_track_anonymize_times ()
void vik_track_interpolate_times ()
gulong vik_track_apply_dem_data ()
gulong vik_track_smooth_missing_elevation_data ()
void vik_track_steal_and_append_trackpoints ()
VikCoord * vik_track_cut_back_to_double_point ()
int vik_track_compare_timestamp ()
void vik_track_set_property_dialog ()
void vik_track_clear_property_dialog ()

Types and Values

Description

Functions

VIK_TRACK()

#define VIK_TRACK(x) ((VikTrack *)(x))

VIK_TRACKPOINT()

#define VIK_TRACKPOINT(x) ((VikTrackpoint *)(x))

vik_track_new ()

VikTrack *
vik_track_new ();

vik_track_set_defaults ()

void
vik_track_set_defaults (VikTrack *tr);

Set some default values for a track. ATM This uses the 'settings' method to get values, so there is no GUI way to control these yet...


vik_track_set_name ()

void
vik_track_set_name (VikTrack *tr,
                    const gchar *name);

vik_track_set_comment ()

void
vik_track_set_comment (VikTrack *tr,
                       const gchar *comment);

vik_track_set_description ()

void
vik_track_set_description (VikTrack *tr,
                           const gchar *description);

vik_track_ref ()

void
vik_track_ref (VikTrack *tr);

vik_track_free ()

void
vik_track_free (VikTrack *tr);

vik_track_copy ()

VikTrack *
vik_track_copy (const VikTrack *tr,
                gboolean copy_points);

Normally for copying the track it's best to copy all the trackpoints However for some operations such as splitting tracks the trackpoints will be managed separately, so no need to copy them.

Parameters

tr

The Track to copy

 

copy_points

Whether to copy the track points or not

 

Returns

the copied VikTrack


vik_track_set_comment_no_copy ()

void
vik_track_set_comment_no_copy (VikTrack *tr,
                               gchar *comment);

vik_trackpoint_new ()

VikTrackpoint *
vik_trackpoint_new ();

vik_trackpoint_free ()

void
vik_trackpoint_free (VikTrackpoint *tp);

vik_trackpoint_copy ()

VikTrackpoint *
vik_trackpoint_copy (VikTrackpoint *tp);

vik_trackpoint_set_name ()

void
vik_trackpoint_set_name (VikTrackpoint *tp,
                         const gchar *name);

vik_track_add_trackpoint ()

void
vik_track_add_trackpoint (VikTrack *tr,
                          VikTrackpoint *tp,
                          gboolean recalculate);

The trackpoint is added to the end of the existing trackpoint list

Parameters

tr

The track to which the trackpoint will be added

 

tp

The trackpoint to add

 

recalculate

Whether to perform any associated properties recalculations Generally one should avoid recalculation via this method if adding lots of points (But ensure calculate_bounds() is called after adding all points!!)

 

vik_track_get_length_to_trackpoint ()

gdouble
vik_track_get_length_to_trackpoint (const VikTrack *tr,
                                    const VikTrackpoint *tp);

vik_track_get_length ()

gdouble
vik_track_get_length (const VikTrack *tr);

vik_track_get_length_including_gaps ()

gdouble
vik_track_get_length_including_gaps (const VikTrack *tr);

vik_track_get_tp_count ()

gulong
vik_track_get_tp_count (const VikTrack *tr);

vik_track_get_segment_count ()

guint
vik_track_get_segment_count (const VikTrack *tr);

vik_track_split_into_segments ()

VikTrack **
vik_track_split_into_segments (VikTrack *tr,
                               guint *ret_len);

vik_track_merge_segments ()

guint
vik_track_merge_segments (VikTrack *tr);

vik_track_reverse ()

void
vik_track_reverse (VikTrack *tr);

vik_track_get_duration ()

gdouble
vik_track_get_duration (const VikTrack *trk,
                        gboolean include_segments);

Parameters

trk

The track

 

segment_gaps

Whether the duration should include gaps between segments

 

Returns

The time in seconds NB this may be negative particularly if the track has been reversed


vik_track_get_dup_point_count ()

gulong
vik_track_get_dup_point_count (const VikTrack *vt);

vik_track_remove_dup_points ()

gulong
vik_track_remove_dup_points (VikTrack *vt);

vik_track_get_same_time_point_count ()

gulong
vik_track_get_same_time_point_count (const VikTrack *vt);

vik_track_remove_same_time_points ()

gulong
vik_track_remove_same_time_points (VikTrack *vt);

vik_track_to_routepoints ()

void
vik_track_to_routepoints (VikTrack *tr);

vik_track_get_max_speed ()

gdouble
vik_track_get_max_speed (const VikTrack *tr);

vik_track_get_average_speed ()

gdouble
vik_track_get_average_speed (const VikTrack *tr);

vik_track_get_average_speed_moving ()

gdouble
vik_track_get_average_speed_moving (const VikTrack *tr,
                                    int stop_length_seconds);

vik_track_convert ()

void
vik_track_convert (VikTrack *tr,
                   VikCoordMode dest_mode);

vik_track_make_elevation_map ()

gdouble *
vik_track_make_elevation_map (const VikTrack *tr,
                              guint16 num_chunks);

vik_track_get_total_elevation_gain ()

void
vik_track_get_total_elevation_gain (const VikTrack *tr,
                                    gdouble *up,
                                    gdouble *down);

elevation gains and losses may be NAN if no elevations are available


vik_track_get_tp_by_dist ()

VikTrackpoint *
vik_track_get_tp_by_dist (VikTrack *trk,
                          gdouble meters_from_start,
                          gboolean get_next_point,
                          gdouble *tp_metres_from_start);

TODO: Consider changing the boolean get_next_point into an enum with these options PREVIOUS, NEXT, NEAREST

Parameters

trk

The Track on which to find a Trackpoint

 

meters_from_start

The distance along a track that the trackpoint returned is near

 

get_next_point

Since there is a choice of trackpoints, this determines which one to return

 

tp_metres_from_start

For the returned Trackpoint, returns the distance along the track

 

Returns

The VikTrackpoint fitting the criteria or NULL


vik_track_get_closest_tp_by_percentage_dist ()

VikTrackpoint *
vik_track_get_closest_tp_by_percentage_dist
                               (VikTrack *tr,
                                gdouble reldist,
                                gdouble *meters_from_start);

vik_track_get_closest_tp_by_percentage_time ()

VikTrackpoint *
vik_track_get_closest_tp_by_percentage_time
                               (VikTrack *tr,
                                gdouble reldist,
                                gdouble *seconds_from_start);

vik_track_get_tp_by_max_speed ()

VikTrackpoint *
vik_track_get_tp_by_max_speed (const VikTrack *tr,
                               gboolean by_gps_speed);

Parameters

by_gps_speed

If TRUE then use the speed value in the data in preference to inferring from trackpoint positions

 

Returns

The trackpoint of the maximum speed, if no speeds found then it returns NULL


vik_track_get_tp_by_max_alt ()

VikTrackpoint *
vik_track_get_tp_by_max_alt (const VikTrack *tr);

vik_track_get_tp_by_min_alt ()

VikTrackpoint *
vik_track_get_tp_by_min_alt (const VikTrack *tr);

vik_track_get_tp_first ()

VikTrackpoint *
vik_track_get_tp_first (const VikTrack *tr);

vik_track_get_tp_last ()

VikTrackpoint *
vik_track_get_tp_last (const VikTrack *tr);

vik_track_get_tp_prev ()

VikTrackpoint *
vik_track_get_tp_prev (const VikTrack *tr,
                       VikTrackpoint *tp);

vik_track_make_gradient_map ()

gdouble *
vik_track_make_gradient_map (const VikTrack *tr,
                             guint16 num_chunks);

vik_track_make_speed_map ()

gdouble *
vik_track_make_speed_map (const VikTrack *tr,
                          guint16 num_chunks);

vik_track_make_distance_map ()

gdouble *
vik_track_make_distance_map (const VikTrack *tr,
                             guint16 num_chunks);

vik_track_make_elevation_time_map ()

gdouble *
vik_track_make_elevation_time_map (const VikTrack *tr,
                                   guint16 num_chunks);

vik_track_make_speed_dist_map ()

gdouble *
vik_track_make_speed_dist_map (const VikTrack *tr,
                               guint16 num_chunks);

vik_track_get_minmax_alt ()

gboolean
vik_track_get_minmax_alt (const VikTrack *tr,
                          gdouble *min_alt,
                          gdouble *max_alt);

Finds the minimum and maximum altitudes in the specified track

Returns

Whether any altitudes where found


vik_track_marshall ()

void
vik_track_marshall (VikTrack *tr,
                    guint8 **data,
                    guint *len);

vik_track_unmarshall ()

VikTrack *
vik_track_unmarshall (const guint8 *data_in,
                      guint datalen);

vik_track_calculate_bounds ()

void
vik_track_calculate_bounds (VikTrack *trk);

vik_track_anonymize_times ()

void
vik_track_anonymize_times (VikTrack *tr);

Shift all timestamps to be relatively offset from 1901-01-01


vik_track_interpolate_times ()

void
vik_track_interpolate_times (VikTrack *tr);

Interpolate the timestamps between first and last trackpoint, so that the track is driven at equal speed, regardless of the distance between individual trackpoints.

NB This will overwrite any existing trackpoint timestamps


vik_track_apply_dem_data ()

gulong
vik_track_apply_dem_data (VikTrack *tr,
                          gboolean skip_existing);

Set elevation data for a track using any available DEM information

Parameters

skip_existing

When TRUE, don't change the elevation if the trackpoint already has a value

 

vik_track_smooth_missing_elevation_data ()

gulong
vik_track_smooth_missing_elevation_data
                               (VikTrack *tr,
                                gboolean flat);

For each point with a missing elevation, set it to use the last known available elevation value. Primarily of use for smallish DEM holes where it is missing elevation data. Eg see Austria: around N47.3 & E13.8

Parameters

flat

Specify how the missing elevations will be set. When TRUE it uses a simple flat method, using the last known elevation When FALSE is uses an interpolation method to the next known elevation

 

Returns

The number of points that were adjusted


vik_track_steal_and_append_trackpoints ()

void
vik_track_steal_and_append_trackpoints
                               (VikTrack *t1,
                                VikTrack *t2);

appends t2 to t1, leaving t2 with no trackpoints


vik_track_cut_back_to_double_point ()

VikCoord *
vik_track_cut_back_to_double_point (VikTrack *tr);

starting at the end, looks backwards for the last "double point", a duplicate trackpoint. If there is no double point, deletes all the trackpoints.

Returns

the new end of the track (or the start if there are no double points)


vik_track_compare_timestamp ()

int
vik_track_compare_timestamp (const void *x,
                             const void *y);

vik_track_set_property_dialog ()

void
vik_track_set_property_dialog (VikTrack *tr,
                               GtkWidget *dialog);

vik_track_clear_property_dialog ()

void
vik_track_clear_property_dialog (VikTrack *tr);

Types and Values

struct VikTrackpoint

struct VikTrackpoint {
  gchar* name;
  VikCoord coord;
  gboolean newsegment;
  gdouble timestamp;  	/* NAN if data unavailable */
  gdouble altitude; /* NAN if data unavailable */
  gdouble speed;  	/* NAN if data unavailable */
  gdouble course;   /* NAN if data unavailable */
  guint nsats;      /* number of satellites used. 0 if data unavailable */
  guint fix_mode;   /* VIK_GPS_MODE_NOT_SEEN if data unavailable */
  gdouble hdop;     /* NAN if data unavailable */
  gdouble vdop;     /* NAN if data unavailable */
  gdouble pdop;     /* NAN if data unavailable */
  gchar *extensions; // GPX 1.1 extensions - currently uneditable
  guint heart_rate;  // Beats per Minute (bpm): 0 if data unavailable
  gint cadence;      // In Revs Per Minute (RPM): VIK_TRKPT_CADENCE_NONE if data unavailable
  gdouble temp;      // Temperature is in degrees C: NAN if data unavailable
  gint power;        // Watts: VIK_TRKPT_POWER_NONE if data unavailable
};

enum VikTrackDrawnameType

Members

TRACK_DRAWNAME_NO

   

TRACK_DRAWNAME_CENTRE

   

TRACK_DRAWNAME_START

   

TRACK_DRAWNAME_END

   

TRACK_DRAWNAME_START_END

   

TRACK_DRAWNAME_START_END_CENTRE

   

NUM_TRACK_DRAWNAMES

   

struct VikTrack

struct VikTrack {
  GList *trackpoints;
  gboolean visible;
  gboolean is_route;
  VikTrackDrawnameType draw_name_mode;
  guint8 max_number_dist_labels;
  gchar *comment;
  gchar *description;
  gchar *source;
  guint number;
  gchar *type;
  guint8 ref_count;
  gchar *name;
  gchar *extensions; // GPX 1.1 extensions - currently uneditable
  GtkWidget *property_dialog;
  gboolean has_color;
  GdkColor color;
  LatLonBBox bbox;
};