Эквивалент getBoundsZoomLevel () в gmaps api 3 [дубликат]

На этот вопрос уже есть ответ здесь:

Google Maps V3 - Как рассчитать уровень масштабирования для заданных границ 8 ответов

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

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

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

 Eddie B24 мар. 2013 г., 02:49
+1 - я удивлен, что вы не получили больше голосов за.
 chrismarx22 мая 2013 г., 06:29
что вам не хватает в map.fitBounds ()? до сих пор это, кажется, делает довольно хорошую работу, центрируя карту на границах, и переходя к уровню масштабирования, который соответствует размеру карты и размеру границ
 Dr.Molle24 мар. 2012 г., 01:57
 TMS24 мар. 2012 г., 08:51
Спасибо, доктор Молл. Жаль, что вы должны написать свою собственную функцию для этого, поэтому в этом случае я предпочел глупое решение, которое я представил выше. Но я буду использовать вашу ссылку длядругая проблема, Спасибо!!

Ответы на вопрос(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;
}
 Eddie B24 мар. 2013 г., 02:49
+1 Отличная работа ... работает хорошо. TY
 Jaykishan17 дек. 2013 г., 10:14
@ Инженер снимает шляпу
 ParoX06 мар. 2016 г., 08:40
Я искал это более 3 часов. Я даже написал чекер, который проверял бы случайные границы, и эта функция работает из 20 000 случайных проверок, которые я сделал. Кажется, всегда соответствует тому, что говорит Google, будет ограниченный зум.
 Kirk Ouimet23 янв. 2013 г., 05:34
Спасибо! Ваш код выдает те же значения, что и старый v2 getZoomByBounds
 Jaykishan17 дек. 2013 г., 10:22
Можно использовать (map.getDiv ()). Style.width вместо $ (map.getDiv ()). Width (), также как и высота.

Ваш ответ на вопрос