2014-08-28 8 views
5

Vorrei tenere traccia delle coordinate del centro della mia mappa. Finora ho usato questo:Ottieni le coordinate del centro dopo il trascinamento e il pan finito

// On Drag End 
google.maps.event.addListener(map, 'dragend', function() { 
    $('.map_center_coords .latitude').html(map.getCenter().lat()); 
    $('.map_center_coords .longitude').html(map.getCenter().lng()); 
}); 

che funziona ottenendo le corde alla fine dell'evento di trascinamento.

Il problema è che ora sto utilizzando map.panTo per spostarsi in una determinata posizione.

C'è un evento per fondamentalmente "whenever the center has *finished* moving in any way"?

Come menzionato da geocodezip, ho dimenticato l'evento center_changed. Ma quell'evento viene continuamente attivato mentre la mappa viene trascinata/spostata.

Idealmente, sto cercando un evento che viene attivato una sola volta, dopo aver eseguito il trascinamento/panoramica.

+0

È necessario definire cosa si intende per "finito". Non esiste un evento di questo genere, è necessario implementarlo da soli. – geocodezip

risposta

7

Osservare l'idle-evento, invece (Questo evento viene generato quando la mappa diventa inattiva dopo la panoramica o lo zoom):

google.maps.event.addListener(map,'idle',function(){ 
     if(!this.get('dragging') && this.get('oldCenter') && this.get('oldCenter')!==this.getCenter()) { 
     //do what you want to 
     } 
     if(!this.get('dragging')){ 
     this.set('oldCenter',this.getCenter()) 
     } 

    }); 

    google.maps.event.addListener(map,'dragstart',function(){ 
     this.set('dragging',true);   
    }); 

    google.maps.event.addListener(map,'dragend',function(){ 
     this.set('dragging',false); 
     google.maps.event.trigger(this,'idle',{}); 
    }); 
4

L'evento center_changed google.maps.Map.

center_changed | None | This event is fired when the map center property changes. 
// On center changed 
google.maps.event.addListener(map, 'center_changed', function() { 
    $('.map_center_coords .latitude').html(map.getCenter().lat()); 
    $('.map_center_coords .longitude').html(map.getCenter().lng()); 
}); 
+0

Grazie mi sono dimenticato di questo, ma in realtà non è esattamente quello che sto cercando. Questo spara continuamente mentre stai trascinando e mentre esegui il panning. Idealmente mi piacerebbe qualcosa che si attiva solo dopo aver terminato il trascinamento/il pan. (Aggiornamento domanda) – Juicy

1

Prova utilizzando idle evento. Link a docs.

Questo evento viene generato quando la mappa diventa inattiva dopo lo spostamento o lo zoom .

Se volete evento di inattività al fuoco solo dopo dragend quindi provare il frammento di seguito.

Questo codice stampa le coordinate sulla console dopo l'incendio di entrambi gli eventi dragend e idle.

mapObj.addListener('dragend', function() { 
    var idleListener = mapObj.addListener('idle', function() { 
     google.maps.event.removeListener(idleListener); 
     console.log(mapObj.getCenter().lat()); 
     console.log(mapObj.getCenter().lng()); 
    }); 
}); 
+0

Come si ripristina la posizione del marker? – Marco

Problemi correlati