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
idle
evento se dispara antes deltilesloaded
evento? Para mí, eltilesloaded
evento se dispara constantemente antes delidle
evento.Decía que la solución de Salman es mejor porque el
idle
evento 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_changed
se 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_changed
no 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