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 文本(值)。
此致
蒂莫
我正在尝试从我的 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 文本(值)。
此致 蒂莫