MapKit Step折线在哪里?

时间:2015-02-21 08:00:08

标签: ios mapkit

我正在尝试打印所有路线步骤的坐标,类似于Google Maps SDK" leg"。

但它告诉我,我不能使用polyline属性来获取坐标?

enter image description here

2 个答案:

答案 0 :(得分:2)

试试这个:

for step in self.route!.steps as [MKRouteStep] {

否则它将step视为AnyObject(没有定义polyline属性,因此您得到编译器错误)。

<小时/> 顺便说一下,请注意polyline.coordinate只给出折线的平均中心或一个端点。折线可以有多个线段。

如果您需要沿折线获取 all 线段和坐标,请参阅latitude and longitude points from MKPolyline(Objective-C)。

这是Swift的一个可能的翻译(在this answer的帮助下):

for step in route!.steps as [MKRouteStep] {
    let pointCount = step.polyline.pointCount

    var cArray = UnsafeMutablePointer<CLLocationCoordinate2D>.alloc(pointCount)

    step.polyline.getCoordinates(cArray, range: NSMakeRange(0, pointCount))

    for var c=0; c < pointCount; c++ {
        let coord = cArray[c]
        println("step coordinate[\(c)] = \(coord.latitude),\(coord.longitude)")
    }

    cArray.dealloc(pointCount)
}

第一个链接的答案警告说,根据路线的不同,每步可能会有数百或数千个坐标。

答案 1 :(得分:0)

基于other answer的Swift 4.1(截至2018年7月)。

let pointCount = step.polyline.pointCount
let cArray = UnsafeMutablePointer<CLLocationCoordinate2D>.allocate(capacity: pointCount)
step.polyline.getCoordinates(cArray, range: NSMakeRange(0, pointCount))

for c in 0..<pointCount {
    let coord = cArray[c]
    print("step coordinate[\(c)] = \(coord.latitude),\(coord.longitude)")
}

cArray.deallocate()