20

W interfejsie API v2 obiekt mapy miał przydatną metodę: getBoundsZoomLevel(). Użyłem go, aby uzyskać poziom powiększenia, który najlepiej pasuje do granic, a następnie zmanipulował ten optymalny poziom powiększenia i ostatecznie ustawił pożądany poziom powiększenia.Równoważnik getBoundsZoomLevel() w aplecie gmaps 3

Nie mogę znaleźć podobnej funkcji w API v3. (Co za ciągłe frustrujące doświadczenie przy przechodzeniu z wersji v2 na wersję v3)

Czy muszę ponownie używać map.fitBounds(), map.getZoom(), manipulować i setZoom()? To naprawdę głupie!

+2

przyjrzeć http://stackoverflow.com/questions/6048975/google-maps-v3-how-to-calculate-the-zoom- poziom-za-dany-granice –

+0

Dzięki @ Dr.Molle. Szkoda, że ​​musisz napisać własną funkcję, więc w tym przypadku wolę głupie rozwiązanie, które przedstawiłem powyżej. Ale użyję twojego linku dla [innego problemu] (http://stackoverflow.com/questions/9843732/how-to-affect-the-grace-margin-of-map-fitbounds), dzięki! – TMS

+0

+1 - Jestem zaskoczony, że nie otrzymałeś więcej głosów up-voting. –

Odpowiedz

27

Poniżej jest funkcja I wprowadziły:

/** 
* 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

Dziękuję! Twój kod generuje takie same wartości, jak stary v2 getZoomByBounds –

+0

+1 Doskonała praca ... działa dobrze. TY –

+0

@ Kapelusze dla inżynierów off – Jaykishan