1

刚刚开始将我们的地图从 API 的 V2 转换为 v3。

到目前为止遇到的一个问题是,当 InfoWindow 打开并放大地图时,InfoWindow 将移出地图并最终不可见,这与 V2 中的行为不同。在 V2 中,InfoWindow 始终处于可见状态。

V2 地图: http: //www.stroud.gov.uk/docs/housing/tenant_map_v2.asp

V3 地图: http: //www.stroud.gov.uk/docs/housing/tenant_map_v3.asp

只需单击任何标记以打开它的信息窗口,然后使用普通缩放控件放大地图。

有没有办法保持 V2 地图中的行为?

谢谢,迈克


我想出了一个可行的解决方案。URL 如上,但使用tenant_map.asp

var currentInfoWindow = null; // new global scope variable to hold current open infoWindow

在我添加的 google.maps.event.addListener(newMarker, "click" 函数中:

currentInfoWindow = this;

添加一个 zoom_changed 监听器:

google.maps.event.addListener(theMap, "zoom_changed", function () {
    if (currentInfoWindow != null) {
        infoWindow.open(theMap, currentInfoWindow);
    }
});

和一个 infoWindow closeclick 监听器:

google.maps.event.addListener(infoWindow, "closeclick", function () {
    currentInfoWindow = null;
});

似乎工作正常,缩放时做一点平移,但这是我迄今为止唯一要做的事情。

它看起来不如V2地图,所以如果其他人有更好的解决方案,请发布。

4

2 回答 2

0

在我看来,因为 V2 地图在您缩放时会直接缩放到最后一个突出显示的标记上。V3 只是放大地图当前居中的位置。如何让标记单击事件处理程序将地图重新​​集中在该标记上?

于 2012-05-17T12:37:51.703 回答
0

这是一个将信息窗口保持在适当位置的缩放功能。我正在使用自己的缩放控件并调用zoomBy(1)放大一个级别或zoomBy(-2)缩小两个级别。

var helperOverlay = new google.maps.OverlayView();
helperOverlay.draw = function(){};
helperOverlay.setMap(map);

function zoomBy(delta) {
  var newZoom = map.getZoom() + delta;
  if ( newZoom < 0 ) return;
  var projection = helperOverlay.getProjection();
  if ( projection ) { // projection may be undefined (if the overlay is not ready I guess)
    var center = projection.fromLatLngToContainerPixel(map.getCenter());
    var focus  = projection.fromLatLngToContainerPixel(infoWindow.getPosition());
    for (var i = Math.abs(delta); i > 0; i--)
      center = (delta > 0) ?
        new google.maps.Point((center.x + focus.x)/2, (center.y + focus.y)/2) :
        new google.maps.Point(center.x * 2 - focus.x, center.y * 2 - focus.y);
    map.setCenter(projection.fromContainerPixelToLatLng(center));
  }
  map.setZoom(newZoom);
}

数学是从这个滚轮缩放实现中借来的。如果我们可以调用内置的滚轮缩放实现传递信息窗口的位置,那就太好了。

于 2013-03-03T11:24:24.420 回答