我正在使用 GEOSwift 库:https ://github.com/GEOSwift/GEOSwift
我最好的猜测是,如果您查看链接的字符串图像,它看起来好像不是一个正确的圆圈,所以也许它是库中的一个错误?但我对此完全不确定!
只有当我输入一个特定的线串时,我才会遇到问题。我的应用程序采用一组路线坐标,将它们转换为 WKT 字符串(代表一条线)。然后它围绕这条线创建一个缓冲区,然后将其转换为 mapShape。
它运行良好,直到我搜索一条特定的路线。
它在这里失败:
func bufferPolyline(routeCoords: [CLLocationCoordinate2D], completion: @escaping (_ bufferCoordsArray: [LatLng]) -> ()) {
var wktString = ""
var i = 0
while i < routeCoords.count {
let lat = routeCoords[i].latitude
let lng = routeCoords[i].longitude
if i == routeCoords.count-1 {
let wktLast = " \(lng) \(lat)"
wktString += "\(wktLast)"
i += 1
}
if i >= 1 && i <= routeCoords.count-2 {
let wktMid = " \(lng) \(lat),"
wktString += "\(wktMid)"
i += 1
}
if i == 0 {
let wktFirst = "\(lng) \(lat),"
wktString += "\(wktFirst)"
i += 1
}
}
let linestring = Geometry.create("LINESTRING(\(wktString))")!
let string = linestring.buffer(width: 0.05)!
guard let shapeLine = string.mapShape() as? MKPolygon else {
preconditionFailure() // FAILURE HAPPENS HERE.
}
}
以下是图片链接以查看其外观: LineString - https://imgur.com/a/7OLPZkM String - https://imgur.com/a/KJRfpRX
即使 shapeLine 没有初始化,线串和字符串值仍然存在,所以我很难看到我哪里出错了。它们似乎也以相同的方式格式化。
我试图用谷歌搜索 WKT 字符串验证器,但没有找到,但我认为应该没问题,因为我返回多个其他搜索没有问题。(即 shapeLine 返回一个值)
我的问题是:这看起来像是我的代码中的问题,还是库的可能错误?(我对我的代码没有信心!)