Podstawy korzystania z API Google Maps
Podstawy korzystania z API Google Maps
Podstawy korzystania z API Google Maps
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.