• Stars
    star
    1,015
  • Rank 45,318 (Top 0.9 %)
  • Language
    Python
  • License
    Apache License 2.0
  • Created about 14 years ago
  • Updated 4 months ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

gpx-py is a python GPX parser. GPX (GPS eXchange Format) is an XML based file format for GPS tracks.

Build Status Coverage Status

gpxpy -- GPX file parser

This is a simple Python library for parsing and manipulating GPX files. GPX is an XML based format for GPS tracks.

You can see it in action on my online GPS track editor and organizer.

There is also a Golang port of gpxpy: gpxgo.

See also srtm.py if your track lacks elevation data.

Usage

import gpxpy
import gpxpy.gpx

# Parsing an existing file:
# -------------------------

gpx_file = open('test_files/cerknicko-jezero.gpx', 'r')

gpx = gpxpy.parse(gpx_file)

for track in gpx.tracks:
    for segment in track.segments:
        for point in segment.points:
            print(f'Point at ({point.latitude},{point.longitude}) -> {point.elevation}')

for waypoint in gpx.waypoints:
    print(f'waypoint {waypoint.name} -> ({waypoint.latitude},{waypoint.longitude})')

for route in gpx.routes:
    print('Route:')
    for point in route.points:
        print(f'Point at ({point.latitude},{point.longitude}) -> {point.elevtion}')

# There are many more utility methods and functions:
# You can manipulate/add/remove tracks, segments, points, waypoints and routes and
# get the GPX XML file from the resulting object:

print('GPX:', gpx.to_xml())

# Creating a new file:
# --------------------

gpx = gpxpy.gpx.GPX()

# Create first track in our GPX:
gpx_track = gpxpy.gpx.GPXTrack()
gpx.tracks.append(gpx_track)

# Create first segment in our GPX track:
gpx_segment = gpxpy.gpx.GPXTrackSegment()
gpx_track.segments.append(gpx_segment)

# Create points:
gpx_segment.points.append(gpxpy.gpx.GPXTrackPoint(2.1234, 5.1234, elevation=1234))
gpx_segment.points.append(gpxpy.gpx.GPXTrackPoint(2.1235, 5.1235, elevation=1235))
gpx_segment.points.append(gpxpy.gpx.GPXTrackPoint(2.1236, 5.1236, elevation=1236))

# You can add routes and waypoints, too...

print('Created GPX:', gpx.to_xml())

GPX version

gpx.py can parse and generate GPX 1.0 and 1.1 files. The generated file will always be a valid XML document, but it may not be (strictly speaking) a valid GPX document. For example, if you set gpx.email to "my.email AT mail.com" the generated GPX tag won't confirm to the regex pattern. And the file won't be valid. Most applications will ignore such errors, but... Be aware of this!

Be aware that the gpxpy object model is not 100% equivalent with the underlying GPX XML file schema. That's because the library object model works with both GPX 1.0 and 1.1.

For example, GPX 1.0 specified a speed attribute for every track point, but that was removed in GPX 1.1. If you parse GPX 1.0 and serialize back with gpx.to_xml() everything will work fine. But if you have a GPX 1.1 object, changes in the speed attribute will be lost after gpx.to_xml(). If you want to force using 1.0, you can gpx.to_xml(version="1.0"). Another possibility is to use extensions to save the speed in GPX 1.1.

GPX extensions

gpx.py preserves GPX extensions. They are stored as ElementTree DOM objects. Extensions are part of GPX 1.1, and will be ignored when serializing a GPX object in a GPX 1.0 file.

XML parsing

If lxml is available, then it will be used for XML parsing, otherwise minidom is used. Lxml is 2-3 times faster so, if you can choose -- use it.

The GPX version is automatically determined when parsing by reading the version attribute in the gpx node. If this attribute is not present then the version is assumed to be 1.0. A specific version can be forced by setting the version parameter in the parse function. Possible values for the 'version' parameter are 1.0, 1.1 and None.

GPX max speed

Gpxpy is a GPX parser and by using it you have access to all the data from the original GPX file. The additional methods to calculate stats have some additional heuristics to remove common GPS errors. For example, to calculate max_speed it removes the top 5% of speeds and points with nonstandard distance (those are usually GPS errors).

"Raw" max speed can be calculated with:

moving_data = gpx.get_moving_data(raw=True)

Pull requests

Branches:

  • master contains the code of the latest release
  • dev branch is where code for the next release should go.

Send your pull request against dev, not master!

Before sending a pull request -- check that all tests are OK. Run all the static typing checks and unit tests with:

