25.08.2013 Views

Podstawy korzystania z API Google Maps

Podstawy korzystania z API Google Maps

Podstawy korzystania z API Google Maps

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

Laboratorium Systemów Informacji Przestrzennej<br />

Internetowy System Informacji Przestrzennej<br />

na przykładzie <strong>Google</strong> <strong>Maps</strong><br />

1. <strong>Podstawy</strong> <strong>korzystania</strong> z <strong>Google</strong> <strong>Maps</strong> <strong>API</strong><br />

Firma <strong>Google</strong> udostępnia interfejs programowania internetowych aplikacji wykorzystujących<br />

biblioteki <strong>Google</strong> <strong>Maps</strong>. Pozwala to na tworzenie własnych implementacji elementów <strong>Google</strong> <strong>Maps</strong><br />

w języku JavaScript, jak również rozszerzanie istniejących funkcjonalności o nowe elementy.<br />

Z podanego przez prowadzącego adresu należy pobrać plik map-simple.html i zapisać na<br />

dysku, a następnie otworzyć np. w Notatniku. Najważniejszym jego elementem jest funkcja<br />

initialize(), która odpowiada za wygląd mapy oraz tworzenie elementów interfejsu użytkownika. Na<br />

razie zawiera ona niezbędne elementy pozwalające na inicjalizację mapy. Struktura myOptions<br />

zawiera początkowe ustawienie widoku mapy za pomocą pól zoom o wartości 8 oraz center o<br />

wartości new google.maps.LatLng(-34.397, 150.644), co powoduje wycentrowanie utworzonej<br />

mapy na punkcie o podanych współrzędnych geograficznych oraz odpowiednio przybliża obraz (w<br />

tym wypadku jest to ósmy poziom przybliżenia obrazu). Zmienna mapTypeId określa rodzaj<br />

wyświetlanej mapy - domyślnie jest to mapa drogowa (google.maps.MapTypeId.ROADMAP). Na<br />

początek zmienimy punkt, na który wskazywać będzie mapa. W tym celu należy wejść na<br />

http://maps.google.com, odnaleźć na mapie budynek ETI i umieścić go na środku mapy (Uwaga:<br />

nie należy korzystać z udostępnianej przez <strong>Google</strong> opcji wyszukiwania po nazwie!). Następnie<br />

należy kliknąć na „Link” (symbol ogniwa łańcucha) i skopiować z pola: „Wklej kod HTML do<br />

swojej strony internetowej” wartości długości i szerokości geograficznej. Na tej podstawie należy<br />

zmienić wartość google.maps.LatLng(-34.397, 150.644) tak, by nasza strona pokazywała nowy<br />

budynek ETI. Następnie należy przyjrzeć się efektom zastosowania różnych wartości pola zoom<br />

obiektu myOptions.<br />

Następnym etapem będzie dodanie do mapy kontrolek pozwalających na<br />

przybliżanie/oddalanie i przesuwanie widoku. Służą do tego pola obiektu myOptions: panControl,<br />

zoomControl, oraz rotateControl. Ich wartościami mogą być wartości logiczne true albo false.<br />

Należy przetestować efekty dodania do mapy każdej kontrolki z osobna, jak również kilku naraz.<br />

Przybliżanie i oddalanie widoku można również zrealizować przy użyciu kółka myszki, do czego<br />

służy pole scrollwheel.<br />

Innymi przydatnymi kontrolkami są:<br />

scaleControl, wyświetlająca aktualną skalę mapy,<br />

overviewMapControl, wyświetlająca w rogu ekranu pomniejszoną mapę okolicy<br />

Należy zaobserwować wyniki dodania wymienionych kontrolek do mapy.<br />

Na zakończenie ćwiczenia należy stworzyć prosty skrypt przechwytywania wartości<br />

współrzędnych geograficznych z <strong>Google</strong> <strong>Maps</strong>. W tym celu należy w ciele dokumentu HTML<br />

stworzyć dwa obiekty typu input , o identyfikatorach odpowiednio „lonbox” i „latbox”. Następnie<br />

należy przechwycić wydarzenie kliknięcia na mapę przy pomocy metody<br />

google.maps.event.addListener(map, 'click', grab). Metoda ta powoduje zarejestrowanie funkcji<br />

„grab” jako obiektu reagującego na wystąpienie zdarzenia kliknięcia ('click') na obszar mapy.<br />

Następnie należy stworzyć function grab(event) i w jej ciele przypisać do obiektów lonbox i latbox<br />

odpowiednio wartości event.latLng.lat() oraz event.latLng.lng() (można wykorzystać metodę<br />

document.getElementById('..').value). Aby zwiększyć precyzję zaznaczania punktów w <strong>Google</strong><br />

<strong>Maps</strong>, można zmienić kształt domyślnego kursora. Wygląd kursorów definiuje się jako wartości pól


draggableCursor oraz draggingCursor w obiekcie myOptions. Przykładowo, var myOptions =<br />

{ draggableCursor: 'crosshair' } spowoduje zmianę domyślnego kursora („rączki”) na krzyżyk.<br />

Inne dostępne kursory to m.in. 'pointer', 'move' i 'default'.<br />

2. <strong>Podstawy</strong> opisu obiektów geograficznych przy pomocy Keyhole Markup Language.<br />

Keyhole Markup Language jest językiem opisu obiektów przestrzennych opartym na XML. Do<br />

