ドラッグしたマーカーの緯度・経度を取得する

位置情報を持ったデータの編集画面などで、マーカーの位置を変更したい場合に使える、ドラックしたマーカーの緯度・経度を取得する方法を紹介します。

位置情報を持ったデータの編集画面、更新

位置情報を持ったデータの編集画面を用意する場合、地図上のマーカーをドラッグできるようにしておき、ユーザーがそのマーカーを移動させることで、データの位置情報を更新するという UI が良く使われます。その場合、ドラッグし終わったマーカーの緯度・経度を取得し、それらの値を hidden フィールドなどに渡します。

ここではそうした場合に使える、ドラックしたマーカーの緯度・経度を取得する方法を紹介します。

ドラッグ可能なマーカーを地図に追加する

<div id="map"></div>

で用意した div タグ内に地図を表示するため、container に div タグの ID である map を指定して geolonia.Map のインスタンスを生成します。地図の中心は、もう一度登場するので、定数 center で定義しておきます。

const center = [135.506306, 34.652499]
const map = new geolonia.Map({
  container: 'map',
  center: center,
  zoom: 16
})

次に geolonia.Marker のインスタンスを生成し、draggable オプションを true とし、ドラッグできるようにします。マーカーの位置を setLngLat で指定し、addTo で地図に追加しています。

const marker = new geolonia.Marker({
  draggable: true
})
  .setLngLat(center)
  .addTo(map)

ドラッグしたマーカーの緯度・経度を取得する

マーカーをドラッグし終わったときに呼び出す関数を以下のように定義します。 marker.getLngLat() でそのときマーカーが指している緯度、経度を取得し、alert でそれぞれの値を表示しています。

function onDragEnd() {
  const lngLat = marker.getLngLat()
  alert(`緯度: ${lngLat.lat}, 経度: ${lngLat.lng}`)
}

marker がドラッグされ終わったときに dragend イベントが発火されます。このイベントに、上記の関数をひもづけます。

marker.on('dragend', onDragEnd)

コード全体を見るには、以下の CodePen のサンプルコードを参照してください。

See the Pen ドラッグしたマーカーの緯度・経度を取得する by Geolonia (@geolonia) on CodePen.

CodePen でサンプルコードを編集