$ make mypy-and-tests

Run a single test with:

$ python3 -m unittest test.GPXTests.test_haversine_and_nonhaversine

Gpxpy runs only with python 3.6+. The code must have type hints and must pass all the mypy checks.

GPX tools

Additional command-line tools for GPX files can be downloaded here https://github.com/tkrajina/gpx-cmd-tools or installed with:

pip install gpx-cmd-tools

License

GPX.py is licensed under the Apache License, Version 2.0

More Repositories

1

typescriptify-golang-structs

A Golang struct to TypeScript class/interface converter
Go
508
star
2

srtm.py

Geo elevation data parser for "The Shuttle Radar Topography Mission" data
Python
245
star
3

git-plus

Git utilities
Python
196
star
4

10000sentences

10,000 sentences: an Android app to help you learn new words in foreign languages
Java
162
star
5

go-reflector

Go reflection simplified
Go
99
star
6

gpxgo

GPX library for golang
Go
93
star
7

uvod-u-git

Git introduction: A book about git (in Croatian). Uvod u git: Sve što ste ikad htjeli znati o gitu, a niste se usudili pitati.
TeX
86
star
8

leaflet-editable-polyline

editable polylines plugin for leaflet
JavaScript
76
star
9

ftmpl

Fast typesafe templating for golang
Go
62
star
10

gpx-cmd-tools

Commandline tools for GPX
Python
49
star
11

golongfuncs

Find long/complex Golang functions in your code
Go
29
star
12

android-hls-playground

Introduction to HTTP Live Streaming: Example code
Java
21
star
13

cartesius

Simple python library for drawing coordinate system images and graphs
Python
21
star
14

go-elevations

SRTM parser for golang
Go
20
star
15

multi-git

git plugin that enables you to execute a single git command on multiple repositories
Python
13
star
16

gpxchart

A command-line tool and library for elevation charts from GPX files.
Go
12
star
17

geoelevations

SRTM (world elevations) and EGM (world undulations) parser library for Ruby
Ruby
10
star
18

echo-http-requests

GoogleAppEngine app that can be used to test http requests expected on a predefined url when you don't have a publicly available IP address. It is available on http://echo-http-requests.appspot.com
Python
7
star
19

Trackprofiler

TrackProfiler is a small free utility for exporting GPS track profiles into PNG images.
Java
4
star
20

Save-layers-as-images-in-GIMP

GIMP plugin to save layers as images in GIMP
Python
4
star
21

TinyLayerAroundGit

Just an experiment -- simple git plugin for eclipse
Java
4
star
22

slo-dictionary-importer

Go
3
star
23

gaeutils

Utility for GoogleAppEngine
Python
3
star
24

yactest

(Yet another) Minimalistic C unit testing "microframework".
C
3
star
25

cmd-tools

My personal utility command line tools
Python
2
star
26

tkrajina.github.com

My home
HTML
2
star
27

Salabahteri

Matematičke formule
TeX
2
star
28

TileStitcher

OSM tile stitcher
Python
2
star
29

anki-tts

Add TTS (text-to-speech) audio attachment to your Anki decks
Go
2
star
30

simple-py-nn

Hopfield neural network in python. This is a plain rewrite of the algorithm in Mark Thompson book JavaAI (http://www.markwatson.com/opencontent/). Just for testing purposes.
Python
2
star
31

panoye-f

Panoye PHP framework
PHP
1
star
32

GraphAnything

Java
1
star
33

yapd

Yet Another (Simple) PHP Debugger - YAPD
PHP
1
star
34

potres-app-mobile

TypeScript
1
star
35

pdf-tools

A few small helpers for pdf documents
Go
1
star
36

PhoneGapPlayground_Assets

Playing with PhoneGap
JavaScript
1
star
37

java-gps-calorie-calculator

Java calorie calculator for GPS data
Java
1
star
38

haskell-playground

Playing with haskell
Haskell
1
star
39

slo-dictionary-app

Slovene Thesaurus and Collocations dictionary app
TypeScript
1
star
40

jutils.js

Utility javascript library
JavaScript
1
star
41

PhoneGapPlayground_Android

Playin with PhoneGap
JavaScript
1
star
42

dotfiles

Vim Script
1
star
43

sgf2img

HTML
1
star
44

run_or_raise

Find and raise an XWindows program, run it otherwise.
C
1
star
45

version-control-graphs-in-latex

Code version control graphs in LaTeX graphics
Python
1
star
46

sgf-ts

SGF parser and goban library for typescript
TypeScript
1
star