2014-02-18 105 views
21

我想弄清楚從iOS應用程序上的MKMapView上繪製的MKPolyline中獲取所有經度和緯度點的方法。來自MKPolyline的經度和緯度點

我知道MKPolyline不存儲經度和緯度點,但我正在尋找一種方法來構建經緯度數組,並且MKPolyline會在地圖上觸摸。

有人有具體的可能的解決方案嗎?

謝謝

編輯: 看到第一個響應後(謝謝),我想我需要更好地解釋我的代碼是這樣做的:

  1. 首先我稱之爲「calculateDirectionsWithCompletionHandler」上一個MKDirections對象
  2. 我回來MKRoute對象有一個「多段線」屬性。
  3. 然後我呼籲折線經過距MKRoute對象

這是所有的MapView addOverlay」。

因此,我已經爲我建立了折線。所以我希望得到在多段線中找到的所有點,並將它們映射到經緯度和長度...

回答

42

要從MKRoute獲得多段線座標,請使用getCoordinates:range:方法。
該方法位於MKPolyline繼承的MKMultiPoint類中。

這也意味着這適用於任何多段線 - 無論它是由您還是由MKDirections創建。

您分配一個足夠大的C數組來保存所需的座標數並指定範圍(例如從0開始的所有點)。

例子:

//route is the MKRoute in this example 
//but the polyline can be any MKPolyline 

NSUInteger pointCount = route.polyline.pointCount; 

//allocate a C array to hold this many points/coordinates... 
CLLocationCoordinate2D *routeCoordinates 
    = malloc(pointCount * sizeof(CLLocationCoordinate2D)); 

//get the coordinates (all of them)... 
[route.polyline getCoordinates:routeCoordinates 
         range:NSMakeRange(0, pointCount)]; 

//this part just shows how to use the results... 
NSLog(@"route pointCount = %d", pointCount); 
for (int c=0; c < pointCount; c++) 
{ 
    NSLog(@"routeCoordinates[%d] = %f, %f", 
     c, routeCoordinates[c].latitude, routeCoordinates[c].longitude); 
} 

//free the memory used by the C array when done with it... 
free(routeCoordinates); 

根據不同的航線上,成百上千的座標進行製備。

+0

對上!謝謝!作品! – zumzum

8

斯威夫特3版本:

我知道這是一個很古老的問題,但它仍然在谷歌排名靠前尋找這個問題的時候,有沒有好的解決方案雨燕的一個,所以想分享我的微小的擴展,使生活更容易一點通過添加coordinates屬性MKPolyline:

https://gist.github.com/freak4pc/98c813d8adb8feb8aee3a11d2da1373f

+1

謝謝!也適用於Swift 4。 – rjcarr