Google Mapで現在地を取得し表示する
|Google Mapを表示する にて、Google Mapを表示する方法を説明しました。
Google Mapでは、GPSを利用して、現在地を取得し、その場所を表示させることが可能です。
今回は、現在地の緯度と経度を取得し、その周辺の場所を表示させるようにしましょう。
続きは以下からどうぞ。
パーミッションの設定
まず、パーミッションの設定を行います。
Google Mapを表示する にて、インターネットの接続を許可するパーミッションを記述しましたが、GPSを利用するには、さらに二つのパーミッションの追加が必要です。以下のパーミッションをそれぞれ追加してください。
・android.permission.ACCESS_FINE_LOCATION (GPSの利用権限)
・android.permission.ACCESS_MOCK_LOCATION (エミュレータにてGPSを利用する場合の権限)
追加後のマニフェスト内のパーミッションは以下のようになります。
<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の設定は終わりです。
現在地の座標を取得する
現在地の座標は、以下のように記述することで非常に簡単に取得できます。
//LocationManagerの取得 LocationManager locationManager = (LocationManager)this.getSystemService(Context.LOCATION_SERVICE); //GPSから現在地の情報を取得 Location myLocate = locationManager.getLastKnownLocation("gps");
次に、myLocate から緯度と経度をそれぞれ取得し、その場所を表示させるようにします。
MapControllerは、Google Mapの位置移動や拡大縮小などを行うことを可能にするユーティリティークラスです。
Google Mapを扱う上で非常に重要なクラスの一つです。
//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)を追加する もしくはサンプルコードを参考にしてください。