質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

Q&A

2回答

2203閲覧

【Swift】mapkitviewについて

iphonex

総合スコア30

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

0グッド

0クリップ

投稿2018/05/27 07:12

現在位置を地図上に表示したのち、現在地をタップすると、
目的地までの地図が表示されるようにしております。
目的地までの地図では、目的地の場所はあっているのですが、
名称が「不明」と表示されます。

1、どのようにコードを書けば、目的地の名称が表示されるようになるでしょうか?
2、現在位置が表示される際に、同時に目的地までの距離も表示したいのですが、
どうすれば、ルートに沿った距離、時間の値を取得できるでしょうか?
(目的地はあらかじめ決められた前記1の場所です。)

swift4

1 func location(){ 2 3 myLocationManager = CLLocationManager() 4 myLocationManager.delegate = self 5 mapView.delegate = self 6 7 let status = CLLocationManager.authorizationStatus() 8 9 if(status == CLAuthorizationStatus.notDetermined) { 10 11 self.myLocationManager.requestAlwaysAuthorization() 12 self.myLocationManager.requestWhenInUseAuthorization() 13 14 } 15 16 17 myLocationManager.desiredAccuracy = kCLLocationAccuracyBest 18 myLocationManager.startUpdatingLocation() 19 20 latitude = myLocationManager.location!.coordinate.latitude 21 longitude = myLocationManager.location!.coordinate.longitude 22 let ichi = CLLocationCoordinate2DMake(latitude, longitude) 23 24 let span = MKCoordinateSpanMake(0.003,0.003) 25 26 let region = MKCoordinateRegionMake(ichi,span) 27 28 mapView.setRegion(region, animated: true) 29 30 let annotation = MKPointAnnotation() 31 annotation.coordinate = ichi 32 annotation.title = "ここ" 33 annotation.subtitle = "現在地" 34 mapView.addAnnotation(annotation) 35 36 37 } 38 39 40 func mapView(_ mapView: MKMapView, viewFor annotation: MKAnnotation) -> MKAnnotationView? { 41 if annotation is MKUserLocation { 42 return nil 43 } 44 45 let reuseId = "pin" 46 var pinView = mapView.dequeueReusableAnnotationView(withIdentifier: reuseId) as? MKPinAnnotationView 47 if pinView == nil { 48 pinView = MKPinAnnotationView(annotation: annotation, reuseIdentifier: reuseId) 49 pinView?.canShowCallout = true 50 pinView?.isDraggable = true 51 pinView?.pinTintColor = .purple 52 let rightButton: AnyObject! = UIButton(type: UIButtonType.detailDisclosure) 53 pinView?.rightCalloutAccessoryView = rightButton as? UIView 54 } 55 else { 56 pinView?.annotation = annotation 57 } 58 59 return pinView 60 } 61 62 func mapView(_ mapView: MKMapView, annotationView view: MKAnnotationView, calloutAccessoryControlTapped control: UIControl) { 63 64 //目的地:東京タワー 65 let coordinate = CLLocationCoordinate2DMake(35.658829, 139.745444) 66 let placemark = MKPlacemark(coordinate:coordinate, addressDictionary:nil) 67 let mapItem = MKMapItem(placemark: placemark) 68 69 70 let option:[String:AnyObject] = [MKLaunchOptionsDirectionsModeKey:MKLaunchOptionsDirectionsModeDriving as AnyObject, 71 MKLaunchOptionsMapTypeKey : MKMapType.hybrid.rawValue as AnyObject] // 72 mapItem.openInMaps(launchOptions: option) 73 74 }

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

上記の http://docs.fabo.io/swift/mapkit/009_route.html は試していただけたでしょうか??

そこで登場する
// ピンを生成.(MKPointAnnotation)
// 座標をセット.
// titleをセット.
で設定はきちんとされているが、
初期段階で実行すると表示されていないと思います。

なぜか縮尺を変えるとtitleが下に文字のみ表示されます。(拡大、縮尺両方)
ピンをタップすると、subtitleを設定している場合にはさらにその下に文字のみ表示されます。
なので、表示できていないわけではないみたいですね。
通常でそれなので、iOSのアップデートに伴い標準の仕様が変わったんだと思います。
変更点:参照URL https://qiita.com/koogawa/items/9ea87bc0f28605b02588

そこで、少し試して見たら、
http://hajihaji-lemon.com/smartphone/swift/mapview_pincolor/の
下の方の 

Swift

1func mapView(mapView: MKMapView, viewForAnnotation annotation: MKAnnotation) -> MKAnnotationView? {

現在のswiftでは

Swift

1func mapView(_ mapView: MKMapView, viewFor annotation: MKAnnotation) -> MKAnnotationView? {

 
のブロックを丸々追加することで、以前のようなviewになりました。
試して見てください。

投稿2018/05/29 23:40

編集2018/06/02 07:01
hameji

総合スコア1380

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

iphonex

2018/06/04 14:05

コードを変えたところ、ナビゲーションが動かなくなりました。 現在のコード(質問の中のコード)なら、アノテーションをタップ すると画面がナビ(経路案内)の画面に切り替わります。
guest

0

さっと調べた限りの結果を書かせて頂きます。

まず、距離のルート、表示に関しては下記を参照すれば、
コードだけなら、
http://docs.fabo.io/swift/mapkit/009_route.html

storyboardを織り交ぜるなら、
http://hajihaji-lemon.com/smartphone/swift/mkmapitem/

できると思います。

また、「東京タワー」と表示させるには
別にアノテーションを同じ座標に表示すればいいのではないでしょうか?
ちょっと古いけど参考になるサイト
http://blog.koogawa.com/entry/2015/11/01/115728

時間がなくて自分では試せてなく、具体的コード記載できず申し訳ありません。

投稿2018/05/27 16:29

hameji

総合スコア1380

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

iphonex

2018/05/29 09:16

calloutAccessoryControlTappedを利用すると、項目1が実現できそうなのですが、書き方がわかりません。 コードの書き方がわからないでしょうか?
iphonex

2018/06/04 14:07

項目2については実現できました。 項目1については実現できないので、別途質問し直します。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問