1. ホーム
  2. javascript

[解決済み] Google Maps v3:fitBounds使用時に最小ズームレベルを強制する

2023-05-28 19:48:45

質問

地図上に一連のマーカーを描画しています(v3 of the maps apiを使用)。

v2では以下のようなコードでした。

  bounds = new GLatLngBounds();

  ... loop thru and put markers on map ...
  bounds.extend(point);
  ... end looping

  map.setCenter(bounds.getCenter());
  var level = map.getBoundsZoomLevel(bounds);
  if ( level == 1 ) 
    level = 5;
  map.setZoom(level > 6 ? 6 : level);

そしてそれは、地図上に常に適切なレベルの詳細が表示されることを保証するためにうまく機能しました。

私はこの機能を v3 で複製しようとしていますが、setZoom と fitBounds が協調していないようです。

... loop thru and put markers on the map
  var ll = new google.maps.LatLng(p.lat,p.lng);
  bounds.extend(ll);
... end loop

var zoom = map.getZoom();
map.setZoom(zoom > 6 ? 6 : zoom);
map.fitBounds(bounds);

いろいろな順列を試しましたが(たとえば、setZoomの前にfitBoundsを移動する)、setZoomで行うことは何もマップに影響を与えないようです。 私は何かを見逃しているのでしょうか? これを行う方法はありますか?

どのように解決するのですか?

Google Groups のこのディスカッション 私は、基本的にfitBoundsを行うとき、ズームは非同期に起こるので、ズームとboundsの変更イベントをキャプチャする必要があることを発見しました。 最後の投稿にあるコードは、小さな修正で私のために動作しました...そのままでは15以上のズームを完全に止めてしまうので、4番目の投稿のアイデアを使用して、初回のみそれを行うようにフラグを設定するようにしたのです。

// Do other stuff to set up map
var map = new google.maps.Map(mapElement, myOptions);
// This is needed to set the zoom after fitbounds, 
google.maps.event.addListener(map, 'zoom_changed', function() {
    zoomChangeBoundsListener = 
        google.maps.event.addListener(map, 'bounds_changed', function(event) {
            if (this.getZoom() > 15 && this.initialZoom == true) {
                // Change max/min zoom here
                this.setZoom(15);
                this.initialZoom = false;
            }
        google.maps.event.removeListener(zoomChangeBoundsListener);
    });
});
map.initialZoom = true;
map.fitBounds(bounds);

お役に立てれば幸いです。

アンソニー