2010-07-23 14 views
15

Ho trovato diversi esempi V2 di come eseguire il pan della mappa mentre un marker viene trascinato. Per esempio: http://www.putyourlightson.net/projects/coordinatesIn Google Maps V3, come posso ottenere un indicatore trascinabile per visualizzare la mappa?

// create map and add controls 
var map = new GMap2(document.getElementById("map")); 
map.addControl(new GLargeMapControl());   
map.addControl(new GMapTypeControl()); 

// set centre point of map 
var centrePoint = new GLatLng('53.34870686020199', '-6.267356872558594'); 
map.setCenter(centrePoint, 14); 

// add a draggable marker 
var marker = new GMarker(centrePoint, {draggable: true}); 
map.addOverlay(marker); 

// add a drag listener to the map 
GEvent.addListener(marker, "dragend", function() { 
    var point = marker.getPoint(); 
    map.panTo(point); 
    document.getElementById("latitude").value = point.lat(); 
    document.getElementById("longitude").value = point.lng(); 
}); 

Questa pagina sembra "auto-pan", mentre il marcatore viene trascinato; nota che il suo unico listener di eventi è "dragend". Ma ti assicuro che quella mappa si apre mentre il marcatore viene trascinato.

Sto cercando di ottenere la stessa cosa con l'API V3, senza alcun successo. Ho anche provato a chiamare map.panTo() mentre l'icona viene trascinato, con risultati insoddisfacenti: http://www.publicgloucester.com/test.html

function initialize() 
    { 
    Gloucester = new google.maps.LatLng (42.6159285, -70.6619888); 

    myOptions = 
     { 
     zoom: 14, 
     mapTypeId: google.maps.MapTypeId.ROADMAP, 
     center: Gloucester, 
     streetViewControl: false 
     } 

    map = new google.maps.Map (document.getElementById ("map_canvas"), myOptions); 

    marker = new google.maps.Marker ({position: Gloucester, title: "Gloucester, MA"}); 
    marker.setMap (map); 
    marker.setDraggable (true); 

    google.maps.event.addListener (marker, 'drag', function (event) 
     { 
     // Pan to this position (doesn't work!) 
     map.panTo (marker.getPosition()); 
     }); 

    } 

Ha senso per me che questo non avrebbe funzionato, dal momento che il panning per posizionare il marcatore nel centro di la mappa, mentre la mappa si sta muovendo, è falsa.

È semplice come l'API V2 che esegue questa operazione automaticamente, mentre l'API V3 no? Come posso ottenere questo effetto con l'API V3?

Grazie.

+0

Sto scavando e sembra che questa funzione sia stata rimossa nella transizione V2 -> V3. Non riesco a trovare alcuna parola ufficiale, ma sembra essere quello che è successo. Bummer. –

+0

FYI - http://code.google.com/p/gmaps-api-issues/issues/detail?id=2404 –

risposta

19

utilizzare il trascinamento anziché trascinare. il codice sarà,

google.maps.event.addListener(marker, "dragend", function(event) { 

     var point = marker.getPosition(); 
     map.panTo(point); 

     }); 
+0

Questo codice "funziona", ma non raggiunge ciò che voglio. Questo codice esegue la panoramica della mappa quando viene rilasciato l'indicatore. Voglio che la mappa torni mentre il produttore sta rilasciando, così come il comportamento automatico nell'API v2. Ho pubblicato il tuo esempio su http://www.publicgloucester.com/test2.html –

1

L'evento che si desidera ascoltare è quello utilizzato nel tuo esempio "trascinare", cosa si può fare per farlo sembrare meno "fasullo" è aggiungere un ritardo, in modo che il mappe segue l'indicatore invece di essere immediatamente aggiornato. Prova questo:

google.maps.event.addListener(marker, "drag", function(event) { 
    var point = marker.getPosition(); 
    window.setTimeout(function(){ 
    map.panTo(point); 
    }, 100); 
}); 
+0

Questo ha lo stesso problema del mio codice originale; il segnaposto e la mano divergono, e non correttamente. In altre parole, il marcatore non esegue automaticamente l'auto-pan della mappa come nella v2, che puzza. Grazie! –

+0

Ho effettuato alcune ricerche e la proprietà 'dragCrossMove' è stata effettivamente rimossa in v3, senza alcuna sostituzione corrente. L'opzione rimbalzante sembra essere sparita. – xmarcos

Problemi correlati