如何用Python解析GPX格式的XML文件 gpxpy库

14次阅读

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

如何用Python解析GPX格式的XML文件 gpxpy库

gpxpy 解析 GPX 文件非常直接,它专为处理 GPX(GPS Exchange format)设计,能自动解析轨迹点(trackpoints)、航路点(waypoints)、路线(routes)等结构,比原生 xml.etree.ElementTree 更简洁、更语义化。

安装与基础读取

先通过 pip 安装:

pip install gpxpy

然后加载文件或字符串

import gpxpy
with open('route.gpx', 'r') as f:
  gpx = gpxpy.parse(f)

如果从字符串解析,直接传入字符串内容即可:gpxpy.parse(gpx_string)

提取航路点(Waypoints)

GPX 中的 标签对应 gpx.waypoints,每个点包含经纬度、海拔、时间、名称等属性:

  • wp.latitudewp.longitudewp.elevation
  • wp.timedatetime 对象(若 GPX 中有 time 字段)
  • wp.namewp.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.elevationpoint.time 若缺失则为 None,建议加判断。

写回 GPX 或导出为其他格式

修改后可序列化为标准 GPX 字符串:

gpx_xml = gpx.to_xml()
with open('output.gpx', 'w') as f:
  f.write(gpx_xml)

也支持导出为 Geojsoncsv(需自行转换)或生成简易统计(如总距离、爬升):

print(f"总距离: {gpx.length_2d():.1f} 米")
print(f"总爬升: {gpx.get_uphill_downhill()[0]:.1f} 米")

这些方法会自动按轨迹/航路点顺序计算,无需手动差分。

text=ZqhQzanResources