gpxpy解析GPX文件更简洁语义化,支持自动提取航路点、轨迹点及路线,可计算总距离与爬升并导出为GPX或GeojsON等格式。

用 gpxpy 解析 GPX 文件非常直接,它专为处理 GPX(GPS Exchange format)设计,能自动解析轨迹点(trackpoints)、航路点(waypoints)、路线(routes)等结构,比原生 xml.etree.ElementTree 更简洁、更语义化。
安装与基础读取
先通过 pip 安装:
pip install gpxpy
然后加载文件或字符串:
import gpxpywith open('route.gpx', 'r') as f: gpx = gpxpy.parse(f)
如果从字符串解析,直接传入字符串内容即可:gpxpy.parse(gpx_string)。
提取航路点(Waypoints)
GPX 中的 标签对应 gpx.waypoints,每个点包含经纬度、海拔、时间、名称等属性:
-
wp.latitude、wp.longitude、wp.elevation -
wp.time是datetime对象(若 GPX 中有 time 字段) -
wp.name和wp.comment可读取标注信息
示例:打印所有航路点坐标
for wp in gpx.waypoints: print(f"{wp.latitude:.6f}, {wp.longitude:.6f} — {wp.name or '无名'}")
遍历轨迹点(Trackpoints)
轨迹()可能含多个段(),每段含多个点()。需嵌套遍历:
for track in gpx.tracks: for segment in track.segments: for point in segment.points: print(point.latitude, point.longitude, point.time)
注意:point.elevation 和 point.time 若缺失则为 None,建议加判断。
写回 GPX 或导出为其他格式
修改后可序列化为标准 GPX 字符串:
gpx_xml = gpx.to_xml()with open('output.gpx', 'w') as f: f.write(gpx_xml)
也支持导出为 Geojson、csv(需自行转换)或生成简易统计(如总距离、爬升):
print(f"总距离: {gpx.length_2d():.1f} 米")print(f"总爬升: {gpx.get_uphill_downhill()[0]:.1f} 米")
这些方法会自动按轨迹/航路点顺序计算,无需手动差分。