1

APIのV2からv3へのマップの変換を開始しました。

これまでのところ、インフォウィンドウが開いていてマップがズームインされると、インフォウィンドウがマップから移動して最終的には表示されなくなるという問題が1つあります。これは、V2とは異なる動作です。V2では、インフォウィンドウは常に表示されたままです。

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

およびinfoWindowcloseclickリスナー:

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

うまく機能しているようです。ズームするときに少しパンしますが、これまでのところ、これが唯一の作業です。

V2マップほど見栄えが良くないので、他の誰かがより良い解決策を持っているなら、投稿してください。

4

2 に答える 2

0

これは、情報ウィンドウを所定の位置に保持するズーム機能です。独自のズームコントロールを使用してzoomBy(1)、1つのレベルにズームインするかzoomBy(-2)、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 に答える
0

V2マップをズームすると、最後に強調表示されたマーカーに直接ズームするため、私には思えます。V3は、マップが現在中央に配置されている場所にズームするだけです。マーカークリックイベントハンドラーをそのマーカーのマップの中心に戻すのはどうですか?

于 2012-05-17T12:37:51.703 に答える