iOSアプリで地図情報を使うときにお世話になることが多いと思うのが、現住所から緯度経度を算出する方法です。ユーザが入力した住所情報(都道府県名+市区町村名+地番)から、緯度経度を取得し、マップ上にピンを打つという運用はよくありそうですね。(Swift2.x系です)
Contents
住所から緯度経度を算出
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
// 必要に応じてimportします import CoreLocation // 座標算出用の住所を入力します let prefecture:String = "東京都" let city:String = "中央区" let street:String = "銀座1−1" // 建物名が含まれると正しく座標が表示されないことがあるので注意が必要です let addressForLocation = prefecture + city + street // 入力された住所を元に取材地の座標を登録 let geocoder = CLGeocoder() geocoder.geocodeAddressString(addressForLocation) { (placeMarks:[CLPlacemark]?, error:NSError?) -> Void in for placeMark in placeMarks! { // 緯度 let lat = placeMark.location?.coordinate.latitude // 経度 let long = placeMark.location?.coordinate.longitude } } |
緯度経度から所在地を取得
次は緯度経度からその地点の行政区分を取得する方法を見ていきましょう。例えばアプリを通じて端末の所在地の緯度経度を取得したときに、その地点の国名、都道府県名、市区町村名を取得することができます。よくfacebookなどで投稿した場所が表示されていると思いますが、おそらく同じことをしています。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
// locationManagerなど現在地がアップデートされたタイミングなどで使用するとよいでしょう。 // 取得できる国名などは端末の言語設定によるものと思います。 func locationManager(manager: CLLocationManager, didUpdateToLocation newLocation: CLLocation, fromLocation oldLocation: CLLocation){ // 現在地の情報を取得 CLGeocoder().reverseGeocodeLocation(manager.location!, completionHandler: {(placemarks, error)->Void in if error != nil { return } if placemarks!.count > 0 { let pm = placemarks![0] as CLPlacemark var currentCountry = "" var currentPrefecture = "" var currentCity = "" // 国 if placemark.country != nil { currentCountry = placemark.country! } // 都道府県 if placemark.administrativeArea != nil { currentPrefecture = placemark.administrativeArea! } // 市町村 if placemark.locality != nil { currentCity = placemark.locality! } } }) } |