Googleマーカーからの緯度/経度の取得


89

ドラッグ可能なマーカーでGoogleマップの地図を作成しました。ユーザーがマーカーをドラッグするとき、私は新しい緯度と経度を知る必要がありますが、それを行うための最良のアプローチが何であるかわかりません。

新しい座標を取得するにはどうすればよいですか?

回答:


132

こちらがJSFiddle Demoです。Google Maps API V3では、ドラッグ可能なマーカーの緯度と経度を追跡するのは非常に簡単です。以下のHTMLとCSSをベースとして始めましょう。

<div id='map_canvas'></div>
<div id="current">Nothing yet...</div>

#map_canvas{
    width: 400px;
    height: 300px;
}

#current{
     padding-top: 25px;
}

これは、Googleマップを初期化する最初のJavaScriptです。ドラッグしたいマーカーを作成し、そのdraggableプロパティをtrueに設定します。もちろん、それをロードするには、ウィンドウのonloadイベントにアタッチする必要があることに注意してください。ただし、コードにはスキップします。

var map = new google.maps.Map(document.getElementById('map_canvas'), {
    zoom: 1,
    center: new google.maps.LatLng(35.137879, -82.836914),
    mapTypeId: google.maps.MapTypeId.ROADMAP
});

var myMarker = new google.maps.Marker({
    position: new google.maps.LatLng(47.651968, 9.478485),
    draggable: true
});

ここでは、2つのイベントをアタッチしてdragstart、ドラッグの開始を追跡しdragend、マーカーがドラッグされなくなったときにドラックしますgoogle.maps.event.addListener。アタッチする方法は、を使用することです。ここではcurrent、マーカーがドラッグされているときにdiv のコンテンツを設定し、ドラッグが停止したときにマーカーの緯度と経度を設定しています。Googleマウスイベントにはプロパティ名「latlng」があり、イベントがトリガーされると「google.maps.LatLng」オブジェクトを返します。したがって、ここでは、基本的に、によって返されるこのリスナーの識別子を使用して、ドラッグエンドの現在の位置を抽出するgoogle.maps.event.addListenerためのプロパティlatLngを取得しています。ドラッグが停止したときにLat Lngを取得すると、currentdiv 内に表示されます。

google.maps.event.addListener(myMarker, 'dragend', function(evt){
    document.getElementById('current').innerHTML = '<p>Marker dropped: Current Lat: ' + evt.latLng.lat().toFixed(3) + ' Current Lng: ' + evt.latLng.lng().toFixed(3) + '</p>';
});

google.maps.event.addListener(myMarker, 'dragstart', function(evt){
    document.getElementById('current').innerHTML = '<p>Currently dragging marker...</p>';
});

最後に、マーカーを中央に配置し、地図上に表示します。

map.setCenter(myMarker.position);
myMarker.setMap(map);

私の回答について質問がある場合はお知らせください。


3
これは素晴らしい!オートコンプリートの住所入力フィールドとドラッグ可能なマーカーを備えたマップがあります。誰かが入力フィールドを使用する場合は、緯度経度の座標も表示する必要があります。これに対する簡単な解決策はありますか?
カー

38
var lat = marker.getPosition().lat();
var lng = marker.getPosition().lng();

詳細については、Google Maps API-LatLngをご覧ください。


markerメソッドを呼び出す前にどのようにインスタンス化しますか?たとえば、developers.google.com / maps / documentation / javascript / examples /…を見ていて、検索が完了してマーカーが表示された後、そのマーカーの緯度/経度を取得するにはどうすればよいですか。
user1063287

31

あなただけ呼び出すことができますgetPosition()Marker -あなたはそれを試してみましたか?

あなたがJavaScriptのAPIの非推奨、V2にしている場合は、呼び出すことができますgetLatLng()GMarker


私が混乱したのは、getPosition()を呼び出すときだと思います。マーカーを移動したときに座標を要求するようにコンストラクターに追加する必要があるのでしょうか。
Genadinik 2011年

@Genadinik私の編集でリンクした例は助けになるかもしれません。ドラッグイベントのリスナーをアタッチして、マーカーの位置をクエリし、好きなように使用する方法を示します。
no.good.at.coding

いいですね、セッションやデータベースに座標を保存したい場合は、AJAX呼び出しを使用して行う必要がありますか?またはもっと簡単な方法はありますか?
Genadinik 2011年

マーカーIDと現在の座標を使用した簡単なAjax投稿よりも単純なものは考えられません。ただし、更新がバッチ処理されるか、少なくともドラッグが完了するまで数秒待って、ユーザーが表示しないことを確認することもできます。マーカーがドラッグされている最中にサーバーでリクエストが殺到しないように、これ以上ドラッグを開始します。つまり、いわば位置が安定するまで待ちます。もちろん、これは、クライアントが表示するものと比較して、サーバー側の状態を保持できる余裕があるかどうかに依存します。
no.good.at.coding '13年

