getBounds() w Google Maps API v3

Jeśli musisz znać szerokości i długości narożników dla widocznego obszaru mapy google, prawdopodobnie użyjesz czegoś takiego jak getBounds();

W Google Maps Api v2, aby je uzyskać napisałbyś coś takiego:

var bounds = map.getBounds();
var southWest = bounds.getSouthWest();
var northEast = bounds.getNorthEast();

Jednak w API v3 otrzymasz błąd: „bounds is undefined”.

Aby uzyskać szerokości i długość należy przenieść getBounds() do event listenera.

Najczęściej zapewne będzie to bounds_changed:

<script type="text/javascript"> 
         var map = new google.maps.Map(document.getElementById("map"), {
                zoom: 10,
                center: new google.maps.LatLng(lat, lng),
                mapTypeId: google.maps.MapTypeId.ROADMAP
         });
         google.maps.event.addListener(map, 'bounds_changed', function() {
                var bounds = map.getBounds();
                var ne = bounds.getNorthEast();
                var sw = bounds.getSouthWest();
                //zrób cokolwiek z uzyskanymi danymi
         });
</script>

Opis zdarzenia bounds_changed w dokumentacji to mniej więcej: „Zdarzenie wywoływane jest kiedy granice widocznego obszaru uległy zmianie.

Wydaje się, że jest to najlepszy moment aby uzyskać te granice. Jednak jeśli chcesz wykonać jeszcze w tym ajaxowe zapytanie, to za każdym razem gdy widok, pozycja mapy się zmieni to zapytanie będzie wywoływane. W większości przypadków nie ma potrzeby go wywoływać dopóki nie będzie finalnego widoku mapy.

Myślę, że lepszym rozwiązaniem będzie użycie zdarzenia „idle”. W szczególności jeśli chcemy jeszcze wykonać zapytanie ajaxowe. Opis: „Zdarzenie wywoływane jest kiedy mapa staje się nieaktywna/bezczynna po przesuwaniu lub zoomowaniu.” Tak więc mój kod wygląda następująco:

<script type="text/javascript">
         var map = new google.maps.Map(document.getElementById("map"), {
                zoom: 10,
                 center: new google.maps.LatLng(lat, lng),
                 mapTypeId: google.maps.MapTypeId.ROADMAP
         });
         google.maps.event.addListener(map, 'idle', function() {
                var bounds = map.getBounds();
                var ne = bounds.getNorthEast();
                var sw = bounds.getSouthWest();
                //zrób cokolwiek z uzyskanymi danymi
         });
</script>

Jednak możesz wybrać zdarzenie które będzie pasowało do Twoich potrzeb, nie moich ;o) Wystarczy że przeczytasz ich opis w dokumentacji na temat google.maps.Map class – sekcja events i zdecydujesz, które z nich jest najlepsze dla Ciebie.