Python gpxpy:如何从gpx文件中提取心率数据

Python gpxpy:如何从gpx文件中提取心率数据,python,gpx,Python,Gpx,包括Garmin 1.1扩展的附加解析。然而,自从这次提交以来,代码似乎已经发生了很大的变化,而且扩展现在似乎是自动解析的 然而,我一直无法弄清楚如何使用从gpx文件中提取心率数据或其他扩展数据。有人用gpxpy做过这个吗?怎么做的 编辑以避免结束此问题: 如果您查看我上面链接的commit中添加的代码,它会修改TrackPoint类以添加“atemp”和“hr” 随后在parser.py中,您会看到添加了这个例程 def __parse_track_point_extension(self,

包括Garmin 1.1扩展的附加解析。然而,自从这次提交以来,代码似乎已经发生了很大的变化,而且扩展现在似乎是自动解析的

然而,我一直无法弄清楚如何使用从gpx文件中提取心率数据或其他扩展数据。有人用gpxpy做过这个吗?怎么做的


编辑以避免结束此问题:

如果您查看我上面链接的commit中添加的代码,它会修改TrackPoint类以添加“atemp”和“hr”

随后在parser.py中,您会看到添加了这个例程

def __parse_track_point_extension(self, node):
+        atemp_node = self.xml_parser.get_first_child(node, 'atemp')
+        atemp = mod_utils.to_number(self.xml_parser.get_node_data(atemp_node))
+
+        hr_node = self.xml_parser.get_first_child(node, 'hr')
+        hr = mod_utils.to_number(self.xml_parser.get_node_data(hr_node))

+        extensions = {"atemp":atemp, "hr":hr}
+        return extensions
然而,在当前代码中,该结构似乎与最初提交时非常不同,但它似乎允许以更通用的方式解析扩展。但我对python不够精通,无法理解如何让它解析这些标记。我的问题是试图理解我在新代码如何工作中遗漏了什么。我的直觉是在74号线附近加一条这样的线

mod_gpxfield.GPXField('heart_rate', 'hr', type=mod_gpxfield.FLOAT_TYPE),
不过,我希望有经验的人能够仔细查看代码,看看是否有我遗漏的东西,比如指定一个列表扩展=[hr,atemp],并在读取数据时对它们进行一般性解析。这似乎很奇怪,这是在过去作出的承诺,但现在的功能已经丢失,所以我认为我错过了一些东西

心率xml的这一部分在trkpt中如下所示:

虽然我不明白它是如何被解析的,但这是否意味着要做这样的事情:

hr=gpx.tracks[0].segments[0].points[0].extensions['hr']

你会返回数据吗?使用python调试器,我看不到这些被加载到gpx.tracks数据结构中。

如果DOM中的任何扩展非常复杂,那么子节点都不会被解析

这显然是该准则的一个长期问题:

编辑: 这里有一个实际的例子,但这取决于你的结构

心率=gpx。轨迹[0]。分段[0]。点数[0]。分机[0]['hr']

 <trkpt lat="1.6685718186199665069580078125" lon="-101.03414486162364482879638671875">
        <time>2018-02-10T19:24:06.000Z</time>
        <extensions>
          <ns3:TrackPointExtension>
            <ns3:hr>106</ns3:hr>
          </ns3:TrackPointExtension>
        </extensions>
      </trkpt>
            <trkpt lat="10.1" lon="-20.2">
                <ele>11.1</ele>
                <time>2013-01-01T12:00:04</time>
                <extensions>
                    <last>true</last>
                </extensions>
self.assertEquals('true',gpx.tracks[0].segments[0].points[0].extensions['last'])
hr=gpx.tracks[0].segments[0].points[0].extensions['hr']