All Projects → tkrajina → Gpxpy

tkrajina / Gpxpy

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

Programming Languages

python
139335 projects - #7 most used programming language
python3
1442 projects

Labels

Projects that are alternatives of or similar to Gpxpy

Overland Ios
📌 GPS logger for iOS devices
Stars: ✭ 310 (-56.15%)
Mutual labels:  gps
Pynmea2
Python library for parsing the NMEA 0183 protocol (GPS)
Stars: ✭ 379 (-46.39%)
Mutual labels:  gps
Traccar Client Android
Traccar Client for Android
Stars: ✭ 464 (-34.37%)
Mutual labels:  gps
Open Location Code
Open Location Code is a library to generate short codes, called "plus codes", that can be used as digital addresses where street addresses don't exist.
Stars: ✭ 3,567 (+404.53%)
Mutual labels:  gps
Fmm
Fast map matching, an open source framework in C++
Stars: ✭ 359 (-49.22%)
Mutual labels:  gps
Gpxsee
GPS log file viewer and analyzer with support for GPX, TCX, KML, FIT, IGC, NMEA, SLF, SML, LOC, GPI, GeoJSON and OziExplorer files.
Stars: ✭ 406 (-42.57%)
Mutual labels:  gps
Beagle sdr gps
KiwiSDR: BeagleBone web-accessible shortwave receiver and software-defined GPS
Stars: ✭ 300 (-57.57%)
Mutual labels:  gps
Androbd
Android OBD diagnostics with any ELM327 adapter
Stars: ✭ 573 (-18.95%)
Mutual labels:  gps
Navit
The open source (GPL v2) turn-by-turn navigation software for many OS
Stars: ✭ 368 (-47.95%)
Mutual labels:  gps
Exifr
📷 The fastest and most versatile JS EXIF reading library.
Stars: ✭ 448 (-36.63%)
Mutual labels:  gps
Sim7000 Lte Shield
LTE CAT-M/NB-IoT Arduino-compatible shield with GNSS and temperature sensor. Library supports SIMCom 2G/3G/4G LTE/CAT-M/NB-IoT
Stars: ✭ 340 (-51.91%)
Mutual labels:  gps
Multi sensor fusion
Multi-Sensor Fusion (GNSS, IMU, Camera) 多源多传感器融合定位 GPS/INS组合导航 PPP/INS紧组合
Stars: ✭ 357 (-49.5%)
Mutual labels:  gps
Gnss Ins Sim
Open-source GNSS + inertial navigation, sensor fusion simulator. Motion trajectory generator, sensor models, and navigation
Stars: ✭ 422 (-40.31%)
Mutual labels:  gps
Ulogger Server
μlogger • web viewer for tracks uploaded with μlogger mobile client
Stars: ✭ 315 (-55.45%)
Mutual labels:  gps
Traccar Web
Traccar GPS Tracking System
Stars: ✭ 465 (-34.23%)
Mutual labels:  gps
Rxgps
Finding current location cannot be easier on Android !
Stars: ✭ 307 (-56.58%)
Mutual labels:  gps
Comma2k19
A driving dataset for the development and validation of fused pose estimators and mapping algorithms
Stars: ✭ 391 (-44.7%)
Mutual labels:  gps
Map Matching
The map matching functionality is now located in the main repository https://github.com/graphhopper/graphhopper#map-matching
Stars: ✭ 665 (-5.94%)
Mutual labels:  gps
Neogps
NMEA and ublox GPS parser for Arduino, configurable to use as few as 10 bytes of RAM
Stars: ✭ 507 (-28.29%)
Mutual labels:  gps
Exifr
EXIF Reader
Stars: ✭ 450 (-36.35%)
Mutual labels:  gps

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('Point at ({0},{1}) -> {2}'.format(point.latitude, point.longitude, point.elevation))

for waypoint in gpx.waypoints:
    print('waypoint {0} -> ({1},{2})'.format(waypoint.name, waypoint.latitude, waypoint.longitude))

for route in gpx.routes:
    print('Route:')
    for point in route.points:
        print('Point at ({0},{1}) -> {2}'.format(point.latitude, point.longitude, point.elevation))

# 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 acess 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

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].