緯度経度から住所取得
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で天気情報をあつかったとき
細かく分けられているのと同じ
このため、あらかじめ取り出したい情報を決め
目的の配列を取り出す必要がある