В Google Maps V3, как я могу получить перетаскиваемый маркер для панорамирования карты?

Я нашел несколько примеров V2, как панорамировать карту во время перетаскивания маркера. Например: http://www.putyourlightson.net/projects/coordinates

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

Эта страница кажется "авто-панорамированием", пока маркер перетаскивается; обратите внимание, что его единственным слушателем событий является "dragend". Но я заверяю вас, что эта карта перемещается, пока маркер перетаскивается.

Я пытаюсь сделать то же самое с V3 API без каких-либо успехов. Я даже попытался вызвать map.panTo(), пока значок перетаскивается, с неудовлетворительными результатами: 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());
      });

   }

Мне кажется, что это не сработает, поскольку панорамирование для размещения маркера в центре карты, в то время как карта движется, является фиктивной.

Это так же просто, как V2 API, что делает это автоматически, в то время как V3 API нет? Как я могу достичь этого эффекта с помощью API V3?

Спасибо.

Ответы

Ответ 2

используйте dragend вместо drag. код будет,

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

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

        });

Ответ 3

Событие, которое вы хотите прослушать, это тот, который используется в вашем примере "перетащить", что вы можете сделать, чтобы сделать его менее "поддельным", это добавить задержку, поэтому карты следует за маркером, а не сразу обновляться. Попробуйте следующее:

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