マップ 現在地とピンを結ぶ
- 評価
- クリップ 0
- VIEW 1,335

退会済みユーザー
前提・実現したいこと
今マップのアプリを作っていて、現在地と検索した場所をピンで表示できるんですけど、その二つのピンを線で繋ぎたいんですけどそのやり方がわかりません。
該当のソースコード
@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ページの「アクティブ」「注目」タブのフィードに表示されにくくなります。
質問の評価を下げたことを取り消します
この機能は開放されていません
評価を下げる条件を満たしてません
質問の評価を下げる機能の利用条件
この機能を利用するためには、以下の事項を行う必要があります。
- 質問回答など一定の行動
-
メールアドレスの認証
メールアドレスの認証
-
質問評価に関するヘルプページの閲覧
質問評価に関するヘルプページの閲覧
まだ回答がついていません
15分調べてもわからないことは、teratailで質問しよう!
- ただいまの回答率 88.12%
- 質問をまとめることで、思考を整理して素早く解決
- テンプレート機能で、簡単に質問をまとめられる