Estoy cambiando de la api de google maps v2 a v3 y tengo un problema con la gMap.getBounds()función.
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 advierte que gMap.getBounds()no está definido.
Intenté obtener valores de getBounds en el evento de clic y funciona bien para mí, pero no puedo obtener los mismos resultados en el evento de mapa de carga.
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?
fuente

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 funcionando aquí .
fuente
idleevento se dispara antes deltilesloadedevento? Para mí, eltilesloadedevento se dispara constantemente antes delidleevento.Decía que la solución de Salman es mejor porque el
idleevento se llama antes que el anteriortilesloaded, ya que espera a que se carguen todos los mosaicos. Pero en una mirada más cercana, parece quebounds_changedse llama incluso antes y también tiene más sentido, ya que estás buscando los límites, ¿verdad? :)Entonces mi solución sería:
google.maps.event.addListenerOnce(gMap, 'bounds_changed', function(){ alert(this.getBounds()); });fuente
bounds_changedno habría funcionado, ya quegetBounds()requería que se cargaran los mosaicos. +1 por sugerirlo. Actualizaré mi respuesta.En otros comentarios aquí, se recomienda usar el evento "limits_changed" en lugar de "idle", con lo que estoy de acuerdo. Ciertamente, bajo IE8 que activa "inactivo" antes de "límites_cambiados" en mi máquina de desarrollo al menos, dejándome con una referencia a nulo en getBounds.
Sin embargo, el evento "limits_changed" se activará continuamente cuando arrastre el mapa. Por lo tanto, si desea utilizar este evento para comenzar a cargar marcadores, será pesado para su servidor web.
Mi solución de navegador múltiple para este problema:
google.maps.event.addListenerOnce(gmap, "bounds_changed", function(){ loadMyMarkers(); google.maps.event.addListener(gmap, "idle", loadMyMarkers); });fuente
Bueno, no estoy seguro si llegué demasiado tarde, pero aquí está 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();fuente