WYŻSZA SZKOŁA TURYSTYKI I EKOLOGII Wydział Informatyki



Podobne dokumenty
XQTav - reprezentacja diagramów przepływu prac w formacie SCUFL przy pomocy XQuery

Diagramy związków encji. Laboratorium. Akademia Morska w Gdyni

Przestrzenne bazy danych. Definicja i cechy przestrzennych baz danych

Temat: Ułatwienia wynikające z zastosowania Frameworku CakePHP podczas budowania stron internetowych

Laboratorium Technologii Informacyjnych. Projektowanie Baz Danych

Teraz bajty. Informatyka dla szkół ponadpodstawowych. Zakres rozszerzony. Część 1.

ĆWICZENIE 1: Przeszukiwanie grafów cz. 1 strategie ślepe

Programowanie dla początkujących w 24 godziny / Greg Perry, Dean Miller. Gliwice, cop Spis treści

OfficeObjects e-forms

Wykorzystanie nowoczesnych technologii w zarządzaniu drogami wojewódzkimi na przykładzie systemu zarządzania opartego na technologii GPS-GPRS.

Wykład I. Wprowadzenie do baz danych

Projektowanie baz danych za pomocą narzędzi CASE

Wykorzystanie standardów serii ISO oraz OGC dla potrzeb budowy infrastruktury danych przestrzennych

Webowy generator wykresów wykorzystujący program gnuplot

Heurystyczne metody przeszukiwania

Dodawanie grafiki i obiektów

Uniwersytet Warszawski Wydział Matematyki, Informatyki i Mechaniki. Paweł Parys. Nr albumu: Aukcjomat

Shapefile, GeoPackage czy PostGIS. Marta Woławczyk (QGIS Polska)

POMOC / INSTRUKCJA OBSŁUGI

a) 7 b) 19 c) 21 d) 34

PLAN WYNIKOWY PROGRAMOWANIE APLIKACJI INTERNETOWYCH. KL III TI 4 godziny tygodniowo (4x30 tygodni =120 godzin ),

UNIWERSYTET RZESZOWSKI KATEDRA INFORMATYKI

Grafem nazywamy strukturę G = (V, E): V zbiór węzłów lub wierzchołków, Grafy dzielimy na grafy skierowane i nieskierowane:

Uniwersytet Zielonogórski Wydział Elektrotechniki, Informatyki i Telekomunikacji Instytut Sterowania i Systemów Informatycznych

Dokumentacja techniczna. Młodzieżowe Pośrednictwo Pracy

serwisy W*S ERDAS APOLLO 2009

SPOSOBY POMIARU KĄTÓW W PROGRAMIE AutoCAD

PLAN REALIZACJI MATERIAŁU NAUCZANIA Z INFORMATYKI II. Uczeń umie: Świadomie stosować się do zasad regulaminów (P).

Aby przejść do edycji w tym module należy wybrać zakładkę "Dla Pracowników" -> "Sprawdziany".

Teoria grafów dla małolatów. Andrzej Przemysław Urbański Instytut Informatyki Politechnika Poznańska

REFERAT O PRACY DYPLOMOWEJ

Wymagania edukacyjne na ocenę z informatyki klasa 3

Aplikacja projektu Program wycinki drzew i krzewów dla RZGW we Wrocławiu

Serwis NaviExpert Biznes. Instrukcja obsługi

LABORATORIUM 8,9: BAZA DANYCH MS-ACCESS

PROGRAM NAUCZANIA DLA ZAWODU TECHNIK INFORMATYK, O STRUKTURZE PRZEDMIOTOWEJ

Funkcjonalność systemów zarządzania bazami danych przestrzennych w kartografii internetowej (PosrtgreSQL/PostGIS) Krzysztof Kuśnierek

Specyfikacja implementacyjna aplikacji serwerowej

ZMODYFIKOWANY Szczegółowy opis przedmiotu zamówienia

INFORMATYKA Pytania ogólne na egzamin dyplomowy

Tworzenie i obsługa wirtualnego laboratorium komputerowego

Programowanie w języku Python. Grażyna Koba

Rozkład materiału do nauczania informatyki w liceum ogólnokształcącym Wersja II

Spis treści. 1: Wyszukiwanie elementu : Do linii modelu : Powiel arkusze : Długość kabla : Rozmieszczenie widoków...

Przykłady grafów. Graf prosty, to graf bez pętli i bez krawędzi wielokrotnych.

WYKORZYSTANIE I ROZWÓJ WOLNEGO OPROGRAMOWANIA W WOJEWÓDZKIM WĘŹLE INFRASTRUKTURY INFORMACJI PRZESTRZENNEJ

Analiza i projektowanie oprogramowania. Analiza i projektowanie oprogramowania 1/32

REFERAT PRACY DYPLOMOWEJ Temat pracy: Projekt i realizacja serwisu ogłoszeń z inteligentną wyszukiwarką

RELACYJNE BAZY DANYCH

Załącznik techniczny przedmiotu zamówienia komponentu

Rozkład materiału do nauczania informatyki w liceum ogólnokształcącym Wersja I

autor poradnika - KS Jak zamieszczać i edytować artykuły na szkolnej stronie internetowej

Zalogowanie generuje nowe menu: okno do wysyłania plików oraz dodatkowe menu Pomoc

Technologie informacyjne - wykład 12 -

Polityka cookies w serwisie internetowym

VectraPortal. VectraPortal. wersja Instrukcja użytkownika Podstawowa funkcjonalność serwisu. [czerwiec 2016]

Podstawy technologii WWW

GEO-SYSTEM Sp. z o.o. ul. Kubickiego 9 lok. 5, Warszawa, tel./fax , geo-system@geo-system.com.

Tworzenie prezentacji w MS PowerPoint

