Получение Lat / Lng от маркера Google - PullRequest
85 голосов
/ 13 марта 2011

Я сделал карту Google Maps с перетаскиваемым маркером. Когда пользователь перетаскивает маркер, мне нужно знать новую широту и долготу, но я не понимаю, как лучше всего это сделать.

Как я могу получить новые координаты?

Ответы [ 8 ]

120 голосов
/ 16 марта 2011

Вот демоверсия JSFiddle .В 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;
}

Вот наш начальный JavaScript, инициализирующий карту Google.Мы создаем маркер, который мы хотим перетащить, и устанавливаем для его свойства 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
});

Здесь мы прикрепляем два события dragstart для отслеживанияначало перетаскивания и dragend для перетаскивания, когда маркер перестает перетаскиваться, и способ его прикрепления заключается в использовании google.maps.event.addListener.Что мы делаем здесь, это устанавливаем содержимое div current, когда маркер перетаскивается, а затем устанавливаем его широту и долготу, когда перетаскивание останавливается.У события мыши Google есть имя свойства «latlng», которое возвращает объект «google.maps.LatLng» при срабатывании события.Таким образом, то, что мы делаем здесь, в основном использует идентификатор для этого слушателя, который возвращается google.maps.event.addListener и получает свойство latLng для извлечения текущей позиции драже.Как только мы получим значение Lat Lng, когда перетаскивание будет прекращено, мы отобразим его в вашем current div:

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);

Дайте мне знать, если у вас есть какие-либо вопросы относительно моего ответа.

28 голосов
/ 13 марта 2011

Вы можете просто позвонить getPosition() на Marker - пробовали ли вы это?

Если вы используете устаревшую версию v2 JavaScript API, вы можете вызватьgetLatLng() на GMarker.

26 голосов
/ 29 октября 2015
var lat = marker.getPosition().lat();
var lng = marker.getPosition().lng();

Дополнительную информацию можно найти по адресу API Карт Google - LatLng

17 голосов
/ 24 октября 2014

попробуйте

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();
});
6 голосов
/ 12 марта 2014
// 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 );
1 голос
/ 25 июля 2018

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 голос
/ 13 марта 2011

Вы должны добавить слушателя на маркер и прослушивать событие перетаскивания или драгендинга, а также запрашивать его положение, когда вы получаете это событие.

См. 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 о методах, позволяющих добавлять прослушиватели событий.

0 голосов
/ 20 февраля 2015

Есть много ответов на этот вопрос, которые никогда не работали для меня (включая предложение getPosition (), который, кажется, не является методом, доступным для объектов маркеров).Единственный метод, который работал для меня в картах V3 (просто):

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