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 を観て印象深くて、それで原作を読んでみたら面白かった漫画『ノー・ガンズ・ライフ』がオススメです。
頭が丸々「銃(リボルバー)」に拡張された男の、ハードボイルドな生き様!