15

マーカーのドラッグ中にマップをパンする方法の 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 は行わないのと同じくらい簡単ですか? V3 API でこの効果を得るにはどうすればよいですか?

ありがとう。

4

4 に答える 4

19

ドラッグの代わりにドラグエンドを使用してください。コードは、

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

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

        });
于 2010-08-28T04:58:38.407 に答える
12

Google はこれを修正しました: http://code.google.com/p/gmaps-api-issues/issues/detail?id=2404

http://www.publicgloucester.com/test2.htmlで実際の修正を確認できます。「それは私が望むことをしない」というコメントは無視してください。そのコメントは時代遅れです。

于 2010-12-14T22:00:00.717 に答える
1

聞きたいイベントは、例の「ドラッグ」で使用されているものです。「偽物」に見えないようにするためにできることは、遅延を追加することです。マップはすぐに更新されるのではなく、マーカーに従います。これを試して:

google.maps.event.addListener(marker, "drag", function(event) {
  var point = marker.getPosition();
  window.setTimeout(function(){
    map.panTo(point);
  }, 100);
});
于 2010-09-23T16:55:45.733 に答える
0

弾むアクションを取り戻すためにこれを実装しようとしましたか? http://groups.google.com/group/nycjs/browse_thread/thread/259a325fa980e575

于 2010-10-13T16:21:06.807 に答える