Estou mudando de v2 para v3 google maps api e tenho um problema com a gMap.getBounds()
função.
Preciso obter os limites do meu mapa após sua inicialização.
Aqui está meu 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());
}
);
Então agora ele me alerta que gMap.getBounds()
está indefinido.
Tentei obter valores getBounds no evento click e funciona bem para mim, mas não consigo obter os mesmos resultados no evento load map.
Além disso, getBounds funciona bem durante o carregamento do documento na API do Google Maps v2, mas falha na V3.
Você poderia me ajudar a resolver este problema?
fonte
Ele deve estar funcionando, pelo menos de acordo com a documentação de getBounds (). Mesmo assim:
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()); }); });
Veja funcionando aqui .
fonte
idle
evento seja disparado antes dotilesloaded
evento? Para mim, otilesloaded
evento dispara constantemente antes doidle
evento.Eu estava dizendo que a solução do Salman é melhor porque o
idle
evento é chamado antes dotilesloaded
primeiro, pois espera que todos os tiles sejam carregados. Mas olhando mais de perto, parece quebounds_changed
se chama ainda mais cedo e também faz mais sentido, já que você está procurando os limites, certo? :)Portanto, minha solução seria:
google.maps.event.addListenerOnce(gMap, 'bounds_changed', function(){ alert(this.getBounds()); });
fonte
bounds_changed
não teria funcionado, poisgetBounds()
exigia que os ladrilhos fossem carregados. 1 por sugerir isso. Vou atualizar minha resposta.Em outros comentários aqui, é aconselhável usar o evento "bounds_changed" em vez de "idle", com o qual concordo. Certamente no IE8 que dispara "idle" antes de "bounds_changed" na minha máquina dev, pelo menos, deixando-me com uma referência a null em getBounds.
O evento "bounds_changed", entretanto, será acionado continuamente quando você arrastar o mapa. Portanto, se você quiser usar este evento para começar a carregar marcadores, ele será pesado em seu servidor web.
Minha solução de vários navegadores para este problema:
google.maps.event.addListenerOnce(gmap, "bounds_changed", function(){ loadMyMarkers(); google.maps.event.addListener(gmap, "idle", loadMyMarkers); });
fonte
Bem, não tenho certeza se é tarde demais, mas aqui está minha solução usando o plug-in 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();
fonte