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

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

ただいまの
回答率

90.53%

  • Swift

    8561questions

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

  • Xcode

    4814questions

    Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

  • iOS

    4574questions

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

マップ 現在地とピンを結ぶ

受付中

回答 0

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 543
退会済みユーザー

退会済みユーザー

前提・実現したいこと

今マップのアプリを作っていて、現在地と検索した場所をピンで表示できるんですけど、その二つのピンを線で繋ぎたいんですけどそのやり方がわかりません。

該当のソースコード

    @IBOutlet weak var myMap: MKMapView!


    @IBOutlet weak var trackingButton: UIBarButtonItem!

    @IBOutlet weak var inputText: UITextField!


    func textFieldShouldReturn(_ textField: UITextField) -> Bool {

        //キーボードを閉じる 1
        textField.resignFirstResponder()

        //入力された文字を取り出す 2
        let searchKeyword = textField.text

        //入力された文字をデバックエリアに表示 3
        print (searchKeyword)

        //CLGeocoderインスタンスを取得 5
        let geocoder = CLGeocoder()

        //入力された文字から位置情報を取得 6
        geocoder.geocodeAddressString(searchKeyword!, completionHandler: { (placemarks:[CLPlacemark]?, error:Error?)in
            //位置情報が存在する場合1件目の位置情報をplacemerkに取り出す 7
            if let placemark = placemarks?[0] {
                // 位置情報から緯度経度が存在する場合、緯度経度をtargetCoordinateに取り出す 8
                if let targetCoordinate = placemark.location?.coordinate{

                    //緯度経度をデバックエリアに表示 9
                    print (targetCoordinate)

                    //MKPonitAnnotationインスタンスを取得しピンを生成 10
                    let pin = MKPointAnnotation()

                    //ピンの開く場所に緯度経度を設定 11
                    pin.coordinate = targetCoordinate

                    //ピンのタイトルを設定 12
                    pin.title = searchKeyword

                    //ピンを地図に置く 13
                    self.myMap.addAnnotation(pin)

                    //緯度経度を中心にして半径500mの範囲を表示 14
                    self.myMap.region = MKCoordinateRegionMakeWithDistance(targetCoordinate, 500.0, 500.0)

                }

            }
        } )

        //デフォルト動作を行うのでreturnを返す 4
        return true
    }



    @IBAction func tapTrackingButton(_ sender: Any) {



        switch myMap.userTrackingMode{
        case .none:
            // NOneからFollowへ
            myMap.setUserTrackingMode(.follow, animated: true)

            //トラッキングボタンを変更する
            trackingButton.image = UIImage(named: "trackingFollow")

        case .follow:
            //FollowからFollowWithHeadingへ
            myMap.setUserTrackingMode(. followWithHeading, animated: true)
            //トラッキングを変更する
            trackingButton.image = UIImage(named: "trackingHeading")

        case .followWithHeading:
            //FollowWithHeadingからNoneへ
            myMap.setUserTrackingMode(.none, animated: true)

            //トラッキングを変更する
            trackingButton.image = UIImage(named: "trackingNone")


        }

    }

    //トラッキングが自動削除された
    func mapView(_ mapView: MKMapView, didChange made: MKUserTrackingMode, animated: Bool){

        //トラッキングボタンを変更する
        trackingButton.image = UIImage(named: "trackingNone")

    }

    //位置情報利用許可のステータスがカッわた
    func locationManager(_ manager: CLLocationManager, didChangeAutHorization status: CLAuthorizationStatus) {

        switch status {
        case .authorizedAlways, .authorizedWhenInUse :

            //ロケーションの更新を開始する
            locationManager.startUpdatingLocation()

            //トラッキングぼたんを有効にする
            trackingButton.isEnabled = true

        default:

            //ロケーションの更新を停止する
            locationManager .stopUpdatingLocation()

            //トラッキングモードをnoneにする
            myMap.setUserTrackingMode(.none, animated: true)

            //トラッキングボタンを変更する
            trackingButton.image = UIImage(named: "trackingNone")

            //トラッキングボタンを無効にする
            trackingButton.isEnabled = false




        }




    }





}

試したこと

ネットで調べたらこんな感じに乗ってました。

    func getRoute()
    {
        // 現在地と目的地のMKPlacemarkを生成
        var fromPlacemark = MKPlacemark(coordinate:userLocation, addressDictionary:nil)
        var toPlacemark   = MKPlacemark(coordinate:destLocation, addressDictionary:nil)

        // MKPlacemark から MKMapItem を生成
        var fromItem = MKMapItem(placemark:fromPlacemark)
        var toItem   = MKMapItem(placemark:toPlacemark)

        // MKMapItem をセットして MKDirectionsRequest を生成
        let request = MKDirectionsRequest()

        request.setSource(fromItem)
        request.setDestination(toItem)
        request.requestsAlternateRoutes = false // 単独の経路を検索
        request.transportType = MKDirectionsTransportType.Any

        let directions = MKDirections(request:request)
        directions.calculateDirectionsWithCompletionHandler({
            (response:MKDirectionsResponse!, error:NSError!) -> Void in

            response.routes.count
            if (error != nil || response.routes.isEmpty) {
                return
            }
            var route: MKRoute = response.routes[0] as MKRoute
            // 経路を描画
            self.mapView.addOverlay(route.polyline!)
            // 現在地と目的地を含む表示範囲を設定する
            self.showUserAndDestinationOnMap()
        })
    }
コード

補足情報(言語/FW/ツール等のバージョンなど)

swift3

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

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

まだ回答がついていません

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

  • Swift

    8561questions

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

  • Xcode

    4814questions

    Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

  • iOS

    4574questions

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