gratis google georreferenciación ejemplos javascript google-maps google-maps-api-3

javascript - georreferenciación - google maps free api



Google Maps Api v3-getBounds no está definido (5)

Bueno, no estoy seguro si llego demasiado tarde, pero esta es mi solución usando el complemento gmaps.js :

map = new GMaps({...}); // bounds loaded? if not try again after 0.5 sec var check_bounds = function(){ var ok = true; if (map.getBounds() === undefined) ok = false; if (! ok) setTimeout(check_bounds, 500); else { //ok to query bounds here var bounds = map.getBounds(); } } //call it check_bounds();

Estoy cambiando de la API v2 a la v3 de Google Maps y tengo un problema con la función gMap.getBounds() .

Necesito obtener los límites de mi mapa después de su inicialización.

Aquí está mi código javascript:

var gMap; $(document).ready( function() { var latlng = new google.maps.LatLng(55.755327, 37.622166); var myOptions = { zoom: 12, center: latlng, mapTypeId: google.maps.MapTypeId.ROADMAP }; gMap = new google.maps.Map(document.getElementById("GoogleMapControl"), myOptions); alert(gMap.getBounds()); } );

Entonces ahora me alerta que gMap.getBounds() no está definido.

Intenté obtener los valores getBounds en el evento click y me funciona, pero no puedo obtener los mismos resultados en el evento load map.

También getBounds funciona bien mientras el documento se carga en Google Maps API v2, pero falla en V3.

¿Podría ayudarme a resolver este problema?


Debería estar funcionando, al menos de acuerdo con la documentación de getBounds (). Sin embargo:

var gMap; $(document).ready(function() { var latlng = new google.maps.LatLng(55.755327, 37.622166); var myOptions = { zoom: 12, center: latlng, mapTypeId: google.maps.MapTypeId.ROADMAP }; gMap = new google.maps.Map(document.getElementById("GoogleMapControl"), myOptions); google.maps.event.addListenerOnce(gMap, ''idle'', function(){ alert(this.getBounds()); }); });

Véalo trabajar here .


En los primeros días de la API v3, el método getBounds() requería que los mosaicos del mapa terminaran de cargarse para que devolviera los resultados correctos. Sin embargo, ahora parece que puedes escuchar el evento bounds_changed , que se dispara incluso antes del evento tilesloaded :

<!DOCTYPE html> <html> <head> <meta http-equiv="content-type" content="text/html; charset=UTF-8"/> <title>Google Maps v3 - getBounds is undefined</title> <script src="http://maps.google.com/maps/api/js?sensor=false" type="text/javascript"></script> </head> <body> <div id="map" style="width: 500px; height: 350px;"></div> <script type="text/javascript"> var map = new google.maps.Map(document.getElementById("map"), { zoom: 12, center: new google.maps.LatLng(55.755327, 37.622166), mapTypeId: google.maps.MapTypeId.ROADMAP }); google.maps.event.addListener(map, ''bounds_changed'', function() { alert(map.getBounds()); }); </script> </body> </html>


En otros comentarios aquí, se aconseja usar el evento "bounds_changed" sobre "inactivo", con lo que estoy de acuerdo. Ciertamente bajo IE8 que desencadena "inactivo" antes de "bounds_changed" en mi máquina de desarrollo al menos, dejándome con una referencia a null en getBounds.

Sin embargo, el evento "bounds_changed" se activará continuamente cuando arrastres el mapa. Por lo tanto, si desea utilizar este evento para comenzar a cargar marcadores, será pesado en su servidor web.

Mi solución de navegador múltiple a este problema:

google.maps.event.addListenerOnce(gmap, "bounds_changed", function(){ loadMyMarkers(); google.maps.event.addListener(gmap, "idle", loadMyMarkers); });


Estaba diciendo que la solución de Salman es mejor porque el evento idle se llama antes que el tilesloaded , ya que espera a que se carguen todas las teselas. Pero en una mirada más cercana, parece que se ha llamado a bounds_changed incluso antes y también tiene más sentido, ya que estás buscando los límites, ¿no? :)

Entonces mi solución sería:

google.maps.event.addListenerOnce(gMap, ''bounds_changed'', function(){ alert(this.getBounds()); });