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
// Adjust (function(){ for (var i = 0; i < markers.length; i++) { while (!map.getBounds().containsLatLng(markers[i].getLatLng())) { map.zoomOut(); } } })();
V3
// 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'); }); })();