5.4. Tworzymy formularze

System zarządzający grami programistycznymi Meridius

Metody przeszukiwania

Słowa kluczowe Sterowanie klawiaturą, klawiatura, klawisze funkcyjne, przesuwanie obiektów ekranowych, wydawanie poleceń za pomocą klawiatury

Projekt i implementacja systemu wspomagania planowania w języku Prolog

Marcel Stankowski Wrocław, 23 czerwca 2009 INFORMATYKA SYSTEMÓW AUTONOMICZNYCH

Konspekt pracy inżynierskiej

Podstawy technologii cyfrowej i komputerów

Podstawy pracy w systemie Doradca.

Rozwiązywanie problemów metodą przeszukiwania

Monitoring procesów z wykorzystaniem systemu ADONIS

Analiza i projektowanie obiektowe 2016/2017. Wykład 10: Tworzenie projektowego diagramu klas

Tworzenie bazy danych na przykładzie Access

Heurystyki. Strategie poszukiwań

System kontroli wersji - wprowadzenie. Rzeszów,2 XII 2010

Viatoll Calc v1.3. Viatoll Calc. Instrukcja użytkownika. Strona 1

Baza danych. Baza danych to:

Informator nawigacyjny dla Górnej Odry i Kanału Gliwickiego INSTRUKCJA OBSŁUGI

Księgarnia PWN: Andrzej Jaskulski - AutoCAD 2010/LT Podstawy projektowania parametrycznego i nieparametrycznego

Nowa Netia administrator firmy Nagrywanie połączeń-zarządzanie

Google Maps, czyli jak znaleźć w internecie zdjęcie satelitarne domu, w którym mieszkam!

OpenAI Gym. Adam Szczepaniak, Kamil Walkowiak

ERDAS ADE Suite edytor baz danych Oracle Spatial

Bazy Danych. C. J. Date, Wprowadzenie do systemów baz danych, WNT - W-wa, (seria: Klasyka Informatyki), 2000

Algorytm. a programowanie -

Zasady programowania Dokumentacja

Zapisywanie algorytmów w języku programowania

Opracowanie dodatkowego rodzaju pytań dla systemu Moodle

KONCEPCJA WYKORZYSTANIA TECHNOLOGII APPLET- JAVA W TWORZENIU

Ćwiczenie: JavaScript Cookies (3x45 minut)

Google Earth. Co to jest Google Earth? Co to jest KML? Skąd można pobrać Google Earth?

REFERAT PRACY DYPLOMOWEJ

Algorytmy i str ruktury danych. Metody algorytmiczne. Bartman Jacek

Utworzenie aplikacji mobilnej Po uruchomieniu Visual Studio pokazuje się ekran powitalny. Po lewej stronie odnośniki do otworzenia lub stworzenia

Stosowanie, tworzenie i modyfikowanie stylów.

KOMPUTEROWY SYSTEM WSPOMAGANIA OBSŁUGI JEDNOSTEK SŁUŻBY ZDROWIA KS-SOMED

Baza danych sql. 1. Wprowadzenie

Zadanie 1. Suma silni (11 pkt)

Wydział Informatyki, Elektroniki i Telekomunikacji. Katedra Informatyki

PORTAL MAPOWY. 1 z , 07:41. DokuWiki. Elementy menu podstawowego. Warstwy mapy

Transkrypt:

WYŻSZA SZKOŁA TURYSTYKI I EKOLOGII Wydział Informatyki KIERUNEK: INFORMATYKA SPECJALNOŚĆ: BAZY DANYCH! ŁUKASZ MAK, ŁUKASZ ORZECHOWSKI Nr albumu: 3281, 3365 Implementacja aplikacji do planowania trasy przejazdu z procedurami przetwarzania w języku Prolog Praca inżynierska Ja, niżej podpisany, oświadczam, że składana przeze mnie praca dyplomowa pt. Implementacja aplikacji do planowania trasy przejazdu z procedurami przetwarzania w języku Prolog została przygotowana samodzielnie i nie narusza praw autorskich innych osób. W pracy wykorzystałem publikowane materiały i nie ujawniłem informacji poufnych....... data czytelny podpis Promotor: dr inż. Sebastian Ernst Sucha Beskidzka, 2011 akceptuję pracę... podpis promotora

Imię i nazwisko: Łukasz Mak, Łukasz Orzechowski Nr albumu: 3281, 3365 Specjalność: Bazy Danych OŚWIADCZENIE Ja, niżej podpisany, świadomy odpowiedzialności prawnej, oświadczam, że złożona przeze mnie praca dyplomowa na stopień inżyniera pt. Implementacja aplikacji do planowania trasy przejazdu z procedurami przetwarzania w języku Prolog została przygotowana samodzielnie. Równocześnie oświadczam, że praca ta nie narusza praw autorskich innych osób w rozumieniu ustawy z dnia 4 lutego 1994 r. o prawie autorskim i prawach pokrewnych (Dz. U. 1994 r. nr 24, poz. 83) oraz dóbr osobistych chronionych prawem cywilnym. Ponadto niniejsza praca nie zawiera informacji i danych uzyskanych w sposób nielegalny i nie była wcześniej przedmiotem innych procedur urzędowych związanych z uzyskaniem dyplomów lub tytułów zawodowych uczelni wyższej.................................... czytelny podpis autora pracy

Składam serdeczne podziękowania dla władz Uczelni za stworzenie możliwości dydaktycznych do powstania tej pracy oraz dla Pana Sebastiana Ernsta za cenne wskazówki i pomoc w trakcie pisania pracy.

