MapKitはマップルートを描画します



Mapkit Draws Map Route



https://www.ioscreator.com/tutorials/draw-route-mapkit-tutorial

このチュートリアルでは、ニューヨークの2つの有名な場所の間にルートが描かれました。ポリラインを使用して、地図の上にオーバーレイビューとしてルートを描画します。このチュートリアルはXcode7.2で作成され、iOS9.2用に構築されています。 Xcodeを開き、新しいシングルビューアプリケーションを作成します。製品名については、IOS9DrawRouteMapKitTutorialを使用してから、組織名と組織IDに通常の値を入力してください。言語としてSwiftを入力し、「デバイス」でiPhoneのみが選択されていることを確認します。
画像



プロジェクトナビゲータペインで、プロジェクト設定アイコンを選択します。 [機能]タブをクリックして、マップフレームワークを有効にします。
画像

Storyboardに移動し、View Controllerを選択し、Editorメニューに移動して、Embed in-> NavigationControllerを選択します。 View Controllerのナビゲーションバーをダブルクリックし、「RouteTutorial」と入力します。次に、マップキットビューをオブジェクトライブラリからメインビューにドラッグします。サイズ変更ハンドラーを使用して、フルスクリーンで表示します。ストーリーボードは次のようになります
画像
アシスタントエディターを開き、ViewController.swiftファイルが表示されていることを確認します。 Ctrlキーを押しながら、マップキットビューからViewControllerクラスにドラッグして、次のアウトレットを作成します。
画像
Map Kit Viewを選択し、Interface Builderの右下隅にあるピンアイコン(左から3番目のボタン)を選択します。すべてのピン方向を選択し、「マージンに拘束」の選択を解除します。 [4つの制約を追加]ボタンをクリックします。これにより、マップキットビューがメインビューの端にあるすべての方向に固定されます。



画像

Assistant Editorを選択し、ViewController.swiftファイルが表示されていることを確認します。マップキットビューを選択します。 Ctrlキーを押しながら、マップキットビューからViewControllerクラスにドラッグして、開く次のOutleを作成します。

ViewController.swiftファイル、MapKitヘッダーファイルを追加



import MapKit

ViewControllerは、パスを描画するためにMKMapViewDelegateプロトコルを実装する必要があります。クラス宣言行を次のように変更します

class ViewController: UIViewController, MKMapViewDelegate {

次に、viewDidLoadを次のように変更します

override func viewDidLoad() { super.viewDidLoad() // 1. mapView.delegate = self // 2. let sourceLocation = CLLocationCoordinate2D(latitude: 40.759011, longitude: -73.984472) let destinationLocation = CLLocationCoordinate2D(latitude: 40.748441, longitude: -73.985564) // 3. let sourcePlacemark = MKPlacemark(coordinate: sourceLocation, addressDictionary: nil) let destinationPlacemark = MKPlacemark(coordinate: destinationLocation, addressDictionary: nil) // 4. let sourceMapItem = MKMapItem(placemark: sourcePlacemark) let destinationMapItem = MKMapItem(placemark: destinationPlacemark) // 5. let sourceAnnotation = MKPointAnnotation() sourceAnnotation.title = 'Times Square' if let location = sourcePlacemark.location { sourceAnnotation.coordinate = location.coordinate } let destinationAnnotation = MKPointAnnotation() destinationAnnotation.title = 'Empire State Building' if let location = destinationPlacemark.location { destinationAnnotation.coordinate = location.coordinate } // 6. self.mapView.showAnnotations([sourceAnnotation,destinationAnnotation], animated: true ) // 7. let directionRequest = MKDirectionsRequest() directionRequest.source = sourceMapItem directionRequest.destination = destinationMapItem directionRequest.transportType = .Automobile // Calculate the direction let directions = MKDirections(request: directionRequest) // 8. directions.calculateDirectionsWithCompletionHandler { (response, error) -> Void in guard let response = response else { if let error = error { print('Error: (error)') } return } let route = response.routes[0] self.mapView.addOverlay((route.polyline), level: MKOverlayLevel.AboveRoads) let rect = route.polyline.boundingMapRect self.mapView.setRegion(MKCoordinateRegionForMapRect(rect), animated: true) } }

ViewControllerは、MKMapViewDelegateプロトコルのデリゲートです。
場所の緯度と経度を設定します
場所の座標を含む目印オブジェクトを作成します
MKMapitemsはルーティングに使用されます。このクラスは、マップ上の特定のポイントに関する情報をカプセル化します
目印の名前を示す注釈が追加されます
注釈が地図に表示されます
MKDirectionsRequestクラスは、ルートを計算するために使用されます。
ルートは、地図の上部にオーバーレイビューとしてポリラインを使用して描画されます。リージョンは、両方の場所が表示されるように設定されています

  1. ViewControllerにMKMapViewDelegateプロトコル委任を実装する
  2. 場所の緯度と経度を設定します
  3. 位置座標を含むランドマークオブジェクトを作成します
  4. MKMapitemsは、ルートの描画に使用されます。このクラスは、マップ上の特定のポイントに関する情報をカプセル化します
  5. 目印の名前を表示するメモを追加します
  6. 注釈が地図に表示されます
  7. MKDirectionsRequestクラスは、ルートの計算に使用されます。
  8. ルートは、地図の上部にオーバーレイビューとしてポリラインを使用して描画されます。地域の設定は両方の場所に表示されます

次に、mapView(rendererForrOverlay :)プロキシメソッドを実装します

func mapView(mapView: MKMapView, rendererForOverlay overlay: MKOverlay) -> MKOverlayRenderer { let renderer = MKPolylineRenderer(overlay: overlay) renderer.strokeColor = UIColor.redColor() renderer.lineWidth = 4.0 return renderer }

このメソッドは、マップ上にルートを描画するために使用されるレンダラーオブジェクトを返します。線幅が4の赤を使用します。
プロジェクトをビルドして実行すると、デバイスはそれらの間の描画パスを含む場所を表示します。
画像

プロジェクトが使用されています。この記事を見つけて、翻訳してください。