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

xml.etree.ElementTree 更简洁、更语义化。
先通过 pip 安装:
pip install gpxpy
然后加载文件或字符串:
import gpxpywith open('route.gpx', 'r') as f: gpx = gpxpy.parse(f)
如果从字符串解析,直接传入字符串内容即可:gpxpy.parse(gpx_string)。
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 '无名'}")
轨迹()可能含多个段(),每段含多个点()。需嵌套遍历:
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_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} 米")
这些方法会自动按轨迹/航路点顺序计算,无需手动差分。