swift - 如何从 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)
在那里你可以检索开始和结束标签之间的内容,只需要在字符串中获取双重编码。请记住,如果中间的文本很长,则需要将字符串附加在一起,因为它可能会被多次调用。在你的情况下,只有海拔数字应该可以忽略它,但如果你想更多地使用它,请考虑到它。
可能还需要在其他函数中保存您当前正在解析的标签类型,这样您就不会解析不需要的数据。
推荐阅读
- graphql - 如何使用graphql Shopify从产品对象中按变体ID获取变体
- metadata - 为什么在 GCE 上运行容器会卡住元数据请求不成功被禁止 (403)
- javascript - 在 JavaScript 中动态创建 if 语句的最佳方法?
- java - 如何强制关闭设备?
- angular - 错误类型错误:无法读取未定义的属性“then”
- javascript - 如何在 MomentJS 中将日期转换为 UNIX 时间戳?
- angular - Angular protractor tests: fdescribe (or fit) make chrome unreachable
- algorithm - 渐近复杂度,算法
- python - 无法删除 pandas DataFrame 中的部分字符串
- ionic-framework - 为什么使用离子元素标签/组件与标准 html?