gpxpy: получить значение расширения из файла gpx - PullRequest
0 голосов
/ 07 декабря 2018

Я пытаюсь получить идентификатор из путевой точки в моем gpx-файле.Идентификатор помещен в тег расширения моего файла.Я использую gpxpy для получения других значений, таких как широта и долгота, из файла, но я не нашел способа получить идентификатор.

Здесь вы можете увидеть мой код:

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?

1 Ответ

0 голосов
/ 07 декабря 2018

waypoint.extensions - это просто массив.Таким образом, вы не можете просто получить предмет по имени.Вы должны перебрать этот массив.«Имя» расширений хранится в свойстве «тег» элемента, значение в свойстве «текст».Поскольку у меня нет вашей xml-схемы для тестирования с расширением 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>

Я написал короткую функцию для получения идентификатора.Он не проверяется ни с чем (например, расширения не существуют).

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 в качестве аргумента и перебирают массив расширений.Если этот массив содержит элемент с тегом (name) «id», он возвращает текст (значение).

С наилучшими пожеланиями, Thimo

...