gpxdo

usage: gpxdo [-h]
             {ls,cp,merge,mv,rm,split,join,diff,fix,keywords,dump,title,description,category,public,private}
             ...

Sub-commands:

ls

list tracks

gpxdo ls [-h] [--loglevel {none,debug,info,warning,error}] [--timeout TIMEOUT]
         [--first-date FIRST_DATE] [--last-date LAST_DATE] [--date DATE]
         [--min-points MIN_POINTS] [--max-points MAX_POINTS]
         [--min-distance MIN_DISTANCE] [--max-distance MAX_DISTANCE]
         [--min-speed MIN_SPEED] [--max-speed MAX_SPEED]
         [--only-keywords ONLY_KEYWORDS]
         [--only-category {Cycling,Cycling - Road,Cycling - Gravel,Cycling - MTB,Cycling - Indoor,Cycling - Hand,Cycling - Touring,Cycling - Foot,Running,Running - Trail,Running - Urban Trail,Sailing,Walking,Hiking,Hiking - Speed,Swimming,Driving,Off road driving,Motor racing,Motorcycling,Enduro,Skiing,Skiing - Touring,Skiing - Backcountry,Skiing - Nordic,Skiing - Alpine,Skiing - Roller,Canoeing,Kayaking,Sea kayaking,Stand up paddle boarding,Rowing,Windsurfing,Kiteboarding,Orienteering,Mountaineering,Skating,Skateboarding,Horse riding,Hang gliding,Gliding,Flying,Snowboarding,Paragliding,Hot air ballooning,Nordic walking,Snowshoeing,Jet skiing,Powerboating,Swimrun,Pedelec,Crossskating,Motorhome,Cabriolet,Coach,Pack animal trekking,Train,Wheelchair,Sightseeing,Geocaching,Longboard,River navigation,Skating - Inline,Miscellaneous}]
         [--similar SIMILAR]
         [--sort {identifier,title,category,time,distance,points,keywords,status,speed,moving-speed,duration,similarity}]
         [--total] [--segments] [--long] [--all] [--title] [--category]
         [--ids] [--time] [--distance] [--points] [--status] [--keywords]
         [--description] [--speed] [--moving-speed] [--duration]
         [--similarity] [--warnings]
         [--location-provider {baidu,yandex,freegeoip,komoot,tamu,google,osm,ipinfo,mapbox,yahoo,geolytica,canadapost,arcgis,w3w,tomtom,mapquest,mapzen,geocodefarm,tgos,gisgraphy,geonames,ottawa,here,uscensus,locationiq,bing,opencage,maxmind,gaode}]
         [--locate LOCATE] [--max-away MAX_AWAY]
         [source [source ...]]

Positional Arguments

source one ore more tracks or backends

Named Arguments

--loglevel

Possible choices: none, debug, info, warning, error

set the loglevel

Default: “none”

--timeout
Timeout: Either one value in seconds or two comma separated values: The first one is the connection timeout, the second one is the read timeout. Default is to wait forever.
--first-date Limit tracks by date
--last-date Limit tracks by date
--date Limit tracks by specific date
--min-points Limit tracks by minimal number of points
--max-points Limit tracks by maximal number of points
--min-distance Limit tracks by minimal distance
--max-distance Limit tracks by maximal distance
--min-speed Limit tracks by minimal speed
--max-speed Limit tracks by maximal speed
--only-keywords
 Limit tracks by keywords
--only-category
 

Possible choices: Cycling, Cycling - Road, Cycling - Gravel, Cycling - MTB, Cycling - Indoor, Cycling - Hand, Cycling - Touring, Cycling - Foot, Running, Running - Trail, Running - Urban Trail, Sailing, Walking, Hiking, Hiking - Speed, Swimming, Driving, Off road driving, Motor racing, Motorcycling, Enduro, Skiing, Skiing - Touring, Skiing - Backcountry, Skiing - Nordic, Skiing - Alpine, Skiing - Roller, Canoeing, Kayaking, Sea kayaking, Stand up paddle boarding, Rowing, Windsurfing, Kiteboarding, Orienteering, Mountaineering, Skating, Skateboarding, Horse riding, Hang gliding, Gliding, Flying, Snowboarding, Paragliding, Hot air ballooning, Nordic walking, Snowshoeing, Jet skiing, Powerboating, Swimrun, Pedelec, Crossskating, Motorhome, Cabriolet, Coach, Pack animal trekking, Train, Wheelchair, Sightseeing, Geocaching, Longboard, River navigation, Skating - Inline, Miscellaneous

Limit tracks by category

--similar Limit tracks by similarity to one of tracks SIMILAR. SIMILAR is a list of tracks separated with a comma and no space. This will only work for track identifiers without comma.
--sort

Possible choices: identifier, title, category, time, distance, points, keywords, status, speed, moving-speed, duration, similarity

sort by one ore more columns, separated by commas (no spaces allowed)

Default: “identifier”

--total

Show a total line

Default: False

--segments

show track segments

Default: False

--long

show most useful info

Default: False

--all

show all available info

Default: False

--title

show the title

Default: False

--category

show the track type

Default: False

--ids

show the ids

Default: False

--time

show the time

Default: False

--distance

show the distance

Default: False

--points

show the number of points

Default: False

--status

show the status public/private

Default: False

--keywords

show the keywords

Default: False

--description

show the description

Default: False

--speed

show the average speed

Default: False

--moving-speed

show the average speed in motion

Default: False

--duration

show the entire duration

Default: False

--similarity

show the similarity

Default: False

--warnings

show warnings

Default: False

--location-provider
 

Possible choices: baidu, yandex, freegeoip, komoot, tamu, google, osm, ipinfo, mapbox, yahoo, geolytica, canadapost, arcgis, w3w, tomtom, mapquest, mapzen, geocodefarm, tgos, gisgraphy, geonames, ottawa, here, uscensus, locationiq, bing, opencage, maxmind, gaode

data provider

Default: “osm”

--locate the name of a place. –location can be repeated. Find tracks touching all locations, order by best match
--max-away
to be used with –locate: show only tracks which are not more than MAX_AWAY
kilometers farther away from given places. The distance to all places is added to one value and the compared with MAX_AWAY. Default is 100km.

Default: 100

source and destination arguments may be single tracks or entire backend instances. Local files and directories are given as usual. Mail targets are given as mailer:my_mail@address.test

For all other backends, the syntax is:

backend:username for all tracks in a backend

or

backend:username/track_id for one specific track in a backend

Available backends are:

  • mmt MapMytracks
  • gpsies gpsies.com
  • openrunner openrunner.com
  • mailer mails tracks

The file $HOME/.config/Gpxity/auth.cfg defines the type of the backend, username and password. Example:

[MMT:username] Password = whatever

Dates are expected as YYYY-MM-DD, YYYY-MM or YYYY.

cp

copy tracks. This can be much faster for remote backends because tracks with the same points are not merged.
gpxdo cp [-h] [--loglevel {none,debug,info,warning,error}] [--timeout TIMEOUT]
         [--first-date FIRST_DATE] [--last-date LAST_DATE] [--date DATE]
         [--min-points MIN_POINTS] [--max-points MAX_POINTS]
         [--min-distance MIN_DISTANCE] [--max-distance MAX_DISTANCE]
         [--min-speed MIN_SPEED] [--max-speed MAX_SPEED]
         [--only-keywords ONLY_KEYWORDS]
         [--only-category {Cycling,Cycling - Road,Cycling - Gravel,Cycling - MTB,Cycling - Indoor,Cycling - Hand,Cycling - Touring,Cycling - Foot,Running,Running - Trail,Running - Urban Trail,Sailing,Walking,Hiking,Hiking - Speed,Swimming,Driving,Off road driving,Motor racing,Motorcycling,Enduro,Skiing,Skiing - Touring,Skiing - Backcountry,Skiing - Nordic,Skiing - Alpine,Skiing - Roller,Canoeing,Kayaking,Sea kayaking,Stand up paddle boarding,Rowing,Windsurfing,Kiteboarding,Orienteering,Mountaineering,Skating,Skateboarding,Horse riding,Hang gliding,Gliding,Flying,Snowboarding,Paragliding,Hot air ballooning,Nordic walking,Snowshoeing,Jet skiing,Powerboating,Swimrun,Pedelec,Crossskating,Motorhome,Cabriolet,Coach,Pack animal trekking,Train,Wheelchair,Sightseeing,Geocaching,Longboard,River navigation,Skating - Inline,Miscellaneous}]
         [--similar SIMILAR] [--dry-run]
         [source [source ...]] destination

Positional Arguments

source one ore more tracks or backends
destination the destination backend

Named Arguments

--loglevel

Possible choices: none, debug, info, warning, error

set the loglevel

Default: “none”

--timeout
Timeout: Either one value in seconds or two comma separated values: The first one is the connection timeout, the second one is the read timeout. Default is to wait forever.
--first-date Limit tracks by date
--last-date Limit tracks by date
--date Limit tracks by specific date
--min-points Limit tracks by minimal number of points
--max-points Limit tracks by maximal number of points
--min-distance Limit tracks by minimal distance
--max-distance Limit tracks by maximal distance
--min-speed Limit tracks by minimal speed
--max-speed Limit tracks by maximal speed
--only-keywords
 Limit tracks by keywords
--only-category
 

Possible choices: Cycling, Cycling - Road, Cycling - Gravel, Cycling - MTB, Cycling - Indoor, Cycling - Hand, Cycling - Touring, Cycling - Foot, Running, Running - Trail, Running - Urban Trail, Sailing, Walking, Hiking, Hiking - Speed, Swimming, Driving, Off road driving, Motor racing, Motorcycling, Enduro, Skiing, Skiing - Touring, Skiing - Backcountry, Skiing - Nordic, Skiing - Alpine, Skiing - Roller, Canoeing, Kayaking, Sea kayaking, Stand up paddle boarding, Rowing, Windsurfing, Kiteboarding, Orienteering, Mountaineering, Skating, Skateboarding, Horse riding, Hang gliding, Gliding, Flying, Snowboarding, Paragliding, Hot air ballooning, Nordic walking, Snowshoeing, Jet skiing, Powerboating, Swimrun, Pedelec, Crossskating, Motorhome, Cabriolet, Coach, Pack animal trekking, Train, Wheelchair, Sightseeing, Geocaching, Longboard, River navigation, Skating - Inline, Miscellaneous

Limit tracks by category

--similar Limit tracks by similarity to one of tracks SIMILAR. SIMILAR is a list of tracks separated with a comma and no space. This will only work for track identifiers without comma.
--dry-run

only show what would change

Default: False

source and destination arguments may be single tracks or entire backend instances. Local files and directories are given as usual. Mail targets are given as mailer:my_mail@address.test

For all other backends, the syntax is:

backend:username for all tracks in a backend

or

backend:username/track_id for one specific track in a backend

Available backends are:

  • mmt MapMytracks
  • gpsies gpsies.com
  • openrunner openrunner.com
  • mailer mails tracks

The file $HOME/.config/Gpxity/auth.cfg defines the type of the backend, username and password. Example:

[MMT:username] Password = whatever

Dates are expected as YYYY-MM-DD, YYYY-MM or YYYY.

merge

merge tracks: If their trackpoints are identical, add metadata like name, description or keywords from source to destination
gpxdo merge [-h] [--loglevel {none,debug,info,warning,error}]
            [--timeout TIMEOUT] [--first-date FIRST_DATE]
            [--last-date LAST_DATE] [--date DATE] [--min-points MIN_POINTS]
            [--max-points MAX_POINTS] [--min-distance MIN_DISTANCE]
            [--max-distance MAX_DISTANCE] [--min-speed MIN_SPEED]
            [--max-speed MAX_SPEED] [--only-keywords ONLY_KEYWORDS]
            [--only-category {Cycling,Cycling - Road,Cycling - Gravel,Cycling - MTB,Cycling - Indoor,Cycling - Hand,Cycling - Touring,Cycling - Foot,Running,Running - Trail,Running - Urban Trail,Sailing,Walking,Hiking,Hiking - Speed,Swimming,Driving,Off road driving,Motor racing,Motorcycling,Enduro,Skiing,Skiing - Touring,Skiing - Backcountry,Skiing - Nordic,Skiing - Alpine,Skiing - Roller,Canoeing,Kayaking,Sea kayaking,Stand up paddle boarding,Rowing,Windsurfing,Kiteboarding,Orienteering,Mountaineering,Skating,Skateboarding,Horse riding,Hang gliding,Gliding,Flying,Snowboarding,Paragliding,Hot air ballooning,Nordic walking,Snowshoeing,Jet skiing,Powerboating,Swimrun,Pedelec,Crossskating,Motorhome,Cabriolet,Coach,Pack animal trekking,Train,Wheelchair,Sightseeing,Geocaching,Longboard,River navigation,Skating - Inline,Miscellaneous}]
            [--similar SIMILAR] [--dry-run] [--remove] [--partial-tracks]
            [--copy]
            [source [source ...]] destination