Wyższa Szkoła Turystyki i Ekologii z siedziba w Suchej Beskidzkiej Streszczenie pracy dyplomowej inżynierskiej: Tytuł pracy: Implementacja aplikacji do planowania trasy przejazdu z procedurami przetwarzania w języku Prolog. Autor: Łukasz Orzechowski, Łukasz Mak Promotor: dr inż. Sebastian Ernst Stron 66, pozycji bibliograficznych 10, rysunków: 16, załączników: 1 CD Słowa kluczowe: planowanie tras przejazdu, język Prolog, przeszukiwanie grafu, aplikacja Celem pracy było stworzenie aplikacji do planowania tras przejazdu wykorzystującej procedury przetwarzania w języku Prolog. Zastosowano następujące metody: Analiza dziedziny, przegląd rynku i dostępnych narzędzi. Do implementacji wykorzystano język Prolog, PHP, JavaScript z bibliotekami OpenLayers, oraz technologię AJAX. Efekt pracy: Uzyskano aplikacje webową umożliwiającą planowania tras przejazdu na terenie Krakowa. 4

Spis treści 1. Wstęp... 7 1.1. Przedmowa... 7 1.2. Cele pracy... 7 2. Opis zastosowanych technologii... 9 2.1. Programowanie w logice... 9 2.1.1. Prolog... 9 2.1.2. SWI Prolog... 11 2.2. PostgreSQL... 11 2.2.1. Przestrzenne bazy danych... 12 2.2.2. PostGIS... 13 2.3. OpenStreetMap... 14 2.4. OpenLayers... 15 2.5. AJAX... 16 2.6. Formaty wymiany danych... 17 2.6.1. OSM XML... 17 2.6.2. JSON... 19 2.6.3. Well-known text... 20 2.7. Narzędzia użyte do pisania pracy... 22 2.7.1. LATEX... 22 2.7.2. Subversion... 23 3. Opis problemu i dostępne rozwiazania... 24 3.1. Nawigacja satelitarna... 26 3.2. Nawigacja radiowa CB radia... 26 3.3. Traffic Message Channel... 27 3.4. Inne rozwiązania... 28 3.4.1. Google Maps... 28 3.4.2. ZIKIT... 29 3.4.3. Targeo... 30 5

3.5. Zastosowanie języka Prolog do wytyczania tras... 31 3.6. Algorytmy przeszukiwania grafu... 35 3.6.1. Algorytmy przeszukiwania w głąb... 35 3.6.2. Algorytmy przeszukiwania wszerz... 37 3.6.3. Heurystyka i jej zastosowanie w przeszukiwaniu grafów... 38 4. Realizacja rozwiazania... 41 4.1. Wzorzec projektowy... 41 4.1.1. Model-View-Controller... 41 4.1.2. Realizacja Model-View-Controller... 42 4.2. Struktura plików języku Prolog... 42 4.2.1. Plik mapy... 42 4.2.2. Plik z utrudnieniami... 45 4.2.3. Plik z prędkościami... 45 4.2.4. Plik programu... 46 4.3. Synchronizacja faktów w języku Prolog z bazą danych... 46 5. Opis implementacji... 48 5.1. Wymagania... 48 5.2. Wybór technologii... 48 5.3. Architektura systemu... 48 5.4. Przepływ danych diagram DFD... 49 5.5. Schemat bazy danych diagram ERD... 49 5.6. Opis poszczególnych modułów... 49 5.6.1. Graficzny interfejs użytkownika w przeglądarce WWW... 49 5.6.2. PHP funkcja odnajdująca najbliższy węzeł... 53 5.6.3. PHP moduł synchronizujący bazy wiedzy... 53 5.6.4. PHP funkcja generująca geometrie trasy... 53 5.6.5. PHP moduł główny... 53 6. Podsumowanie... 54 A. Kod źródłowy... 55 B. Słowniczek skrótów... 64 6

1. Wstęp 1.1. Przedmowa Korki samochodowe są zmorą kierowców podróżujących przez stolice Małopolski. Ciągłe remonty, budowa nowych obiektów, a także wypadki powodują, że przejazd nawet krótkiego odcinka lub przeprawa na drugą stronę Wisły zajmuje nieproporcjonalnie więcej czasu niż przebycie tej drogi niezakorkowana trasą. Czasami lepiej wybrać okrężna trasę, zrezygnować z najkrótszej drogi, i przejechać odcinek dłuższy, ale o większej przepustowości, omijając korki i utrudnienia. Rosnąca popularność internetowych map oraz tworzenia internetowych odzwierciedleń rzeczywistych miejsc pozwala na łatwe zdobycie cyfrowej wersji Krakowa, uwzględniającej ulice, budynki oraz różne szczególne miejsca. Dużą popularnością cieszą się teraz portale oparte na zasadzie Wiki gdzie każdy użytkownik może dokonać zmian i dodawać nowe miejsca lub zwiększać dokładność istniejących map, opierając się na odczytach z odbiorników GPS. Z czasem tworzą one idealne odzwierciedlenie rzeczywistej topologii w formie cyfrowej. Znając Kraków i często nim podróżując, można wybierać trasy, które przyśpieszają czas spędzony w samochodzie. Opierając się na realnej mapie Krakowa można stworzyć w bazie danych odzwierciedlenie topologii oraz oznaczyć przepustowość dróg, jak również podkreślić miejsca o szczególnej podatności na powstawanie utrudnień (most Dębnicki lub wlot do Krakowa od strony południowej tzw. Zakopianka). Można wykorzystywać nawigacje samochodowe lub klasyczne mapy w formie papierowej, ale ciężko jest w nich zaznaczać trasy do ominięcia lub miejsca sprawiające problemyo wiele lepiej jest podkreślić je w bazie danych i niech dobrze napisany algorytm postara się je ominąć lub chociaż tak dobrać trasę, by przejeżdżało się przez jak najmniejszą liczbę takich miejsc. 1.2. Cele pracy Celem pracy jest stworzenie aplikacji WWW opartej o technologię AJAX i bibliotekę OpenLayers 2.4 do planowania trasy przejazdu, korzystającej z danych pochodzących z serwisu OpenStreet- Map 2.3, bazy danych PostgreSQL/PostGIS oraz (częściowo dostarczonych) procedur przetwarzających dane przygotowanych w postaci programów w SWI Prolog 2.1.2. Wymagane będzie również przygotowanie skryptów pomocniczych (technologia dowolna) oraz schematu obiegu danych. Aplikacja posiadać będzie również możliwość uczenia się, tzn. do bazy da- 7

