89
86

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

SwiftとMapKitで経路検索アプリを作成する

Last updated at Posted at 2014-06-18

##はじめに
今回はSwiftを使ってMapKitを使ったアプリを作成します。
iOS7から追加された「MKDirections」を使って
2点間の経路を検索するアプリを作成してみましょう。

##ソースコード
今回作成したソースコードはgithubに置いています。
https://github.com/oggata/SwiftMapKitTest

##プロジェクトの作成
###Xcode6 Beta をダウンロードします.
iOSDevCenterからDLできます。
(iOS Developer Programへの登録(有償)が必要です)
https://developer.apple.com/devcenter/ios/index.action

###まずはSingleViewApplicationを選択します
スクリーンショット 2014-07-03 23.12.22.png

###ProductNameを入力します
スクリーンショット 2014-07-03 23.12.40.png

###BuildPurchase->Link Binary With LibrariesからMapKitFrameworkを追加します
スクリーンショット 2014-07-03 23.14.01.png

###Main.storyboardにMapViewを貼付けます
スクリーンショット 2014-07-03 23.13.08.png

###MapViewからViewControllerに追加します
スクリーンショット 2014-07-03 23.13.29.png

##コードの追加
ViewController.swiftがメインのコードになるので、この中に記述していきます。

###1.経度、緯度からメルカトル図法の点に変換する
//出発点:六本木 〜 目的地:渋谷
var fromCoordinate :CLLocationCoordinate2D = CLLocationCoordinate2DMake(35.665213, 139.730011)
var toCoordinate :CLLocationCoordinate2D = CLLocationCoordinate2DMake(35.658987, 139.702776)

###2.CLLocationCoordinate2DからMKPlacemarkを作成する
var fromPlacemark = MKPlacemark(coordinate:fromCoordinate, addressDictionary:nil)
var toPlacemark = MKPlacemark(coordinate:toCoordinate, addressDictionary:nil)

###3.MKPlacemarkからMKMapItemを生成します。
var fromItem = MKMapItem(placemark:fromPlacemark);
var toItem = MKMapItem(placemark:toPlacemark);

###4.MKMapItem をセットして MKDirectionsRequest を生成します
let request = MKDirectionsRequest()
request.setSource(fromItem)
request.setDestination(toItem)
request.requestsAlternateRoutes = true; //複数経路
request.transportType = MKDirectionsTransportType.Walking //移動手段 Walking:徒歩/Automobile:車

###5.経路を検索する(非同期で実行される)
let directions = MKDirections(request:request)
directions.calculateDirectionsWithCompletionHandler({
(response:MKDirectionsResponse!, error:NSError!) -> Void in
if (error? || response.routes.isEmpty) {
return
}
let route: MKRoute = response.routes[0] as MKRoute
self.mapView.addOverlay(route.polyline!)
})

###6.経路検索のルート表示設定を行います
func mapView(mapView: MKMapView!, rendererForOverlay overlay: MKOverlay!) -> MKOverlayRenderer! {
let route: MKPolyline = overlay as MKPolyline
let routeRenderer = MKPolylineRenderer(polyline:route)
routeRenderer.lineWidth = 5.0
routeRenderer.strokeColor = UIColor.redColor()
return routeRenderer
}

##シュミレーターで実行してみましょう
経路が表示されているのが確認できます!
map.png

##その他
経路検索以外にも用意された関数を使うことで、いろいろな装飾を行うことができます。
###1.アノテーションを使って地図にピンをドロップする
var theRoppongiAnnotation = MKPointAnnotation()
theRoppongiAnnotation.coordinate = fromCoordinate
theRoppongiAnnotation.title = "Roppoingi"
theRoppongiAnnotation.subtitle = "xxxxxxxxxxxxxxxxxx"
self.mapView.addAnnotation(theRoppongiAnnotation)

###2.カメラの角度を調整する
var camera:MKMapCamera = self.mapView.camera;
//camera.altitude += 100
//camera.heading += 15
camera.pitch += 60
self.mapView.setCamera(camera, animated: true)

##参考
Swift Programming for iOS 101 – Part 4: MapKit App Displaying Locations
http://www.appshocker.com/swift-programming-ios-101-part-4-mapkit-app-displaying-locations/

APIの使い方
http://qiita.com/koogawa/items/d047a8056a0db5b05771

89
86
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
89
86

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?