首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >谷歌地图v3:强制最小。使用fitBounds时的缩放级别

谷歌地图v3:强制最小。使用fitBounds时的缩放级别
EN

Stack Overflow用户
提问于 2010-06-07 21:22:02
回答 6查看 86K关注 0票数 82

我正在地图上绘制一系列标记(使用maps api的v3 )。

在v2中,我有以下代码:

代码语言:javascript
复制
  bounds = new GLatLngBounds();

  ... loop thru and put markers on map ...
  bounds.extend(point);
  ... end looping

  map.setCenter(bounds.getCenter());
  var level = map.getBoundsZoomLevel(bounds);
  if ( level == 1 ) 
    level = 5;
  map.setZoom(level > 6 ? 6 : level);

这可以很好地确保地图上始终显示适当的细节级别。

我正在尝试在v3中复制此功能,但setZoom和fitBounds似乎并不合作:

代码语言:javascript
复制
... loop thru and put markers on the map
  var ll = new google.maps.LatLng(p.lat,p.lng);
  bounds.extend(ll);
... end loop

var zoom = map.getZoom();
map.setZoom(zoom > 6 ? 6 : zoom);
map.fitBounds(bounds);

我尝试过不同的排列方式(例如,将fitBounds移到setZoom之前),但我对setZoom所做的任何操作似乎都不会影响映射。我是不是遗漏了什么?有没有办法做到这一点?

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2010-06-07 22:24:49

this discussion on Google Groups,我发现基本上在执行fitBounds时,缩放是异步发生的,因此需要捕获缩放和边界更改事件。最后一篇文章中的代码对我来说是有效的,只需要做一点小小的修改。因为它会阻止你完全放大超过15,所以使用了第四篇文章中的想法,设置了一个标志,只在第一次做。

代码语言:javascript
复制
// Do other stuff to set up map
var map = new google.maps.Map(mapElement, myOptions);
// This is needed to set the zoom after fitbounds, 
google.maps.event.addListener(map, 'zoom_changed', function() {
    zoomChangeBoundsListener = 
        google.maps.event.addListener(map, 'bounds_changed', function(event) {
            if (this.getZoom() > 15 && this.initialZoom == true) {
                // Change max/min zoom here
                this.setZoom(15);
                this.initialZoom = false;
            }
        google.maps.event.removeListener(zoomChangeBoundsListener);
    });
});
map.initialZoom = true;
map.fitBounds(bounds);

希望这能有所帮助,

安东尼。

票数 144
EN

Stack Overflow用户

发布于 2011-12-01 01:43:17

Anthony的解决方案非常好。我只需要修复初始页面加载的缩放(确保你一开始没有放大太远),这对我来说就是诀窍:

代码语言:javascript
复制
var zoomChangeBoundsListener =
    google.maps.event.addListener(map, 'bounds_changed', function(event) {
        google.maps.event.removeListener(zoomChangeBoundsListener);
        map.setZoom( Math.min( 15, map.getZoom() ) );
    });


map.fitBounds( zoomBounds );
票数 20
EN

Stack Overflow用户

发布于 2014-07-01 16:58:54

您还可以在调用fitBounds()之前设置maxZoom选项,然后重置该值:

代码语言:javascript
复制
if(!bounds.isEmpty()) {
    var originalMaxZoom = map.maxZoom;
    map.setOptions({maxZoom: 18});
    map.fitBounds(bounds);
    map.setOptions({maxZoom: originalMaxZoom});
}
票数 19
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2989858

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档