跳转到主要内容

GPX文件解析和GPS轨迹操作库

项目描述

Build Status Coverage Status

gpxpy -- GPX文件解析器

这是一个用于解析和操作GPX文件的简单Python库。GPX是基于XML的GPS轨迹格式。

您可以在我的在线GPS轨迹编辑器和组织器中看到它的实际应用:http://www.trackprofiler.com

还有一个gpxpy的Golang版本:gpxgo

如果您的轨迹缺少高程数据,还可以参考srtm.py

用法

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版本

gpx.py可以解析和生成GPX 1.0和1.1文件。生成的文件始终是有效的XML文档,但它可能不是(严格意义上)有效的GPX文档。例如,如果您将gpx.email设置为"my.email AT mail.com",生成的GPX标签将不会符合正则表达式模式。并且文件将无效。大多数应用程序将忽略此类错误,但...请注意这一点!

请注意,gpxpy对象模型与底层GPX XML文件模式 不是100%等效的。这是因为库对象模型同时适用于GPX 1.0和1.1。

例如,GPX 1.0为每个轨迹点指定了speed属性,但在GPX 1.1中被删除。如果您解析GPX 1.0并使用gpx.to_xml()序列化,一切都会正常工作。但是,如果您有一个GPX 1.1对象,在gpx.to_xml()之后speed属性的变化将丢失。如果您想强制使用1.0,可以使用gpx.to_xml(version="1.0")。另一种可能性是使用extensions在GPX 1.1中保存速度。

GPX扩展

gpx.py保留GPX扩展。它们以ElementTree DOM对象的形式存储。扩展是GPX 1.1的一部分,在将GPX对象序列化为GPX 1.0文件时会忽略。

XML解析

如果安装了 lxml,则使用 lxml 进行 XML 解析,否则使用 minidom。lxml 解析速度比 minidom 快 2-3 倍,因此如果可以选择,请使用它。

在解析时,会自动确定 GPX 版本,通过读取 gpx 节点中的版本属性。如果该属性不存在,则假定版本为 1.0。可以通过在解析函数中设置 version 参数来强制指定特定版本。'version' 参数的可能值为 1.01.1None

GPX 最大速度

Gpxpy 是一个 GPX 解析器,使用它您可以访问原始 GPX 文件中的所有数据。用于计算统计数据的一些附加方法具有额外的启发式算法来消除常见的 GPS 错误。例如,为了计算 max_speed,它会移除速度最高的 5% 和距离不标准的点(这些通常是 GPS 错误)。

"原始"最大速度可以通过以下方式计算

moving_data = gpx.get_moving_data(raw=True)

拉取请求

分支

  • master 包含最新版本的代码
  • dev 分支是下一个版本代码应该存放的地方。

请将您的拉取请求发送到 dev,而不是 master

在发送拉取请求之前 -- 检查所有测试是否通过。使用以下命令运行所有静态类型检查和单元测试

$ make mypy-and-tests

使用以下命令运行单个测试

$ python3 -m unittest test.GPXTests.test_haversine_and_nonhaversine

Gpxpy 仅在 python 3.6+ 上运行。代码必须具有类型提示,并且必须通过所有 mypy 检查。

GPX 工具

可以在此处下载 GPX 文件的附加命令行工具:[https://github.com/tkrajina/gpx-cmd-tools](https://github.com/tkrajina/gpx-cmd-tools) 或使用以下命令安装

pip install gpx-cmd-tools

许可证

GPX.py 根据 Apache 许可证,版本 2.0 许可。

项目详情


下载文件

下载适合您平台的文件。如果您不确定选择哪个,请了解更多关于 安装包 的信息。

源分布

gpxpy-1.6.2.tar.gz (111.7 kB 查看哈希值)

上传时间

构建分布

gpxpy-1.6.2-py3-none-any.whl (42.6 kB 查看哈希值)

上传时间 Python 3

支持者

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误日志 StatusPage StatusPage 状态页面