Fiz um mapa do Google Maps com um marcador arrastável. Quando o usuário arrasta o marcador, preciso saber a nova latitude e longitude, mas não entendo qual é a melhor abordagem para fazer isso.
Como posso recuperar as novas coordenadas?
Respostas:
Aqui está a demonstração JSFiddle . Na API do Google Maps V3, é muito simples rastrear a latitude e longitude de um marcador arrastável. Vamos começar com o seguinte HTML e CSS como nossa base.
<div id='map_canvas'></div>
<div id="current">Nothing yet...</div>
#map_canvas{
width: 400px;
height: 300px;
}
#current{
padding-top: 25px;
}
Aqui está nosso JavaScript inicial inicializando o mapa do google. Criamos um marcador que queremos arrastar e definimos sua propriedade draggable como true. Claro, tenha em mente que ele deve ser anexado a um evento onload de sua janela para ser carregado, mas vou pular para o código:
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
});
Aqui, anexamos dois eventos dragstart
para rastrear o início do arrasto e dragend
para arrastar quando o marcador para de ser arrastado, e a forma como o anexamos é para usar google.maps.event.addListener
. O que estamos fazendo aqui é definir o current
conteúdo do div quando o marcador for arrastado e, em seguida, definir o lat e lng do marcador quando o arrastar parar. O evento de mouse do Google tem um nome de propriedade 'latlng' que retorna o objeto 'google.maps.LatLng' quando o evento é acionado. Então, o que estamos fazendo aqui é basicamente usar o identificador para este ouvinte que é retornado pelo google.maps.event.addListener
e obtém a propriedade latLng
para extrair a posição atual do dragend. Assim que obtivermos o Lat Lng quando o arrasto parar, exibiremos em seu 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>';
});
Por fim, centralizaremos nosso marcador e o exibiremos no mapa:
map.setCenter(myMarker.position);
myMarker.setMap(map);
Entre em contato se tiver alguma dúvida em relação à minha resposta.
var lat = marker.getPosition().lat();
var lng = marker.getPosition().lng();
Mais informações podem ser encontradas em API do Google Maps - LatLng
marker
antes de chamar métodos nele? por exemplo, estou olhando para developers.google.com/maps/documentation/javascript/examples/… e depois que uma pesquisa foi feita e um marcador aparece, como faço para obter a latitude / longitude desse marcador?
Você poderia simplesmente ligar getPosition()
paraMarker
- você já tentou isso?
Se você está na obsoleta, v2 da API JavaScript, você pode chamar getLatLng()
emGMarker
.
getPosition()
retorna um objeto, portanto, para obter especificamente a latitude / longitude, você terá que chamar lat()
e lng()
respectivamente a partir disso.
tente isso
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();
});
// 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 );
Você deve adicionar um ouvinte ao marcador e ouvir o evento drag ou dragend, e perguntar ao evento sua posição quando você receber este evento.
Consulte http://code.google.com/intl/fr/apis/maps/documentation/javascript/reference.html#Marker para obter a descrição dos eventos acionados pelo marcador. E consulte http://code.google.com/intl/fr/apis/maps/documentation/javascript/reference.html#MapsEventListener para métodos que permitem adicionar ouvintes de eventos.
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>
Existem muitas respostas para essa pergunta, que nunca funcionou para mim (incluindo a sugestão de getPosition () que não parece ser um método disponível para objetos marcadores). O único método que funcionou para mim nos mapas V3 é (simplesmente):
var lat = marker.lat();
var long = marker.lng();
marker.position.lat()
emarker.position.lng()
marker.getPosition().lat()
emarker.getPosition().lng()