Positional Arguments

source one ore more tracks or backends
destination the destination backend

Named Arguments

--loglevel

Possible choices: none, debug, info, warning, error

set the loglevel

Default: “none”

--timeout
Timeout: Either one value in seconds or two comma separated values: The first one is the connection timeout, the second one is the read timeout. Default is to wait forever.
--first-date Limit tracks by date
--last-date Limit tracks by date
--date Limit tracks by specific date
--min-points Limit tracks by minimal number of points
--max-points Limit tracks by maximal number of points
--min-distance Limit tracks by minimal distance
--max-distance Limit tracks by maximal distance
--min-speed Limit tracks by minimal speed
--max-speed Limit tracks by maximal speed
--only-keywords
 Limit tracks by keywords
--only-category
 

Possible choices: Cycling, Cycling - Road, Cycling - Gravel, Cycling - MTB, Cycling - Indoor, Cycling - Hand, Cycling - Touring, Cycling - Foot, Running, Running - Trail, Running - Urban Trail, Sailing, Walking, Hiking, Hiking - Speed, Swimming, Driving, Off road driving, Motor racing, Motorcycling, Enduro, Skiing, Skiing - Touring, Skiing - Backcountry, Skiing - Nordic, Skiing - Alpine, Skiing - Roller, Canoeing, Kayaking, Sea kayaking, Stand up paddle boarding, Rowing, Windsurfing, Kiteboarding, Orienteering, Mountaineering, Skating, Skateboarding, Horse riding, Hang gliding, Gliding, Flying, Snowboarding, Paragliding, Hot air ballooning, Nordic walking, Snowshoeing, Jet skiing, Powerboating, Swimrun, Pedelec, Crossskating, Motorhome, Cabriolet, Coach, Pack animal trekking, Train, Wheelchair, Sightseeing, Geocaching, Longboard, River navigation, Skating - Inline, Miscellaneous

Limit tracks by category

--similar Limit tracks by similarity to one of tracks SIMILAR. SIMILAR is a list of tracks separated with a comma and no space. This will only work for track identifiers without comma.
--dry-run

only show what would change

Default: False

--remove

remove merged tracks

Default: False

--partial-tracks
 

merges two tracks if one is part of the other

Default: False

--copy

If the target is a backend, do not look for similar track. Just copy. This is much faster for remote backends.

Default: False

source and destination arguments may be single tracks or entire backend instances. Local files and directories are given as usual. Mail targets are given as mailer:my_mail@address.test

For all other backends, the syntax is:

backend:username for all tracks in a backend

or

backend:username/track_id for one specific track in a backend

Available backends are:

  • mmt MapMytracks
  • gpsies gpsies.com
  • openrunner openrunner.com
  • mailer mails tracks

The file $HOME/.config/Gpxity/auth.cfg defines the type of the backend, username and password. Example:

[MMT:username] Password = whatever

Dates are expected as YYYY-MM-DD, YYYY-MM or YYYY.

mv

move sources to a destination backend

gpxdo mv [-h] [--loglevel {none,debug,info,warning,error}] [--timeout TIMEOUT]
         [--first-date FIRST_DATE] [--last-date LAST_DATE] [--date DATE]
         [--min-points MIN_POINTS] [--max-points MAX_POINTS]
         [--min-distance MIN_DISTANCE] [--max-distance MAX_DISTANCE]
         [--min-speed MIN_SPEED] [--max-speed MAX_SPEED]
         [--only-keywords ONLY_KEYWORDS]
         [--only-category {Cycling,Cycling - Road,Cycling - Gravel,Cycling - MTB,Cycling - Indoor,Cycling - Hand,Cycling - Touring,Cycling - Foot,Running,Running - Trail,Running - Urban Trail,Sailing,Walking,Hiking,Hiking - Speed,Swimming,Driving,Off road driving,Motor racing,Motorcycling,Enduro,Skiing,Skiing - Touring,Skiing - Backcountry,Skiing - Nordic,Skiing - Alpine,Skiing - Roller,Canoeing,Kayaking,Sea kayaking,Stand up paddle boarding,Rowing,Windsurfing,Kiteboarding,Orienteering,Mountaineering,Skating,Skateboarding,Horse riding,Hang gliding,Gliding,Flying,Snowboarding,Paragliding,Hot air ballooning,Nordic walking,Snowshoeing,Jet skiing,Powerboating,Swimrun,Pedelec,Crossskating,Motorhome,Cabriolet,Coach,Pack animal trekking,Train,Wheelchair,Sightseeing,Geocaching,Longboard,River navigation,Skating - Inline,Miscellaneous}]
         [--similar SIMILAR]
         [source [source ...]] destination

Positional Arguments

source one ore more tracks or backends
destination the destination backend

Named Arguments

--loglevel

Possible choices: none, debug, info, warning, error

set the loglevel

Default: “none”

--timeout
Timeout: Either one value in seconds or two comma separated values: The first one is the connection timeout, the second one is the read timeout. Default is to wait forever.
--first-date Limit tracks by date
--last-date Limit tracks by date
--date Limit tracks by specific date
--min-points Limit tracks by minimal number of points
--max-points Limit tracks by maximal number of points
--min-distance Limit tracks by minimal distance
--max-distance Limit tracks by maximal distance
--min-speed Limit tracks by minimal speed
--max-speed Limit tracks by maximal speed
--only-keywords
 Limit tracks by keywords
--only-category
 

Possible choices: Cycling, Cycling - Road, Cycling - Gravel, Cycling - MTB, Cycling - Indoor, Cycling - Hand, Cycling - Touring, Cycling - Foot, Running, Running - Trail, Running - Urban Trail, Sailing, Walking, Hiking, Hiking - Speed, Swimming, Driving, Off road driving, Motor racing, Motorcycling, Enduro, Skiing, Skiing - Touring, Skiing - Backcountry, Skiing - Nordic, Skiing - Alpine, Skiing - Roller, Canoeing, Kayaking, Sea kayaking, Stand up paddle boarding, Rowing, Windsurfing, Kiteboarding, Orienteering, Mountaineering, Skating, Skateboarding, Horse riding, Hang gliding, Gliding, Flying, Snowboarding, Paragliding, Hot air ballooning, Nordic walking, Snowshoeing, Jet skiing, Powerboating, Swimrun, Pedelec, Crossskating, Motorhome, Cabriolet, Coach, Pack animal trekking, Train, Wheelchair, Sightseeing, Geocaching, Longboard, River navigation, Skating - Inline, Miscellaneous

Limit tracks by category

--similar Limit tracks by similarity to one of tracks SIMILAR. SIMILAR is a list of tracks separated with a comma and no space. This will only work for track identifiers without comma.

source and destination arguments may be single tracks or entire backend instances. Local files and directories are given as usual. Mail targets are given as mailer:my_mail@address.test

For all other backends, the syntax is:

backend:username for all tracks in a backend

or

backend:username/track_id for one specific track in a backend

Available backends are:

  • mmt MapMytracks
  • gpsies gpsies.com
  • openrunner openrunner.com
  • mailer mails tracks

The file $HOME/.config/Gpxity/auth.cfg defines the type of the backend, username and password. Example:

[MMT:username] Password = whatever

Dates are expected as YYYY-MM-DD, YYYY-MM or YYYY.

rm

remove tracks

gpxdo rm [-h] [--loglevel {none,debug,info,warning,error}] [--timeout TIMEOUT]
         [--first-date FIRST_DATE] [--last-date LAST_DATE] [--date DATE]
         [--min-points MIN_POINTS] [--max-points MAX_POINTS]
         [--min-distance MIN_DISTANCE] [--max-distance MAX_DISTANCE]
         [--min-speed MIN_SPEED] [--max-speed MAX_SPEED]
         [--only-keywords ONLY_KEYWORDS]
         [--only-category {Cycling,Cycling - Road,Cycling - Gravel,Cycling - MTB,Cycling - Indoor,Cycling - Hand,Cycling - Touring,Cycling - Foot,Running,Running - Trail,Running - Urban Trail,Sailing,Walking,Hiking,Hiking - Speed,Swimming,Driving,Off road driving,Motor racing,Motorcycling,Enduro,Skiing,Skiing - Touring,Skiing - Backcountry,Skiing - Nordic,Skiing - Alpine,Skiing - Roller,Canoeing,Kayaking,Sea kayaking,Stand up paddle boarding,Rowing,Windsurfing,Kiteboarding,Orienteering,Mountaineering,Skating,Skateboarding,Horse riding,Hang gliding,Gliding,Flying,Snowboarding,Paragliding,Hot air ballooning,Nordic walking,Snowshoeing,Jet skiing,Powerboating,Swimrun,Pedelec,Crossskating,Motorhome,Cabriolet,Coach,Pack animal trekking,Train,Wheelchair,Sightseeing,Geocaching,Longboard,River navigation,Skating - Inline,Miscellaneous}]
         [--similar SIMILAR] [--dry-run]
         [source [source ...]]

Positional Arguments

source one ore more tracks or backends

Named Arguments

--loglevel

Possible choices: none, debug, info, warning, error

set the loglevel

Default: “none”

--timeout
Timeout: Either one value in seconds or two comma separated values: The first one is the connection timeout, the second one is the read timeout. Default is to wait forever.
--first-date Limit tracks by date
--last-date Limit tracks by date
--date Limit tracks by specific date
--min-points Limit tracks by minimal number of points
--max-points Limit tracks by maximal number of points
--min-distance Limit tracks by minimal distance
--max-distance Limit tracks by maximal distance
--min-speed Limit tracks by minimal speed
--max-speed Limit tracks by maximal speed
--only-keywords
 Limit tracks by keywords
--only-category
 

Possible choices: Cycling, Cycling - Road, Cycling - Gravel, Cycling - MTB, Cycling - Indoor, Cycling - Hand, Cycling - Touring, Cycling - Foot, Running, Running - Trail, Running - Urban Trail, Sailing, Walking, Hiking, Hiking - Speed, Swimming, Driving, Off road driving, Motor racing, Motorcycling, Enduro, Skiing, Skiing - Touring, Skiing - Backcountry, Skiing - Nordic, Skiing - Alpine, Skiing - Roller, Canoeing, Kayaking, Sea kayaking, Stand up paddle boarding, Rowing, Windsurfing, Kiteboarding, Orienteering, Mountaineering, Skating, Skateboarding, Horse riding, Hang gliding, Gliding, Flying, Snowboarding, Paragliding, Hot air ballooning, Nordic walking, Snowshoeing, Jet skiing, Powerboating, Swimrun, Pedelec, Crossskating, Motorhome, Cabriolet, Coach, Pack animal trekking, Train, Wheelchair, Sightseeing, Geocaching, Longboard, River navigation, Skating - Inline, Miscellaneous

Limit tracks by category

--similar Limit tracks by similarity to one of tracks SIMILAR. SIMILAR is a list of tracks separated with a comma and no space. This will only work for track identifiers without comma.
--dry-run

only show what would be removed

Default: False

source and destination arguments may be single tracks or entire backend instances. Local files and directories are given as usual. Mail targets are given as mailer:my_mail@address.test

For all other backends, the syntax is:

backend:username for all tracks in a backend

or

backend:username/track_id for one specific track in a backend

Available backends are:

  • mmt MapMytracks
  • gpsies gpsies.com
  • openrunner openrunner.com
  • mailer mails tracks

The file $HOME/.config/Gpxity/auth.cfg defines the type of the backend, username and password. Example:

[MMT:username] Password = whatever

