如何在 iOS 上从 Mapbox 解码“编码折线”
Posted
技术标签:
【中文标题】如何在 iOS 上从 Mapbox 解码“编码折线”【英文标题】:How do I decode an "encoded polyline" from Mapbox on iOS 【发布时间】:2021-11-16 10:13:57 【问题描述】:我有一条由 Mapbox javascript API (https://github.com/mapbox/polyline) 创建的编码折线,我想在 ios 应用上将此折线解码为坐标列表(甚至只是一个 MGLShape
)。
我尝试直接解码为 MGLShape
(注意:这是完全错误的,因为我将编码的折线和 GeoJSON 混淆了,而这正是 MGLShape(data:)
正在寻找的内容。)
if let shapeData = "_nwfFteckVd@rIvEhEaB~Ht@lIxD~EvE~DfB|HdCeHrBwHnGT|ExDbGzAjGAyCGjG[fGbA~@iICuIjG@lFqCrBpHj@lIaClHmGOiEbFVvIkCdHgEdFkGImGQoFbDgGgAmGl@iG_@F_CmCgHZuI`@wIy@oIk@oI|BkHEgEBmH".data(using: .utf8)
MGLPolyline
let shape = try? MGLShape(data: shapeData, encoding: String.Encoding.utf8.rawValue)
let shapeSource = MGLShapeSource(identifier: "polyLineSource", shape: shape, options: nil)
但是shape
出来nil
。
我没有看到任何使用 Mapbox API 轻松解码坐标中的折线的方法。
【问题讨论】:
【参考方案1】:事实证明,来自 Mapbox SDK 的编码折线实际上是通过 Google 算法编码的,幸运的是,您可以访问 Interactive Encoder Utility website 并查看编码的折线是否正确。
一旦我发现它是同一种编码折线(与 GeoJSON 无关),我发现这个 Swift polyline encoder/decoder library 非常适合我的需求。
// Using the swift polyline library, I can get the coordinates from the polyline and continue making my overlay normally
let coordinates = Polyline(encodedPolyline: encodedPolyline).coordinates
【讨论】:
以上是关于如何在 iOS 上从 Mapbox 解码“编码折线”的主要内容,如果未能解决你的问题,请参考以下文章
Mapbox iOS SDK 3.1 如何使注释标注具有粘性
如何在 Mapbox iOS 中的特定坐标上放置自定义注释的底部
如何在 iOS 9.3+ 上从网页打开 Safari 的设置