Różnice

Różnice między wybraną wersją a wersją aktualną.

Odnośnik do tego porównania

pl:dydaktyka:sbd:2009:projekty:mpk-gis:raport_koncowy [2010/03/09 10:39]
sbd09
pl:dydaktyka:sbd:2009:projekty:mpk-gis:raport_koncowy [2019/06/27 15:50]
Linia 1: Linia 1:
-===== Raport Końcowy ===== 
-====-. Wykorzystane narzędzia,​instalacja,​ konfiguracja ==== 
-=== PostgreSQL === 
-PosgtgreSQL jest do wolnodostępny system zarządzania bazą danych. Został wykorzystany w celu przechowywanie i swobodnego dostępu do danych. W projekcie został wykorzystany system w wersji 8.4.2. 
-==Instalacja,​ konfiguracja == 
-Należy pobrać pakietów źródłowe,​ paczki binarne z strony producenta [[http://​www.postgresql.org/​download/​]]. Polecane jest korzystanie z pakietów źródłowych w celu uniknięcia problemu z zależnościami pomiędzy pakietami. Instalację należy przeprowadzić według opisu znajdującego się [[http://​www.postgresql.org/​docs/​8.4/​interactive/​install-requirements.html]],​ również znajdują się tam wszystkie wymagane pakiety. ​ 
  
-=== PostGIS === 
-PostGIS dodaje wsparcie do przechowywanie danych geograficznych w obiektowo-relacyjnej bazie danych PostgreSQL . Dodatkowo udostępnia narzędzia ułatwiające manipulację danymi. Jest to zatem GIS (Geographic Information System) służący do przechowywanie,​ gromadzenia i manipulowania danymi. Został m.in wykorzystany do konstruowania zapytań o przystankach znajdujących w określonym promieniu. Należy pamiętać o wykorzystaniu SRID'u 4326 obowiązującego w Polsce. W projekcie został wykorzystany PostGIS w wersji 1.4.2. 
-== Wymagania == 
-  *PostgreSQL w wersji 8.2 lub wyższej 
-  * Kompilator gcc 
-  * gmake lub make 
-  * Biblioteka w Proj4 reprojection w wersji 4.5 lub wyższej 
-  * Biblioteka GEOS geometry w wersji 3.0 lub wyższej 
-== Instalacja i konfiguracja == 
-  * Pobranie aktualnej wersji PostGIS [[http://​postgis.refractions.net/​download/​postgis-1.5.0.tar.gz]] 
-  * Rozpakowanie pobranej paczki 
-  * Przejście do powstałego katalogu wykonanie poleceń konfiguracyjnych //​./​configure,​ make, make comments, make check// w celu sprawdzenia poprawności 
-  * Instalajca PostGIS poleceniem //make install// 
-  * Aktywowanie języka PL/pgSQL polecenie //​createlang plpgsql [yourdatabase]//​ 
-  * Załadownie funkcji i obiektów PostGIS //psql -d [yourdatabase] -f postgis.sql//​ znajdujących się w //​[prefix]/​share/​contrib//​ 
-  * Załadowanie funkcji przydatnych do manipulowania współrzędnymi pomiędzy systemami // psql -d [yourdatabase] -f spatial_ref_sys.sql ​ // 
-  * Załadowanie podpowiedzi do PostGIS //psql -d [yourdatabase] -f postgis_comments.sql//​ 
-=== Python === 
-Ten uniwersalny język skryptowy wykorzystywany jest w module importującym dane z OpenStreetMap. W związku z tym, że sporo bibliotek (w tym używana do połączenia z bazą danych psycopg) nie zostało jeszcze przeportowancych do standardu 3.0, wykorzystano starszą "​linię"​ 2.6 interpretera. Poza wspomnianym modułem psycopg2, używanym do połączenia z bazą danych, skrypt wykorzystuje również moduł xml.sax, będący częścią biblioteki standardowej,​ do parsowania plików XML. 
-=== Php === 
-Jest to język skryptowy działający po stronie serwera służący do dynamicznego generowania stron internetowych. W projekcie został wykorzystany jako "​pośrednik"​ do interakcji pomiędzy klientem a bazą danych. Wykorzystano Php w wersji 5.32. Pakiet można pobrać z strony [[http://​www.php.net/​downloads.php]]. Istnieje możliwość skorzystania z XAMPP który zawiera Php, Apache, Perl. Przydatny do testowania aplikacji. 
-=== JavaScript === 
-JavaScript obiektowy język skryptowy stworzony do zapewniania interaktywności pomiędzy klientem a aplikacją. W aplikacji wykorzystano framework Jquery, który należy dołączyć do aplikacji. Dostępny jest pod adresem [[http://​docs.jquery.com/​Downloading_jQuery]]. Do pozyskiwania informacji ​ z serwera bez przeładowywania strony wykorzystano technologię AJAX i JSON. W projekcie wykorzystano także API do GoogleMaps w wersji V.3 dostępne na stronie producenta [[http://​code.google.com/​apis/​maps/​documentation/​v3/​]] 
-=== HTML === 
-Pozwala opisać strukturę informacji zawartych na stronie ( prezentacja wyników). 
-=== CSS === 
-Pozwala sformatować informację zawarte na stronie ( prezentacja wyników). 
- 
-====-. OSM a komunikacja publiczna ==== 
-=== Linie komunikacji miejskiej === 
-Informacje o komunikacji publiczna w OpenStreetMap zapisane są przy wykorzystaniu znacznika Relation:​route:​ http://​wiki.openstreetmap.org/​wiki/​Relation:​route Pozwala on na zapisanie informacji o typie połączenia (key:​route):​ autobusowym (value:bus) i tramwajowym (value:​tram). Ważną informacją (choć niestety nieobowiązkową przy wprowadzaniu) jest nazwa linii (key:ref). OSM prawdopodobnie zakłada, że linie komunikacji miejskiej w obu kierunkach wyglądają jednakowo, w związku z czym nie ma znacznika opowiadającego za kierunek linii. Stanowi to (dla Krakowa) pewien problem, co można by rozwiązać np. poprzez dodanie do numeru linii litery - 173a, 173b. Niestety w chwili obecnej w danych dla Krakowa takiego rozróżnienia nie ma.\\  
-W skład relacji powinny wchodzić również przystanki. Najnowsze API 0.6 nie uwzględnia możliwości numerowania przystanków - powinny być one umieszczone w relacji w odpowiedniej kolejności. Niestety w przypadku danych dla Krakowa przystanki funkcjonują zupełnie niezależnie od linii komunikacji miejskiej, co uniemożliwiło import części danych (o czym innej części raportu).\\ ​ 
-Inne informacje, jakie może zawrzeć dla odpowiednich linii, to rozróżnienie operatorów ją obsługujących czy też możliwość korzystania z niej przez niepełnosprawnych. ​ 
-=== Przystanki ===  
-Przystanki w OSM występują w oparciu o tag highway:​bus_stop http://​wiki.openstreetmap.org/​wiki/​Tag:​highway%3Dbus_stop Poza informacją o nazwie (tag:name) pozwala na określenie kierunku (towards), w którym zmierza autobus z danego przystanku. 
-=== Dane dla Krakowa === 
-Aktualne informacje o naniesionych na mapę liniach krakowskiej komunikacji miejskiej można znaleźć na stronie: http://​wiki.openstreetmap.org/​wiki/​WikiProject_Poland/​Ma%C5%82opolska 
-====-. Pozyskiwanie danych ==== 
-=== Automatyczne === 
-W związku z tym, że ręczne wprowadzenie danych o całej krakowskiej sieci komunikacji miejskiej stanowiłoby nie lada problem stworzony został moduł importujący odpowiednie informacje z OSM. Mimo, że ilość danych dotyczących krakowskiego MPK nie jest zbyt duża (i nie do końca poprawnie zebrana - więcej na ten temat w dalszej części raportu), to moduł pozwala na zebranie części potrzebnych nam informacji.\\ ​ 
-Parsowanie pliku XML wykonywane jest w oparciu o model zdarzeniowy - przy użyciu interfejsu SAX (ang. Simple API for XML czyli Proste API dla XML-a), dostępnego w bibliotece standardowej Pythona. Podyktowane to zostało przede wszystkim sporymi rozmiarami pliku wyjściowego z OSM, co w przypadku chyba wygodniejszego modelu DOM (ang. Document Object Model) mogłoby stanowić nie lada problem.\\ 
-Samo użycie modułu jest dość intuicyjne: 
-<​code>​ 
-src % ./test.py 
-Usage: test.py [options] 
- 
-Options: 
-  -h, --help ​           show this help message and exit 
-  -f FILENAME, --file=FILENAME 
-                        name of input XML file, default: map.osm 
-  -d DBNAME, --dbname=DBNAME 
-                        database name, default: db_gis_project 
-  -u DBUSER, --user=DBUSER 
-                        database username, default: kml 
-  -c, --create ​         creates db structure 
-  -p, --print ​          ​prints data from xml file 
-  -i, --import ​         imports data from xml file to database 
-  --update_distance ​    ​updates time of transfer between small_stops 
-</​code>​ 
-To, czego potrzebujemy,​ to wyeksportowany z OSM plik XML oraz baza danych z rozszerzeniem PostGIS. Skrypt pozwala na wyświetlenie informacji dotyczących połączeń i przystanków zawartych w pliku XML, stworzenie struktury bazy danych oraz import danych z pliku do bazy. Dodatkową funkcją jest "​--update_distance"​ - wyszukuje ona najbardziej oddalone od siebie "​części przystanków"​ (small_stop) i oblicza czas potrzebny na przemieszczenie się w ich obrębie (na podstawie dystansu między nimi i prędkości poruszania się).\\ ​ 
-Przykład wyświetlenia danych (fragment): 
-<code > 
-Linie tarmwajowe 
-Linia: 4        ​ 
-Identyfikator:​ 223307 
-Węzły: ​               
-[u'​477002182',​ u'​477002183',​ u'​470643346',​ u'​470643342'​] 
-Droga 22424924 z wezlow: ​                               ​ 
-nie ma drogi w bazie:​( ​                                 ​ 
-Droga 28593666 z wezlow: ​                               ​ 
-nie ma drogi w bazie:​( ​                                 ​ 
-Droga 28593667 z wezlow: ​                               ​ 
-nie ma drogi w bazie:​( ​ 
- 
-Przystanki tramwajowe ​                                             ​ 
-(u'​206372224',​ u'​Basztowa LOT', u'​50.0663142',​ u'​19.9394981'​) ​     ​ 
-(u'​261677483',​ u'​Wawel',​ u'​50.0545631',​ u'​19.9395643'​) ​             
-(u'​378365430',​ u'​\u015awi\u0119tej Gertrudy',​ u'​50.0586702',​ u'​19.9410279'​) 
-(u'​378365902',​ u'​Miodowa',​ u'​50.0533232',​ u'​19.9488683'​) ​                   
-(u'​378365907',​ u'​Starowi\u015blna',​ u'​50.0568776',​ u'​19.9455381'​) ​         ​ 
-(u'​378365918',​ u'​Starowi\u015blna',​ u'​50.0571036',​ u'​19.9459501'​) 
-</​code>​ 
-Informacje, jakie jesteśmy w stanie "​wydobyć"​ z OSM to nazwy i położenia przystanków oraz "​drogi"​ (ways) i "​węzły"​ (nodes), z których składają się poszczególne linie (opisane w OSM jako relacje). Dane te zakodowane są w standardzie UTF-8 i w takiej właśnie formie zapisywane w bazie danych. Niestety, w związku z pewnymi brakami w bazie OSM (o których później), tylko informacje o przystankach mogły być zaimportowane do bazy i wykorzystane w pozostałej części projektu. 
- 
-===Ręczne wprowadzanie === 
-Więcej informacji o ręcznym wprowadzeniu danych w punkcie 4. 
- 
-====-.Interfejs do prezentacji i obsługi danych w oparciu o diagramy FHF, DFD, STD ==== 
-=== Interfejs użytkownika === 
-Umożliwia użytkownikowi wyszukiwanie przystanków po wprowadzeniu części nazwy (opcja domyślna). Kolejną opcją jest wyszukiwanie przystanków znajdujących się w określonym promieniu. Odbywa się to po wybraniu opcji Przystanki w okolicy. Użytkownik klika na mapę w celu wybrania środka okręgu. Następnie należy wprowadzić promień poszukiwaniach. Jednostka długości to metr. Jeżeli powyższe zapytania dały wynik pozytywny to użytkownik po kliknięciu w odnośnik ma możliwość edycji danego przystanku. Ostatnia opcja to pokazanie trasy danej linii. Na mapie zaznaczana jest trasa komunikacyjna wraz z istniejącymi przystankami.\\ 
-{{:​pl:​dydaktyka:​sbd:​2009:​projekty:​mpk-gis:​mpk_gis_user.png?​900x500}} 
- \\ 
-== Edycja przystanku == 
-\\ 
-Edycja istniejącego przystanku (rys. poniżej). Użytkownikowi po wybraniu przystanku do edycji wyświetlany jest formularz w celu skorygowania wiadomości w bazie danych. Zmiany wprowadzone przez użytkownika muszą zostać zaakceptowane przez administratora. Współrzędne przystanku można poprawić klikając na mapę w miejsce nowego położenia,​ informacja o długości i szerokości geograficznej jest automatycznie uaktualniana w polu formularza.\\ 
-{{:​pl:​dydaktyka:​sbd:​2009:​projekty:​mpk-gis:​mpk_gis_edycja.png?​300x200}} 
-\\ 
-=== Interfejs administratora === 
-Administrator docelowo ma mieć możliwość importu i eksportu danych . Po kliknięciu zakładki dodaj przystanek, pojawia się formularz dzięki któremu możliwe jest dodanie nowego przystanku do bazy danych. Zmiany zapisywane są od razu. Z kolei w dziale sugestie użytkowników istnieje możliwość zaakceptowania zmian proponowanych przez użytkowników. W tym celu należy zaznaczyć odpowiednie sugestie, a następnie wysłać zapytanie do serwera. Kolejne opcje służą do edycji istniejących przystanków "Usun przystanek"​ i "​Edycja przystanku"​ zmiany widoczne są natychmiast. ​ (rys. poniżej). ​ \\ 
- ​{{:​pl:​dydaktyka:​sbd:​2009:​projekty:​mpk-gis:​mpk_gis_admin.png?​900x500}} 
-\\ 
-== Aplikacja służąca dodawaniu nowych linii komunikacyjnych == 
-Celem aplikacji jest umożliwienie użytkownikowi w prosty sposób dodawanie nowych linii. Sposób obsługi jest następujący. Administrator wybiera z rozwijanej listy interesujący przystanek następnie naciska przycisk Dodaj. Przystanek pojawia się na liście przystanków danej linii. Jeżeli istnieje niepewność gdzie znajduje się przystanek należy nacisnąć przycisk Pokaz. Po zaznaczenie przystanków z drugiej listy można je usunąć naciskając przycisk Usun. Po skończonej edycji należy wysłać formularz do serwera.\\ 
-{{:​pl:​dydaktyka:​sbd:​2009:​projekty:​mpk-gis:​mpk_gis_dodaj_linie.png}} 
-\\ 
-== Aplikacja służąca dodawaniu tras linii komunikacyjnych== 
-Aplikacja działa na podobnej zasadzie jak aplikacja do dodawania nowych linii. Jako numer linii należy wpisać id linii w bazie danych. Jest to wartość pomiędzy nawiasami "( )"​. ​ (rys. poniżej) \\ 
-{{:​pl:​dydaktyka:​sbd:​2009:​projekty:​mpk-gis:​mpk_gis_polyline.png}} 
-====-. Wdrożenie i utrzymanie ==== 
-Warunkiem koniecznym poprawnego działania aplikacji jest posiadanie serwera wraz z oprogramowaniem zamieszczonym w 1 punkcie. Serwer musi być posiadać opcję umożliwiającą zastosowanie ModRewrite w pliku .htaccess. Służy to do posługiwania się adreasami URL przyjaznym użytkownikom. 
-=== Konfiguracja bazy danych === 
-Należy uruchomić skrypt "​create_db"​ który jako parametr przyjmuję nazwę nowej tabeli. Należy również wskazać miejsce gdzie znajdują się pliki SQL powiązane z PostGIS. 
-<​code>​ 
-echo $1; 
-createdb $1; 
-createlang plpgsql $1; 
-psql -d $1 -f /​usr/​local/​pgsql/​share/​contrib/​postgis.sql ; 
-psql -d $1 -f /​usr/​local/​pgsql/​share/​contrib/​spatial_ref_sys.sql ; 
-psql -d $1 -f /​usr/​local/​pgsql/​share/​contrib/​postgis_comments.sql ; 
-</​code>​ 
-Po pomyślnym stworzeniu nowej tabeli, należy utworzyć pustą tabelę używając komend zawartych w projekcie logicznym. 
- 
-=== Konfiguracja części aplikacji odpowiedzialnej za prezencję danych === 
-W tej części należy dostosować plik include.php. Znajdują się w nim informacje konfiguracyjne dotyczące połączenia z bazą danych. 
-<code php> 
-$name="​post_test";​ 
-$password="";​ 
-$name_db="​aa2";​ 
-$help="​pgsql:​host=localhost port=5432 dbname=$name_db user=$name password=$password";​ 
-</​code>​ 
- 
- 
-====-. Napotkane problemy ==== 
-====-. Wnioski ===== 
-Zrealizowany projekt został zakończony połowicznym sukcesem. Cześć aplikacji oparta o prezencję danych udało się nam zrealizować w 100 %. Użytkownik uzyskał możliwość podglądu danych dotyczących funkcjonowania komunikacji miejskiej w Krakowie. Administrator ma możliwość prostego i intuicyjnego wprowadzania danych przez wizualny edytor. Niestety nie udało się nam do końca zrealizować importu i eksportu danych zawartych w [[www.openstreetmap.org]]. Import przystanków działa bez zarzutu, z kolei część projektu odpowiadająca za import danych związanych z trasami linii tramwajowych i autobusowych działa nie do końca tak jak sobie tego życzyliśmy. Związane jest to z faktem, że relacje wprowadzane przez użytkowników do bazy w serwisie [[www.openstreetmap.org]] są niepełne. Owszem można pobrać trasę linii, ale ta trasa jest nierozróżnialna w sensie czy to jest linia X z A->B czy z B->A. Dokładnie ten problem został opisany w punkcie 6 raportu końcowego. Podsumowując udało się stworzyć aplikację uniwersalną,​ która jest w stanie pracować w różnych miastach, a nie tylko w Krakowie. Użycie PostGIS pozwoliło w łatwy sposób konstruować zapytania geolokacyjne . 
- 
-====-. Rozwój ==== 
-Rozważając perspektywy rozwoju projektu można wyróżnić kilka 
-potencjalnych kierunków dalszych prac. Jedną z możliwość jest 
-skupienie się na lepszym przystosowaniu systemu do wykorzystania na 
-urządzeniach mobilnych. Zastosowana obecnie w systemie wersja API 
-Google Maps umożliwia bardzo łatwą lokalizację na mapie urządzeń, 
-które są świadome swojego położenia (iPhone, telefony z systemem 
-Google Android lub Windows Mobile/​Phone). Zatem, kolejnym krokiem w 
-tym kierunku mogłoby być wyświetlanie kontekstowych informacji o 
-liniach i przystankach w zależności od położenia użytkownika,​ tak aby 
-włączając stronę projektu ma urządzeniu mobilnym można było od razu 
-zorientować się odnośnie znajdujących się w okolicy przystanków oraz 
-tras. 
- 
-Inna możliwością rozwoju systemu jest stworzenie na jego bazie 
-zupełnie innej warstwy informacyjnej. Warstwę tę może stanowić np 
-informacja o rozmieszczeniu bankomatów czy też innych, istotnych z 
-punktu widzenia określonej grupy docelowej przydatnych miejsc. Ta 
-droga rozwoju jest o tyle prostsza od pozostałych iż z punktu widzenia 
-administratora systemu wymaga właściwie zaznaczania na mapie 
-pojedynczych punktów a nie całych ścieżek. 
- 
-Odrębną warstwę informacyjną można również zbudować wykorzystując cały 
-dostępny potencjał systemu. Zamiast wyświetlania tras komunikacyjnych 
-mogłyby to być warte przejścia trasy widokowe, ścieżki kulturalne lub 
-spacerowe, co przy uwzględnieniu liczby turystów odwiedzających Kraków 
-i daniu im np. możliwości głosowania na najlepsze trasy mogłoby 
-rozwinąć się w ciekawy, niezależny projekt. 
- 
-Jeżeli chodzi o możliwości rozwoju systemu związane z trasami 
-komunikacyjnymi bardzo pożądaną funkcjonalnością była by możliwość 
-zaplanowania tras łączących dowolne punkty w mieście. Użytkownik 
-miałby wpływ na punkty pośrednie oraz możliwość wybrania najszybszej 
-lub najkrótszej opcji, których to inteligentne wyliczenie należałoby 
-do zadań systemu. 
- 
-====-. Pliki źródłowe ==== 
-{{:​pl:​dydaktyka:​sbd:​2009:​projekty:​mpk-gis:​bazy_danych.zip}} 
- 
-====-. Żrodło ==== 
-  *[[http://​postgis.refractions.net/​]] 
-  *[[http://​www.postgresql.org/​]] 
-  *[[http://​code.google.com/​apis/​maps/​documentation/​v3/​]] 
-  *[[http://​jquery.com/​]] 
-  *[[http://​www.w3schools.com/​]] 
pl/dydaktyka/sbd/2009/projekty/mpk-gis/raport_koncowy.txt · ostatnio zmienione: 2019/06/27 15:50 (edycja zewnętrzna)
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0