Dates are expected as YYYY-MM-DD, YYYY-MM or YYYY.

split

split tracks: create a single Track for every track/segment

gpxdo split [-h] [--loglevel {none,debug,info,warning,error}]
            [--timeout TIMEOUT] [--first-date FIRST_DATE]
            [--last-date LAST_DATE] [--date DATE] [--min-points MIN_POINTS]
            [--max-points MAX_POINTS] [--min-distance MIN_DISTANCE]
            [--max-distance MAX_DISTANCE] [--min-speed MIN_SPEED]
            [--max-speed MAX_SPEED] [--only-keywords ONLY_KEYWORDS]
            [--only-category {Cycling,Cycling - Road,Cycling - Gravel,Cycling - MTB,Cycling - Indoor,Cycling - Hand,Cycling - Touring,Cycling - Foot,Running,Running - Trail,Running - Urban Trail,Sailing,Walking,Hiking,Hiking - Speed,Swimming,Driving,Off road driving,Motor racing,Motorcycling,Enduro,Skiing,Skiing - Touring,Skiing - Backcountry,Skiing - Nordic,Skiing - Alpine,Skiing - Roller,Canoeing,Kayaking,Sea kayaking,Stand up paddle boarding,Rowing,Windsurfing,Kiteboarding,Orienteering,Mountaineering,Skating,Skateboarding,Horse riding,Hang gliding,Gliding,Flying,Snowboarding,Paragliding,Hot air ballooning,Nordic walking,Snowshoeing,Jet skiing,Powerboating,Swimrun,Pedelec,Crossskating,Motorhome,Cabriolet,Coach,Pack animal trekking,Train,Wheelchair,Sightseeing,Geocaching,Longboard,River navigation,Skating - Inline,Miscellaneous}]
            [--similar SIMILAR]
            [source [source ...]]

Positional Arguments

source one ore more tracks or backends

Named Arguments

--loglevel

Possible choices: none, debug, info, warning, error

set the loglevel

Default: “none”

--timeout
Timeout: Either one value in seconds or two comma separated values: The first one is the connection timeout, the second one is the read timeout. Default is to wait forever.
--first-date Limit tracks by date
--last-date Limit tracks by date
--date Limit tracks by specific date
--min-points Limit tracks by minimal number of points
--max-points Limit tracks by maximal number of points
--min-distance Limit tracks by minimal distance
--max-distance Limit tracks by maximal distance
--min-speed Limit tracks by minimal speed
--max-speed Limit tracks by maximal speed
--only-keywords
 Limit tracks by keywords
--only-category
 

Possible choices: Cycling, Cycling - Road, Cycling - Gravel, Cycling - MTB, Cycling - Indoor, Cycling - Hand, Cycling - Touring, Cycling - Foot, Running, Running - Trail, Running - Urban Trail, Sailing, Walking, Hiking, Hiking - Speed, Swimming, Driving, Off road driving, Motor racing, Motorcycling, Enduro, Skiing, Skiing - Touring, Skiing - Backcountry, Skiing - Nordic, Skiing - Alpine, Skiing - Roller, Canoeing, Kayaking, Sea kayaking, Stand up paddle boarding, Rowing, Windsurfing, Kiteboarding, Orienteering, Mountaineering, Skating, Skateboarding, Horse riding, Hang gliding, Gliding, Flying, Snowboarding, Paragliding, Hot air ballooning, Nordic walking, Snowshoeing, Jet skiing, Powerboating, Swimrun, Pedelec, Crossskating, Motorhome, Cabriolet, Coach, Pack animal trekking, Train, Wheelchair, Sightseeing, Geocaching, Longboard, River navigation, Skating - Inline, Miscellaneous

Limit tracks by category

--similar Limit tracks by similarity to one of tracks SIMILAR. SIMILAR is a list of tracks separated with a comma and no space. This will only work for track identifiers without comma.

source and destination arguments may be single tracks or entire backend instances. Local files and directories are given as usual. Mail targets are given as mailer:my_mail@address.test

For all other backends, the syntax is:

backend:username for all tracks in a backend

or

backend:username/track_id for one specific track in a backend

Available backends are:

  • mmt MapMytracks
  • gpsies gpsies.com
  • openrunner openrunner.com
  • mailer mails tracks

The file $HOME/.config/Gpxity/auth.cfg defines the type of the backend, username and password. Example:

[MMT:username] Password = whatever

Dates are expected as YYYY-MM-DD, YYYY-MM or YYYY.

join

join tracks into one single track

gpxdo join [-h] [--loglevel {none,debug,info,warning,error}]
           [--timeout TIMEOUT] [--first-date FIRST_DATE]
           [--last-date LAST_DATE] [--date DATE] [--min-points MIN_POINTS]
           [--max-points MAX_POINTS] [--min-distance MIN_DISTANCE]
           [--max-distance MAX_DISTANCE] [--min-speed MIN_SPEED]
           [--max-speed MAX_SPEED] [--only-keywords ONLY_KEYWORDS]
           [--only-category {Cycling,Cycling - Road,Cycling - Gravel,Cycling - MTB,Cycling - Indoor,Cycling - Hand,Cycling - Touring,Cycling - Foot,Running,Running - Trail,Running - Urban Trail,Sailing,Walking,Hiking,Hiking - Speed,Swimming,Driving,Off road driving,Motor racing,Motorcycling,Enduro,Skiing,Skiing - Touring,Skiing - Backcountry,Skiing - Nordic,Skiing - Alpine,Skiing - Roller,Canoeing,Kayaking,Sea kayaking,Stand up paddle boarding,Rowing,Windsurfing,Kiteboarding,Orienteering,Mountaineering,Skating,Skateboarding,Horse riding,Hang gliding,Gliding,Flying,Snowboarding,Paragliding,Hot air ballooning,Nordic walking,Snowshoeing,Jet skiing,Powerboating,Swimrun,Pedelec,Crossskating,Motorhome,Cabriolet,Coach,Pack animal trekking,Train,Wheelchair,Sightseeing,Geocaching,Longboard,River navigation,Skating - Inline,Miscellaneous}]
           [--similar SIMILAR] [--title TITLE]
           [source [source ...]] destination

Positional Arguments

source one ore more tracks or backends
destination the destination backend

Named Arguments

--loglevel

Possible choices: none, debug, info, warning, error

set the loglevel

Default: “none”

--timeout
Timeout: Either one value in seconds or two comma separated values: The first one is the connection timeout, the second one is the read timeout. Default is to wait forever.
--first-date Limit tracks by date
--last-date Limit tracks by date
--date Limit tracks by specific date
--min-points Limit tracks by minimal number of points
--max-points Limit tracks by maximal number of points
--min-distance Limit tracks by minimal distance
--max-distance Limit tracks by maximal distance
--min-speed Limit tracks by minimal speed
--max-speed Limit tracks by maximal speed
--only-keywords
 Limit tracks by keywords
--only-category
 

Possible choices: Cycling, Cycling - Road, Cycling - Gravel, Cycling - MTB, Cycling - Indoor, Cycling - Hand, Cycling - Touring, Cycling - Foot, Running, Running - Trail, Running - Urban Trail, Sailing, Walking, Hiking, Hiking - Speed, Swimming, Driving, Off road driving, Motor racing, Motorcycling, Enduro, Skiing, Skiing - Touring, Skiing - Backcountry, Skiing - Nordic, Skiing - Alpine, Skiing - Roller, Canoeing, Kayaking, Sea kayaking, Stand up paddle boarding, Rowing, Windsurfing, Kiteboarding, Orienteering, Mountaineering, Skating, Skateboarding, Horse riding, Hang gliding, Gliding, Flying, Snowboarding, Paragliding, Hot air ballooning, Nordic walking, Snowshoeing, Jet skiing, Powerboating, Swimrun, Pedelec, Crossskating, Motorhome, Cabriolet, Coach, Pack animal trekking, Train, Wheelchair, Sightseeing, Geocaching, Longboard, River navigation, Skating - Inline, Miscellaneous

Limit tracks by category

--similar Limit tracks by similarity to one of tracks SIMILAR. SIMILAR is a list of tracks separated with a comma and no space. This will only work for track identifiers without comma.
--title Title and id for the new track

source and destination arguments may be single tracks or entire backend instances. Local files and directories are given as usual. Mail targets are given as mailer:my_mail@address.test

For all other backends, the syntax is:

backend:username for all tracks in a backend

or

backend:username/track_id for one specific track in a backend

Available backends are:

  • mmt MapMytracks
  • gpsies gpsies.com
  • openrunner openrunner.com
  • mailer mails tracks

The file $HOME/.config/Gpxity/auth.cfg defines the type of the backend, username and password. Example:

[MMT:username] Password = whatever

Dates are expected as YYYY-MM-DD, YYYY-MM or YYYY.

diff

compare tracks between source and destination
gpxdo diff [-h] [--loglevel {none,debug,info,warning,error}]
           [--timeout TIMEOUT] [--first-date FIRST_DATE]
           [--last-date LAST_DATE] [--date DATE] [--min-points MIN_POINTS]
           [--max-points MAX_POINTS] [--min-distance MIN_DISTANCE]
           [--max-distance MAX_DISTANCE] [--min-speed MIN_SPEED]
           [--max-speed MAX_SPEED] [--only-keywords ONLY_KEYWORDS]
           [--only-category {Cycling,Cycling - Road,Cycling - Gravel,Cycling - MTB,Cycling - Indoor,Cycling - Hand,Cycling - Touring,Cycling - Foot,Running,Running - Trail,Running - Urban Trail,Sailing,Walking,Hiking,Hiking - Speed,Swimming,Driving,Off road driving,Motor racing,Motorcycling,Enduro,Skiing,Skiing - Touring,Skiing - Backcountry,Skiing - Nordic,Skiing - Alpine,Skiing - Roller,Canoeing,Kayaking,Sea kayaking,Stand up paddle boarding,Rowing,Windsurfing,Kiteboarding,Orienteering,Mountaineering,Skating,Skateboarding,Horse riding,Hang gliding,Gliding,Flying,Snowboarding,Paragliding,Hot air ballooning,Nordic walking,Snowshoeing,Jet skiing,Powerboating,Swimrun,Pedelec,Crossskating,Motorhome,Cabriolet,Coach,Pack animal trekking,Train,Wheelchair,Sightseeing,Geocaching,Longboard,River navigation,Skating - Inline,Miscellaneous}]
           [--similar SIMILAR]
           source [source ...] destination

Positional Arguments

source one ore more tracks or backends
destination the destination backend

Named Arguments

--loglevel

Possible choices: none, debug, info, warning, error

set the loglevel

Default: “none”

--timeout
Timeout: Either one value in seconds or two comma separated values: The first one is the connection timeout, the second one is the read timeout. Default is to wait forever.
--first-date Limit tracks by date
--last-date Limit tracks by date
--date Limit tracks by specific date
--min-points Limit tracks by minimal number of points
--max-points Limit tracks by maximal number of points
--min-distance Limit tracks by minimal distance
--max-distance Limit tracks by maximal distance
--min-speed Limit tracks by minimal speed
--max-speed Limit tracks by maximal speed
--only-keywords
 Limit tracks by keywords
--only-category
 

Possible choices: Cycling, Cycling - Road, Cycling - Gravel, Cycling - MTB, Cycling - Indoor, Cycling - Hand, Cycling - Touring, Cycling - Foot, Running, Running - Trail, Running - Urban Trail, Sailing, Walking, Hiking, Hiking - Speed, Swimming, Driving, Off road driving, Motor racing, Motorcycling, Enduro, Skiing, Skiing - Touring, Skiing - Backcountry, Skiing - Nordic, Skiing - Alpine, Skiing - Roller, Canoeing, Kayaking, Sea kayaking, Stand up paddle boarding, Rowing, Windsurfing, Kiteboarding, Orienteering, Mountaineering, Skating, Skateboarding, Horse riding, Hang gliding, Gliding, Flying, Snowboarding, Paragliding, Hot air ballooning, Nordic walking, Snowshoeing, Jet skiing, Powerboating, Swimrun, Pedelec, Crossskating, Motorhome, Cabriolet, Coach, Pack animal trekking, Train, Wheelchair, Sightseeing, Geocaching, Longboard, River navigation, Skating - Inline, Miscellaneous

Limit tracks by category

