Google Mapで現在地を取得し表示する
|Google Mapを表示する にて、Google Mapを表示する方法を説明しました。
Google Mapでは、GPSを利用して、現在地を取得し、その場所を表示させることが可能です。
今回は、現在地の緯度と経度を取得し、その周辺の場所を表示させるようにしましょう。
続きは以下からどうぞ。
パーミッションの設定
まず、パーミッションの設定を行います。
Google Mapを表示する にて、インターネットの接続を許可するパーミッションを記述しましたが、GPSを利用するには、さらに二つのパーミッションの追加が必要です。以下のパーミッションをそれぞれ追加してください。
・android.permission.ACCESS_FINE_LOCATION (GPSの利用権限)
・android.permission.ACCESS_MOCK_LOCATION (エミュレータにてGPSを利用する場合の権限)
追加後のマニフェスト内のパーミッションは以下のようになります。
1 2 3 | <uses-permission android:name= "android.permission.INTERNET" ></uses-permission> <uses-permission android:name= "android.permission.ACCESS_FINE_LOCATION" ></uses-permission> <uses-permission android:name= "android.permission.ACCESS_MOCK_LOCATION" ></uses-permission> |
以上でAndroidManifest.xmlの設定は終わりです。
現在地の座標を取得する
現在地の座標は、以下のように記述することで非常に簡単に取得できます。
1 2 3 4 | //LocationManagerの取得 LocationManager locationManager = (LocationManager) this .getSystemService(Context.LOCATION_SERVICE); //GPSから現在地の情報を取得 Location myLocate = locationManager.getLastKnownLocation( "gps" ); |
次に、myLocate から緯度と経度をそれぞれ取得し、その場所を表示させるようにします。
MapControllerは、Google Mapの位置移動や拡大縮小などを行うことを可能にするユーティリティークラスです。
Google Mapを扱う上で非常に重要なクラスの一つです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | //MapControllerの取得 MapController MapCtrl = mapView.getController(); if (myLocate != null ){ //現在地情報取得成功 //緯度の取得 int latitude = ( int ) (myLocate.getLatitude() * 1e6); //経度の取得 int longitude = ( int ) (myLocate.getLongitude() * 1e6); //GeoPointに緯度・経度を指定 GeoPoint GP = new GeoPoint(latitude, longitude); //現在地までアニメーションで移動 MapCtrl.animateTo(GP); //現在地までパッと移動 //MapCtrl.setCenter(GP); } else { //現在地情報取得失敗時の処理 Toast.makeText( this , "現在地取得できませーん!" , Toast.LENGTH_SHORT).show(); } |
ここで、現在値の値は必ず取得できるわけではありません。よって、取得に失敗した場合の対応が必要です。
今回は、取得できなかった場合はトーストにて、取得できなかった旨を伝えるようにしています。
緯度・経度をGeoPointに指定する際に、1E6をかけ、int型にキャストしていることに注意してください。
なお、今回のサンプルコードでは、オプションメニューを選択することで現在地を取得できるようにしました。
そのあたりの実装方法は、オプションメニュー(OptionsMenu)を追加する もしくはサンプルコードを参考にしてください。