2012-03-08 98 views
5

如果将Google地图放大,世界将开始水平重复。使用.getBounds()似乎返回显示的地图图像边缘的经度。但是我想为现实世界的观点获得最小和最大的经度。在Google Maps API V3中获取非包裹地图边界

例如,在这个图像中.getBounds()表示经度的范围在116到37度之间(宽度为-79度!)。我正在寻找的范围是-244到+37。 (或甚至-180至+37,因为这是世界是周围的地图中心可视的极端。)

google-map-bounds1

而另一示例。在这里,我正在寻找-180到+180 ... google-map-bounds2

你可以自己试一试这里... http://jsfiddle.net/spiderplant0/EBNYT/

(道歉,如果在此之前已经回答了 - 我找到了一些旧类似的问题,但似乎没有满意的答案)。

+0

参见,http://stackoverflow.com/questions/8032258/google-maps-bounds-on-minimal-zoom这是一样的问题,但我不会将你的标记为欺骗,因为你的姿势更清晰,图片也有帮助。 – Cheeso 2012-03-09 18:18:58

回答

2

今天我遇到了同样的问题,但我想我终于明白了。

在上面的第一个场景中,只要地图没有环绕,就可以使用map.getBounds()。toSpan()获取经度宽度.....。

对于地图环绕的第二个场景,我扩展了google.maps.OverlayView()以获取google.maps.MapCanvasProjection对象。从那里你可以调用功能getWorldWidth()

它会给你像素的世界宽度,然后你可以比较它与你的地图容器的宽度。如果你的容器更大,你的地图已经缠绕。

不知道该函数是否适用于此,但它的工作原理。

1

通过user1292293提出的答案为我工作(谷歌地图API V3)

扩展google.maps.OverlayView()

function MyMapOverlay() {} 
MyMapOverlay.prototype = new google.maps.OverlayView(); 
MyMapOverlay.prototype.onAdd = function() {}; 
MyMapOverlay.prototype.draw = function() {}; 
MyMapOverlay.prototype.onRemove = function() {}; 

添加叠加地图

var map = new google.maps.Map(domContainer, {...}); 
var overlay = new MyMapOverlay(); 
overlay.setMap(map); 

的检查地图是否包裹:

var proj = overlay.getProjection(); 
var wwidth = 0; 
if (proj) wwidth = proj.getWorldWidth(); 
var mapsWrapsAround=false; 
if (__wwidth > 0 && __wwidth < domContainer.width()) mapsWrapsAround = true; 
0

我使用rebpp的答案来防止地图通过设置getWorldWidth来包装。这是我创建的MapWrappingPrevent。

要使用这个就叫

var wrapPreventer = new MapWrappingPrevent(_map); 

 /* This class prevents wrapping of a map by adjusting the max-width */ 
     function MapWrappingPrevent(map) { 
      var self = this; 
      this.setMap(map); 
      map.addListener('zoom_changed', function() { 
       self.onZoomChanged(); 
      }); 
     } 
     MapWrappingPrevent.prototype = new google.maps.OverlayView(); 
     MapWrappingPrevent.prototype.onAdd = function() { this.onZoomChanged(); }; 
     MapWrappingPrevent.prototype.draw = function() { }; 
     MapWrappingPrevent.prototype.onRemove = function() { }; 
     MapWrappingPrevent.prototype.onZoomChanged = function() { 
      var proj = this.getProjection(); 
      if (proj) { 
       var wrappingWidth = proj.getWorldWidth(); 
       $(this.getMap().getDiv()).css({'max-width': wrappingWidth + 'px'}) 
      } 
     };