gpxpy:从 gpx 文件中获取扩展值

gpxpy: Get extension value from gpx file

我正在尝试从我的 gpx 文件中的航路点获取 ID。 ID 放在我的文件的扩展标签中。我正在使用 gpxpy 从文件中获取其他值,例如纬度和经度,但我没有找到获取 ID 的方法。

在这里你可以看到我的代码:

import gpxpy
node_id = []
gpx_file = open("test.gpx", mode='rt', encoding='utf-8')
gpx = gpxpy.parse(gpx_file)
for waypoint in gpx.waypoints:
    node_id.append(waypoint.extensions.id)

还有我的 test.gpx 文件的一部分:

<wpt lat="53.865650" lon="10.684415">
  <extensions>
    <ogr:id>17</ogr:id>
    <ogr:longitude>10.684415</ogr:longitude>
    <ogr:latitude>53.865650</ogr:latitude>
  </extensions>
</wpt>

有没有办法用 gpxpy 获取航路点的 ID?

waypoint.extensions 只是一个数组。所以你不能只通过名称获取项目。您必须遍历该数组。 extensions的"name"存储在Element的"tag"属性中,值在"text"属性中。因为我没有你的 xml-scheme 来测试扩展名 ogr:id,我尝试使用以下 gpx 文件:

<?xml version="1.0" encoding="UTF-8" ?>
<gpx xmlns="http://www.topografix.com/GPX/1/1" version="1.1" creator="OSMTracker for Android™ - https://github.com/labexp/osmtracker-android" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.topografix.com/GPX/1/1 http://www.topografix.com/GPX/1/1/gpx.xsd ">
    <wpt lat="10.31345465" lon="10.21237815">
        <extensions>
            <id>17</id>
        </extensions>
        <ele>110.0</ele>
        <time>2018-09-29T09:31:58Z</time>
        <name><![CDATA[train station]]></name>
        <sat>0</sat>
    </wpt>
</gpx>

我写了一个简短的函数来获取 id。它没有针对任何东西进行测试(例如扩展名不存在)。

import gpxpy

def getId(waypoint):
    for extension in waypoint.extensions:
        if extension.tag == 'id':
            return extension.text

node_id = []
gpx_file = open("test2.gpx", mode='rt', encoding='utf-8')
gpx = gpxpy.parse(gpx_file)
for waypoint in gpx.waypoints:
    print(getId(waypoint))

函数获取一个 GPX Waypoint 作为参数并循环遍历扩展数组。如果该数组包含带有标签(名称)的元素 "id" 它 returns 文本(值)。

此致 蒂莫