Przechodzę z v2 na v3 google maps api i mam problem z gMap.getBounds()
funkcją.
Muszę poznać granice mojej mapy po jej inicjalizacji.
Oto mój kod 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());
}
);
Więc teraz ostrzega mnie, że gMap.getBounds()
jest niezdefiniowana.
Próbowałem uzyskać wartości getBounds w zdarzeniu kliknięcia i działa to dobrze, ale nie mogę uzyskać takich samych wyników w zdarzeniu ładowania mapy.
Również getBounds działa dobrze podczas ładowania dokumentu w Google Maps API v2, ale nie działa w V3.
Czy mógłbyś mi pomóc rozwiązać ten problem?
źródło
Powinno działać, przynajmniej zgodnie z dokumentacją getBounds (). Niemniej jednak:
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()); }); });
Zobacz, jak działa tutaj .
źródło
idle
zdarzenie zostało uruchomione przedtilesloaded
wydarzeniem? Dla mnietilesloaded
impreza stale strzela przedidle
wydarzeniem.Mówiłem, że rozwiązanie Salmana jest lepsze, ponieważ
idle
zdarzenie jest wywoływane wcześniej niż totilesloaded
, ponieważ czeka na załadowanie wszystkich kafelków. Ale jeśli przyjrzeć się bliżej, wydaje się, żebounds_changed
nazywa się to jeszcze wcześniej i ma też większy sens, ponieważ szukasz granic, prawda? :)Więc moim rozwiązaniem byłoby:
google.maps.event.addListenerOnce(gMap, 'bounds_changed', function(){ alert(this.getBounds()); });
źródło
bounds_changed
nie zadziałałoby, ponieważgetBounds()
wymagało to załadowania płytek. +1 za zasugerowanie. Zaktualizuję odpowiedź.W innych komentarzach zaleca się używanie zdarzenia „bounds_changed” zamiast „idle”, z czym się zgadzam. Z pewnością pod IE8, który wyzwala "idle" przed "bounds_changed" przynajmniej na mojej maszynie deweloperskiej, pozostawiając mi odniesienie do null na getBounds.
Jednak zdarzenie „bounds_changed” będzie wyzwalane w sposób ciągły podczas przeciągania mapy. W związku z tym, jeśli chcesz użyć tego zdarzenia do rozpoczęcia ładowania znaczników, będzie to ciężkie dla twojego serwera internetowego.
Moje rozwiązanie tego problemu dla wielu przeglądarek:
google.maps.event.addListenerOnce(gmap, "bounds_changed", function(){ loadMyMarkers(); google.maps.event.addListener(gmap, "idle", loadMyMarkers); });
źródło
Cóż, nie jestem pewien, czy jestem za późno, ale oto moje rozwiązanie przy użyciu wtyczki 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();
źródło