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