如何从 GPX 文件中提取高程数据
Posted
技术标签:
【中文标题】如何从 GPX 文件中提取高程数据【英文标题】:How to Extract Elevation Data From GPX File 【发布时间】:2021-06-22 20:10:54 【问题描述】:在我们目前正在开发的应用程序中,用户可以导入 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)
如何提取高程数据并附加到数组或类似数据中?
【问题讨论】:
您必须继续解析轨迹点节点才能到达海拔节点。 @matt 这是问题所在,我似乎无法获得价值。我试过 if elementName == "ele" 但由于某种原因该值始终为空白!我确信这与它没有像“lat”和“lon”这样的键有关 可能有助于查看更复杂的解析器:github.com/mattneub/Programming-ios-Book-Examples/tree/master/… 特别注意github.com/mattneub/Programming-iOS-Book-Examples/blob/…——你必须实现foundCharacters
来获取标签之间的文本节点
【参考方案1】:
你需要实现Delegate的这个功能:
func parser(_ parser: XMLParser, foundCharacters string: String)
在那里您可以检索开始和结束标记之间的内容,并且只需要在字符串中获取双重编码。请记住,如果中间的文本很长,您需要将字符串附加在一起,因为它可能会被多次调用。在你的情况下,只有海拔数字应该可以忽略它,但如果你想更多地使用它,请考虑它。
可能还需要在其他函数中保存你当前正在解析的标签类型,这样你就不会解析你不需要的数据。
【讨论】:
谢谢杰鲁玛。这有点帮助,但我还是有点失落。如果我将 foundCharacterss 字符串打印到控制台,就会有很多看起来像空字符串的内容,中间有海拔数字。我认为通过对字符串进行字符计数来获取高程值相对容易,但即使是空字符串仍在打印,就好像字符存在一样。这有意义吗? 你可以使用 string.trimmingCharacters(in: CharacterSet.whitespacesAndNewlines) 所以你只得到字符串的字符内容,如果然后 string.isEmpty 你就忽略它。 但我认为更有帮助的是:在您已经用于解析属性的函数中(“func parser(_ parser: XMLParser, didStartElement elementName: String, name[. ..]”)添加“currentTag = elementName”并将“private currentTag:String =“””添加到类中。然后在带有foundCharacters的新函数中,当currentTag ==“ele”时,您只考虑字符串这样只有当您知道这些内容位于存储高程的 ele-tag 中时才会使用这些内容。 感谢 Jelumar,这帮助很大。我想我现在应该可以做到了。我无法再奖励 15 小时的赏金。 是的,一切都很好,得到的结果完全符合预期。谢谢 Jelumar ;-)以上是关于如何从 GPX 文件中提取高程数据的主要内容,如果未能解决你的问题,请参考以下文章