API v2では、マップオブジェクトに便利なメソッド getBoundsZoomLevel() がありました。これを使用して、境界に最適なズームレベルを取得し、この最適なズームレベルを何らかの方法で操作して、最後に目的のズームレベルを設定しました。
API v で同様の関数が見つかりません。 (v2からv3に移行するときの継続的な苛立たしい経験)
本当にmap.fitBounds()
、map.getZoom()
を使用し、操作してsetZoom()
を再度使用する必要がありますか?それは本当にばかです!
以下は私が実装した関数です:
/**
* Returns the zoom level at which the given rectangular region fits in the map view.
* The zoom level is computed for the currently selected map type.
* @param {google.maps.Map} map
* @param {google.maps.LatLngBounds} bounds
* @return {Number} zoom level
**/
function getZoomByBounds( map, bounds ){
var MAX_ZOOM = map.mapTypes.get( map.getMapTypeId() ).maxZoom || 21 ;
var MIN_ZOOM = map.mapTypes.get( map.getMapTypeId() ).minZoom || 0 ;
var ne= map.getProjection().fromLatLngToPoint( bounds.getNorthEast() );
var sw= map.getProjection().fromLatLngToPoint( bounds.getSouthWest() );
var worldCoordWidth = Math.abs(ne.x-sw.x);
var worldCoordHeight = Math.abs(ne.y-sw.y);
//Fit padding in pixels
var FIT_PAD = 40;
for( var zoom = MAX_ZOOM; zoom >= MIN_ZOOM; --zoom ){
if( worldCoordWidth*(1<<zoom)+2*FIT_PAD < $(map.getDiv()).width() &&
worldCoordHeight*(1<<zoom)+2*FIT_PAD < $(map.getDiv()).height() )
return zoom;
}
return 0;
}