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.

Znajdowanie wskazówek dojazdu

Ten artykuł dotyczy najnowszej wersji API

« powrót do listy kategorii

Jedną z ciekawszych (lecz rzadziej używanych w polskich serwisach) funkcji jest możliwość wyświetlania dojazdu z punktu A do punktu B, w postaci narysowanej trasy oraz listy wskazówek dojazdu. Funkcja ta działa z bardzo dobrym efektem na terytorium Polski, a że dodatkowo zwracane są rezultaty w języku polskim, to dlaczego by jej nie spróbować?

Podstawy

Do stworzenia mapy, wyświetlającej wskazówki dojazdu będziemy korzystać z dwóch klas: DirectionsService oraz DirectionsRenderer, znajdujących się w przestrzeni google.maps.*:

// niezbędne elementy do wyznaczenia trasy:
var trasa  		 = new google.maps.DirectionsService();
var trasa_render = new google.maps.DirectionsRenderer();

Obiekt trasa będzie odpowiedzialny za znalezienie trasy dojazdu z punktu A do punktu B. Wynikiem jego działania jest pewna tablica w postaci przypominającej notację JSON. Można ją interpretować we własnym zakresie (tworząc polilinie i markery), ale na początek najlepiej jest skorzystać z gotowego obiektu renderującego, który wygeneruję listę wskazówek i objaśnienia graficzne za pomocą jednej linijki kodu. Do tego będzie wykorzystywany obiekt trasa_render.

Docelowy kontener dla opisu dojazdu oraz mapę do wstawienia markerów i polilinii określa się następująco:

mapa = new google.maps.Map(document.getElementById("mapka"), opcjeMapy); 			

// ustawienie docelowej mapy i kontenera na wskazówki
trasa_render.setMap(mapa);
trasa_render.setPanel(document.getElementById('wskazowki'));

Jeżeli pominiemy ustawienie mapy (setMap()) to wyrenderowany zostanie jedynie opis dojazdu. Jeśli pominiemy ustawianie panelu, to wyrenderowane zostaną jedynie polilinie i markery na mapie. Ponieważ póki co chcemy, by widoczne były obie rzeczy, odpowiednio dobieramy argumenty funkcji setMap i setPanel. Kontener na wskazówki to pewien div o id "wskazowki", może on wyglądać w kodzie tak:

<table style="border: 0 collapse;">
	<tr>
		<td style="width: 410px;">
			<div id='mapka' style='width: 400px; height: 350px; border: 1px solid black; background: gray;'></div>
		</td>
		<td style="width: 300px; border: 1px solid black;" valign="top">
		<div id="wskazowki">
		</div>
		</td>
	</tr>
</table>

Zadanie zapytania

Zapytanie o wskazówki odbywa się przy pomocy metody route obiektu klasy DirectionsService. Przyjmuje on jeden argument, w postaci następującego literału:

var dane_trasy = 
{
	origin: 'SKĄD',
	destination: 'DOKĄD',
	travelMode: google.maps.DirectionsTravelMode.DRIVING
};

Zamiast stałej DRIVING (sygnalizującej, że chodzi nam o dojazd samochodem) można wstawić inne, na przykład BICYCLING lub WALKING.

Napiszmy funkcję, która znajdzie dojazd ze Szczecina do Gdańska:

function znajdz_wskazowki()
{
	var dane_trasy = 
	{
		origin: 'Szczecin',
		destination: 'Gdańsk',
		travelMode: google.maps.DirectionsTravelMode.DRIVING
	};
	
	trasa.route(dane_trasy, obsluga_wskazowek);
}

Funkcja obsluga_wskazowek jest wywoływana z dwoma argumentami - pierwszy to zwrócone wyniki, natomiast drugi to status zapytania. Najpierw należy sprawdzić, czy zwrócono status OK a następnie nakazać obiektowi renderującemy wyrenderowanie listy wskazówek, markerów i polilinii na podstawie otrzymanych rezultatów (można to zrobić również we własnym zakresie, ale jest to nieco bardziej skomplikowane):

