2012-03-08 83 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'}) 
      } 
     };