20

で、マップオブジェクトは、便利なメソッドgetBoundsZoomLevel()を持っていました。私は限界に最も合ったズームレベルを得るために使っていましたが、この最適なズームレベルをどうにか操作して、最終的には望みのズームレベルを設定しました。等価()API v2のでgmaps APIの3

私はAPI v3で同様の機能を見つけることができません。 (v2からv3に移行すると何か不便な経験があります)

実際にmap.fitBounds(),map.getZoom()を操作してsetZoom()をもう一度使用する必要がありますか?それは本当に愚かです!以下は

+2

http://stackoverflow.com/questions/6048975/google-maps-v3-how-to-calculate-the-zoom-を見てみましょう所与のレベルのために –

+0

ありがとう@ Dr.Molle。それはあなたのために自分の関数を書く必要がありますので、私は上記の愚かな解決策を好む哀れみです。しかし、私は[別の問題](http://stackoverflow.com/questions/9843732/how-to-affect-the-grace-margin-of-map-fitbounds)、あなたのリンクを使用していただきありがとうございます! – TMS

+0

+1 - 私はあなたがより多くの議決権を受け取っていないのに驚いています。 –

答えて

27

私が実装した機能である:

/** 
* 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; 
} 
+0

ありがとう!あなたのコードは古いv2 getZoomByBoundsと同じ値を返します –

+0

+1優れた仕事...うまくいきます。 TY –

+0

@Engineer hats off – Jaykishan