20

En API v2, el objeto de mapa tiene un práctico método getBoundsZoomLevel(). Lo usé para obtener el nivel de zoom que mejor se adapta a los límites, luego manipulé este nivel de zoom óptimo de alguna manera y finalmente configuré el nivel de zoom deseado.Equivalente a getBoundsZoomLevel() en gmaps api 3

No encuentro una función similar en API v3. (Qué experiencia de frustración continua al pasar de v2 a v3)

¿Realmente tengo que usar map.fitBounds(), map.getZoom(), manipular y setZoom() nuevamente? ¡Eso es realmente estúpido!

+2

echar un vistazo a http://stackoverflow.com/questions/6048975/google-maps-v3-how-to-calculate-the-zoom- level-for-a-given-bounds –

+0

Gracias @ Dr.Molle. Es una pena que debe escribir su propia función para eso, así que en este caso prefiero la estúpida solución que presenté arriba. Pero usaré su enlace para [otro problema] (http://stackoverflow.com/questions/9843732/how-to-affect-the-grace-margin-of-map-fitbounds), gracias !! – TMS

+0

+1 - Me sorprende que no hayas recibido más votos. –

Respuesta

27

A continuación se muestra una función que he implementado:

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

¡Gracias! Su código produce los mismos valores que el antiguo v2 getZoomByBounds –

+0

+1 Excelente trabajo ... funciona bien. TY –

+0

@ Sombreros de Ingeniero fuera de – Jaykishan

Cuestiones relacionadas