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)を追加する もしくはサンプルコードを参考にしてください。

2 Comments