--similar Limit tracks by similarity to one of tracks SIMILAR. SIMILAR is a list of tracks separated with a comma and no space. This will only work for track identifiers without comma.

source and destination arguments may be single tracks or entire backend instances. Local files and directories are given as usual. Mail targets are given as mailer:my_mail@address.test

For all other backends, the syntax is:

backend:username for all tracks in a backend

or

backend:username/track_id for one specific track in a backend

Available backends are:

  • mmt MapMytracks
  • gpsies gpsies.com
  • openrunner openrunner.com
  • mailer mails tracks

The file $HOME/.config/Gpxity/auth.cfg defines the type of the backend, username and password. Example:

[MMT:username] Password = whatever

Dates are expected as YYYY-MM-DD, YYYY-MM or YYYY.

fix

try to fix some GPX format bugs in tracks.
First BACKUP the tracks! This can destroy them!
gpxdo fix [-h] [--loglevel {none,debug,info,warning,error}]
          [--timeout TIMEOUT] [--first-date FIRST_DATE]
          [--last-date LAST_DATE] [--date DATE] [--min-points MIN_POINTS]
          [--max-points MAX_POINTS] [--min-distance MIN_DISTANCE]
          [--max-distance MAX_DISTANCE] [--min-speed MIN_SPEED]
          [--max-speed MAX_SPEED] [--only-keywords ONLY_KEYWORDS]
          [--only-category {Cycling,Cycling - Road,Cycling - Gravel,Cycling - MTB,Cycling - Indoor,Cycling - Hand,Cycling - Touring,Cycling - Foot,Running,Running - Trail,Running - Urban Trail,Sailing,Walking,Hiking,Hiking - Speed,Swimming,Driving,Off road driving,Motor racing,Motorcycling,Enduro,Skiing,Skiing - Touring,Skiing - Backcountry,Skiing - Nordic,Skiing - Alpine,Skiing - Roller,Canoeing,Kayaking,Sea kayaking,Stand up paddle boarding,Rowing,Windsurfing,Kiteboarding,Orienteering,Mountaineering,Skating,Skateboarding,Horse riding,Hang gliding,Gliding,Flying,Snowboarding,Paragliding,Hot air ballooning,Nordic walking,Snowshoeing,Jet skiing,Powerboating,Swimrun,Pedelec,Crossskating,Motorhome,Cabriolet,Coach,Pack animal trekking,Train,Wheelchair,Sightseeing,Geocaching,Longboard,River navigation,Skating - Inline,Miscellaneous}]
          [--similar SIMILAR] [--orux] [--jumps] [--title-from-id]
          [--id-from-title] [--id-from-time]
          [--id-from-backend ID_FROM_BACKEND] [--simplify MAX]
          [--add-minutes ADD_MINUTES]
          [source [source ...]]

Positional Arguments

source one ore more tracks or backends

Named Arguments

--loglevel

Possible choices: none, debug, info, warning, error

set the loglevel

Default: “none”

--timeout
Timeout: Either one value in seconds or two comma separated values: The first one is the connection timeout, the second one is the read timeout. Default is to wait forever.
--first-date Limit tracks by date
--last-date Limit tracks by date
--date Limit tracks by specific date
--min-points Limit tracks by minimal number of points
--max-points Limit tracks by maximal number of points
--min-distance Limit tracks by minimal distance
--max-distance Limit tracks by maximal distance
--min-speed Limit tracks by minimal speed
--max-speed Limit tracks by maximal speed
--only-keywords
 Limit tracks by keywords
--only-category
 

Possible choices: Cycling, Cycling - Road, Cycling - Gravel, Cycling - MTB, Cycling - Indoor, Cycling - Hand, Cycling - Touring, Cycling - Foot, Running, Running - Trail, Running - Urban Trail, Sailing, Walking, Hiking, Hiking - Speed, Swimming, Driving, Off road driving, Motor racing, Motorcycling, Enduro, Skiing, Skiing - Touring, Skiing - Backcountry, Skiing - Nordic, Skiing - Alpine, Skiing - Roller, Canoeing, Kayaking, Sea kayaking, Stand up paddle boarding, Rowing, Windsurfing, Kiteboarding, Orienteering, Mountaineering, Skating, Skateboarding, Horse riding, Hang gliding, Gliding, Flying, Snowboarding, Paragliding, Hot air ballooning, Nordic walking, Snowshoeing, Jet skiing, Powerboating, Swimrun, Pedelec, Crossskating, Motorhome, Cabriolet, Coach, Pack animal trekking, Train, Wheelchair, Sightseeing, Geocaching, Longboard, River navigation, Skating - Inline, Miscellaneous

Limit tracks by category

--similar Limit tracks by similarity to one of tracks SIMILAR. SIMILAR is a list of tracks separated with a comma and no space. This will only work for track identifiers without comma.
--orux
BACKUP your tracks first! This can destroy them!
Try to fix old oruxmaps bug where the date jumps back by one day

Default: False

--jumps
BACKUP your tracks first! This can destroy them!
Whenever the time jumps back or more than 30 minutes into the future or when the distance speed between two points exceed 5km, split into two segments at that point

Default: False

--title-from-id
 

use id for title

Default: False

--id-from-title
 

use title for id, works only for Directory

Default: False

--id-from-time

use time for id, works only for Directory

Default: False

--id-from-backend
 use last known id for a track in BACKEND
--simplify Reduce track points. The new track may move MAX meters away from the original
--add-minutes Add minutes to all times

source and destination arguments may be single tracks or entire backend instances. Local files and directories are given as usual. Mail targets are given as mailer:my_mail@address.test

For all other backends, the syntax is:

backend:username for all tracks in a backend

or

backend:username/track_id for one specific track in a backend

Available backends are:

  • mmt MapMytracks
  • gpsies gpsies.com
  • openrunner openrunner.com
  • mailer mails tracks

The file $HOME/.config/Gpxity/auth.cfg defines the type of the backend, username and password. Example:

[MMT:username] Password = whatever

Dates are expected as YYYY-MM-DD, YYYY-MM or YYYY.

keywords

add keywords. A keyword preceded with - will be removed. Examples:

keywords A,-B keywords – -A
gpxdo keywords [-h] [--loglevel {none,debug,info,warning,error}]
               [--timeout TIMEOUT] [--first-date FIRST_DATE]
               [--last-date LAST_DATE] [--date DATE] [--min-points MIN_POINTS]
               [--max-points MAX_POINTS] [--min-distance MIN_DISTANCE]
               [--max-distance MAX_DISTANCE] [--min-speed MIN_SPEED]
               [--max-speed MAX_SPEED] [--only-keywords ONLY_KEYWORDS]
               [--only-category {Cycling,Cycling - Road,Cycling - Gravel,Cycling - MTB,Cycling - Indoor,Cycling - Hand,Cycling - Touring,Cycling - Foot,Running,Running - Trail,Running - Urban Trail,Sailing,Walking,Hiking,Hiking - Speed,Swimming,Driving,Off road driving,Motor racing,Motorcycling,Enduro,Skiing,Skiing - Touring,Skiing - Backcountry,Skiing - Nordic,Skiing - Alpine,Skiing - Roller,Canoeing,Kayaking,Sea kayaking,Stand up paddle boarding,Rowing,Windsurfing,Kiteboarding,Orienteering,Mountaineering,Skating,Skateboarding,Horse riding,Hang gliding,Gliding,Flying,Snowboarding,Paragliding,Hot air ballooning,Nordic walking,Snowshoeing,Jet skiing,Powerboating,Swimrun,Pedelec,Crossskating,Motorhome,Cabriolet,Coach,Pack animal trekking,Train,Wheelchair,Sightseeing,Geocaching,Longboard,River navigation,Skating - Inline,Miscellaneous}]
               [--similar SIMILAR] [--dry-run]
               keywords [source [source ...]]

Positional Arguments

keywords keywords separated by commas
source one ore more tracks or backends

Named Arguments

--loglevel

Possible choices: none, debug, info, warning, error

set the loglevel

Default: “none”

--timeout
Timeout: Either one value in seconds or two comma separated values: The first one is the connection timeout, the second one is the read timeout. Default is to wait forever.
--first-date Limit tracks by date
--last-date Limit tracks by date
--date Limit tracks by specific date
--min-points Limit tracks by minimal number of points
--max-points Limit tracks by maximal number of points
--min-distance Limit tracks by minimal distance
--max-distance Limit tracks by maximal distance
--min-speed Limit tracks by minimal speed
--max-speed Limit tracks by maximal speed
--only-keywords
 Limit tracks by keywords
--only-category
 

Possible choices: Cycling, Cycling - Road, Cycling - Gravel, Cycling - MTB, Cycling - Indoor, Cycling - Hand, Cycling - Touring, Cycling - Foot, Running, Running - Trail, Running - Urban Trail, Sailing, Walking, Hiking, Hiking - Speed, Swimming, Driving, Off road driving, Motor racing, Motorcycling, Enduro, Skiing, Skiing - Touring, Skiing - Backcountry, Skiing - Nordic, Skiing - Alpine, Skiing - Roller, Canoeing, Kayaking, Sea kayaking, Stand up paddle boarding, Rowing, Windsurfing, Kiteboarding, Orienteering, Mountaineering, Skating, Skateboarding, Horse riding, Hang gliding, Gliding, Flying, Snowboarding, Paragliding, Hot air ballooning, Nordic walking, Snowshoeing, Jet skiing, Powerboating, Swimrun, Pedelec, Crossskating, Motorhome, Cabriolet, Coach, Pack animal trekking, Train, Wheelchair, Sightseeing, Geocaching, Longboard, River navigation, Skating - Inline, Miscellaneous

Limit tracks by category

--similar Limit tracks by similarity to one of tracks SIMILAR. SIMILAR is a list of tracks separated with a comma and no space. This will only work for track identifiers without comma.
--dry-run

only show what would be done

Default: False

dump

Show specific GPX values

gpxdo dump [-h] [--loglevel {none,debug,info,warning,error}]
           [--timeout TIMEOUT] [--first-date FIRST_DATE]
           [--last-date LAST_DATE] [--date DATE] [--min-points MIN_POINTS]
           [--max-points MAX_POINTS] [--min-distance MIN_DISTANCE]
           [--max-distance MAX_DISTANCE] [--min-speed MIN_SPEED]
           [--max-speed MAX_SPEED] [--only-keywords ONLY_KEYWORDS]
           [--only-category {Cycling,Cycling - Road,Cycling - Gravel,Cycling - MTB,Cycling - Indoor,Cycling - Hand,Cycling - Touring,Cycling - Foot,Running,Running - Trail,Running - Urban Trail,Sailing,Walking,Hiking,Hiking - Speed,Swimming,Driving,Off road driving,Motor racing,Motorcycling,Enduro,Skiing,Skiing - Touring,Skiing - Backcountry,Skiing - Nordic,Skiing - Alpine,Skiing - Roller,Canoeing,Kayaking,Sea kayaking,Stand up paddle boarding,Rowing,Windsurfing,Kiteboarding,Orienteering,Mountaineering,Skating,Skateboarding,Horse riding,Hang gliding,Gliding,Flying,Snowboarding,Paragliding,Hot air ballooning,Nordic walking,Snowshoeing,Jet skiing,Powerboating,Swimrun,Pedelec,Crossskating,Motorhome,Cabriolet,Coach,Pack animal trekking,Train,Wheelchair,Sightseeing,Geocaching,Longboard,River navigation,Skating - Inline,Miscellaneous}]
           [--similar SIMILAR] [--points]
           [source [source ...]]

Positional Arguments

source one ore more tracks or backends

Named Arguments

--loglevel

Possible choices: none, debug, info, warning, error

set the loglevel

Default: “none”

--timeout
Timeout: Either one value in seconds or two comma separated values: The first one is the connection timeout, the second one is the read timeout. Default is to wait forever.
--first-date Limit tracks by date
--last-date Limit tracks by date
--date Limit tracks by specific date
--min-points Limit tracks by minimal number of points
--max-points Limit tracks by maximal number of points
--min-distance Limit tracks by minimal distance
--max-distance Limit tracks by maximal distance
--min-speed Limit tracks by minimal speed
--max-speed Limit tracks by maximal speed
--only-keywords
 Limit tracks by keywords