nych będzie można dodawać nowe fakty i procedury Prologowe będą ja uwzględniały przy ponownym planowaniu trasy, co pozwoli na monitorowanie na bieżąco drogi i utrudnień na niej powstałych. Jako że w pracy wykorzystane będą mapy Krakowa, pokazane będzie jak uzyskać dostęp do cyfrowego odzwierciedlenia topologii Krakowa na licencji open source. Praca ma na celu również zapoznanie z istniejącymi już rozwiązaniami ułatwiającymi kierowcom podróżowanie po stolicy Małopolski i przybliżenie technologii wykorzystanych w nich. Pozwoli to na lepszą ocenę powstałej aplikacji, jak również wybranie najodpowiedniejszego dla kierowcy rozwiązania. Praca w swym zakresie obejmuje również przedstawienie technologii wykorzystanych do pisania tej pracy takich jak LATEX i Subversion. Poszczególne fragmenty pracy wykonali: Łukasz Mak: Opis zastosowanych technologii Rozdział 2 Opis problemu i dostępne rozwiązania Rozdział 3 Łukasz Orzechowski: Realizacja rozwiązania Rozdział 4 Opis implementacji Rozdział 5 8

2. Opis zastosowanych technologii W niniejszej pracy zastosowano wiele rożnych technologii i rozwiązań, dla potrzeb planowania i aby aplikacja mogła się uczyć użyto języka Prolog 2.1.1, oraz bazy danych PostgreSQL/PostGIS 2.2 2.2.2. Jako mapy posłużyły Open Street Maps 2.3. Framework do wizualizacji to OpenLayers 2.4, a formaty wymiany danych w technologi AJAX 2.5 to OSM XML 2.6.1, JSON 2.6.2, WKT 2.6.3. Na samym końcu opisano narzędzia do pisania pracy LATEX 2.7.1 i Subversion 2.7.2. 2.1. Programowanie w logice Programowanie w logice (programowanie logiczne) metoda programowania polegająca na zapisywaniu programu jako zestawu zależności, a obliczeń jako dowodu pewnego twierdzenia w oparciu o te zależności 1. Programowanie w logice wykorzystuje języki deklaratywne, czyli języki, w których programowanie nie polega na pisaniu ciągów procedur tylko na opisaniu samego rozwazania 2. 2.1.1. Prolog Prolog (franc. Programmation en Logique) jest najpopularniejszym językiem programowania logicznego. Powstał do analizy języków naturalnych, jednak bardzo dobrze spisuje się w programach ze sztuczną inteligencją. Powstał w roku 1971, stworzyli go Alain Colmeraur i Philipe Roussel. Prolog jest językiem deklaratywnym i opisowym 3. Programowanie w języku Prolog składa się z [1]: deklarowania faktów (klauzul prostych) dotyczących obiektów i związków mieczy nimi, definiowania reguł (klauzul złożonych) dotyczących obiektów i związków miedzy nimi, zadawania zapytań o obiekty i związki miedzy nimi. Elementy skladowe programu w języku Prolog [6]: stałe używamy małych liter lub liczb, np. julia, tomek, 12, b 1 http://pl.wikipedia.org/wiki/programowanie_logiczne) 2 http://pl.wikipedia.org/wiki/programowanie_deklaratywne) 3 http://pl.wikipedia.org/wiki/prolog_(język_programowania) 9

zmienne (niewiadome) zaczynają się od dużej litery, np. X, Y, State obiekty złożone symbole funkcyjne wraz z argumentami, np. f(a), stolica(state) W elementach tych nie zaleca się stosowania polskich liter, a jedynie alfabet łaciński i kilka znaków dodatkowych. Podstawowa jednostką języka Prolog jest predykat. Sklada sie on z nagłówka oraz argumentów i służy do wyrażenia faktów. Przykład faktu w języku Prolog przedstawiono w List. 2.1. r o d z i c ( j u l i a, adam ). Listing 2.1: Fakt w języku Prolog Julia to rodzic Adama. Reguły w języku Prolog zapisujemy w postaci wtedy, gdy. Prolog daje nam możliwość tworzenia reguł rekurencyjnych. Przykład takiej reguły pokazuje List. 2.2. przodek ( P,X) : r o d z i c ( P,X ). przodek ( P,X) : r o d z i c ( P,Y), przodek (Y,X ). Listing 2.2: Reguła referencyjna w języku Prolog definicja przodka. Posiadając już jakaś bazę faktów możemy wykonywać na niej zapytania. Wykonywanie zapytania prezentuje List. 2.3.? przodek ( j u l i a, adam ). Listing 2.3: Zapytanie w języku Prolog Czy Julia jest przodkiem Adama? Kiedy zadajemy Prologowi zapytanie, przeszukuje on stworzoną wcześniej bazę danych i szuka faktów pasujących do faktu podanego w zapytaniu. Dwa fakty pasują do siebie, jeśli mają takie same argumenty [1]. Prolog umożliwia nam tworzenie i wykonywanie operacji na listach. Listy w języku Prolog zapisuje się w postaci [el1,el2,el3,el4,...eln], przy czym długość listy nie jest predefiniowana. Ze wzgłedu na budowę listę możemy zapisac jako: [H T] gdzie: H głowa listy. Pierwszy element listy, tylko do niego istnieje bezpośredni dostęp. T ogon listy. Cała reszta listy bez pierwszego elementu. Ogon też jest listą. operator oddzielający głowę od ogona. 10

