Goolge Maps V3のgetBounds()がis undefinedではまる

追記:
最初の trigger を bounds_chaged でやってました(強制的に駆動させてました)が、LatLngBounds クラスのオブジェクトの取得ができていませんでした。そこで、最初の trigger は idle に変更しました><


V2 でマーカーがすべて入るまでズームを下げる(マップ内にマーカーが包含される)ものを作っていました
V2 を V3 に組みかえていたときにはまったのでメモ


ちゃんと読めば書いてあるのですが。。。
http://code.google.com/intl/ja/apis/maps/documentation/javascript/reference.html#Map

現在のビューポートの緯度経度の範囲を返します。地図がまだ初期化されていない(map Type がまだ null のままなど)、あるいは中心位置とズームがまだ設定されていない場合、結果は null となります。

すること

マップの矩形にすべてのMarker クラスのオブジェクトが含まれるようにする

それでは

V2

markers*1、map*2

// Adjust
(function(){        
    for (var i = 0; i < markers.length; i++) {
        while (!map.getBounds().containsLatLng(markers[i].getLatLng())) {
            map.zoomOut();
        }
    }
})();
V3

markers*3、map*4

// Adjust
(function(){
    google.maps.event.addListenerOnce(map, 'idle', function() {
        var i = 0;
        var mapEventListener = google.maps.event.addListener(map, 'bounds_changed', function() {
            if (!map.getBounds().contains(markers[i].getPosition())) {
                map.setZoom(map.getZoom() - 1);
            } else {
                i++;
                if (i >= markers.length) {
                    google.maps.event.removeListener(mapEventListener);
                } else {
                    google.maps.event.trigger(map, 'bounds_changed');
                }
            }
        });
        google.maps.event.trigger(map, 'bounds_changed');
    });
})();

*1:Marker クラスのオブジェクトの配列

*2:はマップ クラスのオブジェクト

*3:Marker クラスのオブジェクトの配列

*4:はマップ クラスのオブジェクト