function obsluga_wskazowek(wynik, status)
{
	if(status != google.maps.DirectionsStatus.OK || !wynik.routes[0])
	{
		alert('Wystąpił błąd!');
		return;
	}
	
	trasa_render.setDirections(wynik);
}

W rezultacie otrzymamy schemat dojazdu i opis kroków: przykład 1pokaż kod przykładu

UWAGA! W przykładach w tym poradniku do adresu skryptu z API dodano parametr &language=pl. Bez niego, niektóre przeglądarki nie potrafią rozpoznać poprawnie języka używanego w systemie i generują wyniki w języku angielskim.

Zapewnienie interakcji przez formularz

W kolejnym przykładzie zrobimy formularz, w którym będzie można samemu wpisać początek i koniec trasy. Zaczniemy od zbudowania struktury w HTML:

<form name="wskazowki" action="#" onsubmit="znajdz_wskazowki(); return false;" />
	<input type="text" name="skad" size="40" id="skad" value="Szczecin, ul. Zawadzkiego 10" /> skąd<br />
	<input type="text" name="dokad" size="40" id="dokad" value="Szczecin, ul. Potulicka 3" /> doąd<br />
	<br />
	<input type="submit" value="ZNAJDŹ TRASĘ DOJAZDU" />
</form>

Po kliknięciu na przycisk ZNAJDŹ wywołana będzie funkcja znajdz_wskazowki(), która powinna wyglądać następująco:

function znajdz_wskazowki()
{
	var dane_trasy = 
	{
		origin: document.getElementById('skad').value,
		destination: document.getElementById('dokad').value,
		travelMode: google.maps.DirectionsTravelMode.DRIVING
	};
	
	trasa.route(dane_trasy, obsluga_wskazowek);
}

Reszta rzeczy jest niezmienna w stosunku do poprzedniego przykładu. Efekt: przykład 2pokaż kod przykładu

Zmiana własności wizualnych

Przy renderowaniu wyników można zmienić kilka przydatnych własności, na przykład:

nazwa opis
supressInfoWindows wyłącza renderowanie okien infoWindow
supressMarkers wyłącza renderowanie markerów
supressPolylines wyłącza renderowanie okien infoWindow
polylineOptions styl rysowania polilinii (ustawia się tak samo, jak literał w konstruktorze dla polilinii)

Przykład:

mapa = new google.maps.Map(document.getElementById("mapka"), opcjeMapy); 			

// różne opcje renderowania
var opcje_renderowania =
{
	map: 				mapa,
	panel: 				document.getElementById('wskazowki'),
	polylineOptions:
						{
							strokeColor: 	'#ff0000',
							strokeWeight:	5,
							strokeOpacity:	0.8
						},
	suppressMarkers:	true
};

trasa_render.setOptions(opcje_renderowania);

Efektem będzie wyrenderowanie wskazówek dojazdu, polilinii w kolorze czerwonym, o grubości linii 5px, przezroczystości 20%, bez markerów: przykład 3pokaż kod przykładu

Polecane artykuły

Dodaj stronę do ulubionego serwisu społecznościowego

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

Geokodowanie adresów

API v3

Kurs podstaw cz. XI: Proste i szybkie geokodowanie adresów (zamiana adresu na współrzędne)


Kategorie markerów i polilinii

API v3

Stwórz markery/polilinie w kilku kategoriach, a następnie ukrywaj i pokazuj wybrane kategorie


Wyświetlenie profilu trasy

API v3

Poradnik pokazuje, jak wyświetlić profil trasy (wysokości nad poziomem morza)


Upiększanie okienka informacyjnego

API v3

Jak za pomocą CSS ulepszyć zawartość okienka informacyjnego?



Opinie, sugestie?

Dziękujemy za podzielenie się opinią.

Prosimy o podzielenie się swoją opinią o tym artykule.
Oceń ten artykuł w skali 1-7, gdzie 1 to zupełnie się nie zgadzam, a 7 to całkowicie się zgadzam.

1 2 3 4 5 6 7
Artykuł jest przydatny
Artykuł jest zrozumiały
Artykuł rozwiązał mój problem

Dodatkowe komentarze


Jeśli chcesz otrzymać odpowiedź, nie zapomnij podać swojego adresu e-mail w powyższym polu.