--only-category
 

Possible choices: Cycling, Cycling - Road, Cycling - Gravel, Cycling - MTB, Cycling - Indoor, Cycling - Hand, Cycling - Touring, Cycling - Foot, Running, Running - Trail, Running - Urban Trail, Sailing, Walking, Hiking, Hiking - Speed, Swimming, Driving, Off road driving, Motor racing, Motorcycling, Enduro, Skiing, Skiing - Touring, Skiing - Backcountry, Skiing - Nordic, Skiing - Alpine, Skiing - Roller, Canoeing, Kayaking, Sea kayaking, Stand up paddle boarding, Rowing, Windsurfing, Kiteboarding, Orienteering, Mountaineering, Skating, Skateboarding, Horse riding, Hang gliding, Gliding, Flying, Snowboarding, Paragliding, Hot air ballooning, Nordic walking, Snowshoeing, Jet skiing, Powerboating, Swimrun, Pedelec, Crossskating, Motorhome, Cabriolet, Coach, Pack animal trekking, Train, Wheelchair, Sightseeing, Geocaching, Longboard, River navigation, Skating - Inline, Miscellaneous

Limit tracks by category

--similar Limit tracks by similarity to one of tracks SIMILAR. SIMILAR is a list of tracks separated with a comma and no space. This will only work for track identifiers without comma.
--points

List detailled info about points

Default: False

source and destination arguments may be single tracks or entire backend instances. Local files and directories are given as usual. Mail targets are given as mailer:my_mail@address.test

For all other backends, the syntax is:

backend:username for all tracks in a backend

or

backend:username/track_id for one specific track in a backend

Available backends are:

  • mmt MapMytracks
  • gpsies gpsies.com
  • openrunner openrunner.com
  • mailer mails tracks

The file $HOME/.config/Gpxity/auth.cfg defines the type of the backend, username and password. Example:

[MMT:username] Password = whatever

Dates are expected as YYYY-MM-DD, YYYY-MM or YYYY.

title

set the title

gpxdo title [-h] [--loglevel {none,debug,info,warning,error}]
            [--timeout TIMEOUT] [--first-date FIRST_DATE]
            [--last-date LAST_DATE] [--date DATE] [--min-points MIN_POINTS]
            [--max-points MAX_POINTS] [--min-distance MIN_DISTANCE]
            [--max-distance MAX_DISTANCE] [--min-speed MIN_SPEED]
            [--max-speed MAX_SPEED] [--only-keywords ONLY_KEYWORDS]
            [--only-category {Cycling,Cycling - Road,Cycling - Gravel,Cycling - MTB,Cycling - Indoor,Cycling - Hand,Cycling - Touring,Cycling - Foot,Running,Running - Trail,Running - Urban Trail,Sailing,Walking,Hiking,Hiking - Speed,Swimming,Driving,Off road driving,Motor racing,Motorcycling,Enduro,Skiing,Skiing - Touring,Skiing - Backcountry,Skiing - Nordic,Skiing - Alpine,Skiing - Roller,Canoeing,Kayaking,Sea kayaking,Stand up paddle boarding,Rowing,Windsurfing,Kiteboarding,Orienteering,Mountaineering,Skating,Skateboarding,Horse riding,Hang gliding,Gliding,Flying,Snowboarding,Paragliding,Hot air ballooning,Nordic walking,Snowshoeing,Jet skiing,Powerboating,Swimrun,Pedelec,Crossskating,Motorhome,Cabriolet,Coach,Pack animal trekking,Train,Wheelchair,Sightseeing,Geocaching,Longboard,River navigation,Skating - Inline,Miscellaneous}]
            [--similar SIMILAR]
            title [source [source ...]]

Positional Arguments

title the new title
source one ore more tracks or backends

Named Arguments

--loglevel

Possible choices: none, debug, info, warning, error

set the loglevel

Default: “none”

--timeout
Timeout: Either one value in seconds or two comma separated values: The first one is the connection timeout, the second one is the read timeout. Default is to wait forever.
--first-date Limit tracks by date
--last-date Limit tracks by date
--date Limit tracks by specific date
--min-points Limit tracks by minimal number of points
--max-points Limit tracks by maximal number of points
--min-distance Limit tracks by minimal distance
--max-distance Limit tracks by maximal distance
--min-speed Limit tracks by minimal speed
--max-speed Limit tracks by maximal speed
--only-keywords
 Limit tracks by keywords
--only-category
 

Possible choices: Cycling, Cycling - Road, Cycling - Gravel, Cycling - MTB, Cycling - Indoor, Cycling - Hand, Cycling - Touring, Cycling - Foot, Running, Running - Trail, Running - Urban Trail, Sailing, Walking, Hiking, Hiking - Speed, Swimming, Driving, Off road driving, Motor racing, Motorcycling, Enduro, Skiing, Skiing - Touring, Skiing - Backcountry, Skiing - Nordic, Skiing - Alpine, Skiing - Roller, Canoeing, Kayaking, Sea kayaking, Stand up paddle boarding, Rowing, Windsurfing, Kiteboarding, Orienteering, Mountaineering, Skating, Skateboarding, Horse riding, Hang gliding, Gliding, Flying, Snowboarding, Paragliding, Hot air ballooning, Nordic walking, Snowshoeing, Jet skiing, Powerboating, Swimrun, Pedelec, Crossskating, Motorhome, Cabriolet, Coach, Pack animal trekking, Train, Wheelchair, Sightseeing, Geocaching, Longboard, River navigation, Skating - Inline, Miscellaneous

Limit tracks by category

--similar Limit tracks by similarity to one of tracks SIMILAR. SIMILAR is a list of tracks separated with a comma and no space. This will only work for track identifiers without comma.

description

set the description

gpxdo description [-h] [--loglevel {none,debug,info,warning,error}]
                  [--timeout TIMEOUT] [--first-date FIRST_DATE]
                  [--last-date LAST_DATE] [--date DATE]
                  [--min-points MIN_POINTS] [--max-points MAX_POINTS]
                  [--min-distance MIN_DISTANCE] [--max-distance MAX_DISTANCE]
                  [--min-speed MIN_SPEED] [--max-speed MAX_SPEED]
                  [--only-keywords ONLY_KEYWORDS]
                  [--only-category {Cycling,Cycling - Road,Cycling - Gravel,Cycling - MTB,Cycling - Indoor,Cycling - Hand,Cycling - Touring,Cycling - Foot,Running,Running - Trail,Running - Urban Trail,Sailing,Walking,Hiking,Hiking - Speed,Swimming,Driving,Off road driving,Motor racing,Motorcycling,Enduro,Skiing,Skiing - Touring,Skiing - Backcountry,Skiing - Nordic,Skiing - Alpine,Skiing - Roller,Canoeing,Kayaking,Sea kayaking,Stand up paddle boarding,Rowing,Windsurfing,Kiteboarding,Orienteering,Mountaineering,Skating,Skateboarding,Horse riding,Hang gliding,Gliding,Flying,Snowboarding,Paragliding,Hot air ballooning,Nordic walking,Snowshoeing,Jet skiing,Powerboating,Swimrun,Pedelec,Crossskating,Motorhome,Cabriolet,Coach,Pack animal trekking,Train,Wheelchair,Sightseeing,Geocaching,Longboard,River navigation,Skating - Inline,Miscellaneous}]
                  [--similar SIMILAR]
                  description [source [source ...]]

Positional Arguments

description the new description
source one ore more tracks or backends

Named Arguments

--loglevel

Possible choices: none, debug, info, warning, error

set the loglevel

Default: “none”

--timeout
Timeout: Either one value in seconds or two comma separated values: The first one is the connection timeout, the second one is the read timeout. Default is to wait forever.
--first-date Limit tracks by date
--last-date Limit tracks by date
--date Limit tracks by specific date
--min-points Limit tracks by minimal number of points
--max-points Limit tracks by maximal number of points
--min-distance Limit tracks by minimal distance
--max-distance Limit tracks by maximal distance
--min-speed Limit tracks by minimal speed
--max-speed Limit tracks by maximal speed
--only-keywords
 Limit tracks by keywords
--only-category
 

Possible choices: Cycling, Cycling - Road, Cycling - Gravel, Cycling - MTB, Cycling - Indoor, Cycling - Hand, Cycling - Touring, Cycling - Foot, Running, Running - Trail, Running - Urban Trail, Sailing, Walking, Hiking, Hiking - Speed, Swimming, Driving, Off road driving, Motor racing, Motorcycling, Enduro, Skiing, Skiing - Touring, Skiing - Backcountry, Skiing - Nordic, Skiing - Alpine, Skiing - Roller, Canoeing, Kayaking, Sea kayaking, Stand up paddle boarding, Rowing, Windsurfing, Kiteboarding, Orienteering, Mountaineering, Skating, Skateboarding, Horse riding, Hang gliding, Gliding, Flying, Snowboarding, Paragliding, Hot air ballooning, Nordic walking, Snowshoeing, Jet skiing, Powerboating, Swimrun, Pedelec, Crossskating, Motorhome, Cabriolet, Coach, Pack animal trekking, Train, Wheelchair, Sightseeing, Geocaching, Longboard, River navigation, Skating - Inline, Miscellaneous

Limit tracks by category

--similar Limit tracks by similarity to one of tracks SIMILAR. SIMILAR is a list of tracks separated with a comma and no space. This will only work for track identifiers without comma.

category

set the category

gpxdo category [-h] [--loglevel {none,debug,info,warning,error}]
               [--timeout TIMEOUT] [--first-date FIRST_DATE]
               [--last-date LAST_DATE] [--date DATE] [--min-points MIN_POINTS]
               [--max-points MAX_POINTS] [--min-distance MIN_DISTANCE]
               [--max-distance MAX_DISTANCE] [--min-speed MIN_SPEED]
               [--max-speed MAX_SPEED] [--only-keywords ONLY_KEYWORDS]
               [--only-category {Cycling,Cycling - Road,Cycling - Gravel,Cycling - MTB,Cycling - Indoor,Cycling - Hand,Cycling - Touring,Cycling - Foot,Running,Running - Trail,Running - Urban Trail,Sailing,Walking,Hiking,Hiking - Speed,Swimming,Driving,Off road driving,Motor racing,Motorcycling,Enduro,Skiing,Skiing - Touring,Skiing - Backcountry,Skiing - Nordic,Skiing - Alpine,Skiing - Roller,Canoeing,Kayaking,Sea kayaking,Stand up paddle boarding,Rowing,Windsurfing,Kiteboarding,Orienteering,Mountaineering,Skating,Skateboarding,Horse riding,Hang gliding,Gliding,Flying,Snowboarding,Paragliding,Hot air ballooning,Nordic walking,Snowshoeing,Jet skiing,Powerboating,Swimrun,Pedelec,Crossskating,Motorhome,Cabriolet,Coach,Pack animal trekking,Train,Wheelchair,Sightseeing,Geocaching,Longboard,River navigation,Skating - Inline,Miscellaneous}]
               [--similar SIMILAR]
               {Cycling,Cycling - Road,Cycling - Gravel,Cycling - MTB,Cycling
               - Indoor,Cycling - Hand,Cycling - Touring,Cycling -
               Foot,Running,Running - Trail,Running - Urban
               Trail,Sailing,Walking,Hiking,Hiking -
               Speed,Swimming,Driving,Off road driving,Motor
               racing,Motorcycling,Enduro,Skiing,Skiing - Touring,Skiing -
               Backcountry,Skiing - Nordic,Skiing - Alpine,Skiing -
               Roller,Canoeing,Kayaking,Sea kayaking,Stand up paddle
               boarding,Rowing,Windsurfing,Kiteboarding,Orienteering,Mountaineering,Skating,Skateboarding,Horse
               riding,Hang gliding,Gliding,Flying,Snowboarding,Paragliding,Hot
               air ballooning,Nordic walking,Snowshoeing,Jet
               skiing,Powerboating,Swimrun,Pedelec,Crossskating,Motorhome,Cabriolet,Coach,Pack
               animal
               trekking,Train,Wheelchair,Sightseeing,Geocaching,Longboard,River
               navigation,Skating - Inline,Miscellaneous}
               [source [source ...]]

Positional Arguments

category

