2010-07-23 9 views
15

Ich habe mehrere V2-Beispiele gefunden, wie die Karte geschwenkt werden kann, während ein Marker gezogen wird. Zum Beispiel: http://www.putyourlightson.net/projects/coordinatesWie kann ich in Google Maps V3 einen ziehbaren Marker zum Verschieben der Karte erhalten?

// 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(); 
}); 

Diese Seite erscheint „Auto Pan“, während die Markierung gezogen wird; Beachten Sie, dass der einzige Ereignis-Listener für "dragend" ist. Aber ich versichere Ihnen, dass diese Karte schwenkt, während der Marker gezogen wird.

Ich versuche das gleiche mit der V3 API zu erreichen, ohne Erfolg. Ich habe sogar versucht map.panTo() aufrufen, während das Symbol gezogen wird, mit unbefriedigenden Ergebnissen: 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()); 
     }); 

    } 

Es macht Sinn für mich, dass dies nicht funktionieren würde, da Schwenken Sie die Markierung in der Mitte platzieren von Die Karte, während sich die Karte bewegt, ist falsch.

Ist es so einfach wie die V2-API, die dies automatisch ausführt, während die V3-API dies nicht tut? Wie kann ich diesen Effekt mit der V3 API erreichen?

Danke.

+0

Ich habe graben, und es scheint, dass diese Funktion in der V2 -> V3-Übergang entfernt wurde. Ich kann kein offizielles Wort finden, aber das scheint geschehen zu sein. Bumm. –

+0

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

Antwort

19

Verwenden Sie Dragend statt Drag. der Code wird,

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

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

     }); 
+0

Dieser Code "funktioniert", aber erreicht nicht, was ich will. Dieser Code verschiebt die Karte, wenn der Marker freigegeben wird. Ich möchte, dass die Karte während der Freigabe des Makers schwenkt, ebenso wie das automatische Verhalten in der API v2. Ich postete Ihr Beispiel unter http://www.publicgloucester.com/test2.html –

1

Der Fall, dass Sie derjenige hören möchten in Ihrem Beispiel „ziehen“ verwendet wird, ist, was Sie tun können, um es weniger „falsche“ aussehen zu lassen ist eine Verzögerung hinzuzufügen, so dass die Karten folgt Der Marker wird nicht sofort aktualisiert. Versuchen Sie dies:

+0

Das hat das gleiche Problem, das mein ursprünglicher Code tut; Der Marker und die Hand divergieren und es schwenkt nicht richtig. Mit anderen Worten, der Marker verschiebt die Karte nicht automatisch wie in v2, was stinkt. Vielen Dank! –

+0

Ich habe einige Nachforschungen angestellt und die 'dragCrossMove'-Eigenschaft wurde effektiv in v3 entfernt, ohne aktuellen Ersatz. Die bouncy Option scheint auch weg zu sein. – xmarcos