見出し画像

Google Maps で扱う住所を座標(緯度経度)に変換する|Android Kotlin 実践勉強会

Google Maps を利用して地図を扱う(制御する)際、日本語の住所ではなく「緯度経度」が必要になってきます。

Android では、日本語の住所を「緯度経度」に変換することが可能です。

android.location.Geocoder#getFromLocationName」を使用します。

Address の配列を返します。返される Address は、このクラスのコンストラクターに提供されたロケールにローカライズされます。結果は最良の推測であり、意味のあるものや正しいものであるとは限りません。


以下はサンプル実装です。

import android.location.Geocoder

private suspend fun xxx(
        locationName: String
) = withContext(Dispatchers.IO) {
    try {
        Geocoder(context).getFromLocationName(locationName, 1).also { addresses ->
            if (addresses.size == 0) {
                return@also
            }

            val latitude = addresses[0].latitude
            val longitude = addresses[0].longitude
            val latLng = LatLng(latitude, longitude)
    } catch (ex: IOException) {
        ex.printStackTrace()
    }
}

存在しない住所をパラメータに渡した場合(それは空白も含みます)、Address の配列はサイズが「0」になりますので、サイズのチェックが安全です。

Address には「latitude(緯度)」「longitude(経度)」が含まれています。

android.location.Geocoder#getFromLocationName」を実装時に、「Inappropriate blocking method call」という警告が表示されるので、必ず UI スレッド以外で呼び出します。


さて、コーヒーブレイク。最近アニメの CM を観て印象深くて、それで原作を読んでみたら面白かった漫画『ノー・ガンズ・ライフ』がオススメです。

頭が丸々「銃(リボルバー)」に拡張された男の、ハードボイルドな生き様!

この記事が参加している募集

私のコーヒー時間

この記事が気に入ったらサポートをしてみませんか?