Google mapsでsetZoom/getZoomが効かないとき

投稿者: | 2017年2月19日

Google mapsを使っていて、マップの倍率を操作するsetZoomとgetZoomが使用できないことがありましたので、そのときの対策方法です。

まず、動かなかったコードですが、次のようになります。

map.fitBounds (bounds);
if (map.getZoom() > 10){
    map.setZoom(10);
}

fitBoundsを使って、指定した地点を自動的にすべて含むように調整した後、ズームしすぎていたらズームを調整するというものです。
しかし、これではズームの調整が上手くいきません。
これを解消するには次のようにコーディングします。

map.fitBounds (bounds);
var listener = google.maps.event.addListener(map, “idle”, function() {
    if (map.getZoom() > 10){
        map.setZoom(10);
    }
    google.maps.event.removeListener(listener);
});

こちらはズームの調整をマップがidleになったときに行うようにしました。
このようにすると上手く動作します。

おそらくfitBoundsは非同期で動作するため、fitBoundsを実行した直後にズームの調整をしようとしても動かないのだと思います。