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?
fonte
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?
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.
Mais informações podem ser encontradas em API do Google Maps - LatLng
fonte
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
.fonte
getPosition()
retorna um objeto, portanto, para obter especificamente a latitude / longitude, você terá que chamarlat()
elng()
respectivamente a partir disso.tente isso
fonte
fonte
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.
fonte
fonte
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):
fonte
marker.position.lat()
emarker.position.lng()
marker.getPosition().lat()
emarker.getPosition().lng()