前提・実現したいこと
Swiftでマップ検索アプリを作成しています。
実装中に以下のエラーが発生しました。
発生している問題・エラーメッセージ
東京駅を検索したが位置が少しずれてしまう
該当のソースコード
Swift
1 1. // 2 2. // ViewController.swift 3 3. // MyMap 4 4. // 5 5. 6 6. import UIKit 7 7. import MapKit 8 8. 9 9. class ViewController: UIViewController , UITextFieldDelegate { 1010. 1111. override func viewDidLoad() { 1212. super.viewDidLoad() 1313. // Do any additional setup after loading the view. 1414. 1515. // Text Fieldのdelegate通知先の設定 1616. inputText.delegate = self 1717. 1818. } 1919. 2020. @IBOutlet weak var inputText: UITextField! 2121. 2222. @IBOutlet weak var dispMap: MKMapView! 2323. 2424. func textFieldShouldReturn(_ textField: UITextField) -> Bool { 2525. // キーボードを閉じる(1) 2626. textField.resignFirstResponder() 2727. 2828. // 入力された文字を取り出す(2) 2929. if let searchKey = textField.text { 3030. 3131. // 入力された文字をデバックエリアに表示(3) 3232. print(searchKey) 3333. 3434. // CLGeocoderインスタンスを取得(5) 3535. let geocoder = CLGeocoder() 3636. 3737. // 入力された文字から位置情報を取得(6) 3838. geocoder.geocodeAddressString(searchKey, completionHandler: {(placemarks,error) in 3939. 4040. // 位置情報が存在する場合はunwrapPlacemarksに取り出す(7) 4141. if let unwrapPlacemarks = placemarks { 4242. 4343. // 1件目の情報を取り出す(8) 4444. if let firstPlacemarks = unwrapPlacemarks.first{ 4545. 4646. // 位置情報を取り出す(9) 4747. if let location = firstPlacemarks.location{ 4848. 4949. // 位置情報から緯度経度をtargetCoordinateに取り出す(10) 5050. let targetCoordinate = location.coordinate 5151. 5252. // 緯度経度をデバックエリアに表示(11) 5353. print(targetCoordinate) 5454. 5555. // MKPointAnnotationインスタンスを取得し、ピンを生成(12) 5656. let pin = MKPointAnnotation() 5757. 5858. // ピンの置く場所に緯度経度を設定(13) 5959. pin.coordinate = targetCoordinate 6060. 6161. // ピンのタイトルを設定(14) 6262. pin.title = searchKey 6363. 6464. // ピンを地図に置く(15) 6565. self.dispMap.addAnnotation(pin) 6666. 6767. // 緯度経度を中心にして半径500mwの範囲を表示(16) 6868. self.dispMap.region = MKCoordinateRegion(center: targetCoordinate, latitudinalMeters: 500.0, longitudinalMeters: 500.0) 6969. 7070. } 7171. } 7272. } 7373. }) 7474. } 7575. 7676. //デフォルト動作を行うのでtrueを返す(4) 7777. return true 7878. } 7979. 8080. } 81
試したこと
デバックエリアに緯度経度を表示してみました。
東京駅 CLLocationCoordinate2D(latitude: 35.6776117, longitude: 139.7651235)
実際には、下のようになるはずです。
東京駅 CLLocationCoordinate2D(latitude: 35.6813482, longitude: 139.7660155)