2012-03-08 10 views
5

Jeśli powiększysz mapę google, świat zacznie się powtarzać w poziomie. Użycie .getBounds() wydaje się zwracać długość geograficzną na krawędziach wyświetlanego obrazu mapy. Chciałbym jednak uzyskać minimalne i maksymalne długości dla aktualnego widoku rzeczywistego świata.Uzyskaj nieosłonięte krawędzie map w Google Maps API V3

Na przykład na tym obrazku .getBounds() mówi, że długość geograficzna wynosi od 116 do 37 stopni (co daje szerokość -79 stopni!). Zakres, którego szukam, to -244 do +37. (lub nawet -180 do +37, gdyż jest to skrajności świata, który jest widoczny na całym mapy.)

google-map-bounds1

I kolejny przykład. Tutaj szukam -180 do +180 ... google-map-bounds2

Można go wypróbować tutaj ... http://jsfiddle.net/spiderplant0/EBNYT/

(Przepraszam jeśli to zostało odebrane przed - znalazłem jakiś stary podobne pytania, ale żadna nie miała satysfakcjonujących odpowiedzi).

+0

Zobacz także http://stackoverflow.com/questions/8032258/google-maps-bounds-on-minimal-zoom To samo pytanie, ale nie oznaczę twojego jako dupy, bo twoja jest wyraźniej postawiona, a zdjęcia pomagają. – Cheeso

Odpowiedz

2

Wpadłem dziś na te same problemy, ale myślę, że w końcu to rozgryzłem.

W pierwszym powyższym scenariuszu można użyć funkcji map.getBounds(). ToSpan(), aby uzyskać szerokość w długości geograficznej ... o ile mapa nie zawija się.

W drugim scenariuszu, w którym mapa się otacza, przedłużyłem google.maps.OverlayView(), aby uzyskać obiekt google.maps.MapCanvasProjection. Stamtąd możesz zadzwonić do funkcji getWorldWidth().

Daje szerokość światową w pikselach, a następnie można ją porównać z szerokością kontenera mapy. Jeśli Twój kontener jest większy, mapa zawinęła się.

Nie wiem, czy funkcja jest przeznaczona do tego, ale działa.

1

Proponowana przez user1292293 odpowiedź pracował dla mnie (V3 map Google API)

Rozbudowa google.maps.OverlayView()

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

Dodaj nakładkę na mapie

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

sprawdź, czy mapa zawija się:

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

Użyłem odpowiedzi z rebpp, aby zapobiec zawijaniu mapy, ustawiając getWorldWidth. Oto stworzony MapWrappingPrevent.

Aby tego używać tylko zadzwonić

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'}) 
      } 
     }; 
Powiązane problemy