W jezyku Prolog zdefiniowano pewne predykaty standardowe. Oto kilka z nich: not/1 predykat negacji. Neguje zadany argument. fail/0 predukat wymuszający nawrót. Każda próba jego wywołania kończy się porażką.!/0 predykat cur. Dzieli klauzule na lewą i prawą część jednocześnie blokując w lewej części możliwość nawrotów. write/1 wyświetla argument na ekranie. read/1 wczytuje z klawiatury do argumentu. nl/0 wyświetlenie nowej linii. assert/1 dopisuj eargument do bazy wiedzy. retract/1 usuwa argument z bazy wiedzy. member/2 sprawdza czy pierwszy argument należy do drugiego (listy). Typowymi zastosowaniami dla języka Prolog są [6]: Dowodzenie twierdzeń (weryfikacja własności opisywalnych aksjomatycznie). Znajdowanie wartości parametrów (bazy danych, diagnozowanie, systemy doradcze, sterowanie inteligentne). Synteza planów (poszukiwanie drogi, rozwiązywanie problemów, algorytmy heuryztyczne). Problemy złożone (wybor strategii w grach, symulacje, synteza programów). 2.1.2. SWI Prolog SWI Prolog jest realizacją języka Prolog na licencji open source i jest powszechnie wykorzystywany w dydaktyce, działa na platformach UNIX, WINDOWS i MACINTOSH. Jej głównym autorem jest JanWielemaker. Nazwa pochodzi od SWI Sociaal-Wetenschappelijke Informatica( Social Science Informatics ) 4. 2.2. PostgreSQL Jeden z najpopularniejszych systemów do zarządzania relacyjnymi bazami danych na licencji BSD. Posiada wiele rozszerzeń obiektowych, zaawansowany system transakcji oraz dwufazowe zatwierdzanie. Jest zgodny ze standardem SQL. Aktualne wersja to 9.0.0. PostgreSQL wyposażony jest w tzw. triggers, które uruchamiają procedury napisane w dowolnych językach proceduralnych obsługiwanych przez bazę. 4 http://en.wikipedia.org/wiki/swi-prolog 11

PostgreSQL jest open-sourcowym potomkiem oryginalnego kodu Berkeley. Obsługuje dużą część standardu SQL i oferuje wiele nowoczesnych funkcji: złożone zapytania, klucze obce, triggers, widoki, integralność transakcji, kontrola jednoczesności wersji. Ponadto PostgreSQL może zostać rozszerzony przez użytkownika na wiele sposobów, na przykład poprzez dodanie nowych [10]: typów danych, funkcji, operatorów, funkcji agregujących, metody index, języki proceduralne. 2.2.1. Przestrzenne bazy danych Przestrzenna baza danych (ang. Spatial database) jest bazą danych dostosowaną do przechowywania i przetwarzania danych powiązanych z obiektami w przestrzeni (punkty, linie, wielokąty). Przetwarzając dane przestrzenne oprócz standardowych zapytań SQL używa sie zapytań typu: Pomiary przestrzenne (podaje odległości), Funkcje przestrzenne (przecinanie obiektów), Przestrzenne predykaty (prawda/fałsz), Funkcje konstrukcyjne (tworzy nowe obiekty), Funkcje operatora (zwraca szczególną informację). W klasycznych bazach indeksy nie są zoptymalizowane pod kątem zapytań przestrzennych. w przestrzennych bazach danych do indeksowania używa się więc indeksów przestrzennych: Siatki, 12