Possible choices: Cycling, Cycling - Road, Cycling - Gravel, Cycling - MTB, Cycling - Indoor, Cycling - Hand, Cycling - Touring, Cycling - Foot, Running, Running - Trail, Running - Urban Trail, Sailing, Walking, Hiking, Hiking - Speed, Swimming, Driving, Off road driving, Motor racing, Motorcycling, Enduro, Skiing, Skiing - Touring, Skiing - Backcountry, Skiing - Nordic, Skiing - Alpine, Skiing - Roller, Canoeing, Kayaking, Sea kayaking, Stand up paddle boarding, Rowing, Windsurfing, Kiteboarding, Orienteering, Mountaineering, Skating, Skateboarding, Horse riding, Hang gliding, Gliding, Flying, Snowboarding, Paragliding, Hot air ballooning, Nordic walking, Snowshoeing, Jet skiing, Powerboating, Swimrun, Pedelec, Crossskating, Motorhome, Cabriolet, Coach, Pack animal trekking, Train, Wheelchair, Sightseeing, Geocaching, Longboard, River navigation, Skating - Inline, Miscellaneous

the new category

source one ore more tracks or backends

Named Arguments

--loglevel

Possible choices: none, debug, info, warning, error

set the loglevel

Default: “none”

--timeout
Timeout: Either one value in seconds or two comma separated values: The first one is the connection timeout, the second one is the read timeout. Default is to wait forever.
--first-date Limit tracks by date
--last-date Limit tracks by date
--date Limit tracks by specific date
--min-points Limit tracks by minimal number of points
--max-points Limit tracks by maximal number of points
--min-distance Limit tracks by minimal distance
--max-distance Limit tracks by maximal distance
--min-speed Limit tracks by minimal speed
--max-speed Limit tracks by maximal speed
--only-keywords
 Limit tracks by keywords
--only-category
 

Possible choices: Cycling, Cycling - Road, Cycling - Gravel, Cycling - MTB, Cycling - Indoor, Cycling - Hand, Cycling - Touring, Cycling - Foot, Running, Running - Trail, Running - Urban Trail, Sailing, Walking, Hiking, Hiking - Speed, Swimming, Driving, Off road driving, Motor racing, Motorcycling, Enduro, Skiing, Skiing - Touring, Skiing - Backcountry, Skiing - Nordic, Skiing - Alpine, Skiing - Roller, Canoeing, Kayaking, Sea kayaking, Stand up paddle boarding, Rowing, Windsurfing, Kiteboarding, Orienteering, Mountaineering, Skating, Skateboarding, Horse riding, Hang gliding, Gliding, Flying, Snowboarding, Paragliding, Hot air ballooning, Nordic walking, Snowshoeing, Jet skiing, Powerboating, Swimrun, Pedelec, Crossskating, Motorhome, Cabriolet, Coach, Pack animal trekking, Train, Wheelchair, Sightseeing, Geocaching, Longboard, River navigation, Skating - Inline, Miscellaneous

Limit tracks by category

--similar Limit tracks by similarity to one of tracks SIMILAR. SIMILAR is a list of tracks separated with a comma and no space. This will only work for track identifiers without comma.

public

set the status to public

gpxdo public [-h] [--loglevel {none,debug,info,warning,error}]
             [--timeout TIMEOUT] [--first-date FIRST_DATE]
             [--last-date LAST_DATE] [--date DATE] [--min-points MIN_POINTS]
             [--max-points MAX_POINTS] [--min-distance MIN_DISTANCE]
             [--max-distance MAX_DISTANCE] [--min-speed MIN_SPEED]
             [--max-speed MAX_SPEED] [--only-keywords ONLY_KEYWORDS]
             [--only-category {Cycling,Cycling - Road,Cycling - Gravel,Cycling - MTB,Cycling - Indoor,Cycling - Hand,Cycling - Touring,Cycling - Foot,Running,Running - Trail,Running - Urban Trail,Sailing,Walking,Hiking,Hiking - Speed,Swimming,Driving,Off road driving,Motor racing,Motorcycling,Enduro,Skiing,Skiing - Touring,Skiing - Backcountry,Skiing - Nordic,Skiing - Alpine,Skiing - Roller,Canoeing,Kayaking,Sea kayaking,Stand up paddle boarding,Rowing,Windsurfing,Kiteboarding,Orienteering,Mountaineering,Skating,Skateboarding,Horse riding,Hang gliding,Gliding,Flying,Snowboarding,Paragliding,Hot air ballooning,Nordic walking,Snowshoeing,Jet skiing,Powerboating,Swimrun,Pedelec,Crossskating,Motorhome,Cabriolet,Coach,Pack animal trekking,Train,Wheelchair,Sightseeing,Geocaching,Longboard,River navigation,Skating - Inline,Miscellaneous}]
             [--similar SIMILAR]
             [source [source ...]]

Positional Arguments

source one ore more tracks or backends

Named Arguments

--loglevel

Possible choices: none, debug, info, warning, error

set the loglevel

Default: “none”

--timeout
Timeout: Either one value in seconds or two comma separated values: The first one is the connection timeout, the second one is the read timeout. Default is to wait forever.
--first-date Limit tracks by date
--last-date Limit tracks by date
--date Limit tracks by specific date
--min-points Limit tracks by minimal number of points
--max-points Limit tracks by maximal number of points
--min-distance Limit tracks by minimal distance
--max-distance Limit tracks by maximal distance
--min-speed Limit tracks by minimal speed
--max-speed Limit tracks by maximal speed
--only-keywords
 Limit tracks by keywords
--only-category
 

Possible choices: Cycling, Cycling - Road, Cycling - Gravel, Cycling - MTB, Cycling - Indoor, Cycling - Hand, Cycling - Touring, Cycling - Foot, Running, Running - Trail, Running - Urban Trail, Sailing, Walking, Hiking, Hiking - Speed, Swimming, Driving, Off road driving, Motor racing, Motorcycling, Enduro, Skiing, Skiing - Touring, Skiing - Backcountry, Skiing - Nordic, Skiing - Alpine, Skiing - Roller, Canoeing, Kayaking, Sea kayaking, Stand up paddle boarding, Rowing, Windsurfing, Kiteboarding, Orienteering, Mountaineering, Skating, Skateboarding, Horse riding, Hang gliding, Gliding, Flying, Snowboarding, Paragliding, Hot air ballooning, Nordic walking, Snowshoeing, Jet skiing, Powerboating, Swimrun, Pedelec, Crossskating, Motorhome, Cabriolet, Coach, Pack animal trekking, Train, Wheelchair, Sightseeing, Geocaching, Longboard, River navigation, Skating - Inline, Miscellaneous

Limit tracks by category

--similar Limit tracks by similarity to one of tracks SIMILAR. SIMILAR is a list of tracks separated with a comma and no space. This will only work for track identifiers without comma.

private

set the status to private

gpxdo private [-h] [--loglevel {none,debug,info,warning,error}]
              [--timeout TIMEOUT] [--first-date FIRST_DATE]
              [--last-date LAST_DATE] [--date DATE] [--min-points MIN_POINTS]
              [--max-points MAX_POINTS] [--min-distance MIN_DISTANCE]
              [--max-distance MAX_DISTANCE] [--min-speed MIN_SPEED]
              [--max-speed MAX_SPEED] [--only-keywords ONLY_KEYWORDS]
              [--only-category {Cycling,Cycling - Road,Cycling - Gravel,Cycling - MTB,Cycling - Indoor,Cycling - Hand,Cycling - Touring,Cycling - Foot,Running,Running - Trail,Running - Urban Trail,Sailing,Walking,Hiking,Hiking - Speed,Swimming,Driving,Off road driving,Motor racing,Motorcycling,Enduro,Skiing,Skiing - Touring,Skiing - Backcountry,Skiing - Nordic,Skiing - Alpine,Skiing - Roller,Canoeing,Kayaking,Sea kayaking,Stand up paddle boarding,Rowing,Windsurfing,Kiteboarding,Orienteering,Mountaineering,Skating,Skateboarding,Horse riding,Hang gliding,Gliding,Flying,Snowboarding,Paragliding,Hot air ballooning,Nordic walking,Snowshoeing,Jet skiing,Powerboating,Swimrun,Pedelec,Crossskating,Motorhome,Cabriolet,Coach,Pack animal trekking,Train,Wheelchair,Sightseeing,Geocaching,Longboard,River navigation,Skating - Inline,Miscellaneous}]
              [--similar SIMILAR]
              [source [source ...]]

Positional Arguments

source one ore more tracks or backends

Named Arguments

--loglevel

Possible choices: none, debug, info, warning, error

set the loglevel

Default: “none”

--timeout
Timeout: Either one value in seconds or two comma separated values: The first one is the connection timeout, the second one is the read timeout. Default is to wait forever.
--first-date Limit tracks by date
--last-date Limit tracks by date
--date Limit tracks by specific date
--min-points Limit tracks by minimal number of points
--max-points Limit tracks by maximal number of points
--min-distance Limit tracks by minimal distance
--max-distance Limit tracks by maximal distance
--min-speed Limit tracks by minimal speed
--max-speed Limit tracks by maximal speed
--only-keywords
 Limit tracks by keywords
--only-category
 

Possible choices: Cycling, Cycling - Road, Cycling - Gravel, Cycling - MTB, Cycling - Indoor, Cycling - Hand, Cycling - Touring, Cycling - Foot, Running, Running - Trail, Running - Urban Trail, Sailing, Walking, Hiking, Hiking - Speed, Swimming, Driving, Off road driving, Motor racing, Motorcycling, Enduro, Skiing, Skiing - Touring, Skiing - Backcountry, Skiing - Nordic, Skiing - Alpine, Skiing - Roller, Canoeing, Kayaking, Sea kayaking, Stand up paddle boarding, Rowing, Windsurfing, Kiteboarding, Orienteering, Mountaineering, Skating, Skateboarding, Horse riding, Hang gliding, Gliding, Flying, Snowboarding, Paragliding, Hot air ballooning, Nordic walking, Snowshoeing, Jet skiing, Powerboating, Swimrun, Pedelec, Crossskating, Motorhome, Cabriolet, Coach, Pack animal trekking, Train, Wheelchair, Sightseeing, Geocaching, Longboard, River navigation, Skating - Inline, Miscellaneous

Limit tracks by category

--similar Limit tracks by similarity to one of tracks SIMILAR. SIMILAR is a list of tracks separated with a comma and no space. This will only work for track identifiers without comma.

source and destination arguments may be single tracks or entire backend instances. Local files and directories are given as usual. Mail targets are given as mailer:my_mail@address.test

For all other backends, the syntax is:

backend:username for all tracks in a backend

or

backend:username/track_id for one specific track in a backend

Available backends are:

  • mmt MapMytracks
  • gpsies gpsies.com
  • openrunner openrunner.com
  • mailer mails tracks

The file $HOME/.config/Gpxity/auth.cfg defines the type of the backend, username and password. Example:

[MMT:username] Password = whatever

Dates are expected as YYYY-MM-DD, YYYY-MM or YYYY.

gpxity_server

usage: gpxity_server [-h] --servername SERVERNAME [--certfile CERTFILE]
                     [--keyfile KEYFILE] [--port PORT]
                     [--loglevel {debug,info,warning,error}]
                     [--timeout TIMEOUT]
                     target [target ...]

Positional Arguments

target backends who should receive the data. The first one must be a local directory

Named Arguments

--servername the name of this server
--certfile if certfile and keyfile are given: offer https
--keyfile if certfile and keyfile are given, offer https
--port listen on PORT. Default is 80 for http and 443 for https
--loglevel

Possible choices: debug, info, warning, error

set the loglevel, default is error

Default: “error”

--timeout
either one value in seconds or two comma separated values: The first one is the connection timeout, the second one is the read timeout. Default is to wait forever.

The MMT server uses BASIC AUTH for login. Please define user:password in the file .users in the first target. Please define authorization for the other targets in the file auth.cfg in the first target.

Library

Track

This module defines Track.

class gpxity.track.Track(gpx=None)[source]

Bases: object

Represents a track.

A Track is essentially a GPX file. A GPX file may contain multiple tracks but whenever this documentation says track or Track it does not refer to one of possibly multiple entities in the GPX file. It refers to this class Track.

