相当于gmaps api 3中的getBoundsZoomLevel() [重复]

Posted

技术标签:

【中文标题】相当于gmaps api 3中的getBoundsZoomLevel() [重复]【英文标题】:Equivalent of getBoundsZoomLevel() in gmaps api 3 [duplicate] 【发布时间】:2012-04-07 21:13:15 【问题描述】:

在 API v2 中,地图对象有一个方便的方法 getBoundsZoomLevel()。我用它来获得最适合边界的缩放级别,然后以某种方式操纵这个最佳缩放级别,最后设置所需的缩放级别。

我在API v3 中找不到类似的功能。 (从 v2 迁移到 v3 时,这是多么令人沮丧的经历)

我真的必须再次使用map.fitBounds()map.getZoom()、操纵和setZoom()吗?真是愚蠢!

【问题讨论】:

看看***.com/questions/6048975/… 谢谢@Dr.Molle。可惜你必须为此编写自己的函数,所以在这种情况下,我更喜欢我上面提出的愚蠢的解决方案。但我会用你的链接another problem,谢谢!! +1 - 我很惊讶你没有收到更多的赞成票。 map.fitBounds() 中缺少什么?到目前为止,将地图集中在边界上似乎做得很好,并达到适合地图大小和边界大小的缩放级别 【参考方案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;

【讨论】:

谢谢!您的代码产生与旧 v2 getZoomByBounds 相同的值 +1 出色的工作......效果很好。 TY 可以用(map.getDiv()).style.width代替$(map.getDiv()).width(),也和height一样。 @Jaykishan 我想你的意思是 .offsetWidth 和 .offsetHeight (样式属性可能没有设置) 我一直在寻找这个超过 3 小时。我什至写了一个检查器来检查随机边界,这个函数在我完成的 20,000 次随机检查中起作用。似乎总是与谷歌所说的有界缩放相匹配。

以上是关于相当于gmaps api 3中的getBoundsZoomLevel() [重复]的主要内容,如果未能解决你的问题,请参考以下文章

可以吗? GMap API V2 中的 clearOverlays() 到 Google Maps API V3?

是否有任何 gmap 的 api 函数可以连接 AddressDetails 结构中的地址字符串?

Flutter 谷歌地图插件中的 getbounds

GMaps API - 无响应

GMaps API - 删除默认 POI

Google地图API测试(测试gmap.js)