web-dev-qa-db-ja.com

MKPolylineからの緯度と経度のポイント

IOSアプリのMKMapViewに描画されたMKPolylineからすべての緯度と経度のポイントを取得する方法を見つけようとしています。

MKPolylineが緯度と経度のポイントを格納しないことは知っていますが、MKPolylineがマップ上で接触する緯度と経度の配列を作成する方法を探しています。

誰かがこれに関して特定の可能な解決策を持っていますか?

ありがとうございました

編集:最初の応答を見た後(ありがとう)私は私のコードが何をしているのかをよりよく説明する必要があると思います:

  1. 最初に、MKDirectionsオブジェクトで "calculateDirectionsWithCompletionHandler"を呼び出します
  2. MKRoute "polyline"プロパティを持つオブジェクトが返されます。
  3. 次に、マップビューで "addOverlay"を呼び出しますMKRouteからポリラインを渡しますオブジェクト

それで全部です。

だから、私はすでに私のために構築されたポリラインを持っています。だから私はどういうわけかポリラインで見つかったすべてのポイントを取得し、それらを緯度と経度にマッピングしたいと思います...

30
zumzum

MKRouteからポリラインの座標を取得するには、getCoordinates:range:メソッドを使用します。
そのメソッドは、MKMultiPointが継承するMKPolylineクラスにあります。

これは、これがどのポリラインでも機能することも意味します-それがあなたによって作成されたか、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);

ルートに応じて、数百または数千の座標に備えてください。

51
user467105

Swift 3バージョン:

これは非常に古い質問であることは承知していますが、この問題を検索したときにGoogleでトップヒットの1つであり、適切なSwiftソリューションがないため、私の小さな拡張機能をMKPolylineにcoordinatesプロパティを追加して、作業を少し楽にします。

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

15
Shai Mishali