1
getPosition()オブジェクトを返すので、具体的に緯度/経度を取得するにはlat()lng()それぞれからとを呼び出す必要があります。
Jeff Puckett 2017

20

これを試して

var latlng = new google.maps.LatLng(51.4975941, -0.0803232);
var map = new google.maps.Map(document.getElementById('map'), {
    center: latlng,
    zoom: 11,
    mapTypeId: google.maps.MapTypeId.ROADMAP
});
var marker = new google.maps.Marker({
    position: latlng,
    map: map,
    title: 'Set lat/lon values for this property',
    draggable: true
});

google.maps.event.addListener(marker, 'dragend', function (event) {
    document.getElementById("latbox").value = this.getPosition().lat();
    document.getElementById("lngbox").value = this.getPosition().lng();
});

8
// show the marker position //

console.log( objMarker.position.lat() );
console.log( objMarker.position.lng() );

// create a new point based into marker position //

var deltaLat = 1.002;
var deltaLng = -1.003;

var objPoint = new google.maps.LatLng( 
  parseFloat( objMarker.position.lat() ) + deltaLat, 
  parseFloat( objMarker.position.lng() ) + deltaLng
);

// now center the map using the new point //

objMap.setCenter( objPoint );

2

マーカーにリスナーを追加して、dragまたはdragendイベントをリッスンし、このイベントを受け取ったときにイベントの位置を確認する必要があります。

マーカーによってトリガーされるイベントの説明については、http://code.google.com/intl/fr/apis/maps/documentation/javascript/reference.html#Markerをご覧ください。また、イベントリスナーを追加できるメソッドについては、http://code.google.com/intl/fr/apis/maps/documentation/javascript/reference.html#MapsEventListenerをご覧ください


2

var map = new google.maps.Map(document.getElementById('map_canvas'), {
  zoom: 10,
  center: new google.maps.LatLng(13.103, 80.274),
  mapTypeId: google.maps.MapTypeId.ROADMAP
});

var myMarker = new google.maps.Marker({
  position: new google.maps.LatLng(18.103, 80.274),
  draggable: true
});

google.maps.event.addListener(myMarker, 'dragend', function(evt) {
  document.getElementById('current').innerHTML = '<p>Marker dropped: Current Lat: ' + evt.latLng.lat().toFixed(3) + ' Current Lng: ' + evt.latLng.lng().toFixed(3) + '</p>';
});
google.maps.event.addListener(myMarker, 'dragstart', function(evt) {
  document.getElementById('current').innerHTML = '<p>Currently dragging marker...</p>';
});
map.setCenter(myMarker.position);
myMarker.setMap(map);

function getLocation() {
  if (navigator.geolocation) {
    navigator.geolocation.getCurrentPosition(showPosition);
  } else {
    x.innerHTML = "Geolocation is not supported by this browser.";
  }
}

function showPosition(position) {
  document.getElementById('current').innerHTML = '<p>Marker dropped: Current Lat: ' + position.coords.latitude + ' Current Lng: ' + position.coords.longitude + '</p>';
  var myMarker = new google.maps.Marker({
    position: new google.maps.LatLng(position.coords.latitude, position.coords.longitude),
    draggable: true
  });
  google.maps.event.addListener(myMarker, 'dragend', function(evt) {
    document.getElementById('current').innerHTML = '<p>Marker dropped: Current Lat: ' + evt.latLng.lat().toFixed(3) + ' Current Lng: ' + evt.latLng.lng().toFixed(3) + '</p>';
  });
  google.maps.event.addListener(myMarker, 'dragstart', function(evt) {
    document.getElementById('current').innerHTML = '<p>Currently dragging marker...</p>';
  });
  map.setCenter(myMarker.position);
  myMarker.setMap(map);
}
getLocation();
#map_canvas {
  width: 980px;
  height: 500px;
}

#current {
  padding-top: 25px;
}
<script src="http://maps.google.com/maps/api/js?sensor=false&.js"></script>
<!DOCTYPE html>
<html lang="en">

<head>

</head>

<body>
  <section>
    <div id='map_canvas'></div>
    <div id="current">
      <p>Marker dropped: Current Lat:18.103 Current Lng:80.274</p>
    </div>
  </section>


</body>

</html>


1
このコードは質問に答えることがありますが、問題を解決する方法と理由に関する情報を提供することで、長期的な価値が向上します。
L_J 2018

-3

この質問にはたくさんの答えがありますが、私にはうまくいきませんでした(マーカーオブジェクトに使用できるメソッドではないように思われるgetPosition()を提案することを含む)。マップV3で私のために働いた唯一の方法は(単純に)です:

var lat = marker.lat();
var long = marker.lng();

1
私はあなたが意味しているmarker.position.lat()と思いますmarker.position.lng()
ジェフ・パケット2017

それとも、使用する必要があるmarker.getPosition().lat()marker.getPosition().lng()
セルジオ・レイス

変数として「long」を使用することはできません
Dinith
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.