我找到了几个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实现此效果?
感谢。
答案 0 :(得分:19)
使用dragend而不是拖动。代码将是,
google.maps.event.addListener(marker, "dragend", function(event) {
var point = marker.getPosition();
map.panTo(point);
});
答案 1 :(得分:12)
Google修复了此问题:http://code.google.com/p/gmaps-api-issues/issues/detail?id=2404
您可以在http://www.publicgloucester.com/test2.html看到修复操作。忽略评论“它不能做我想要的”;该评论已过时。
答案 2 :(得分:1)
您要收听的事件是您的示例中使用的“拖动”,您可以做些什么来使其看起来更少“虚假”是添加延迟,因此地图跟随标记而不是立即更新。试试这个:
google.maps.event.addListener(marker, "drag", function(event) {
var point = marker.getPosition();
window.setTimeout(function(){
map.panTo(point);
}, 100);
});
答案 3 :(得分:0)
你有没有尝试过这个来实现这个有弹性的行动? http://groups.google.com/group/nycjs/browse_thread/thread/259a325fa980e575