If a backend supports attributes not directly supported by the GPX format like the MapMyTracks track type, they will transparently be encodeded in existing GPX fields like keywords, see keywords.

The GPX part is done by https://github.com/tkrajina/gpxpy.

If a track is assigned to a backend, all changes will by default be written directly to the backend. Some backends are able to change only one attribute with little time overhead, others always have to rewrite the entire track.

However you can use the context manager batch_changes(). This holds back updating the backend until leaving the context.

If you manipulate the gpx directly, this goes unnoticed to the updating mechanism. Use rewrite() when done.

Not all backends support everything, you could get the exception NotImplementedError.

All points are always rounded to 6 decimal digits when they are added to the track. However some backends may support less than 6 decimals. You can query Backend.point_precision.

The data will only be loaded from the backend when it is needed. Some backends might support loading some attributes separately but we do not make use of that. However backends have two ways of loading data: Either load a list of Tracks or load all information about a specific track. Often loading the list of tracks gives us some attributes for free, so listing those tracks may be much faster if you do not want everything listed.

Parameters:gpx (GPX) – Initial content. To be used if you create a new Track from scratch without loading it from some backend.
categories

The legal values for category. The first one is used as default value. This is a superset of the values for the different backends. Every backend maps from its internal values into those when reading and maps them back when writing. Since not all backends support all values defined here and since some backends may define more values than we know, information may get lost when converting.

Type:tuple(str)
exception CannotMerge[source]

Bases: Exception

Is raised if Track.merge() fails.

add_points(points) → None[source]

Add points to last segment in the last track.

If no track is allocated yet and points is not an empty list, allocates a track.