jego najważniejszych znaczników należą:<br />

Document – jest to kontener dla obiektów i stylów. Wymagany, jeżeli stosujemy<br />

współdzielone style.<br />

Placemark – obiekt skojarzony z konkretnym kształtem geometrycznym. Jeden z<br />

niewielu obiektów, na które użytkownik może klikać.<br />

Polygon – trójwymiarowy obiekt opisywany przez dwa zamknięte kształty typu<br />

LinearRing, tworzące jego obrys zewnętrzny (OuterBoundary) oraz wewnętrzny<br />

(InnerBoundary). Każdy z nich składa się z zestawu wierzchołków opisanych<br />

współrzędnymi longitude, latitude oraz altitude (wysokość n.p.m.).<br />

LineString – trójwymiarowy obiekt odwzorowujący polilinię.<br />

Przykładowy plik KML z zaznaczonymi obiektami znajduje się na stronie:<br />

http://maverick.eti.pg.gda.pl:8080/googlemaps/Placemark_example.kml.<br />

Ponieważ <strong>Google</strong> <strong>Maps</strong> wymaga zamieszczania plików KML na serwerach www, kolejne etapy<br />

ćwiczenia będą wymagały zapisywania w osobnych plikach KML. Każdy plik powinien mieć<br />

nazwę postaci inicjały_indeks_zadanie.kml. Przykład: Dla pierwszego zadania Jan Kowalski o<br />

numerze indeksu 12345 powinien stworzyć plik o nazwie jk_12345_1.kml<br />

Przygotowany plik KML należy wysłać na serwer pod adresem<br />

http://maverick.eti.pg.gda.pl:8080/googlemaps/index.htm<br />

Rysunek 1. Formularz do wysyłania plików KML<br />

Po poprawnym załadowaniu pliku otrzymamy następujący komunikat:<br />

Zawartość powyższego łącza należy skopiować i dodać do utworzonej w punkcie<br />

pierwszym ćwiczenia mapy. W tym celu należy wykorzystać metody var kmllayer = new<br />

google.maps.KmlLayer('zawartość_łącza') oraz kmllayer.setMap(map). W przypadku


dokonywania późniejszych zmian w pliku KML istnieje konieczność ponownego załadowania<br />

pliku oraz zmiany wartości adresu www w celu obejścia mechanizmu cache <strong>API</strong> <strong>Google</strong>. Aby<br />

uniknąć konieczności takich zmian, można w adresie pliku KML dodać zmienną losową, np. w<br />

postaci „http://adrespliku.kml?x="+Math.random();”<br />

3. Geokodowanie<br />

Mapy <strong>Google</strong> udostępniają usługę konwersji współrzędnych geograficznych na adresy za<br />

pomocą klasy google.maps.Geocoder. Na terenie Polski ogranicza się ona zwykle do kodów<br />

pocztowych oraz nazw miast.<br />

W edytowanym pliku HTML przed funkcją initialize należy utworzyć nowy obiekt geocoder<br />

podanej wyżej klasy oraz nowy obiekt infowindow klasy google.maps.InfoWindow(). Następnie w<br />

ciele dokumentu HTML należy za pomocą znacznika input typu button utworzyć przycisk o<br />

atrybucie onclick do którego przypisana będzie funkcja codeLatLng(). Następnie należy utworzyć<br />

funkcję codeLatLng() w której (analogicznie jak w przypadku przypisywania wartości) należy<br />

odczytać wartość obiektów latbox oraz lonbox i na ich podstawie utworzyć nowy obiekt klasy<br />

google.maps.LatLng. Następnie w ciele tej funkcji należy wywołać metodę geocode obiektu<br />

geocoder w następujący sposób:<br />

geocoder.geocode({'latLng': latlng}, function(results, status) {<br />

});<br />

var marker = new google.maps.Marker({<br />

});<br />

position: latlng,<br />

map: map<br />

infowindow.setContent(results[1].formatted_address);<br />

infowindow.open(map, marker);<br />

ZADANIA DO WYKONANIA<br />

1. Zbudowanie zgodnie z instrukcją strony internetowej w oparciu o plik map-simple.html i<br />

stworzenie za jego pomocą pliku w formacie KML przedstawiającego 5 obiektów<br />

najbliższych miejscu zamieszkania (np. przystanki, kluby, kawiarnie). Obiektom tym<br />

należy przyporządkować krótkie opisy. Do zaznaczenia punktów należy wykorzystać<br />

znaczniki KML typu „Placemark”. 2,0 pkt.<br />

2. Przygotowanie polilinii (przynajmniej 5 segmentów) od miejsca zamieszkania do<br />

Politechniki. Osoby mieszkające w akademikach zaznaczają orientacyjną trasę<br />

drogową/kolejową ze swojej rodzinnej miejscowości. Jako przykład można wykorzystać<br />

http://maverick.eti.pg.gda.pl:8080/googlemaps/Polyline_example.kml. 1,0 pkt.<br />

3. Obrysowanie wybranego budynku Politechniki Gdańskiej przy pomocy znacznika KML<br />

typu Polygon. Jako przykład można wykorzystać<br />

http://maverick.eti.pg.gda.pl:8080/googlemaps/Polygon_example.kml. 1,0 pkt.<br />

4. Zaprezentowanie mechanizmu odwrotnego geokodowania na obszarze Polski. 1,0 pkt.

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!