如何从GPX文件中提取高程数据



在我们目前正在开发的应用程序中,用户可以导入GPX文件。我们解析GPX文件并提取坐标,以便在地图上显示路线。

然而,GPX文件也有高程数据(ele(,但我不知道如何提取每个高程值。

这里有几行显示坐标和高程值的短线,而不是发布整个GPX文件:

<trkseg>
<trkpt lat="51.47777000000001" lon="-0.9179800000000001">
<ele>35.85</ele>
</trkpt>
<trkpt lat="51.47795000000001" lon="-0.9184300000000001">
<ele>35.85</ele>
</trkpt>

要解析GPX文件,这是正在使用的代码:

func parser(_ parser: XMLParser, didStartElement elementName: String, namespaceURI: String?, qualifiedName qName: String?, attributes attributeDict: [String : String]) {

if elementName == "trkpt" || elementName == "wpt" || elementName == "rtept" {
let lat = Double(attributeDict["lat"]!)
let lon = Double(attributeDict["lon"]!)
let coordinateData = CLLocationCoordinate2D(latitude: lat!, longitude: lon!)
coordinates.append(coordinateData)
}
}

如何提取高程数据并附加到数组或类似对象?

您需要实现Delegate的以下功能:

func parser(_ parser: XMLParser, foundCharacters string: String)

在那里,您可以检索start和end标记之间的内容,只需要在字符串中获得双重编码即可。请记住,如果中间的文本很长,您需要将字符串附加在一起,因为它的某些部分可能会被调用多次。在您的情况下,只有高程数字,忽略它应该是可以的,但如果您想使用它来获得更多,请将其考虑在内。

可能还需要在其他函数中保存当前正在解析的标记类型,这样就不会解析不需要的数据。

最新更新