Z-order curve, Drzewa czwórkowe, Drzewa ósemkowe, R-drzewa. Implementacje przestrzennych baz danych [2]: MySQL od wersji 5.0 wspiera przestrzenne typy danych i funkcje (nie w 100% zgodne z Open- GIS). Zapytania przestrzenne ograniczone do MBR. PostGIS rozszerzenie do PostgreSQL, wprowadza zgodne z OpenGIS typy danych i funkcje analityczne. Oracle Spatial zgodny z OpenGIS dodatek do Oracle. IBM DB2 Spatial Extender, Geodetic Extender. Dedykowane bazy danych GIS, np. GEODAS. W obiektowym modelu reprezentowania danych przestrzennych przyjętym przez Open Geospatial Consortium, który jest zaprezentowany na Rys. 2.1, wyróżnione na szaro są abstrakcyjne typy danych. Rysunek 2.1: Obiektowy model danych przestrzennych (http://dev.mysql.com) 2.2.2. PostGIS PostGIS to rozszerzenie PostgreSQL, na które należy szczególnie zwrócić uwagę. Daje ono możliwość zapisywania danych geograficznych wprost do bazy. Pozwala to na przetwarzanie posiadanych danych geograficznych. PostGIS dystrybuowany jest na licencji GNU GPL 5. PostGIS jest przestrzenna bazą danych i umożliwia: 5 http://pl.wikipedia.org/wiki/postgis 13

przechowywanie geometryczne współrzędne punktów, linii, wieloboków i innych figur geometrycznych; obliczeni odległości, obszarów i obwodów przedmiotów lub figur określonych w przestrzeni; określanie przestrzennych predykatów; tworzenie przestrzennych indeksów. W PostGIS zoptymalizowano indeksowanie opierając się na lekkiej geometrii, by zaoszczędzić zużycie pamięci oraz miejsca na dyskach, co umożliwia zwiększenie ilości danych na serwerach, przyśpieszeniu przenoszenia danych z dysków twardych do RAM oraz poprawiło wydajność zapytań do bazy. 2.3. OpenStreetMap OpenStreetMap (OSM) projekt społeczności internetowej mający na celu stworzenie darmowej, swobodnie dostępnej, edytowalnej przez zarejestrowanych użytkowników mapy całej kuli ziemskiej [9]. OpenStreetMap jest projektem zainspirowanym przez wikipedie. Każde miejsce można edytować na podstawie śladów GPS, map, do których wygasły prawa autorskie, zdjęć satelitarnych oraz własnych spostrzeżeń [9]. Powstał on 1 lipca 2004 roku. Założycielem był Steve Coast. Obecnie serwis przekroczył 200 tys. użytkowników. Od grudnia 2006 OSM może używać fotografii satelitarnych Yahoo!, które są dużo dokładniejsze od używanych poprzednio (Landsat). OpenStreetMap jest nazywany The Free Wiki World Map. Dane z OSM udostępniane są na licencji Creative Commons: uznanie autorstwa, na tych samych warunkach 2.0.. By wyeksportować dane z OSM, klikamy zakładkę Eksport, wybieramy obszar do eksportu ręcznie lub wpisując i wybieramy 1 z 4 formatów: 1. Dane XMP OpenStreetMap, 2. Obrazek z Mapnika, 3. Obrazek z Osmarender, 4. HTML do wklejenia. W niniejszej aplikacji użyty został pierwszy sposób Dane XML OpenStreetMap. Wszystkie aktualne dane (węzły, drogi, relacje i tagi) w formacie XML. Rozwiązanie to ma jedno ograniczenie: w zaznaczonym obszarze nie może znajdować się więcej niż 5000 węzłów. Dane XML są zapisywane w pliku.osm i mogą być otwarte w takich narzędziach jak osmoza, osmfilter lub JOSM. 14

2.4. OpenLayers OpenLayers jest to biblioteka JavaScript do wyświetlania map w przeglądarkach internetowych udostępniana na licencji open surce (na podstawie zmodyfikowanej licencji BSD). Dostarcza API do tworzenia internetowych serwisów bogatych w dane geograficzne, takich jak Google Maps i Bing Maps [8]. OpenLayers jest używany przez OpenStreetMap w projekcie Slippy Map. Dane mogą pochodzić z: Google Maps, OpenStreetMaps, Virtual Earth, Mapa serwisu WWW, Funkcja Web service, Yahoo! Maps, UMN MapServer, GeoServer, Ka-Map. OpenLayers realizuje standardowe metody dostępu do danych geograficznych, takie jak OpenGIS Maping Service (WMS) i Web Feature Service (WFS). OpenLayers umożliwia nakładanie warstw na inną mapę lub użycie fotomapy jako warstwy podkładowej dla naszej mapy. OpenLayers posiada następujące rodzaje warstw [8]: Warstwa bazowa (wykluczają się nawzajem, może być tylko jedna aktywna, aktywna warstwa bazowa decyduje o projekcji mapy i poziomie zoom), Warstwa nakładek (może być wiele włączonych jednocześnie ): Warstwy rastrowe (raster layers) są warstwami obrazów. Warstwy te są zazwyczaj w stałej projekcji i nie mogą być zmieniane po stronie klienta. Warstwa znacznikowa (marker layer) służą do umieszczania znaczników interesujących nas miejsc. Oprócz warstw możemy umieszczać kontrolki, które wpływają na stan mapy i wyświetlają dodatkowe informacje. Ciekawsze kontrolki to [8]: Panel zbiór przycisków, 15

Attribution z każdą warstwą można skojarzyć napis pokazywany zwykle w prawym dolnym rogu mapy, EditingToolbar wyspecjalizowany panel zawierający przyciski pozwalające użytkownikowi nawigować po mapie, stawiać punkty oraz rysować linie i wielokąty, KeyboardDefaults włącza nawigację po mapie za pomocą klawiatury (klawisze strzałek, Home/End, Pg Up/Down itp.), LayerSwitcher ikonka plusa zwykle w prawym górnym rogu pozwalająca po kliknięciu włączać/wyłączać nakładki i wybierać warstwę bazową spośród zaproponowanych, Measure pozwala mierzyć (np. w km) długość narysowanej przez użytkownika trasy oraz powierzchnię narysowanego wielokąta (np. w km2), ModifyFeature pozwala użytkownikowi modyfikować obiekty warstwy wektorowej (przesuwać, tworzyć nowe i usuwać wierzchołki ścieżki, zmieniać rozmiar i obracać figury), MousePosition wyświetla w prawym dolnym rogu współrzędne geograficzne punktu mapy wskazywanego przez kursor myszki, NavigationHistory zapamiętuje kroki nawigacji i pozwala przywracać poprzedni/następny stan (przyciski Previous i Next), ScaleLine pokazuje podziałkę mapy w lewym dolnym rogu. 2.5. AJAX AJAX (ang. Asynchronous JavaScript and XML, asynchroniczny JavaScript i XML) technologia używana w programowaniu stron internetowych pozwalająca na zmianę ich zawartości bez ponownego odświeżenia tej strony w sposób asynchroniczny. Nie wymaga to przesłania całości kodu z serwera do przeglądarki i jest to szybsze rozwiązanie niż tradycyjne 6. Technologia ta zawiera następujące elementy: XMLHttpRequest pozwala na asynchroniczne przesyłanie danych, nawet z wielu miejsc i umożliwia użytkownikowi dokonywanie innych czynności w trakcie ich pobierania. JavaScript może to być dowolny język skryptowy działający po stronie użytkownika i pozwalający na DOM (obiektowy model dokumentu). XML język znaczników, w którym opisane są otrzymane informacje. Może to być też inny format i wtedy otrzymywane są jako tekst (HTML, JavaScript (JSON)). Wady i utrudnienia: 6 http://pl.wikipedia.org/wiki/ajax 16

Metoda tą jest inna od tradycyjnego przeglądania w przód, wstecz, przez co cofniecie w oknie przeglądarki może mieć inne skutki niż zamierzone. Utrudnia automatyczne pobieranie strony. Utrudnia analizę ruchu w sieci. 2.6. Formaty wymiany danych Korzystając z technologii AJAX podczas tworzenia aplikacji internetowych pojawia się problem z wymianą danych pomiędzy interfejsem użytkownika a serwerem. Nie można wprost przesyłać danych z funkcji Javascript do skryptów PHP, gdyż ich struktura zostanie utracona. Dane należy przekształcić tak, aby po przekazaniu do skryptu PHP ich struktura została zachowana. W tym celu wykorzystuje się serializację. Serializacja proces polegający na zapisaniu obiektu do postaci szeregowej, czyli w strumień bajtów z zachowaniem jego aktualnej struktury. Procesem do niego odwrotnym jest deserializacja. Polega ona na przywróceniu obiektu do stanu sprzed serializacji. Serializowane obiekty można: 7 zapisac do pliku, przesłać do innego procesu, przesłać do innego komputera. Istnieje kilka formatów przekazywania danych wykorzystujących tę metodę m.in. OSM XML, JSON, WKT. 2.6.1. OSM XML Format OSM XML jest reprezentacją danych pochodzących z OpenStreetMap w standardzie XML. W sposób sformalizowany możemy przy pomocy tego formatu przechowywać informacje o węzłach (nodes), drogach (ways) oraz powiązaniach (relations) wraz z przypisanymi im etykietami (tags) [9]. Graficzną interpretację węzłów i dróg można zobaczyć na Rys. 2.2. Rysunek 2.2: Graficzna interpretacja węzłów i dróg 7 http://pl.wikipedia.org/wiki/serializacja 17

Atrybuty wspólne dla wszystkich elementów formatu OSM XML: user Nazwa użytkownika (string), który ostatni dokonał modyfikacji danego elementu. Użytkownik może zmieniać swoją nazwę uzytkownika. uid Numeryczny identyfikator użytkownika (integer), który ostatni dokonał modyfikacji danego elementu. Użytkownik nie może modyfikować jego wartości. timestamp Data ostatniej modyfikacji danego elementu, zapisana w standardzie ISO 8601. visible Logiczna wartość ( true lub false ) określająca czy element ma być wizualizowany na mapie. version Numer wersji (integer) danego elementu, począwszy od 1 przy każdej zmianie zwiększana o 1. changeset Wartość (integer), w której dany element został utworzony lub zmodyfikowany określajaca przyrostową paczkę zawierającą tylko zmiany w stosunku do poprzedniej wersji. Węzły - podstawowe elementy budowy systemu OSM. Posiadają 2 podstawowe wymiary: długość geograficzną (longitude) oraz szerokość geograficzną (latitude). Czasem mogą zawierać trzeci wymiar wysokość (dimension). Węzły mogą służyć do definiowania dróg lub też reprezentować samodzielny niezwiązany punkt (np. restauracje). Przykładowy kod OSM XML opisujący węzeł List. 2.4. Znaczniki charakteryzujące węzły w formacie OSM XML: id Unikalna liczba całkowita większa bądź równa 1 trwale przypisana do każdego z węzłów. Identyfikator (id) istniejącego węzła pozostaje niezmienny, mimo że jego dane są edytowane lub dodawane. Jeśli usuniemy identyfikator węzła nie możemy użyć tej wartości dla żadnego innego węzła (chyba że przywrócimy skasowany węzeł). lat Szerokość geograficzna. Liczba z zakresu od -90 do 90 podawana z dokładnością do 7 miejsc po przecinku. Niektóre aplikacje akceptują wartości szerokości tylko z zakresu od -85 do 85. lon Długość geograficzna. Liczba z zakresu od -180 do 180 podawana z dokładnością do 7 miejsc po przecinku. tag Para klucz / wartość. Dla każdego węzła może występować wiele takich par, lecz klucz nie może się powtarzać. Drogi - uporządkowane lista co najmniej 2 a co najwyżej 2000 węzłów, opisująca strukturę liniową, taką jak ulica, linia kolejowa, rzeka lub wielokąt obszar, zarys budynku. Drogi możemy charakteryzować ze wzgłedu na ich jednorodne własciwosci, takie jak klasa drogi (autostrada, droga expresowa itp.), rodzaj nawieszchni, ograniczenia prędkości. Jeśli jakaś droga zawiera różne właściwości 18

<osm v e r s i o n =" 0. 6 " g e n e r a t o r =" OpenStreetMap s e r v e r "> <node i d =" 339110444 " l a t =" 49.7424332 " l o n =" 19.6014494 " v e r s i o n =" 2 " c h a n g e s e t =" 855258 " u s e r =" wzab " u i d =" 11737 " v i s i b l e =" t r u e " timestamp =" 2009 01 30 T14:09:13Z "> < t a g k=" name " v=" Karczma "Rzym" " / > < t a g k=" amenity " v=" r e s t a u r a n t " / > < / node> < / osm> Listing 2.4: Przykład węzła Karczma Rzym w Suchej Beskidzkiej. powinna zostać podzielona na krótsze odcinki, tak aby każdy z nich posiadał tylko jednorodne właściwości. Przykładowy kod OSM XML opisujący drogę List. 2.5. Możemy wyróżnić tzw. drogi zamknięte (closed way). Droga taka zaczyna się i kończy tym samym węzłem. Znaczniki charakteryzujące drogi w formacie OSM XML: id Liczba całkowita (integer) wieksza bądź równa 1, która stanowi identyfikator drogi. Identyfikator ten nie musi przyjmować wartości unikalnych w stosunku do identyfikatorów węzłów mogą się powtarzać. węzły Lista wszystkich węzłów (id węzłów), które składają się na drogę. tag Para klucz / wartość. Dla każdej drogi może występować wiele takich par, lecz klucz nie może się powtarzać. Relacje grupy węzłów, dróg i innych relacji, które mogą posiadać pewne wspólne wartości. Znaczniki charakteryzujące relacje w formacie OSM XML: id Liczba całkowita (integer) wieksza bądź równa 1, która stanowi identyfikator relacji. tag Para klucz / wartość. Dla każdej relacji może występować wiele takich par, lecz klucz nie może się powtarzać. members Uporządkowana lista wszystkich elementów będących uczestnikami relacji. Każdy z nich jest opisywany za pomocą: type Typ uczestnika relacji droga ( way ) albo węzeł ( node ). ref Liczba całkowita (integer) będąca identyfikatorem uczestnika relacji. role Łańcuch znaków (string) określający rolę jaką pełni uczestnik relacji. 2.6.2. JSON JSON (JavaScript Object Notation ) jest to lekki, tekstowy format wymiany danych komputerowych będący podzbiorem JavaScript. Mimo to jest to format niezależny od konkretnego jezyka. Wiele języków 19

<osm v e r s i o n =" 0. 6 " g e n e r a t o r =" OpenStreetMap s e r v e r "> <way i d =" 32725570 " v i s i b l e =" t r u e " timestamp =" 2009 04 01 T15:41:19Z " v e r s i o n =" 2 " c h a n g e s e t =" 15837 " u s e r =" l o o l 3 k 6 9 " u i d =" 112760 "> <nd r e f =" 368239858 " / > <nd r e f =" 368239979 " / > <nd r e f =" 368239980 " / > <nd r e f =" 368239981 " / > <nd r e f =" 368239982 " / > <nd r e f =" 368239983 " / > < t a g k=" c r e a t e d _ b y " v=" P o t l a t c h 0. 1 0 f " / > < t a g k=" highway " v=" r e s i d e n t i a l " / > < t a g k=" name " v=" Handlowa " / > < / way> < / osm> Listing 2.5: Przykład drogi ulica Handlowa w Suchej Beskidzkiej. programowania obsługuje ten format danych przez dodatkowe pakiety bądź biblioteki. Wśród nich są ActionScript, C, C++, C#, ColdFusion, E, Java, JavaScript, ML, Objective CAML, Perl, PHP, Python, REBOL oraz Ruby. 8. JSON powstał w oparciu o dwie uniwersalne struktury: Zbiór par nazwa / wartość. W większości języków implementuje się to za pomocą obiektów, struktur, rekordów, tablic asocjacyjnych, słowników, tabeli hashy lub listy z kluczem. Uporządkowana lista wartości, implementowana jako lista, tablica, sekwencja lub wektor. JSON jest jednym z nieformalnych sposobów przekazywania danych do aplikacji opartych o AJAX. W typowych przypadkach dane w formacie JSON są pobierane z serwera jako tekst przy wykorzystaniu obiektu XMLHttpRequest języka JavaScript, a następnie przekształcane na obiekt 9. W porównaniu z formatem XML, JSON jest łatwiejszy i szybszy, jak również jego analiza składniowa jest prostsza. JSON jest używany często do serializacji i przekazywania danych. 2.6.3. Well-known text Well-known text(wkt) służy do reprezentacji wektorowej geometrii obiektów na mapie, przestrzennego odniesienia obiektów i transformacji miedzy systemami przestrzennego odniesienia. Binarny odpowiednik (WKB) jest używany do przesyłania i przechowywania tych samych danych w bazach danych (np. PostGIS) 10. Obiekty geometryczne, które mogą być reprezentowane rzez WKT: 8 http://www.json.org 9 http://pl.wikipedia.org/wiki/json 10 http://en.wikipedia.org/wiki/well-known_text 20

{osm : { v e r s i o n : 0. 6, g e n e r a t o r : OpenStreetMap s e r v e r, way : { i d :32725570, v i s i b l e : t r u e, timestamp : 2009 04 01T15 : 4 1 : 1 9 Z, v e r s i o n : 2, c h a n g e s e t : 1 5 8 3 7, u s e r : lool3k69, u i d : 1 1 2 7 6 0, nd : [ { r e f :368239858, { r e f :368239979, { r e f :368239980, { r e f :368239981, { r e f :368239982, { r e f : 3 6 8 2 3 9 9 8 3 ], t a g : [ { k : c r e a t e d _ b y, v : P o t l a t c h 0. 1 0 f, {k : highway, v : r e s i d e n t i a l, {k : name, v : Handlowa ] Listing 2.6: Przykład drogi ulica Handlowa w Suchej Beskidzkiej w JSON. Punkty Linie Wielokąty TINs Wielościany POINT (6 10) LINESTRING (3 4,10 50,20 25) POLYGON( ( 1 1,5 1,5 5,1 5,1 1), ( 2 2,2 3,3 3,3 2,2 2) ) MULTIPOINT ( ( 3. 5 5. 6 ), ( 4. 8 1 0. 5 ) ) MULTILINESTRING ( ( 3 4,10 50,20 25),( 5 8, 10 8, 15 4) ) MULTIPOLYGON( ( ( 1 1,5 1,5 5,1 5,1 1), ( 2 2,2 3,3 3,3 2,2 2) ), ( ( 6 3,9 2,9 4,6 3) ) ) GEOMETRYCOLLECTION( POINT (4 6), LINESTRING (4 6,7 10) ) POINT ZM (1 1 5 60) POINT M (1 1 80) POINT EMPTY MULTIPOLYGON EMPTY Listing 2.7: Pprzykładowe ciągi geometryczne WKT. 21