たくさんのマーカーがあり、それらを含む領域のみを表示したいと思います。私は同様の質問の長いリストを見つけました(いくつかについては投稿の下部を参照してください)が、どの解決策も私にはうまくいきません。LatLngBoundsは正しくビルドされていますが、fitBoundsを呼び出すと、結果は次のようになります。
代わりに:
誰かが私のコードに明らかなエラーを見つけることができますか?
var opt = {
zoom: 8,
mapTypeId: google.maps.MapTypeId.ROADMAP
};
map = new google.maps.Map(document.getElementById("map"),opt);
var box = new google.maps.LatLngBounds();
for(var i=0;i<list.length;i++){
var p = new google.maps.LatLng(list[i].lat,list[i].lon);
var marker = new google.maps.Marker({
position: p,
map: map
});
box.extend(p);
}
map.fitBounds(box);
map.panToBounds(box);
私が読んで試した投稿のいくつか(包括的ではないリスト):
- Google Maps v3-ズームレベルの自動化?
- GoogleはV3カスタムマーカー画像とfitBounds()をマップします
- fitBoundsを使用したGoogleマップはズームしません
- Googleマップのfitbounds()apiV3は境界に適合しません
編集:これは、(私のアプリケーションで行っているように)マップが最初に非表示になり、後でのみ表示される場合に実際に発生します。私はそれをこのように隠します:
$('#map').hide();
そしてそれを見せてください:
$('#map').show(function(){
//this is necessary because otherwise
//the map will show up in the upper left corner
//until a window resize takes place
google.maps.event.trigger(map, 'resize');
});
これが発生する理由とそれを防ぐ方法(最初に表示されたときにマップを初期化することは別として)に関する手がかりはありますか?
ちなみに、マップオブジェクトを宣言するときにズームと中央を設定すると(つまり、使用しない場合fitBounds()
)、非表示/表示後でもマップは正しく表示されます。ただし、ポイントのリストは他の場所で取得され、事前にどこにあるかわからないため、ズームと中央を設定することはできません。