Categories
SugiBlog ホームページ制作・システム開発

座標から住所に変換する 逆ジオコーディング

緯度経度の座標から逆ジオコーディング(リバースジオコーディング)で住所を取得することができます。
これにはGoogleのAPIを利用しますので、GoogleMapsをインポートしている前提でのお話です。

座標をGoogleMapから取得します。
例えばタップであればcoordinate: CLLocationCoordinate2Dが取得できますので
これを元にCLLocationオブジェクトを作成します。

let location: CLLocation = CLLocation(latitude: coordinate.latitude, longitude: coordinate.longitude)

逆ジオコーディングを行うメソッド
結果をアラートで表示しています。

func ReverseGeocoder(location: CLLocation) {

    var address: String = ""

    CLGeocoder().reverseGeocodeLocation(location, completionHandler: {(placemarks, error)->Void in

        if error != nil {
            print("error")
            return
        }

        if placemarks!.count > 0 {
            let pms = placemarks![0]
            address = self.makeAddressString(placemark: pms)

            let aTitle = "住所表示"
            let aMessage = address
            let alert = UIAlertController(title: aTitle, message: aMessage, preferredStyle: .alert)

            alert.addAction(UIAlertAction(title: "OK", style: .default, handler: nil))

            self.present(alert, animated: false, completion: nil)

        } else {

            print("error")

        }

    })

}

取得できた住所を一連の文字列に変換するメソッド

func makeAddressString(placemark: CLPlacemark) -> String {

    var address: String = ""

    //address += placemark.postalCode != nil ? placemark.postalCode! : ""
    address += placemark.administrativeArea != nil ? placemark.administrativeArea! : ""
    address += placemark.subAdministrativeArea != nil ? placemark.subAdministrativeArea! : ""
    address += placemark.locality != nil ? placemark.locality! : ""
    address += placemark.subLocality != nil ? placemark.subLocality! : ""
    address += placemark.thoroughfare != nil ? placemark.thoroughfare! : ""
    address += placemark.subThoroughfare != nil ? placemark.subThoroughfare! : ""

    return address

}

Xcode: 8.3.2
Swift: 3.1
OS: Sierra 10.12

70 views

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

*