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

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

ただいまの
回答率

90.75%

  • Swift

    6674questions

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

  • iOS

    3783questions

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

【Swift】mapkitviewについて

受付中

回答 2

投稿

  • 評価
  • クリップ 0
  • VIEW 127

iphonex

score 13

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

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

    func location(){

        myLocationManager = CLLocationManager()
        myLocationManager.delegate = self
        mapView.delegate = self

        let status = CLLocationManager.authorizationStatus()

        if(status == CLAuthorizationStatus.notDetermined) {

            self.myLocationManager.requestAlwaysAuthorization()
            self.myLocationManager.requestWhenInUseAuthorization()

        }


        myLocationManager.desiredAccuracy = kCLLocationAccuracyBest
        myLocationManager.startUpdatingLocation()

        latitude = myLocationManager.location!.coordinate.latitude
        longitude = myLocationManager.location!.coordinate.longitude
        let ichi = CLLocationCoordinate2DMake(latitude, longitude)

        let span = MKCoordinateSpanMake(0.003,0.003)

        let region = MKCoordinateRegionMake(ichi,span)

        mapView.setRegion(region, animated: true)

        let annotation = MKPointAnnotation()
        annotation.coordinate = ichi
        annotation.title = "ここ"
        annotation.subtitle = "現在地"
        mapView.addAnnotation(annotation)


    }


    func mapView(_ mapView: MKMapView, viewFor annotation: MKAnnotation) -> MKAnnotationView? {
        if annotation is MKUserLocation {
            return nil
        }

        let reuseId = "pin"
        var pinView = mapView.dequeueReusableAnnotationView(withIdentifier: reuseId) as? MKPinAnnotationView
        if pinView == nil {
            pinView = MKPinAnnotationView(annotation: annotation, reuseIdentifier: reuseId)
            pinView?.canShowCallout = true
            pinView?.isDraggable = true
            pinView?.pinTintColor = .purple
            let rightButton: AnyObject! = UIButton(type: UIButtonType.detailDisclosure)
            pinView?.rightCalloutAccessoryView = rightButton as? UIView
        }
        else {
            pinView?.annotation = annotation
        }

        return pinView
    }

    func mapView(_ mapView: MKMapView, annotationView view: MKAnnotationView, calloutAccessoryControlTapped control: UIControl) {

        //目的地:東京タワー
        let coordinate = CLLocationCoordinate2DMake(35.658829, 139.745444)
        let placemark = MKPlacemark(coordinate:coordinate, addressDictionary:nil)
        let mapItem = MKMapItem(placemark: placemark)


        let option:[String:AnyObject] = [MKLaunchOptionsDirectionsModeKey:MKLaunchOptionsDirectionsModeDriving as AnyObject, 
            MKLaunchOptionsMapTypeKey : MKMapType.hybrid.rawValue as AnyObject]  //
        mapItem.openInMaps(launchOptions: option)

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

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/29 18:16

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

    キャンセル

  • 2018/06/04 23:07

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

    キャンセル

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/の
下の方の 

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

現在のswiftでは

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


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

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/06/04 23:05

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

    キャンセル

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

  • ただいまの回答率 90.75%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る

  • Swift

    6674questions

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

  • iOS

    3783questions

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