2010-08-17 10 views
5

Llamo a getBounds() directamente después de una llamada a fitBounds(), y pensé que obtendría un límite válido a medida que el mapa se recentraliza y se acerca para ajustarse a los límites. Lamentablemente, getBounds() regresa a cero.Google Maps map.getBounds() inmediatamente después de una llamada a map.fitBounds

El código para reproducir este es el siguiente:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:v="urn:schemas-microsoft-com:vml"> 
    <head> 
     <meta http-equiv="content-type" content="text/html; charset=utf-8"/> 
     <script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=true"></script> 

     <style> 
      #map { 
       width: 800px; 
       height: 400px; 
      } 
     </style> 

    </head> 
    <body> 
     <div id='map'></div> 

     <script> 
      var myLatlng1 = new google.maps.LatLng(-38.397, 150.644); 
      var myLatlng2 = new google.maps.LatLng(-34.897, 150.844); 
      var myLatLngBounds = new google.maps.LatLngBounds(myLatlng1, myLatlng2); 

      var myOptions = { 
        mapTypeId: google.maps.MapTypeId.ROADMAP, 
        center: new google.maps.LatLng(0, 0), 
        zoom: 0 
      } 

      var map = new google.maps.Map(document.getElementById("map"), myOptions); 

      map.fitBounds(myLatLngBounds); 

      console.log(map.getMapTypeId()); 
      console.log(map.getZoom()); 
      console.log(map.getBounds()); 
     </script> 
    </body> 
</html> 

¿Hay algo que me falta? No he podido encontrar nada en los documentos sobre esta situación. El más cercano que consigue es una nota en getBounds que dice:

Si el mapa aún no se ha inicializado (es decir, mapType sigue siendo nula), o en el centro y el zoom no se han establecido, entonces el resultado es nulo.

Tenga en cuenta que getZoom no está definido, también. ¿FitBounds() no establece este valor?

EDIT He actualizado el código con un zoom y un centro predeterminados, según las sugerencias de Marcelo.

+0

comas que faltan después HOJA DE RUTA – Marcelo

+0

fija la coma. –

Respuesta

7

Deberá obtener los límites después del evento bounds_changed.

-1

La respuesta está en su propia cita. Tienes que configurar el centro y hacer zoom para que el mapa se inicialice.

Nótese que en la documentación para los MapOptions Especificación del objeto, los valores del centro y del zoom se marcan como requieren:

http://code.google.com/apis/maps/documentation/javascript/reference.html#MapOptions

+0

Eso no resuelve el problema. He actualizado el código según su sugerencia. – Codebeef

+0

En el código que ha publicado, falta una coma después de mapTypeId: google.maps.MapTypeId.ROADMAP El mapa DEBE inicializarse con el centro y el zoom. – Marcelo

+0

Sí, eso fue un error tipográfico cuando actualicé el código en la pregunta. Si realmente ejecuta el código correcto, el comportamiento no cambia. – Codebeef

8

Como @CrazyEnigma suggested, usted puede obtener los límites después del evento bounds_changed es desencadenada:

map.fitBounds(myLatLngBounds); 

google.maps.event.addListener(map, 'bounds_changed', function() { 
    console.log(map.getMapTypeId()); 
    console.log(map.getZoom()); 
    console.log(map.getBounds()); 
}); 

lo anterior podría imprimir el siguiente a la consola:

roadmap 
6 
Object 

Tenga en cuenta que si sólo desea getBounds y hacer algo una vez, se debe reemplazar con addListeneraddListenerOnce (Gracias, @Tomas).

+4

¡debería usar 'addListenerOnce' en su lugar! – TMS

0

Uso addListenerOnce cuando tilesloaded

google.maps.event.addListenerOnce(map, 'tilesloaded', function(){ 
map.setCenter(myLatLngBounds) 
}); 
Cuestiones relacionadas