前回はgooglemapのパーミッションを許可して実際に使うまでの流れを説明しましたが
、今回はgooglemapをカスタマイズするのに必須であるマーカーについて説明
していきます。
googlemapは、初期状態の時はマーカーも現在地取得ボタンも何もない状態であり、
初期位置がアフリカの状態でスクリーン表示されます。
しかしながらせっかくgooglemapを使ってアプリを作るので、今いる自分の
場所をピックアップして実際に中心位置に設定していきたいと思います。
まず、onMaoReady関数の中にaddMarkerのコールバック関数を書いていきます。
googlemapはこれを書くだけで中心位置を決めてくれます。なお、latlongがnullだったり
数値でなかったりすると大西洋の端に勝手に位置が決まるので注意してください。
mMap.addMarker( new MarkerOptions() .title( "ピンのタイトル" ) .draggable(true) .position( latLng ) );
potisionのカッコ内はこんな感じ。お好みで緯度経度を決めてください。
<pre>latLng = new LatLng(latitude, longitute);</pre>
これでマーカーの位置は決定することができました。
主題である「どうやって動かしたマーカーの位置情報を取得するか」ですが、
マーカーのドラッグ位置を感知するための関数が用意されているのでまずは
そちらを使います。
説明のためにもうコードを出してしまいましょう。
<pre>mMap.setOnMarkerDragListener(new GoogleMap.OnMarkerDragListener() { @Override public void onMarkerDrag(Marker marker) { // TODO Auto-generated method stub // Toast.makeText(getApplicationContext(), "マーカードラッグ中", Toast.LENGTH_SHORT).show(); } @Override public void onMarkerDragEnd(Marker marker) { // TODO Auto-generated method stub Toast.makeText(getApplicationContext(), "マーカードラッグ終了", Toast.LENGTH_LONG).show(); LatLng d = marker.getPosition(); double newlat =d.latitude; double newlong =d.longitude; System.out.println(newlat); System.out.println(newlong); } @Override public void onMarkerDragStart(Marker marker) { // TODO Auto-generated method stub Toast.makeText(getApplicationContext(), "マーカードラッグ開始", Toast.LENGTH_LONG).show(); } });</pre>
関数にはそれぞれonMarkerDrag、onMarkerDragEnd、onMarkerDragStartと
ありますが、肝心の位置情報はマーカーを離したときに取得したい。つまり、
onMarkerDragEndの中に処理を書いていきます。
肝はこのmarker.getPosition()で、このメソッドでマーカーのドラッグ終了時の位置を
読み取りLatLngに格納しているのが分かります。
取得後d.latitudeとd.longitudeそれぞれの位置情報をdouble変数で抜き取れば後は
こっちのものなので自由に使うことができます。
ここまで短いですがこれでマーカーの位置取得の説明を終わります。
必要なコードもそこまでないのでgooglemap初心者のかたでもさくっとできそうです。