gpt4 book ai didi

ios - Mapbox iOS SDK 创建曲线 MGLPolyline 和 MKGeodesicPolyline 弄的有些奇怪

转载 作者:行者123 更新时间:2023-11-28 06:08:36 36 4
gpt4 key购买 nike

我尝试使用以下代码使用适用于 iOS 的 Mapbox SDK 在 map View 上创建曲线 MGLPolyline,

func lineBetweenLocation(location1: CLLocation, location2: CLLocation)
{
var points: [CLLocationCoordinate2D]
points = [location1.coordinate, location2.coordinate]
let geodesic = MKGeodesicPolyline(coordinates: &points, count:2)
let line = MGLPolyline(coordinates: geodesic.coordinates, count: UInt(geodesic.coordinates.count))

DispatchQueue.main.async(execute: {
// Unowned reference to self to prevent retain cycle
[unowned self] in

self.mapboxView!.add(line)
})


}

利用 MKGeodesicPolyline,上面的代码仅适用于短距离!
如果给定的位置远离美国到亚洲,它会在曲线上方创建一条不需要的地平线奇怪线。

There is no issue on Apple Map!

请任何人帮助。谢谢

enter image description here

enter image description here

注意:iOS 11.1 Xcode 9.1 Swift 4,Mapbox-iOS-SDK 版本 3.7.0

最佳答案

这是因为该线穿过国际日期变更线,所以它一直环绕。

为避免这种情况,您可以在经度上加上或减去 360 度来修复它。 https://github.com/mapbox/mapbox.js/issues/360

例如:

import Mapbox
import MapKit

public extension MGLPolyline {
class func geodesicPolyline(fromCoordinate: CLLocationCoordinate2D, toCoordinate: CLLocationCoordinate2D) -> MGLPolyline {
var coordinates = [fromCoordinate, toCoordinate]
let geodesicPolyline = MKGeodesicPolyline(coordinates: &coordinates, count: 2)

var normalizedCoordinates: [CLLocationCoordinate2D] = []
var previousCoordinate: CLLocationCoordinate2D?
for coordinate in geodesicPolyline.coordinates {
var normalizedCoordinate = coordinate
if let previousCoordinate = previousCoordinate, abs(previousCoordinate.longitude - coordinate.longitude) > 180 {
if (previousCoordinate.longitude > coordinate.longitude) {
normalizedCoordinate.longitude += 360
} else {
normalizedCoordinate.longitude -= 360
}
}
normalizedCoordinates.append(normalizedCoordinate)
previousCoordinate = normalizedCoordinate
}

return MGLPolyline(coordinates: normalizedCoordinates, count: UInt(geodesicPolyline.pointCount))
}
}

public extension MKPolyline {
var coordinates: [CLLocationCoordinate2D] {
var coords = [CLLocationCoordinate2D](repeating: kCLLocationCoordinate2DInvalid, count: self.pointCount)
self.getCoordinates(&coords, range: NSRange(location: 0, length: self.pointCount))
return coords
}
}

关于ios - Mapbox iOS SDK 创建曲线 MGLPolyline 和 MKGeodesicPolyline 弄的有些奇怪,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47432375/

36 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com