読者です 読者をやめる 読者になる 読者になる

google map v3 fitBounds 微調整

markerを動的に用意して、fitBounds()を呼んでやると、いい感じにmarkerが収まるように
自動で調整してくれる便利メソッドがあります。
Google Maps JavaScript API V3 Reference  |  Google Maps JavaScript API  |  Google Developers
 
しかし、makerの件数が1件だったり、marker同士が近すぎる場合、
拡大されすぎてしまうという問題があります。

解決方法

Google Maps v3 fitBounds() Zoom too close for single marker - Stack Overflow

緯度経度のrangeを取得しておいて、その差が一定範囲を超えない場合は
extend()で拡張を行うという荒技で対応してみました。

var margin = 0.004;
if (markers.length === 1 || latRng < margin || lngRng < margin ) {
  var extendPoint1 = new google.maps.LatLng(bounds.getNorthEast().lat() + margin, bounds.getNorthEast().lng() + margin);
  var extendPoint2 = new google.maps.LatLng(bounds.getNorthEast().lat() - margin, bounds.getNorthEast().lng() - margin);
  bounds.extend(extendPoint1);
  bounds.extend(extendPoint2);
}
map.fitBounds(bounds);

なるほどね。