2012-03-08 41 views
5

Si aleja un mapa de Google, el mundo comenzará a repetirse horizontalmente. El uso de .getBounds() parece devolver la longitud en los bordes de la imagen de mapa mostrada. Pero me gustaría obtener longitudes mínima y máxima para la vista actual del mundo real.Obtenga límites de mapas no envolventes en la API de Google Maps V3

Por ejemplo, en esta imagen .getBounds() dice que la longitud oscila entre 116 y 37 grados (¡dando un ancho de -79 grados!). El rango que estoy buscando es de -244 a +37. (o incluso -180-37 ya que esto es los extremos del mundo que se puede ver en todo el centro del mapa.)

google-map-bounds1

Y otro ejemplo. Aquí estoy buscando -180-180 ... google-map-bounds2

Puede probarlo por ti mismo aquí ... http://jsfiddle.net/spiderplant0/EBNYT/

(Disculpas si esto ha sido respondida antes - Lo que encontrar algún viejo preguntas similares pero ninguna parecía tener respuestas satisfactorias).

+0

Véase también, http://stackoverflow.com/questions/8032258/google-maps-bounds-on-minimal-zoom Es lo mismo pregunta, pero no marcaré a los tuyos como una víctima, porque los tuyos están más claramente planteados y las imágenes ayudan. – Cheeso

Respuesta

2

Me encontré con los mismos problemas hoy, pero creo que finalmente lo descubrí.

En el primer escenario anterior, puede usar map.getBounds(). ToSpan() para obtener el ancho en longitud ..... siempre que el mapa no se ajuste.

Para el segundo escenario donde el mapa se ajusta, extendí el google.maps.OverlayView() para obtener el objeto google.maps.MapCanvasProjection. Desde allí puede llamar a la función getWorldWidth().

Le dará el ancho del mundo en píxeles, luego puede compararlo con el ancho de su contenedor de mapas. Si su contenedor es más grande, su mapa se ha adaptado.

No sé si la función es para esto, pero funciona.

1

La respuesta propuesto por user1292293 trabajó para mí (Google V3 mapa API)

Extensión de google.maps.OverlayView()

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

Añadir superposición al mapa

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

compruebe si el mapa se ajusta:

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

Utilicé la respuesta de rebpp para evitar que el mapa se ajuste configurando getWorldWidth. Aquí está el MapWrappingPrevent que creé.

Para utilizar esto simplemente llamar

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'}) 
      } 
     }; 
Cuestiones relacionadas