www.gmapsapi.com

Kompleksowy kurs podstaw API, po którym mapowianie nie będzie miało przed Tobą żadnych tajemnic!

Setki przykładów, kursów i poradników z kodem gotowym do skopiowania i korzystania.

Największa strona o Google Maps API w Polsce, największe źródło informacji w języku polskim.

Ograniczanie zakresu mapy

Ten artykuł dotyczy API w wersji 2

« powrót do listy poradników

Za pomocą obsługi zdarzenia move oraz paru prostych skryptów można w dość prosty sposób ograniczyć obszar, po którym użytkownik mapy będzie mógł się poruszać. Równie proste jest ograniczenie dostępnych poziomów przybliżenia. Obie metody będą tematem tego poradnika.

Ograniczenie poziomu zoom

Zaczniemy od rzeczy prostszej. Ustawienie minimalnego oraz maksymalnego dostępnego poziomu powiększenia można zapisać w pięciu linijkach kodu:

var ograniczenieZoom = [6,9];
var mapy = mapa.getMapTypes();
for (var i=0; i<mapy.length; i++)
{
	mapy[i].getMinimumResolution = function() {return ograniczenieZoom[0];}
	mapy[i].getMaximumResolution = function() {return ograniczenieZoom[1];}
}

Dla każdego typu mapy (np. G_HYBRID_MAP lub G_SATELLITE_MAP) piszemy własną funkcję, zwracającą maksymalny i minimalny dostępny zoom za pomocą odpowiednich metod getMaximumResolution() oraz getMinimumResolution(). Nienazwana funkcja musi zwracać liczbę naturalną, gdzie 0 to najdalsze możliwe oddalenie, a 19 to standardowo najbliższe możliwe przybliżenie. Kod powyżej spowoduje, że mapa będzie posiadać jedynie 4 stopnie przybliżenia: 6, 7, 8 i 9

Uwagi

  • powyższy kod musi znaleźć się za inicjalizacją mapy
  • maksymalny poziom zoom dla mapy fizycznej wynosi 15, dla mapy zwykłej 17, a dla map hybrydowych i satelitarnych wynosi on 19
  • początkowy poziom przybliżenia powinien zawierać się w ustalonym przedziale (w przykładzie powyżej od 6 - 9)

Ograniczenie obszaru przesuwania

Nieco trudniejsze jest ograniczenie obszaru, który można oglądać na mapie. Na potrzeby przykładu przyjmiemy obszar, określony narożnymi punktami o współrzędnych (49.49667452747044,13.88671875) i (54.53223884916208,23.46679687). Taki prostokąt pokrywa mniej więcej powierzchnię Polski. W trakcie przesuwania będziemy badać, czy środek mapy znajduje się w dozwolonym przedziale, i jeśli tak nie jest, to obliczymy współrzędne punktu, który w obszarze będzie się mieścił, i na nim wycentrujemy mapę. Stworzy to efekt złudzenia, że faktycznie mapa nie może zostać przesunięta dalej.

Dozwolony obszar będziemy przechowywać w odpowiedniej zmiennej typu GLatLngBounds():

var ograniczenieObszar = new GLatLngBounds();
ograniczenieObszar.extend(new GLatLng(49.49667452747044,13.88671875));
ograniczenieObszar.extend(new GLatLng(54.53223884916208,23.46679687));

Zaczynamy od obsługi odpowiedniego zdarzenia - po jego wystąpieniu wykonana zostanie funkcja sprawdz():

GEvent.addListener(mapa,'move',sprawdz);

Wygląda ona następująco:

function sprawdz()
{
	if(!ograniczenieObszar.contains(mapa.getCenter())) // czy środek mapy jest poza dozwolonym obszarem?
	{
		var lat = mapa.getCenter().lat();
		var lng = mapa.getCenter().lng();
		
		// minimalne i maksymalne wartości, pobrane z dozwolonego obszaru
		var minlat = ograniczenieObszar.getSouthWest().lat();
		var maxlat = ograniczenieObszar.getNorthEast().lat();
		var minlng = ograniczenieObszar.getSouthWest().lng();
		var maxlng = ograniczenieObszar.getNorthEast().lng();
		
		// jeśli szerokość geograficzna jest większa niż maksimum, to zmieniamy jej wartość na to maksimum
		if(lat > maxlat)
			lat = maxlat;
		
		// jeśli szerokość geograficzna jest mniejsza niż minimum, to zmieniamy jej wartość na to minimum
		else if(lat < minlat)
			lat = minlat;
			
		// analogicznie dla długości geograficznej
		if(lng > maxlng)
			lng = maxlng;
		else if(lng < minlng)
			lng = minlng;
		
		// centrujemy mapę w poprawnych współrzędnych
		mapa.setCenter(new GLatLng(lat,lng));
	}
}

I to tyle, oto efekt: przykład 1pokaż kod przykładu

Uwagi

  • zadbaj, by punkt startowy zawierał się w dozwolonym obszarze
  • jeśli na mapę dodajesz markery z oknami typu infoWindow, to upewnij się, że z góry, z lewej oraz z prawej strony jest wystarczająco dużo miejsca w dozwolonym obszarze - w trakcie otwierania dymka mapa automatycznie centruje się tak, by jego treść była widoczna w pełni - jeśli któryś punkt będzie wystawał poza dozwolony obszar, mogą wystąpić nieoczekiwane błędy

Polecane artykuły

Dodaj stronę do ulubionego serwisu społecznościowego

Oto, co najczęściej czytają internauci, którzy przeczytali ten artykuł:

Dodawanie markerów przez użytkownika

API v2

Poradnik pokazuje, w jaki sposób stworzyć formularz, pozwalający na dodawanie markerów


Wczytywanie danych z programu MS Excel

API v2

W tym przykładzie pokazane zostało, w jaki sposób wyświetlić markery z arkusza kalkulacyjnego


Własna mapa w Google Maps API

API v2

Przygotowanie i sposób stworzenia własnej mapy, na przykładzie mapy z gry GTA3


Warstwa zdjęć z Panoramio

API v2

Dodaj na swoją mapę eleganckie miniaturki zdjęć okolicy z serwisu Panoramio