緯度経度から住所取得

緯度経度から住所取得

Geocooderクラスを使えば、
緯度経度から地点情報を取得できる

今回は、地図上のタッチした地点の住所取得

まずは、GoogleMapインスタンス取得

地図を操作するためGoogleMapインスタンス生成

SupportMapFragment fragment = ((SupportMapFragment)getSupportFragmentManager().findFragmentById(R.id.map));

final GoogleMap gmap = fragment.getMap();

次に、タッチした地点の緯度経度取得

地図上のタッチした地点の緯度経度取得のため
setOnMapClickListener()をセット

gmap.setOnMapClickListener(){

@Override
public void onMapClick(LatLng point){

}
});

となり、ここへ処理を書く

次に、緯度経度を元に、位置情報を取得する

private String getAddressFromPoint(LatLng p){

String addressValue  null;
 
Geocoder geocoder = new Geocoder(this, locale.getDefault());

try{

List<Address> addressList = geocoder.getFromLocation(p.latitude, p.longitude, 1);

if(!addressList.isEmpty()){
Address address = addressList.get(0);

StringBuilder sb = new StringBuilder();

for(int i=0; i<address.getMaxAddressListIndex(); i++){

String addressLine = address.getAddressList(i);
sb.append(addressLine);
}
addressValue= sb.toString();
}
}catch(IOException e){

e.printStackTrace();
}
return addressValue;
}

ソースの解説をつけると

if(!addressList.isEmpty()){

で、データがあるならとなる
!は否定の意味
isEmpty()は、空か判定

また、

i<address.getMaxAddressListIndex()

で要素の分だけになる

forループの中で

address.getAddressList(i);

ね、順番に取得
そして

sb.append(addressLine);

で、append()で末尾へ追加している

今回は、GeoCoderクラスの
getFromLocation()
へ緯度経度を指定することで、
地点情報を取得している

しかし、地点情報は
List


なので、国名や都市名などに細かく分かれている

イメージとしては、WebAPIで天気情報をあつかったとき
細かく分けられているのと同じ

このため、あらかじめ取り出したい情報を決め
目的の配列を取り出す必要がある

コメントを残す

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