Подтвердить что ты не робот

Эквивалент getBoundsZoomLevel() в gmaps api 3

В API v2 у объекта карты был удобный метод getBoundsZoomLevel(). Я использовал его, чтобы получить уровень масштабирования, который лучше всего подходит для границ, затем каким-то образом обработал этот оптимальный уровень масштабирования и, наконец, установил желаемый уровень масштабирования.

Я не могу найти подобную функцию в API v3. (Какое непрерывное разочарование при переходе от v2 к v3)

Нужно ли мне снова использовать map.fitBounds(), map.getZoom(), манипулировать и setZoom()? Это действительно глупо!

4b9b3361

Ответ 1

Ниже приведена функция, которую я реализовал:

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