Parameters:points (list(GPXTrackPoint) – The points to be added
adjust_time(delta)[source]

Add a timedelta to all times.

gpxpy.gpx.adjust_time does the same but it ignores waypoints. A newer gpxpy.py has a new bool arg for adjust_time which also adjusts waypoints on request but I do not want to check versions.

angle(precision=None) → float[source]

For me, the earth is flat.

Parameters:precision – After comma digits. Default is as defined by backend or 6.
Returns:the angle in degrees 0..360 between start and end. If we have no track, return 0
backend

The backend this track lives in. If the track was constructed in memory, backend is None.

This is a read-only property. It is set with Backend.add.

It is not possible to decouple a track from its backend, use clone().

Returns:The backend
batch_changes()[source]

Context manager: disable the direct update in the backend and saves the entire track when done.

This may or may not make things faster. Directory and GPSIES profits from this, MMT maybe.

can_merge(other, partial_tracks: bool = False)[source]

Check if self and other are mergeable.

Parameters:
  • other – The other Track
  • partial_tracks – If True, they are mergeable if one of them contains the other one.
Returns: (int, str)
int is either None or the starting index of the shorter track in the longer track str is either None or a string explaing why this is not mergeable
categories = ('Cycling', 'Cycling - Road', 'Cycling - Gravel', 'Cycling - MTB', 'Cycling - Indoor', 'Cycling - Hand', 'Cycling - Touring', 'Cycling - Foot', 'Running', 'Running - Trail', 'Running - Urban Trail', 'Sailing', 'Walking', 'Hiking', 'Hiking - Speed', 'Swimming', 'Driving', 'Off road driving', 'Motor racing', 'Motorcycling', 'Enduro', 'Skiing', 'Skiing - Touring', 'Skiing - Backcountry', 'Skiing - Nordic', 'Skiing - Alpine', 'Skiing - Roller', 'Canoeing', 'Kayaking', 'Sea kayaking', 'Stand up paddle boarding', 'Rowing', 'Windsurfing', 'Kiteboarding', 'Orienteering', 'Mountaineering', 'Skating', 'Skateboarding', 'Horse riding', 'Hang gliding', 'Gliding', 'Flying', 'Snowboarding', 'Paragliding', 'Hot air ballooning', 'Nordic walking', 'Snowshoeing', 'Jet skiing', 'Powerboating', 'Swimrun', 'Pedelec', 'Crossskating', 'Motorhome', 'Cabriolet', 'Coach', 'Pack animal trekking', 'Train', 'Wheelchair', 'Sightseeing', 'Geocaching', 'Longboard', 'River navigation', 'Skating - Inline', 'Miscellaneous')
category

What is this track doing? If we have no current value, return the default.

The value is automatically translated between our internal value and the value used by the backend. This happens when reading from or writing to the backend. :returns: The current value or the default value (see categories)

Type:str
change_keywords(values, replace=False, dry_run=False)[source]

Change keywords.

Duplicate keywords are silently ignored. A keyword may not contain a comma. Keywords with a preceding ‘-‘ are removed, the others are added. Raise an Exception if a keyword is both added and removed.

Parameters:
  • values – Either a single str with one or more keywords, separated by commas or an iterable of keywords
  • replace – if True, replace current keywords with the new ones. Ignores keywords preceded with a ‘-‘.
  • dry_run – if True, only return the new keywords but do not make that change
Returns:

The new keywords

clone()[source]

Create a new track with the same content but without backend.

Returns:the new track
Return type:Track
description

The description.

Returns:The description
Type:str
distance() → float[source]

For me, the earth is flat.

Returns:needs unittest
Return type:the distance in km, rounded to m. 0.0 if not computable. # TODO
fenced(fences)[source]

Suppress points in fences.

fix(orux: bool = False, jumps: bool = False)[source]

Fix bugs. This may fix them or produce more bugs.

Please backup your track before doing this.

Parameters:
  • orux – Older Oruxmaps switched the day back by one day after exactly 24 hours.
  • jumps – Whenever the time jumps back or more than 30
  • into the future, split the segment at that point. (minutes) –
Returns:

A list of message strings, usable for verbose output.

gpx

Direct access to the GPX object.

If you use it to change its content, remember to call rewrite() afterwards.

Returns:the GPX object
id_in_backend

Every backend has its own scheme for unique track ids.

Some backends may change the id if the track data changes.

Returns:the id in the backend
ids

Return ids for all backends where this track has already been.

This is a list of pairs. pair[0] is the name of the backend, pair[1] is the track id within. You can modify it but your changes will never be saved. They are sorted by ascending age. Only the 5 youngest are kept. If the same filename appears in more than one directory, keep only the youngest.

Returns: list( (str, str))
a list of tuple pairs with str(backend) and id_in_backend
index(other, digits=4)[source]

Check if this track contains other track.gpx.

This only works if all values for latitude and longitude are nearly identical.

Useful if one of the tracks had geofencing applied.

Parameters:digits – How many after point digits are used
Returns:None or the starting index for other.points in self.points
key(with_category: bool = True, with_last_time: bool = True, precision=None) → str[source]

For speed optimized equality checks, not granted to be exact, but sufficiently safe IMHO.

Parameters:
  • with_category – If False, do not use self.category. Needed for comparing tracks for equality like in unittests because values can change and information can get lost while copying between different backends
  • with_last_time – If False, do not use self.last_time.
  • precision – For latitude/longitude. After comma digits. Default is as defined by backend or 6.
Returns:

a string with selected attributes in printable form.

keywords

represent them as a sorted list - in GPX they are comma separated.

Content is whatever you want.

Because the GPX format does not have attributes for everything used by all backends, we encode some of the backend arguments in keywords.

Example for mapmytracks: keywords = ‘Status:public, Category:Cycling’.

However this is transparent for you. When parsing theGPX file, those are removed from keywords, and the are re-added in when exporting in to_xml(). So Track.keywords will never show those special values.

Some backends may change keywords. MMT converts the first character into upper case and will return it like that. Gpxity will not try to hide such problems. So if you save a track in MMT, its keywords will change. But they will not change if you copy from MMT to Directory - so if you copy from DirectoryA to MMT to DirectoryB, the keywords in DirectoryA and DirectoryB will not be identical, for example “berlin” in DirectoryA but “Berlin” in DirectoryB.

Type:list(str)
last_point()[source]

Return the last point of the track. None if none.

last_time

The last time we received.

Returns:The last time we received so far. If none, return None.
merge(other, remove: bool = False, dry_run: bool = False, copy: bool = False, partial_tracks: bool = False) → list[source]

Merge other track into this one.

Either the track points must be identical or the other track may only contain waypoints.

If merging is not possible, raise Track.CannotMerge.

If either is public, the result is public. If self.title seems like a default and other.title does not, use other.title Combine description and keywords. Merge waypoints as defined by _merge_waypoints().

Parameters:
  • other (Track) – The track to be merged
  • remove – After merging succeeded, remove other
  • dry_run – if True, do not really apply the merge
  • copy – This argument is ignored. It is only here to give Track.merge() and Backend.merge() the same interface.
  • partial_tracks – merges other track if either track is part of the other one
Returns: list(str)
Messages about what has been done.
moving_speed() → float[source]

Speed for time in motion in km/h.

Returns:The moving speed
static overlapping_times(tracks)[source]

Find tracks with overlapping times.

Yields:groups of tracks with overlapping times. Sorted by time.

This may be very slow for many long tracks.

parse(indata)[source]

Parse GPX.

title, description and category from indata have precedence over the current values. public will be or-ed keywords will stay unchanged if indata has none, otherwise be replaced from indata

Parameters:indata – may be a file descriptor or str
point_list()[source]

A flat list with all points.

Returns:The list
points()[source]

A generator over all points.

Yields:GPXTrackPoint – all points in all tracks and segments
points_equal(other, digits=4) → bool[source]

Compare points for same position.

Parameters:digits – Number of after comma digits to compare
Returns:True if both tracks have identical points.

All points of all tracks and segments are combined. Elevations are ignored.

points_hash() → float[source]

A hash that is hopefully different for every possible track.

It is built using the combination of all points.

Returns:The hash
public

Is this a private track (can only be seen by the account holder) or is it public?.

Default value is False
Returns:True if track is public, False if it is private
Type:bool
remove()[source]

Remove this track in the associated backend.

If the track is not coupled with a backend, raise an Exception.

rewrite() → None[source]

Call this after you directly manipulated gpx.

segments()[source]

A generator over all segments.

Yields:GPXTrackSegment – all segments in all tracks
similarity(others)[source]

Return a float 0..1: 1 is identity.

The highest value for others is returned.

speed() → float[source]

Speed over the entire time in km/h or 0.0.

Returns:The speed
split()[source]

Create separate tracks for every track/segment.

time

start time of track.

For a simpler implementation of backends, notably MMT, we ignore gpx.time. Instead we return the time of the earliest track point. Only if there is no track point, return gpx.time. If that is unknown too, return None.

For the same reason time is readonly.

We assume that the first point comes first in time and the last point comes last in time. In other words, points should be ordered by their time.

Type:datetime.datetime
time_offset(other)[source]

If time and last_time have the same offset between both tracks, return that time difference. Otherwise return None.

title

The title.

Returns:the title
Type:str
to_xml() → str[source]

Produce exactly one line per trackpoint for easier editing (like removal of unwanted points).

Returns:The xml string.
warnings()[source]

Return a list of strings with easy to find problems.

class gpxity.track.Fences(config_str: str)[source]

Bases: object

Defines circles.

Parameters:config_str – The string from auth.cfg
center

The center

Type:GPXTrackPoint
radius

The radius in meters

Type:meter
outside(point) → bool[source]

Determine if point is outside of all fences.

Returns: True or False.

Authenticate

This module defines Authenticate.

class gpxity.auth.Authenticate(backend, url, username: str = None)[source]

Bases: object

Get password and / or Url from auth.cfg.

If nothing is useable, sets them to None.

auth.cfg is expected in ~/.config/Gpxity/auth.cfg

Danger

auth.cfg is not encrypted. Better not use this unless you know what you are doing!

Parameters:
  • backend (Backend) – The backend
  • username (str) – For the wanted account in the backend. You can also pass dict(). In that case, the config file is not read at all, only this dict() will be used.
path

The name for the auth file. Class variable, to be changed before Authenticate() is instantiated.

Type:str
auth

(username, password). Both are either str or None.

Type:tuple(str,str)
url

If given, overrides the url given to the backend

For every specific account in a backend, auth.cfg has a section. Its name is case sensitive: The ClassName must match exactly.

  • [ClassName.username]
A section can define
  • Username overrides username (the wanted account in the backend, see above)
  • Password
  • Url
  • Mysql, used by WPTrackserver

An example for user gpxitytest on gpsies.com:

[GPSIES:gpxitytest]
Password = the_unencrypted_password

A mail account:

[Mailer:gpxitytest]
Url = tester@test.test
path = '~/.config/Gpxity/auth.cfg'

Backend

This module defines Backend.

class gpxity.backend.Backend(url: str = None, auth=None, cleanup: bool = False, timeout=None)[source]

Bases: object

A place where tracks live. Something like the filesystem or http://mapmytracks.com.

A Backend should hold only tracks for one person, and they should not overlap in time. This is not enforced but sometimes behaviour is undefined if you ignore this.

A Backend be used as a context manager. Upon termination, all tracks may be removed automatically by setting cleanup=True. Some concrete implementations may also remove the backend itself.

A Backend allows indexing by normal int index, by Track and by Track.id_in_backend. if 'ident' in backend is possible. len(backend) shows the number of tracks. Please note that Code like if backend: may not behave as expected. This will be False if the backend has no track. If that is not what you want, consider if backend is not None

The backend will automatically synchronize. So something like len(Backend()) will work. However, some other Backend pointing to the same storage or even a different process might change things. If you want to cope with that, use scan().

Not all backends support all methods. The unsupported methods will raise NotImplementedError. As a convenience every backend has a list supported to be used like if 'track' in backend.supported: where track is the name of the method.

Backends support no locking. If others modify a backend concurrently, you may get surprises. It is up to you to handle those.

Some backends may use cookies.

Parameters:
  • url (str) – Initial value for url
  • auth (str) – The username. This will lookup the password and config from Authenticate. You can also pass a dict containing what would normally be obtained from Authenticate. The dict must also contain ‘Username’.
  • cleanup (bool) – If true, destroy() will remove all tracks.
supported

The names of supported methods. Creating the first instance of the backend initializes this. Only methods which may not be supported are mentioned here. If a particular value write_* like write_public does not exist, the entire track is written instead which normally results in a new ident for the track.

Type:set(str)
full_support

All possible values for the supported attribute.

Type:set(str)
url

the address. May be a real URL or a directory, depending on the backend implementation. Every implementation may define its own default for url. Must never end with ‘/’ except for Directory(url=’/’).

Type:str
timeout

If None, there are no timeouts: Gpxity waits forever. For legal values see http://docs.python-requests.org/en/master/user/advanced/#timeouts

fences

The fences as found in config. You can programmatically change them but they will never be applied to already existing data.

needs_config

If True, the Backend class expects data in auth.cfg

config

A Section with all entries in auth.cfg for this backend

config.fences

The backend will never write points within fences. You can define any number of fences separated by spaces. Every fence is a circle. It has the form Lat/Long/meter. Lat and Long are the center position in decimal degrees, meter is the radius.

test_is_expensive

For internal use. If True, the self tests will reduce test cases and try to avoid too much usage of the backend.

max_field_sizes

Some backends have a limited size for some attributes like keywords. This is only an approximative guess. The backend will not protect you from overriding it but the unittests will try to stay within those limits.

point_precision

The precision supported by this backend. We are never more precise than 6. That is the digits after the decimal separator.

supported_categories

The categories supported by this backend. The first one is used as default.

exception BackendException[source]

Bases: Exception

Is raised for general backend exceptions, especially error messages from a remote server

exception NoMatch[source]

Bases: Exception

Is raised if a track is expected to pass the match filter but does not

add(track)[source]

Add a track to this backend.

We do not check if it already exists in this backend. No track already existing in this backend will be overwritten, the id_in_backend of track will be deduplicated if needed. This is currently only needed for Directory. Note that some backends reject a track if it is very similar to an existing track even if it belongs to some other user.

If the track object is already in the list of tracks, raise ValueError.

If the track does not pass the current match function, raise an exception.

Parameters:track (Track) – The track we want to save in this backend.
Returns:The saved track. If the original track lives in a different backend, a new track living in this backend will be created and returned.
Return type:Track
classmethod all_backend_classes(exclude=None, needs=None)[source]

Find all backend classes.

Parameters:
  • exclude – A list with classes to be excluded
  • needs – set(str) with needed supported actions
Returns:

A sorted list of all backend classes. Disabled backends are not returned.

clone()[source]

return a clone.

classmethod decode_category(value: str) → str[source]

Translate the value from the backend into one out of Track.categories.

Returns:The decoded name
default_url = None
destroy()[source]

If cleanup was set at init time, removes all tracks.

Some backends (example: Directory)

may also remove the account (or directory). See also remove_all().

classmethod encode_category(value: str) → str[source]

Translate internal value (out of Track.categories) into the backend specific value.

Returns:The encoded name
classmethod find_class(name: str)[source]

Find the Backend class name “name”.

if “name” contains a “:”, only the part before will be used.

Parameters:name – May be anycase (upper,lower)
Returns:the backend class or None
flush()[source]

Some backends delay actual writing. This enforces writing.

Currently, only the Mailer backend can delay, it will bundle all mailed tracks into one mail instead of sending separate mails for every track. Needed for lifetracking.

full_support = ('scan', 'remove', 'write', 'write_title', 'write_public', 'own_categories', 'write_category', 'write_description', 'keywords', 'write_add_keywords', 'write_remove_keywords')
get_time() → datetime.datetime[source]

get time from the server where backend is located as a Linux timestamp.

A backend implementation does not have to support this.

Returns: datetime.datetime

classmethod instantiate(name, timeout=None)[source]

Instantiate a Backend or a Track out of its identifier.

Parameters:timeout – Needed for creating backends like MMT or GPSIES. See Backend.timeout
Returns:A Track or a Backend. If the Backend has already been instantiated, return the cached value.
classmethod is_disabled() → bool[source]

True if this backend is disabled by env variable GPXITY_DISABLE_BACKENDS.

This variable is a comma separated list of Backend class names.

Returns:True if disabled
match

Filter tracks.

A function with one argument returning None or str. The backend will call

this with every track and ignore tracks where match does not return None. The returned str should explain why the track does not match.

If you change a track such that it does not match anymore, the exception NoMatch will be raised and the match stays unchanged.

matches(track, exc_prefix: str = None)[source]

match track against the current match function.

Parameters:exc_prefix – If not None, use it for the beginning of an exception message. If None, never raise an exception
Returns:True for match
max_field_sizes = {}
merge(other, remove: bool = False, dry_run: bool = False, copy: bool = False, partial_tracks: bool = False) → list[source]

merge other backend or a single track into this one. Tracks within self are also merged.

If two tracks have identical points, or-ify their other attributes.

Parameters:
  • other – The backend or a single track to be merged
  • remove – If True, remove merged tracks
  • dry_run – If True, do not really merge or remove
  • copy – Do not try to find a matching track, just copy other into this Backend
  • partial_tracks – If True, two tracks are mergeable if one of them contains the other one.
Returns:

list(str) A list of messages for verbose output

needs_config = True
classmethod parse_objectname(name)[source]

Parse the full identifier for a track.

Parameters:name – the full identifier for a Track
Returns:A tuple with class, account, track_id
point_precision = 5
real_len() → int[source]

len(backend) without calling scan() first.

Returns:the length
remove(value) → None[source]

Remove track. This can also be done for tracks not passing the current match function.

Parameters:value – If it is not an Track, remove() looks it up by doing self[value]
remove_all()[source]

Remove all tracks we know about.

If their id_in_backend has meanwhile been changed through another backend instance or another process, we cannot find it anymore. We do not rescan all tracks in the backend. If you want to make sure it will be empty, call scan() first.

If you use a match function, only matching tracks will be removed.

scan(now: bool = False) → None[source]

Enforce a reload of the list of all tracks in the backend.

This will be delayed until the list is actually needed again.

If this finds an unsaved track not matching the current match function, an exception is thrown. Saved Tracks not matching the current match will no be loaded.

Parameters:now – If True, do not delay scanning.
supported = {}
supported_categories = ('Cycling', 'Cycling - Road', 'Cycling - Gravel', 'Cycling - MTB', 'Cycling - Indoor', 'Cycling - Hand', 'Cycling - Touring', 'Cycling - Foot', 'Running', 'Running - Trail', 'Running - Urban Trail', 'Sailing', 'Walking', 'Hiking', 'Hiking - Speed', 'Swimming', 'Driving', 'Off road driving', 'Motor racing', 'Motorcycling', 'Enduro', 'Skiing', 'Skiing - Touring', 'Skiing - Backcountry', 'Skiing - Nordic', 'Skiing - Alpine', 'Skiing - Roller', 'Canoeing', 'Kayaking', 'Sea kayaking', 'Stand up paddle boarding', 'Rowing', 'Windsurfing', 'Kiteboarding', 'Orienteering', 'Mountaineering', 'Skating', 'Skateboarding', 'Horse riding', 'Hang gliding', 'Gliding', 'Flying', 'Snowboarding', 'Paragliding', 'Hot air ballooning', 'Nordic walking', 'Snowshoeing', 'Jet skiing', 'Powerboating', 'Swimrun', 'Pedelec', 'Crossskating', 'Motorhome', 'Cabriolet', 'Coach', 'Pack animal trekking', 'Train', 'Wheelchair', 'Sightseeing', 'Geocaching', 'Longboard', 'River navigation', 'Skating - Inline', 'Miscellaneous')
test_is_expensive = True
url

get self.config[‘url’].

Returns: The url

Locate

This module defines Locate.

class gpxity.locate.Locate(places, tracks, provider='osm')[source]

Bases: object

Locates tracks using https://github.com/DenisCarriere/geocoder#overview .

Parameters:
  • places – A list of places that the tracks should pass
  • tracks – The tracks to be searched
  • provider – The data provider for geolocation
locations

The list of found places. For each given value in arg places, locations holds one result, even if the provider returns more than one.

distances

A list with a tuple for every track. The tuple holds the track and a list of distances between that track and places.

found(max_away: float = 10000000000.0)[source]

The list of tracks sorted by affinity to the given places.

Parameters:max_away – The maximum distance in kilometers

Returns: list(tracks)

Lifetrack

This module defines Lifetrack.

class gpxity.lifetrack.Lifetrack(sender_ip, target_backends, ids=None)[source]

Bases: object

Life tracking. The data will be forwarded to all given backends.

Parameters:
  • sender_ip – The IP of the client.
  • target_backends (list) – Those tracks will receive the lifetracking data.
  • ids (list(str)) – If given, use as id_in_backend. One for every backend. May be list(str) or str
done

Will be True after end() has been called.

ids

The ids of all backends joined by ‘—-‘.

Type:str
end()[source]

End lifetrack.

If the backend does not support lifetrack, this does nothing.

formatted_ids() → str[source]

One string holding all backend ids.

Returns: that string or None.

start(points, title=None, public=None, category=None)[source]

Start lifetracking.

Returns: The new id_in_backend

update(points)[source]

Start or update lifetrack.

If the backend does not support lifetrack, this just saves the track in the backend.

Parameters:points (list) – New points

Diff

This module defines BackendDiff.

class gpxity.diff.BackendDiff(left, right)[source]

Bases: object

Compares two backends.directory.

Parameters:
  • left (Backend) – A backend, a track or a list of either
  • right (Backend) – Same as for the left side
left

Attributes for the left side

Type:BackendDiffSide
right

Attributes for the right side

Type:BackendDiffSide
identical

Tracks appearing on both sides.

Type:list(Track)
similar

Pairs of Tracks are on both sides with differences. This includes all tracks having at least 100 identical positions without being identical.

Type:list(Pair)
diff_flags

T=time, D=description, C=category, S=status, K=keywords, P=positions, Z=time offset

class BackendDiffSide(tracks)[source]

Bases: object

Represents a side (left or right) in BackendDiff.

tracks

An Track, a list of tracks, a backend or a list of backends

exclusive

Acivities existing only on this side

Type:list
build_positions()[source]

Return a set of long/lat tuples.

static flatten(whatever)[source]

Flatten Backends or Tracks into a list of tracks.

class Pair(left, right)[source]

Bases: object

Holds two comparable Items and the diff result .. attribute:: differences

Keys are Flags for differences, see BackendDiff.diff_flags. Values is a list(str) with additional info

type:dict()
diff_flags = 'TDCSKPZ'