Google Maps JavaScript API V3のfitBounds()が全然フィットしてくれない件
やりたいこと
google mapでマーカーを複数置いたときに、良い感じにマーカーが全部表示されるようにしたい。こんな感じ。
ためしたこと
fitBounds()でできるかなーと思ってやってみると、どうもズームアウトしすぎてしまうらしい。
var position = [ new google.maps.LatLng(35.681391, 139.766103), new google.maps.LatLng(35.000000, 140.000000) ]; var map = new google.maps.Map(document.getElementById("map"), { mapTypeId: google.maps.MapTypeId.ROADMAP }); var bounds = new google.maps.LatLngBounds(); for (var i = 0, l = position.length; i < l; ++i) { bounds.extend(position[i]); var marker = new google.maps.Marker({ position: position[i], map: map }); } map.fitBounds(bounds);
原因
どうも「航空写真」とかズームのスライダーとかがあるので、その分を差し引いてfitするようになっているっぽい?
javascript - fitbounds() in Google maps api V3 does not fit bounds - Stack Overflow
解決策
fitしないfitBoundsの代わりに、全部のマーカーが入るまでzoomOutしてあげる君を実行する。
var position = [ new google.maps.LatLng(35.681391, 139.766103), new google.maps.LatLng(35.000000, 140.000000) ]; var map = new google.maps.Map(document.getElementById("map"), { zoom: 16, // たくさんズームしておく mapTypeId: google.maps.MapTypeId.ROADMAP }); var centerLat = 0, centerLng = 0; for (var i = 0, l = position.length; i < l; ++i) { centerLat += position[i].lat(); centerLng += position[i].lng(); var marker = new google.maps.Marker({ position: position[i], map: map }); } map.setCenter(new google.maps.LatLng(centerLat / position.length, centerLng / position.length)); google.maps.event.addListenerOnce(map, 'bounds_changed', function() { for (var i = 0, l = position.length; i < l; ++i) { while( !map.getBounds().contains( position[i] ) ) { map.setZoom( map.getZoom() - 1); } } });