Upload
vanliem
View
226
Download
2
Embed Size (px)
Citation preview
Ceske vysoke ucenı technicke v Praze
Fakulta stavebnı
Katedra mapovanı a kartografieObor: Geoinformatika
Vytvorenı webove aplikacepro autostop pomocıframeworku Django
BAKALARSKA PRACE
Vypracoval: Lubos Truhlar
Vedoucı prace: Ing. Martin Landa
Rok: 2010
Pred svazanım mısto tehle stranky vlozıte zadanı prace s podpisem
dekana (bude to jediny oboustranny list ve Vası praci) !!!!
Prohlasenı
Prohlasuji, ze jsem svou bakalarskou praci vypracoval samostatne apouzil jsem pouze podklady (literaturu, projekty, SW atd.) uvedene v prilozenemseznamu.
V Kralupech nad Vltavou dne 13.5.2010 ........................................Lubos Truhlar
Podekovanı
Dekuji Ing. Martinu Landovi za jeho vedenı pri tvorbe teto bakalarskeprace, za jeho podnety a pripomınky, ktere ji obohatily, a za jeho pomoc pritvorbe webove aplikace.
Dale, jak je dobrym zvykem, dekuji sve rodine a pratelum, kterı miposkytli nezbytnou podporu behem celeho studia.
Lubos Truhlar
Nazev prace:Vytvorenı webove aplikace pro autostop pomocı frameworkuDjango
Autor: Lubos Truhlar
Obor: GeoinformatikaDruh prace: Bakalarska prace
Vedoucı prace: Ing. Martin LandaKatedra mapovanı a kartografie, Fakulta stavebnı,Ceske vysoke ucenı technicke v Praze
Konzultant: —
Abstrakt: Tato bakalarska prace je zamerena na seznamenı ctenares webovym frameworkem Django, vcetne prakticke ukazky jeho pouzitı.Venuje se obecnemu popisu frameworku Django, od jeho vzniku, az po po-drobny popis struktury webove aplikace. Dale je predstavena vlastnı we-bova aplikace, ktera vznikla pomocı tohoto frameworku. Dale se tato pracesnazı ukazat vzajemne propojenı Djanga a ostatnıch nastroju pouzitych kvytvorenı webove aplikace.
Klıcova slova: Django, framework, Python, GeoDjango
Title:Web application for hitchhiking based on Django framework
Author: Lubos Truhlar
Abstract: This bachelor work is focused on introducing Django frameworkto the readers, including practical example of its usage. The work applieson general description of the framework, from the begining of the projectto the detail definition of web application structure. Additionally the workintroduces new web application which was created mainly by this framework.It also presents the interconnection between Django and other tools used inthe web application.
Key words: Django, framework, Python, GeoDjango
Obsah
1 Uvod 1
2 Webovy framework Django 32.1 Historie projektu . . . . . . . . . . . . . . . . . . . . . . . . . 42.2 Zakladnı vlastnosti . . . . . . . . . . . . . . . . . . . . . . . . 5
2.2.1 Don’t repeat yourself . . . . . . . . . . . . . . . . . . . 52.2.2 Model-View-Controller . . . . . . . . . . . . . . . . . . 62.2.3 Object-Relation Mapping . . . . . . . . . . . . . . . . 62.2.4 Dalsı nastroje . . . . . . . . . . . . . . . . . . . . . . . 6
2.3 Aplikace Django . . . . . . . . . . . . . . . . . . . . . . . . . 72.3.1 Instalace . . . . . . . . . . . . . . . . . . . . . . . . . . 72.3.2 Databaze . . . . . . . . . . . . . . . . . . . . . . . . . 82.3.3 Webovy server . . . . . . . . . . . . . . . . . . . . . . 82.3.4 GeoDjango . . . . . . . . . . . . . . . . . . . . . . . . 9
2.4 Struktura projektu v Djangu . . . . . . . . . . . . . . . . . . 102.4.1 Projekt . . . . . . . . . . . . . . . . . . . . . . . . . . 102.4.2 Sprava projektu . . . . . . . . . . . . . . . . . . . . . 112.4.3 Dostupne URL . . . . . . . . . . . . . . . . . . . . . . 112.4.4 Nastavenı projektu . . . . . . . . . . . . . . . . . . . . 112.4.5 Aplikace . . . . . . . . . . . . . . . . . . . . . . . . . . 122.4.6 Modely . . . . . . . . . . . . . . . . . . . . . . . . . . 122.4.7 Formulare . . . . . . . . . . . . . . . . . . . . . . . . . 132.4.8 Pohledy . . . . . . . . . . . . . . . . . . . . . . . . . . 13
3 Ostatnı nastroje 153.1 PostgreSQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153.2 PostGIS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 173.3 PgRouting . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 183.4 OpenLayers . . . . . . . . . . . . . . . . . . . . . . . . . . . . 193.5 OpenStreetMap . . . . . . . . . . . . . . . . . . . . . . . . . . 203.6 Python . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
vi
4 Webova aplikace Stopar 224.1 Popis projektu . . . . . . . . . . . . . . . . . . . . . . . . . . 23
4.1.1 Vzhled aplikace . . . . . . . . . . . . . . . . . . . . . . 244.1.2 Sablony . . . . . . . . . . . . . . . . . . . . . . . . . . 25
4.2 Databaze . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 274.3 Aplikace accounts . . . . . . . . . . . . . . . . . . . . . . . . . 28
4.3.1 Modely . . . . . . . . . . . . . . . . . . . . . . . . . . 294.3.2 Funkce . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
4.4 Aplikace points . . . . . . . . . . . . . . . . . . . . . . . . . . 304.4.1 Modely . . . . . . . . . . . . . . . . . . . . . . . . . . 314.4.2 Funkce . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
4.5 Aplikace rides . . . . . . . . . . . . . . . . . . . . . . . . . . . 324.5.1 Modely . . . . . . . . . . . . . . . . . . . . . . . . . . 334.5.2 Funkce . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
4.6 Planovana funkcionalita . . . . . . . . . . . . . . . . . . . . . 36
5 Zaver 37
Seznam pouzitych zdroju 39
A Ukazky vzhledu webove aplikace Stopar 41Obsah
vii
Kapitola 1
Uvod
Internet se stal nepredstavitelne oblıbenou a v dnesnı dobe naprosto nepostra-
datelnou soucastı naseho sveta. Tato celosvetova pocıtacova sıt’ muze slouzit
k ruznym ucelum, od sdılenych dat mezi pobockami jedne firmy na ruznych
kontinentech, az k obycejnemu posılanı emailu mezi dvema znamymi v jedne
mıstnosti. Jedno je vsak pro vsechny ucely spolecne. A to je vymena infor-
macı, v pocıtacove terminologii mluvıme o vymene dat.
V dnesnı dobe naprosto prevazila komunikace na internetu pres system
World Wide Web, znamy spıse pod zkratkou ”web”. Do tohoto systemu patrı
webovy prohlızec a webovy server. Vetsine uzivatelu internetu, respektive
webu, pojem internet a web splyvajı v jedno. Je to jednak omluvitelnou
neznalostı uzivatelu, a jednak take dıky jeho masivnımu rozsırenı, nebot’
vetsina techto uzivatelu ani jine systemy nezna a nepotrebuje znat. World
Wide Web jim umoznuje vse, co v dnesnı dobe na internetu potrebujı.
Zpocatku web slouzil ciste k prezenci statickych informacı o spolecnostech
a organizacıch. Ale s postupem casu a rozvojem technologiı se z nej stal
nastroj pro uzivatele ke sdılenı informacı.
Vyvoj webu smeruje k webovym aplikacım, coz jsou klasicke desktopove
aplikace, ale dostupne a pouzitelne pres webovy prohlızec. Vsechny zpusoby
vyuzitı webu stavejı na klasickych webovych strankach a znalost tvorby
takovychto stranek dnes patrı ke vzdelanı na vetsine skolach zamerenych na
informacnı technologie. Toto vse zpusobilo vznik mnoha nastroju k usnad-
nenı tvorby webovych stranek. A jednım z techto nastroju je framework
Django.
Cılem teto prace bylo pouzıt framework Django, ve spojenı s dalsımi
1
open-source programy, pro vytvorenı uzivatelsky prıvetive webove aplikace
pro stopare a turisty.
Aplikace Stopar umoznuje vyhledavanı tras v Ceske republice, jejich
ukladanı do databaze a sdılenı s ostatnımi uzivateli, stejne tak sdılenı jinych
zajımavych mıst. Pro vyuzitı teto aplikace je temer nutnostı registrace noveho
uzivatele, tım je zprıstupneno ukladanı vlastnıch dat.
Vetsina podobnych webovych aplikacı umoznuje ukladanı do databaze
pouze jedne skupiny prvku (body respektive trasy) a nenabızı vzajemnou
interakci uzivatele s mapou. Smyslem tvorby teto aplikace bylo propojenı
klasicke databaze pro stopare (viz http://www.spolujizda.cz) s mapou a
sdılenı dalsıch zajımavych mıst mezi uzivateli – turisty.
Framework Django byl zvolen z duvodu jeho schopnosti efektivne praco-
vat s geoprostorovymi daty dıky nadstavbe GeoDjango a take kvuli svobodne
licenci BSD, pod kterou je vyvıjen. Je potreba zmınit, ze i v prıpade pouzitı
tohoto frameworku nenı programator usetren nutnosti znat znackovacı jazyk
HTML1 nebo kaskadove styly. Framework mu pouze poskytuje nastroje pro
lepsı tvorbu. Pod slovem ”lepsı”je zde mıneno zejmena rychlejsı a bezpecnejsı.
1HTML je zkratka pro HyperText Markup Language, coz je znackovacı jazyk pouzıvanypro tvorbu webovych stranek
2
Kapitola 2
Webovy framework Django
Tato kapitola cerpa predevsım z informacı dostupnych v knize ”The Defini-
tive Guide to Django: Web Development Done Right” [3] a ze serialu o
Djangu na serveru root.cz [1].
Kazdy programator se dostal do situace, kdy psal stejny kus kodu
ponekolikate. Tato situace je neprıjemna, nebot’ cas programatora je pro
zamestnavatele drahy a psanı stejne veci je pro programatora nezabavne.
Navıc urcite existuje spousta dalsıch lidı, kterı stejny nebo podobny problem
jiz resili, a tudız je zbytecne toto resit znovu. Z techto duvodu vznikly
tzv. ”frameworky”. Jsou to vlastne nastroje daneho programovacıho jazyka,
ktere se snazı ulehcit praci programatorum. Tım, ze jsou frameworky zame-
reny pouze na urcitou cast aplikacı, ktere se s nimi dajı vytvaret (naprı-
klad webove aplikace, ajaxove aplikace 1), mohou poskytovat velmi presne
a uzitecne nastroje.
Django framework patrı do skupiny tzv. webovych frameworku. Webove
frameworky poskytujı hlavne nastroje a knihovny pro prıstup k databazi,
sablonovacı system webovych stranek a spravu uzivatelu. Z dalsıch frame-
worku z teto skupiny muzeme jmenovat naprıklad Ruby on Rails, zalozeny
na programovacım jazyku Ruby, nebo Zend postaveny na PHP.
Django je velmi mocnym nastrojem, ktery muze byt zakladem mnoha
webovych aplikacı. Mezi nejvetsı svetove weby, bezıcı na Djangu, patrı denık
washingtonpost.com nebo kulturnı web lawrence.com, mezi ceskymi weby je
to portal zena.cz nebo webexpo.cz.
1AJAX (asynchronnı Javascript a XML) je metoda, ktera dela webove stranky inter-aktivnejsı tım, ze odesıla pozadavky na server bez nutnosti znovu-nactenı webove stranky.
3
V dnesnı dobe je Django trochu ve stınu klasickych redakcnıch systemu
a jeho rozsırenı branı mala podpora na strane provozovatelu webhostingu.
Vyvoj Djanga jde kupredu hlavne dıky aktivnım vyvojarum v komunite a
jednou se treba docka takove obliby jako redakcnı systemy zalozene na PHP
(Drupal, WordPress).
Mezi nejvetsı prednosti Djanga patrı automaticky generovane adminis-
tracnı rozhranı, ktere umoznuje spravu uzivatelu systemu, spravu dat v data-
bazi a upravy webovych stranek. Dale je nesmırnou vyhodou jednotny, opti-
malizovany a zabezpeceny prıstup ke vsem databazım. A na zaver je to
propracovany sablonovacı system, ktery spolehlive zamezı opakovanı psanı
stejneho kodu.
2.1 Historie projektu
Kolem roku 2000 vznikl Web development tym kansaskeho denıku Lawrence
Journal-World Newspapers, ktery se staral o vyvoj webovych aplikacı. Hlav-
nımi programatory tohoto tymu byly Adrian Holovaty a Simon Willison.
Starali se o spravu nekolika webovych portalu tohoto novinoveho denıku.
V teto dobe byli webove nastroje zamereny na tvorbu statickych stranek.
Oni vsak potrebovali nastroj, ktery by umoznoval rychlou zmenu, v zavislosti
na novych udalostech, ktere se odehravajı ve svete kazdou minutu. Z tohoto
duvodu zacali vyvıjet nove nastroje a aplikace, ktere by jim tyto moznosti
poskytly. Kazda aplikace byla nejprve urcena pouze webu, pro ktery byla
vyvinuta. Pozdeji vsak Adrian a Simon zacali aplikace spojovat a zobecnovat,
a tım vytvorili framework Django.
Nenı lehke urcit presne rok vzniku tohoto frameworku, ale predpoklada
se, ze to byl rok 2003. V tomto roce prave doslo ke spojenı vıce aplikacı
a nastroju, pracujıcıch spolecne v jednom celku. Framework se dale vyvıjel
v tomto malem tymu, do ktereho jeste pribyl Jacob Kaplan-Moss. Po dvou
letech tento clovek rozhodl, ze framework je jiz pouzitelny pro ostatnı uziva-
tele a uvolnil jej jako open-source pod licencı BSD. Pojmenovan byl po
jazzovem kytaristovi Django Reinhardtovi 2. Nynı, po nekolika letech vyvoje,
je v projektu Django zapojeno tisıce lidı od vyvojaru zakladu frameworku,
az po uzivatele (vyvojare webovych aplikacı pomocı frameworku). Puvodnı
dva zakladatele Adrian a Simon jsou stale zapojeni do projektu a snazı
2Django Reinhardt http://en.wikipedia.org/wiki/Django Reinhardt
4
se organizovat vyvoj, ale prevazna cast kodu jiz pochazı ze spolecne prace
komunity.
Historii Djanga je dulezite znat, nebot’ z nı plynou dva dulezite po-
znatky. Django primarne vzniklo pro zpravodajske webove stranky, a to ho
predurcilo k tomu, ze je vhodny na rychle se menıcı a obsahove zamerene
weby naprıklad washingtonpost.com. To vsak neznamena, ze nenı vhodny
i pro dalsı typy webovych aplikacı. Druhym dulezitym faktorem bylo, ze
Django vzniklo z profesionalnıch a prakticky uzıvanych aplikacı a ne jako
nektere projekty vyvinute hlavne na akademickych pudach. Tento faktor
predurcil oblıbenost Djanga, nebot’ framework je zameren na bezne a caste
problemy, ktere se snazı efektivne resit.
2.2 Zakladnı vlastnosti
Django ma nekolik specifickych vlastnostı, ktere ho cinı velmi mocnym a
zaroven prehlednym nastrojem k tvorbe webu.
Oblıbenost Djanga spocıva v modernıch programovacım principu DRY
(Do not Repeat Yourself), ktery se snazı minimalizovat opakovanı kodu.
Prehlednost Djanga je dusledkem presne dane struktury, kterou by se mel,
a vıcemene i musı, rıdit kazdy projekt. Nenı zde prostor pro vlastnı na-
stavenı struktury projektu, nazvy a umıstenı konfiguracnıch souboru jsou
z vetsı casti pevne dany. To urychluje orientaci v neznamych projektech
i usnadnuje spolupraci pri dotazech na pomoc od vyvojaru. Dalsı nemene
dulezitou vlastnostı Djanga je implementovany navrhovy vzor MVC (Model-
View-Controller). A naposled nesmıme zapomenout na otevreny zdrojovy
kod, dıky cemuz mohou do projektu prispıvat lide z celeho sveta.
2.2.1 DRY
”Pragmaticky princip DRY (Don’t Repeat Yourself) nam rıka, ze kazda dılcı
znalost musı mıt v systemu jedinou, jednoznacnou, smerodatnou reprezentaci.
Znamena to, ze se nas Django snazı primet k takovemu rozvrzenı prace,
v nemz se zamezı rutinnımu opakovanı kodu. Bohate se vyuzıva vlastnostı
objektove orientovaneho programovanı a automatickeho generovanı kodu.”
[Dvorak Pavel, 2009][1]
5
2.2.2 MVC
Model-View-Controller je asi nejvyuzıvanejsı navrhovy vzor v soucasnych
modernıch frameworcıch. Django jej implementuje pomocı MTV (Model-
Template-View), prelozeno do cestiny ”Model-Pohled-Sablona”. Principem
tohoto vzoru je oddelit vlastnı definici dat jako databazovych modelu, defi-
novanych pomocı Pythonovskych trıd, zpracovanı dat ruznymi, predem defi-
novanymi pohledy, de facto Pythonovskymi funkcemi a vyslednou prezentaci
dat pomocı modifikovatelnych Django sablon do podoby webovych stranek.
2.2.3 ORM
Object-Relation Mapping je objektovy prıstup k databazi. Django vyuzıva
Pythonovskych objektu a jeho vlastnıch funkcı k automatizovanemu ge-
nerovanı SQL 3 dotazu. Vyhodou tohoto prıstupu je fakt, ze uzivatel se ne-
musı starat o vlastnı druh databaze. Django samo o sobe podporuje vsechny
bezne dostupne a pouzıvane databaze od SQLite, az k Oracle. Jak je znamo,
tak SQL dotazy se databaze od databaze lisı. Z tohoto duvodu je tento
prıstup velice efektivnı. Zaroven automaticky generovane dotazy jsou opti-
malizovane a chranene proti utokum metodou SQL injections.
Dale je nutne zmınit, ze Django s tımto principem implementovalo tak-
zvanou ”lınou”SQL, coz znamena, ze odpovıdajıcı si SQL dotazy jsou spo-
jovany do jednoho dotazu, a navıc je tento dotaz proveden az ve chvıli, kdy
se pristupuje k vlastnım datum.
2.2.4 Dalsı nastroje
Django prinası uzivatelum, krome vyse zmınenych vlastnostı, dalsı prakticke
nastroje usnadnujıcı provoz weboveho serveru a tvorbu, administraci a opti-
malizaci jednotlivych webovych projektu. Tyto vlastnosti budou zmıneny
pouze okrajove, nebot’ jejich rozbor by prevysoval obsah teto prace, prıpadne
by spadal spıse do programatorske casti o samotnem frameworku:
• automaticky generovane administracnı rozhranı,
• optimalizace pomocı kesovanı,
3SQL je zkratka pro Structured Query Language, coz je jazyk pouzıvany pro spravudatabazovych systemu.
6
• generovanı formularu na zaklade definovanych modelu,
• poloautomaticka validace formularu,
• integrovany webovy server,
• podpora ”hezkych”URL,
• snadna lokalizace projektu,
• technologie zasuvnych modelu.
2.3 Aplikace Django
Jak jiz bylo zmıneno, Django je open-source projekt. Dıky takoveto do-
stupnosti zdrojovych kodu muze Django bezet na jakekoliv architekture a
operacnım systemu, na kterem bezı Python. Vlastnı aplikace frameworku je
slozena z Pythonovskych knihoven, ktere poskytujı uzivateli ruzne nastroje
od prostych funkcı generujıcı HTML stranky, az po samotny webovy server.
2.3.1 Instalace
Instalovat Django je mozne rovnou ze zdrojovych kodu nebo pomocı binarnıch
balıcku. Pro instalaci ze zdrojovych kodu je zapotrebı mıt nainstalovan
Python ve verzi 2.3 - 2.6, platı pravidlo ze vyssı verze jsou vıce kompatibilnı.
Prechod na podporu Python 3.x je v planu, ale pro takhle velky projekt je
to velice narocne, a proto to bude vyvojarum jeste nejakou dobu trvat.
Instalace je velice jednoducha, nebot’ spocıva pouze v nakopırovanı po-
trebnych knihoven na spravne mısto, kde s nimi dokaze Python praco-
vat a pridanım spoustecıch cest do systemovych promennych. Dıky takto
nenarocne instalaci je tento zpusob doporucovany vsem uzivatelum.
Dalsı zpusob je instalace pomocı balıckovacıch systemu. V kazde vetsı
Linuxove distribuci by mel byt binarnı balıcek Djanga dostupny. Vyhodou
teto instalace je automaticke vyresenı zavislostı, tedy instalace Pythonu a
automaticke aktualizace vetsinou zavaznejsıch bezpecnostnıch chyb. Bohuzel
v balıckovacıch systemech starsıch, ale i novych Linuxovych distribucıch se
vetsinou vyskytujı zastarale verze Djanga, a proto instalace tımto zpusobem
nenı prılis doporucovana.
7
Ke stazenı se dajı najıt i instalacnı balıcky pro operacnı system MSWin-
dows. Pri instalaci tımto zpusobem je vetsinou nutne mıt predem nainstalo-
vany Python v pozadovanych verzıch, ale dajı se najıt i kompletnı balıcky
Django s Pythonem webovym serverem a databazı.
Zaroven je nutne zmınit, ze je umozneno stahovat prımo vyvojovou verzi
Djanga, tedy neotestovanou a s chybami. Chyby v techto verzıch nebyvajı
prılis zavazne a naproti tomu ma uzivatel prıstup k nejnovejsım funkcım
a snadnou aktualizaci kodu pomocı systemu SVN4. Navıc vyvojovy cyklus
stabilnı verze je dlouhy, a dıky tomu vsemu je instalace teto verze velice
casta a oblıbena i u beznych uzivatelu.
2.3.2 Databaze
Ke kazde vetsı webove aplikaci patrı databaze k uchovavanı dat vseho druhu.
Django v tomto prıpade umoznuje vyvojarum nejen pouzitı jakekoliv dnes
bezne zname databaze, ba dokonce, jak uz bylo uvedeno, sjednocuje praci
se vsemi databazemi do jednoho rozhranı, a tak vlastne odstranuje nut-
nost znalosti jakehokoliv SQL. Toto rozhranı je prıstupne pres dobre zdoku-
mentovane aplikacnı programovacı rozhranı (API) a prace s nım je rychla
a jednoducha. Nesmıme vsak zapomenout, ze toto je pouze neco navıc.
V Djangu samozrejme existuje moznost psanı ”cistych”SQL dotazu.
Mezi podporovane databaze patrı SQLite, MySQL, PostgreSQL a Ora-
cle. Ve vyvoji je podpora pro dalsı databaze, jako MSSQL a dalsı mene
zname projekty. Pro Django nenı ani problem provozovat projekt bez data-
baze. V tomto prıpade vsak budete ochuzeni o nektere funkce, jako je prıstup
k webovemu administratorskemu rozhranı.
2.3.3 Webovy server
Django zde prichazı s vlastnım resenım v podobe velice odlehceneho webove-
ho serveru, ktery se hodı pro testovanı aplikacı behem vyvoje. Krome zaklad-
nıch vecı, jako je nastavenı portu a napojenı na IP adresu, nenabızı zadnou
konfiguraci. Na druhou stranu webserver je instalovan spolu s Djangem a
jeho spustenı je otazkou jedineho prıkazu, tudız je opravdu vhodny pro
zacınajıcı projekty.
4SVN je zkratka systemu pro spravu verzı tzv. Subversion
8
Narocnejsı webove aplikace je vsak vhodne nechat bezet na vykonnejsım
a lepe konfigurovatelnejsım webovem serveru. Proto je mozne Django provo-
zovat na jakemkoliv webovem serveru, splnujıcım pythonovsky standard
WSGI. Na dnes nejpouzıvanejsım webovem serveru Apache lze provozo-
vat Django s mod python, mod wsgi, nebo pomocı FastCGI. Konfigurace
Apache je v tomto prıpade slozitejsı, ale v oficialnı dokumentaci je to dobre
popsano.
2.3.4 GeoDjango
GeoDjango je nadstavbou nad samotnym Djangem, ktera nam pridava pod-
poru pro praci s geografickymi daty. Instalace GeoDjanga je jednoducha,
spocıva pouze v zaregistrovanı GeoDjango aplikace v konfiguracnım souboru
projektu. Zaroven je nutne zmınit, ze GeoDjango je zavisle na pouzitı databazı
s nadstavbou pro ulozenı prostorovych dat. Pro GeoDjango je tedy nutne
mıt SQLite se SpatialLite, PostgreSQL s PostGISem, MySQL se Spatial
Extension nebo Oracle Spatial. Dale je nutne mıt v systemu nekolik dalsıch
knihoven:
• GEOS – implementace OGC Simple Features,
• PROJ.4 – pro transformaci mezi jednotlivymi souradnicovymi systemy,
• GDAL/OGR – knihovna pro ctenı prostorovych dat z vetsiny formatu.
GeoDjango rozsiruje vsechny tri vrstvy frameworku Django. Modelum
pridava moznost definovanı vsech geografickych polı specifikovanych ve stan-
dardech Open Geospatial Consortium. Dale rozsiruje API pro prıstup k
databazi o prostorove dotazy jako contains (obsahuje) nebo distance (vzdale-
nost). Zde je potreba zduraznit, ze ne vsechny prostorove dotazy lze apliko-
vat na vsech databazıch. Rozdıly mezi databazemi uz jsou v tomto prıpade
moc velke, respektive ne vsechny databaze podporujı vsechny dotazy. Vıce
informacı lze nalezt v oficialnı dokumentaci Djanga. V sablonach lze lehce
pristupovat k prostorovym atributum jednotlivych objektu a dıky dodrzovanı
standardu OGC je lze velice jednoduse provazat naprıklad s OpenLayers.
9
2.4 Struktura projektu v Djangu
Jak jiz bylo zmıneno, Django neumoznuje vyvojarum definovanı vlastnı
struktury projektu a pojmenovanı konfiguracnıch souboru, proto je dulezite
zde popsat strukturu, kterou Django vytvarı. K lepsı predstave poslouzı
obrazek 2.1 (obrazek je prevzat ze serveru excess.org).
Obrazek 2.1: Struktura projektu v Djangu
2.4.1 Projekt
Projekt je zakladnı entita. Projekt by mel predstavovat cely web, nehlede
na mnozstvı aplikacı, ktere by v nem mely bezet. Mely by to vsak byt apli-
kace, ktere sdılejı veskere nastavenı, jako naprıklad prıstup k databazi nebo
ulozenı statickych souboru. Projekt se da vytvorit prıkazem django-admin.py
startprojetct [nazev projektu].
Od zalozenı projektu probıha jiz veskere nastavenı, tvorenı a spoustenı
v adresari [nazev projektu], ktery byl vytvoren. V tomto adresari se take
10
automaticky vytvorily soubory manage.py, settings.py, urls.py.
2.4.2 Soubor manage.py
Soubor manage.py slouzı k veskere administraci projektu. Jednotlive akce
predavame jako parametry tomuto skriptu, tedy python manage.py [akce].
Pomocı skriptu naprıklad spoustıme webovy server (runserver), Pythonovsky
shell (shell), synchronizaci projektu s databazı (syncdb) a dalsı. Pro uplny
prehled a jednotlive prıkazy poslouzı napoveda (help).
2.4.3 Soubor urls.py
V puvodnım nastavenı je soubor urls.py seznamem vsech dostupnych URL
adres naseho projektu. Pro kazdou adresu, ktera ma byt dostupna, se musı
vytvorit odpovıdajıcı zaznam, ktery zaroven prirazuje adrese pohled (funkci),
ktery bude zavolan a budou mu predany parametry GET nebo POST dotazu.
Pro zjednodusenı je moznost definovat dostupne URL adresy pomocı regularnıch
vyrazu a take predavat parametry URL jako parametry funkcı. Jako jedno
z mala je mozne prenastavit cestu k tomuto souboru pomocı promenne
ROOT URLCONF v konfiguracnım souboru projektu.
2.4.4 Soubor settings.py
Dalsı soubor settings.py je nemene dulezity, nebot’ obsahuje veskere zakladnı
nastavenı projektu. V tomto souboru je nastavenı prıstupu k databazi (uzivatelske
jmeno, heslo, jmeno databaze, server a port), vcetne typu databaze (Post-
greSQL, PostGIS, MySQL, SQLite, Oracle), dale pouzita jazykova sada,
casova zona a promenne:
• MEDIA ROOT – absolutnı cesta ke statickym souborum,
• TEMPLATE DIRS – absolutnı cesta k adresari se sablonami,
• MEDIA URL – URL adresa statickych souboru,
• ROOT URLCONF – cesta k urls.py,
• INSTALLED APPS – instalovane aplikace v projektu.
Dalsımi nevyznamnymi promennymi se nebudu zabyvat. Vsechny dalsı
hodnoty lze nechat v puvodnım nastavenı a projekt bude fungovat. Vse je
navıc dobre okomentovano v samotnem souboru.
11
2.4.5 Aplikace
V kazdem projektu musı byt alespon jedna aplikace. Aplikacı se zde rozumı
nejaka cast programu, ktera se stara o jeden specificky ukol. Aplikacı muze
byt naprıklad program na obsluhu uzivatelu webovych stranek, jejich prihla-
sovanı, odhlasovanı, sprava osobnıch udaju. Jedna aplikace by mela vyuzıvat
jeden soubor dat (modelu) a vnitrnı funkce v pohledech. Samozrejme je ale
mozne sdılet tyto prvky i v ramci celeho projektu.
Pevne dane pravidlo na delenı programu do aplikacı nenı definovano.
Obecne platı, ze projekt obsahuje nekolik aplikacı a jedna aplikace muze
byt vyuzıvana v nekolika projektech. Nenı doporuceno mıt na kazdou funkci
zvlastnı aplikaci, respektive take nenı dobre mıt v projektu jen jednu obrı
aplikaci, do ktere zaobalıme vse. Oba zpusoby jdou provozovat, ale neprinası
uzivateli takove vyhody v prıpade nutne vzajemne spoluprace jednotlivych
aplikacı, respektive v prıpade budoucıch zasahu do jiz rozjete aplikace.
Aplikace se v projektu zalozı prıkazem python manage.py startapp
[nazev aplikace]. Tento prıkaz automaticky vytvorı novou slozku
[nazev aplikace] se soubory init .py, models.py, views.py, tests.py.
Pote se musı pridat aplikace do promenne INSTALLED APPS v souboru
settings.py, aby Django o aplikaci vedelo.
2.4.6 Soubor models.py
V souboru models.py se definuje schema databaze. Jednotlive tabulky v data-
bazi jsou predstavovany Pythonovskymi trıdami a sloupce jsou atributy dane
trıdy. Prehled vsech moznych atributu trıdy a jejich parametru je popsan v
oficialnı dokumentaci. Model je definovan jako potomek trıdy Model z mo-
dulu django.db.models nebo je mozne vyuzıt vzajemne dedicnosti mezi
modely.
Pro overenı spravne definovanych modelu je dobre pred samotnou syn-
chronizacı s databazı spustit validaci (python manage.py validate), prıpadne
si nechat vygenerovat SQL dotaz, ktery bude poslan databazi (python manage.py
sql [nazev aplikace]). Na zaver je potreba zmınit, ze Django si v zakladnım
nastavenı automaticky prida sloupec s primarnım klıcem do kazde tabulky,
kde nenı definovan.
12
2.4.7 Soubor forms.py
Soubor forms.py nenı automaticky vytvoren pri zalozenı aplikace, ale jeho
prıtomnost v aplikacıch je velice casta. Jmeno souboru je volitelne, nicmene
z duvodu konvence zustava nezmeneno. V souboru jsou definovany for-
mulare, ktere jsou pouzity na webovych strankach.
Formulare jsou definovany stejne jako modely v souboru models.py,
tedy pomocı Pythonovskych trıd a jednotlive formularove prvky jsou atributy
dane trıdy.
Formulare mohou byt dokonce rovnou odvozeny z modelu tak, aby
jim odpovıdaly svoji strukturou, prıpadne doplneny, respektive ochuzeny
o nektere prvky.
2.4.8 Soubor views.py
Poslednı dulezity soubor views.py obstarava vzajemnou spolupraci mezi
jednotlivymi vrstvami Djanga. V souboru jsou definovany vlastnı pohledy
jako Pythonovske funkce, ktere jsou volany na zaklade nastavenı v souboru
urls.py. Pohledy pristupujı k databazi, odkud cerpajı data, ktera nasledne
zpracovavajı. Presny postup zpracovanı dotazu je na obrazku 2.2 (obrazek
je prevzat ze serveru djangobook.com).
Vsechny pohledy musı mıt minimalne jeden parametr. Tento parametr
byva standardne pojmenovan request, je instancı trıdy HttpRequest a
obsahuje uzitecne informace, tykajıcı se HTTP dotazu, jako GET a POST
parametry, promenne serveru apod.
Nejcastejsımi navratovymi hodnotami pohledu jsou instance techto trıd:
• HttpResponseRedirect – 302,
• HttpResponseNotFound – 404,
• HttpResponseServerError – 500,
• HttpResponse – 200,
• RenderToResponse – 200.
V prıpade pouzitı trıdy HttpResponse vracıme retezec znaku, predstavujıcı
jiz kompletnı webovou stranku. Tato metoda nenı prılis prakticka, vetsinou
se vracı instance trıdy RenderToResponse, spolu s dalsımi objekty a jmenem
13
Obrazek 2.2: Postup zpracovanı HTTP dotazu
sablony. V sablone muzeme k atributum techto objektu pristupovat, a data
tak modifikovat nebo jen graficky formatovat.
14
Kapitola 3
Ostatnı nastroje
Tato kapitola cerpa predevsım z informacı dostupnych na oficialnıch strankach
jednotlivych projektu:
• http://www.postgresql.org/
• http://postgis.refractions.net/
• http://pgrouting.postlbs.org/
• http://openlayers.org/
• http://www.openstreetmap.org/
• http://www.python.org/
Cılem teto kapitoly je seznamit ctenare s jednotlivymi nastroji pouzitymi
ve webove aplikaci Stopar.
3.1 PostgreSQL
PostgreSQL je vykonny databazovy system, ktery patrı mezi nejpouzıvanejsı
databazove systemy soucasnosti. Muzeme ho porovnavat se znamymi systemy
jako SQLite, MySQL, MSSQL nebo Oracle.
PostgreSQL je vyvıjen jako open-source pod licencı PostgreSQL License.
Licence je velice liberalnı a je podobna licenci BSD. Tato licence umoznuje
pouzıvat, menit a distribuovat PostgreSQL v jakekoliv forme se zdrojovymi
kody i bez nich.
15
Dıky temto moznostem je PostgreSQL velice oblıbeny pro uzivatele
Linuxu. Nachazı se take ve vetsine balıckovacıch systemu linuxovych dis-
tribucıch. PostgreSQL muzeme ale provozovat i na platforme MS Windows
a UNIX.
Vyvoj databazoveho systemu probıha uz 15 let a za tu dobu si Post-
greSQL zıskal velice dobrou povest dıky sve spolehlivosti, vykonnosti a
vysoke presnosti. Databaze plne splnuje ACID, coz je soubor vlastnostı,
ktere garantujı, ze databazove transakce budou spolehlive zpracovany. Mezi
tyto vlastnosti se pocıta atomita, konsistence, izolace a stalost dat v databazi.
Implementace SQL v PostgreSQL prısne splnuje standart ANSI-SQL:2008.
PostgreSQL podporuje velke mnozstvı datovych typu od jednoduchych
cıselnych typu az po slozite binarnı typy. Dale podporuje vetsinu svetovych
znakovych sad vcetne UTF-8 a kodovanı Unicode. Databazi je mozne prizpu-
sobit jak z hlediska poctu konkurencnıch spojenı, tak z hlediska mnozstvı
spravovanych dat. V tabulce 3.1 jsou uvedeny nektere limity databaze.
Limit HodnotaMaximalnı velikost databaze neomezenoMaximalnı velikost tabulky 32 TBMaximalnı velikost zaznamu 1.6 TBMaximalnı velikost bunky 1 GBMaximalnı pocet zaznamu v tabulce neomezenoMaximalnı pocet sloupcu v tabulce 250 - 1600Maximalnı pocet indexu neomezeno
Tabulka 3.1: Limity databaze PostgreSQL (tabulka byla prevzata ze serveruhttp://www.postgresql.org/)
PostgreSQL ma nativnı programovacı rozhranı pro vetsinu dnes pouzıva-
nych jazyku jako C/C++, Java, .Net, Perl, Python a dalsı. Zaroven umoznuje
programovat ve vlastnım jazyku PL/pgSQL, podobnem jazyku PL/SQL
znameho z databaze Oracle. PostgeSQL jiz od instalace obsahuje stovky
16
predem definovanych a uzitecnych funkcı, od zakladnıch matematickych
funkcı, az po slozite kryptograficke funkce.
Vsechny tyto vlastnosti delajı databazi PostgreSQL vykonnou a mo-
dernı aplikacı, kterou je mozne pouzıvat pro projekty jakehokoliv rozsahu a
zamerenı.
3.2 PostGIS
PostGIS je nadstavbou nad databazı PostgreSQL. Do databaze pridava pod-
poru pro ukladanı a praci s geoprostorovymi daty. Tento projekt, ve spojenı
s databazı PostgreSQL, muzeme srovnavat s komercnımi resenımi v podobe
ESRI ArcSDE nebo s nadstavbou Oracle Spatial. Vykonove srovnanı s temito
projekty by PostGIS nejspıs prohral, v jeho prospech vsak hraje porizovacı
cena, ktera je nulova.
PostGIS je open-source projekt vyvıjeny pod znamou licencı GNU
General Public License. Ve zkratce, tato licence umoznuje bezplatne sta-
hovanı zdrojovych kodu, jejich upravu a nasledne sırenı s tım, ze budou
opet sıreny pod stejnou licencı, tudız zdarma.
Hlavnı zasluhu na vyvoji rozsırenı PostGIS ma firma Refractions Re-
search, ktera stojı za mnoha dalsımi projekty z oblasti GIS. Nynı vsak do
projektu mohou prispıvat a take prispıvajı lide z celeho sveta.
PostGIS se snazı striktne dodrzovat standardy specifikovane organizacı
Open Geospatial Consortium a je kompatibilnı s OpenGIS ”Simple Features
Specification for SQL”1.
Stejne jako PostgreSQL je PostGIS dostupny pro operacnı systemy
MS Windows, UNIX a GNU/Linux. Vıce informacı lze nalezt na oficialnıch
strankach projektu http://postgis.refractions.net/.
1Simple Features Specification for SQL http://www.opengeospatial.org/standards/sfs
17
3.3 PgRouting
PgRouting je projekt, ktery je zameren na vyvoj knihovny pro PostGIS.
Tato knihovna poskytuje jednoduche algoritmy pro sıt’ove analyzy. Celkovy
vyvoj a sprava projektu je organizovana spolecnostı Orkney. Jiz od pocatku
projektu je hlavnım vyvojarem Anton Patrushev. Na projektu spolupracuje
zejmena s Danielem Kastlem, ktery ma na starosti podporu, dokumentaci
a dodatecne aplikace. Spolu s nimi do projektu prispıva spousta dalsıch
vyvojaru, hlavne z organizace Georepublic.
Knihovna je vyvıjena pod jiz zmınenou licencı GNU General Public
License.
PgRouting je mozne instalovat na vsechny operacnı systemy, kde bezı
PostgreSQL s PostGISem, bohuzel vsak neexistujı binarnı balıcky pro zadny
system, tudız je nutne kompilovat zdrojove kody, a to i na operacnım systemu
MS Windows.
Knihovna pgRouting vznikla nad knihovnou pgDjiksrta, ktera vsak nynı
ve srovnanı s pgRouting nabızı mnohem mene funkcı. Hlavnı funkce kni-
hovny je umoznit vyhledanı cesty s nejmensı cenou v sıt’ovem grafu. Nej-
mensı cenou muze byt naprıklad delka (v prıpade hledanı nejkratsı trasy),
delka delena maximalnı rychlostı v useku (v prıpade hledanı nejrychlejsı
trasy) nebo jakakoliv jina dynamicka nebo staticka velicina. Knihovna im-
plementuje nasledujıcı algoritmy:
• Shortest Path Dijkstra,
• Shortest Path A*,
• Shortest Path Shooting Star.
Krom teto hlavnı funkcionality nabızı knihovna i algoritmy pro resenı zname
ulohy obchodnıho cestujıcıho. Vıce o pouzitı algoritmu a dalsı informace lze
nalezt na oficialnıch strankach projektu http://pgrouting.postlbs.org/.
18
V ramci projektu pgRouting jsou vyvıjeny i dalsı aplikace, naprıklad
osm2pgrouting, coz je ve skutecnosti filtr, ktery konvertuje data ve formatu
OSM (XML) do databaze PostGIS a zaroven vytvarı topologii a pomocne
tabulky. Dalsı aplikacı vyvıjenou v ramci projektu je WebRouting Service
(WRS), coz je webova sluzba, ktera umoznuje vytvaret pgRouting dotazy
pres HTTP protokol.
3.4 OpenLayers
OpenLayers je sada nastroju, ktera umoznuje zobrazovanı mapy ve we-
bovych prohlızecıch. Z uzivatelskeho pohledu jsou to ovladacı prvky mapy
(tlacıtka pro pohyb mapy, priblizovanı, oddalovanı, zmena vrstev). Z pohledu
vyvojare je to Javascriptova knihovna s prehlednym API rozhranım. Dulezite
je, ze OpenLayers nenı vlastnı mapa, kterou uzivatel vidı.
Mapa, neboli data, ktera na webove strance zobrazujeme, muzeme cerpat
z techto typu zdroju:
• Web Map Service,
• Web Feature Service,
• mapove servery (MapServer, GeoServer, ArcGIS Server),
• mapove sluzby (OpenStreetMaps, Google Maps, Yahoo! Maps),
• formaty (GeoRSS, KML, GML, GeoJSON),
a dalsı.
S projektem OpenLayers zacala firma MetaCarta v roce 2005 a o rok
pozdeji byl projekt uvolnen jako open-source, pod mırne upravenou BSD
licencı. Dnes je ve spojenı s OpenStreetMaps otevrenou alternativou ke
komercnım projektum, jako je Google Maps nebo Bing Maps.
OpenLayers jsou volne ke stazenı na strankach projektu openlayers.com.
Zaroven se tam nachazı javascriptova knihovna, na kterou je mozne prımo
19
odkazovat. Poslednı moznostı je pouzitı SVN repozitare, kde se nachazı
vyvojova verze.
3.5 OpenStreetMap
OpenStreetMap je komunitnı projekt, ktery poskytuje geograficka data pod
svobodnou licencı bez omezenı. OpenStreetMap je podobny projektu Wiki-
pedia. Zakladem je, ze vsichni uzivatele mohou svobodne pridavat, upravo-
vat a cerpat informace. V prıpade OpenStreetMap jsou temito informacemi
geograficka data.
Projekt OpenStreetMap byl zalozen v roce 2004 Stevem Coastem. O dva
roky pozdeji vznikla stejnojmenna nevydelecna organizace, ktera projekt
zastit’uje. Postupem casu do projektu prispıvala financne a materialne rada
lidı a firem, jako Yahoo nebo Google a z OpenStreetMap se stala ruzne
kvalitnı mapa pokryvajıcı cely svet.
Kvalita dat v OpenStreetMap je ruznoroda, nebot’ zdrojem dat jsou
uzivatele a firmy, kterı poskytnou zdarma zaznamy svych merenı. Pri pohledu
do mapy jsou evidentnı rozdıly nejen mezi zememi, ale i mezi oblastmi
jednotlivych zemı. Vzdy zalezı na aktivite uzivatelu a oblıbenosti projektu
v dane lokalite.
Nynı je v komunite registrovano kolem 200 000 uzivatelu, odhaduje se
vsak, ze pouze 10 % z nich jsou aktivnımi prispevateli.
Data OpenStreetMap jsou ulozena i s topologiı a muzeme je rozdelit do
techto typu:
• Nodes – body s geografickou polohou,
• Ways – seznamy bodu, patrıcı do jednoho polygony/polylinie,
• Relations – skupiny prvku, kterym muze byt prirazen stejny parametr,
• Tags – doplnujıcı textove udaje.
20
OpeenStreetMap je velice nadejny projekt a pokud bude jeho oblıbenost
rust, muze se stat plnohodnotnym zdrojem geografickych dat po cele Zemi.
3.6 Python
Python je vykonny programovacı jazyk, ktery se snazı o maximalnı citelnost
kodu. Jazyk Python je objektove orientovany a hodı se jak pro psanı kratkych
skriptu, tak pro vyvoj rozsahlejsıch aplikacı. Interpret jazyka je spustitelny
na operacnıch systemech MS Windows, UNIX i MacOS X.
Zdrojove kody Pythonu jsou volne dostupne na oficialnıch strankach
projektu python.org a jsou uvolneny pod licencı Python Software Founda-
tion License, ktera je podobna licenci BSD. Na strankach se nalezajı binarnı
balıcky pro operacnı systemy MS Windows a odkazy na dalsı moduly.
Vyvoj Pythonu zacal Guido van Rossum v prosinci 1989 s hlavnım
zamerem vyvinout nastupce programovacıho jazyka ABC. Rossum ma nynı
stale hlavnı slovo pri urcovanı smeru vyvoje jazyka, ale na vlastnım vyvoji
se jiz znacne podılı komunita.
Python vyuzıva bılych znaku, neboli odsazovanı k seskupovanı vyrazu,
dale se snazı o sirsı pouzitı srozumitelnych klıcovych slov, cımz vytvarı kod
dobre citelny. V programu nenı nutne deklarovat promenne ani argumenty
funkcı, jazyk dokonce nerozlisuje ani jejich datovy typ. Interpret jazyka je
mozne pouzıvat interaktivne, coz je vyhodne pri testovanı programu.
Python je soucastı mnoha projektu a zakladem mnoha aplikacı. Z tech
nejznamejsıch jsou to naprıklad editory rastrove (GIMP) a vektorove grafiky
(Inkspace), system GRASS GIS a samozrejme framework Django.
21
Kapitola 4
Webova aplikace Stopar
Tato kapitola se venuje webove aplikaci Stopar, ktera byla vytvorena pomocı
frameworku Django a dalsıch nastroju, ktere jsou blıze popsany v kapitole 3.
Automobilova doprava se za poslednıch roky velice rozsırila. V dnesnı
dobe nenı vyjimecne, kdyz rodina vlastnı vıce nez jeden automobil. Dusledek
toho je videt na nasich silnicıch, kde vetsina automobilu ma pouze jednoho
pasazera – a to ridice. To samozrejme zpusobuje velke dopravnı problemy,
nebot’ silnicnı sıt’ v Ceske republice na to nenı dimenzovana. Resenım muze
byt zkvalitnenı hromadne dopravy nebo take rozsırenı stopovanı.
V ruznych zemıch Evropy jako Italie a Polsko, a take v USA, je stopovanı
povazovano za bezny druh dopravy a je mnohem vıce rozsıren nez v Ceske
republice. Ve Spojenych statech je zvlast’ oblıbeny, nebot’ tam existujı na
dalnicıch a ve mestech specialnı pruhy pro vozidla s vıce nez dvema oso-
bami. Tım jsou ridici nuceni vyhledavat spolujezdce. V CR je stopovanı
spıse vysadou male skupiny nadsencu a nema takovou podporu u zbytku
verejnosti. Priblızit stopovanı vsem lidem byl primarnı duvod vzniku teto
prace.
Pri prohledanı ceskeho internetu narazı ctenar na projekty naprosto
stejneho zamerenı. Je to naprıklad:
• http://www.spolujizda.cz/
• http://www.spolujizda.net/
• http://www.spolujizda.com/
• http://www.autospolujizda.cz/
22
a urcite mnohe dalsı. Vsechny tyto projekty vypadajı podobne. Uzivatelske
rozhranı je sice jednoduche, ale nicım nezajımave. Uzivatel si muze vyhledat
spolujızdy a nebo je vlozit, a to je vetsinou jedina funkcionalita. Bezneho
uzivatele webu, ktery se nezajıma o spolujızdu, tyto projekty nicım neoslovı.
Coz je hlavnım duvodem neprılis velke navstevnosti a oblıbenosti techto
webu.
Webovy portal Stopar se snazı priblızit stopovanı ostatnım lidem tım, ze
poskytuje i dalsı funkcionalitu. Nynı je touto funkcionalitou pouze pridavanı
zajmovych bodu (tzv. Points of Interest) do mapy. Do budoucna je vsak
v planu rozsırit aplikaci o moznost vkladanı tras, naprıklad cyklotras nebo
tras pro koleckove brusle, dale moznost vkladat cele zajezdy, ke kterym si
bude uzivatel moci pridavat cestovnı zapisky, fotky a dalsı veci.
Vse bude fungovat na vzajemnem sdılenı mezi uzivateli, kterı si tımto
zpusobem budou doporucovat zajımave typy na vylet. Vsechny prvky bude
moci uzivatel komentovat, stejne tak bude moci pridavat nazory na ostatnı
uzivatele, poskytujıcı spolujızdu, respektive spolujezdce. Je nutno pripome-
nout, ze nynı je funkcnı pouze cast obsluhujıcı pridanı zajmovych bodu a
spravu spolujızd, kazdopadne tyto casti jiz plne slouzı jako prıklad uplne
aplikace.
Dalsı vecı, ktera cinı Stopare vyjimecnym oproti ostatnım projektum,
je pridanı mapy. Mapa je hlavnım nastrojem na webove strance, zobrazuje
vzdy vybrane prvky a zaroven umoznuje vkladanı prvku pouhym kliknutım.
Mapa by mela zprehlednit a zaroven ozivit aplikaci.
Toto vsechno je nutne prehledne usporadat, graficky vyladit a zajistit
uzivatelskou prıvetivost aplikace. Pouze za techto predpokladu muze byt
webova aplikace uspesna.
4.1 Popis projektu
Cely projekt momentalne bezı na serveru josef, coz je server katedry mapovanı
a kartografie. Projekt je dostupny na URL
http://josef.fsv.cvut.cz/stopar
a je prıstupny pro vsechny uzivatele. Jako webovy server je pouzit Apache.
K pouzıvanı aplikace Stopar nenı potreba vlastnit uzivatelsky profil, ale
v takovem prıpade bude pouzıvanı znacne omezeno a navstevnık bude moci
23
pouze prohlızet jednotlive prvky. V prıpade zaregistrovanı bude jiz moci
uzivatel vkladat nove zajmove body, spolujızdy a pridavat komentare.
Jak jiz bylo zmıneno, tak projekt Stopar zatım umı obstaravat uzivatelske
ucty, spravovat zajmove body a jednotlive trasy, neboli zajımava mısta a
spolujızdy. Z toho jiz muze byt patrne, ze projekt je tvoren tremi aplikacemi
– aplikacı accounts, points a rides. Z nazvu aplikacı je jasne, co ktera ma na
starosti.
Projekt je napojen na databazi pgis stopar, ktera je soucastı databazo-
veho systemu PostgreSQL, bezıcım rovnez na serveru josef. PostgreSQL je
rozsıren o PostGIS, nadstavbu pro ukladanı prostorovych dat a knihovnu
pgRouting, umoznujıcı hledanı tras.
4.1.1 Vzhled aplikace
Vzhled webovych stranek je pomerne jednoduchy. Aplikace vyuzıva cele
plochy prohlızece a je optimalizovana pro rozlisenı vetsı nebo rovno 1280×800
pixelu. Na strance je dominantnım prvkem mapa, ktera zabıra levou polo-
vinu plochy a zobrazuje vzdy vybrany prvek (bod, trasu). Na prave polovine
plochy jsou textove informace k vybranym prvkum a uzivatelsky panel.
Struktura webovych stranek je naznacena na obrazku 4.1
Obrazek 4.1: Struktura webovych stranek
24
Pro lepsı predstavu poslouzı ukazkove obrazky v prıloze A tohoto doku-
mentu.
4.1.2 Sablony
Aplikace vyuzıva sablonovacıho systemu Djanga. Je vytvorena jedna hlavnı
sablona base.html, ktera obsahuje hlavnı panely – hlavicku a paticku a telo
webove stranky. Telo muze byt rozsıreno o stranku obsahujıcı mapu a dalsı
obsah stranky.
Ukazkovy prıklad sablony base.html (velice podobna sablona je pouzita
i v projektu Stopar, obsahuje vsak mnozstvı dalsıch hlavicek, ktere jsou vsak
pro obsah teto prace bezvyznamne):
<html>
<head>
<title>Stopar</title>
</head>
<body>
<div id="header"></div>
<div id="content">
{% if map %}
{% include map.html %}
{% endif %}
{% block contetnt %}
Hello world!
{% end block %}
</div>
<div id="footer"></div>
</body>
</html>
Sablona je velice jednoducha, oproti beznemu HTML obsahuje tri zajımave
znacky.
25
Znacka {% if map %}{% endif %} uvozuje blok, ktery bude zobrazen,
v tomto prıpade spıse vykonan, pokud sablone bude predan parametr map a
nebude mıt hodnotu False.
Druha znacka {% include "map.html"%} naimportuje dalsı HTML doku-
ment, ktery se vlozı presne na mısto teto znacky.
Poslednı zajımava znacka {% block contetnt %}{% end block %} je
podobna znacce {% include %}. Tato znacka je nejspıs tou nejdulezitejsı,
nebot’ ona je tım, co dela sablonovacı system Djanga tolik efektivnı.
Jak je psano v sekci 2.4.8 na strane 13 pohledy mohou vracet sablony a
data, ktera budou v sablone zpracovany. V nasem prıpade tedy nevracıme
sablonu base.html, ale sablonu jinou, ktera base.html rozsırı.
Ukazkovy prıklad takoveto rozsirujıcı sablony:
{% extends "base.html" %}
{% block contetnt %}
Toto bude obsah stranky.
{% end block %}
Dalsı odlisnostı od znacky {% include %} je, v prıpade ze nenı uvedeny
{% block contetnt %}{% end block %} v rozsirujıcı sablone, je pouzit text
uvnitr znacky. V ukazkovem prıklade, pokud by nebyl uveden {% block
contetnt %}{% end block %} bylo by zobrazeno ”Hello world!”, my vsak
tento blok mame uveden, tudız bude zobrazeno ”Toto bude obsah stranky.”.
V prıkladu si jeste povsimneme znacky {% extends "base.html"%},
ktera je tou rozsirujıcı znackou a v nasem prıpade rozsiruje aktualnı sablonu
o sablonu base.html.
Na zaver, jen pro uplnost, je nutno zmınit znacku {% for item in
list %}{% endfor %}, ktera vytvarı cyklus for (opakuje kod, ktery je uve-
den v bloku) pres vsechny polozky v promenne, v nasem prıpade v promenne
list.
V Djangu je mozne pouzıt mnozstvı dalsıch znacek, jejich popis by vsak
presahoval rozsah teto prace. Navıc ve webove aplikaci Stopar nebyly tak
casto pouzıvany. Pokud by ctenare zajımaly, je mozne jejich prehled nalezt
na oficialnıch strankach projektu Django1.
1 http://docs.djangoproject.com/en/dev/ref/templates/builtins/
26
4.2 Databaze
Jak jiz bylo zmıneno, tak aplikace Stopar je napojena na databazi Post-
greSQL, rozsırenou o nadstavbu PostGIS a knihovnu pgRouting. V databazi
pgis stopar je prozatım 24 tabulek, z nichz 13 bylo vytvoreno a je spravovano
automaticky Djangem, respektive systemem. Zbyle byly vytvoreny manualne
na zaklade modelu v jednotlivych aplikacıch a utilitou osm2pgrouting.
Pozn.: O vztahu mezi tabulkami a modely pojednava sekce 2.4.6.
Pro prehlednost zde uvedeme seznam dulezitych tabulek a jejich popis:
• metadatove tabulky:
geometry columns automaticky vytvorena databazovym systemem,
pri vytvarenı databaze s rozsırenım PostGIS. V tabulce jsou ulo-
zeny zaznamy o jednotlivych polıch, ktere obsahujı prostorove
objekty spolu s geometriı techto objektu a souradnicovy system,
ve kterem jsou definovany souradnice.
spatial ref sys stejne jako tabulka geometry columns je i tato ta-
bulka vytvorena systemem, obsahuje vsak data o souradnicovych
systemech, ktere mohou byt pouzity v databazi.
• automaticky vytvorene tabulky:
auth user obsahuje informace tykajıcı se jednotlivych uzivatelu (jme-
no, heslo, email, poslednı prihlasenı).
auth permission prirazuje jednotlivym objektum prava pridavat, me-
nit a mazat ostatnı objekty.
django admin log zaznamenava veskerou aktivitu uzivatelu pres we-
bove administracnı rozhranı.
django comments uklada vsechny komentare s dalsımi informacemi
jako kdo, kdy a z jake IP adresy komentar vytvoril a k jakemu
objektu patrı.
django comment flags obsahuje flagy prirazene k jednotlivym ko-
mentarum.
django content type obsahuje metadata (jmeno, aplikace, model) o
vsech objektech ulozenych v databazi.
27
django session uklada data, klıce a expiraci vsech relacı.
• manualne vytvorene tabulky:
accounts profile rozsiruje objekt User o dalsı atributy – popis a fo-
tografie.
points kraje je tabulka vsech kraju v CR. Jsou v nı ulozeny zakladnı
informace jako pocet obyvatel, nazev a hlavne geometrie (poly-
gony predstavujıcı jednotlive kraje).
points points skladuje body (mısta), ktera vkladajı do aplikace uziva-
tele. Do tabulky je ukladana geometrie, nazev, typ mısta a doplnu-
jıcı informace.
points pointsimages rozsiruje points points o moznost vkladanı fo-
tografiı k bodum.
points worldborders je tabulka statu sveta. A stejne jako tabulka
points kraje obsahuje zakladnı informace o statech a geometrii.
rides cities je stejnym typem jako points kraje, ale obsahuje data
o vsech mestech v CR.
rides rides uklada spolujızdy pridane uzivateli. Do tabulky je ukla-
dana geometrie, datum jızdy, typ, pocet osob a dalsı informace.
• tabulky pro pgRouting:
rides roads data v teto tabulce jsou polylinie, ktere ve vysledku
predstavujı celou silnicnı sıt’ v CR. V tabulce je definovano, krome
geometrie, i ohodnocenı liniı, jejich typ a dalsı pomocne infor-
mace, usnadnujıcı rychlejsı hledanı tras.
rides vertices uklada geometrii vrcholovych bodu liniı silnicnı sıte.
4.3 Aplikace accounts
Aplikace accounts je tou hlavnı aplikacı. Umoznuje navstevnıkum regi-
straci a vytvorenı vlastnıho profilu. Spolu s tımto je samozrejme umozneno
uzivatelum profily menit a nahlızet na profily ostatnıch. Zaroven jsou na
uzivatelske profily navazany ostatnı aplikace. Pridavat a editovat zajmove
body a spolujızdy je mozne jen registrovanym uzivatelum.
28
4.3.1 Modely
Aplikace accounts definuje pouze jeden model – Profile, ale vyuzıva i
model druhy – User, ktery je definovany v django.contrib.auth.models.
Oba modely jsou propojeny vztahem 1:1.
class Profile(models.Model):
user = models.OneToOneField(User, verbose_name=’Uzivatel’)
info = models.TextField(’Informace’, blank=True)
picture = ThumbnailField(’avatar’,upload_to=’users/’,
blank=True,
size=(1980,1020))
4.3.2 Funkce
Zde bude uveden pouze seznam definovanych funkcı a jejich strucny popis,
prıpadne zajımave ukazky kodu.
index(request, sent): obstarava pozadavky smerujıcı na korenovy adresar
projektu Stopar. V prıpade metody GET rozlisuje, zda je uzivatel
prihlasen a pak mu zobrazı jeho uvodnı stranku, nebo pokud nenı
prihlasen, tak vracı hlavnı stranku aplikace s prihlasovacım a regi-
stracnım formularem. V prıpade POST metody, rozlisuje POST for-
mulare s prihlasenım a vykonava prihlasovacı proces nebo POST regi-
stracnıho formulare a vykonava registracnı proces.
profile(request): stara se o uzivatelske profily. Pokud je pozadavkemmeto-
da GET, tak vracı profilovy formular uzivatele s predvyplnenymi hod-
notami, pokud je pozadavkem metoda POST, tak ulozı hodnoty pro
uzivatelsky profil.
handle uploaded image(file,username,image name): uklada profilove
obrazky jednotlivych uzivatelu.
user(request,user id): stara se o zobrazovanı profilu ostatnıch uzivatelu.
Dale jsou v aplikaci accounts rozsıreny funkce password change a
password change done z django.contrib.auth.views tak, aby posılaly
nektere dodatecne promenne do sablon.
29
Ukazkova cast funkce index:
def index(request):
if request.method == ’POST’: # POST
if request.POST[’send’]==’1’: # POST is login
form = SimpleForm(request.POST)
if form.is_valid():
username = form.cleaned_data[’username’]
password = form.cleaned_data[’password’]
user = authenticate(username=username, password=password)
if user is not None: # Login succesfull
if user.is_active:
login(request, user)
return render_to_response(’login_done.html’)
Ukazka zahrnuje cast kodu, ktera se stara o prihlasenı uzivatele. Nutno
podotknout, ze funkce authenticate a login jsou definovane v jednom z
modulu Djanga, tudız vlastnı prace na slozitem procesu, jako prihlasovanı
uzivatelu do aplikace, je v prıpade pouzitı tohoto frameworku minimalnı.
4.4 Aplikace points
Aplikace points umoznuje vsem registrovanym uzivatelum ukladanı zajımavych
bodu/mıst po celem svete (na cele mape). Aplikace se stara o jejich ulozenı,
editaci, prıpadne smazanı a zaroven umoznuje jejich prohledavanı.
Zalozit zajmovy bod muze jen registrovany uzivatel. Pri zalozenı bodu
je nutne vyplnit orientacnı nazev bodu, vybrat kategorii bodu z nekolika
moznostı (ubytovanı, obcerstvenı, prırodnı pamatky, historicke pamatky,
stopovanı a ostatnı) a vyplnit souradnice nebo kliknout do mapy pro auto-
maticke vyplnenı souradnic. Dale je mozne pridat podrobnejsı popis bodu
a pridavat k nemu fotografie. Pri pridanı bodu do databaze se automaticky
urcı stat, v prıpade Ceske republiky i kraj, ve kterem bod lezı.
Registrovanym i neregistrovanym uzivatelum je umozneno vyhledavat
30
v seznamu bodu. Vyhledavanı je umozneno na zaklade polohy, prıpadne
kategorie, ktera byla bodu prirazena.
Uzivatele mohou editovat a mazat jen vlastnı zajmove body.
4.4.1 Modely
V souboru models.py jsou definovany 4 modely. Modely Kraje a WorldBorders
byly automaticky vytvoreny z dat, respektive naplneny vektorovymi daty
ve formatu ESRI Shapefile. Zbyle dva modely Points a PointsImages byly
nove zadefinovany a jsou plneny samotnymi uzivateli.
Ukazka definice modelu Points a PointsImages:
ALL_CHOICES = (
(1,’ubytovanı’),(2,’obcerstvenı’),(3,’prırodnı pamatky’),
(4,’historicke pamatky’),(5,’stopovanı’),(6,’ostatnı’),)
class Points(models.Model):
label = models.CharField(’nazev’, max_length=100)
category = models.PositiveSmallIntegerField(’kategorie’,
choices=ALL_CHOICES)
description = models.TextField(’popis’, blank=True)
lon = models.FloatField(’zemepisna delka (lon)’)
lat = models.FloatField(’zemepisna sırka (lat)’)
kraj = models.ForeignKey(’Kraje’, verbose_name=’Kraj’,
blank=True)
state = models.ForeignKey(’WorldBorders’,
verbose_name=’Zeme’,
blank=True)
geom = models.PointField(srid=4326)
user = models.ForeignKey(User)
objects = models.GeoManager()
class PointsImages(models.Model):
point = models.ForeignKey(’Points’, verbose_name=’Bod’)
image = ThumbnailField(’Obrazek’, upload_to=’points/’,
size=(1980,1020))
Pozn.: Vıce informacı o datech ulozenych v tabulkach je v sekci 4.2.
31
4.4.2 Funkce
V aplikaci points jsou pouzıvany tyto funkce:
show point(request, point id): je prosta funkce, ktera zobrazı podro-
bnosti jednoho bodu.
add point(request): stara se o pridavanı bodu. V prıpade metody GET je
zobrazen pouze formular pro pridanı bodu a v prıpade metody POST
(formular je odeslan) je bod pridan do databaze.
edit point(request, point id): je velice podobna funkci add point s jedi-
nym rozdılem, ze upravuje jiz pridane body.
delete(request, point id): maze body z databaze.
all(request): obstarava vyhledavanı bodu na zaklade parametru odeslanych
ve vyhledavacım formulari.
handle uploaded image(point id,image name,file): uklada obrazky k
jednotlivym bodum.
4.5 Aplikace rides
Poslednı aplikacı v projektu Stopar je aplikace rides, ktera se stara o spravu
spolujızd. Aplikace je svymi funkcemi podobna aplikaci points. Umoznuje
pridavanı spolujızd, jejich editaci, vyhledavanı a mazanı. Vsechny cinnosti,
krome vyhledavanı, jsou podmıneny prihlasenım k uzivatelskemu uctu.
Aplikace vyuzıva dat z OpenStreetMap [3.5], konkretne jen liniovych
dat z uzemı Ceske republiky, z toho samozrejme plyne omezenı vyhledanı
trasy jen pro CR. Toto omezenı bylo zavedeno z duvodu nızke kapacity disku
na serveru josef. Do budoucna je v planu rozsırit aplikaci minimalne o data
z cele Evropy.
Uzivatel si muze vyhledat trasu na zaklade dvou typu hodnot. Prvnım
typem jsou GPS souradnice, ktere napıse do polı, nebo se automaticky vlozı
po kliknutı do mapy. Druhym typem je nazev mesta v CR. V prvnım prıpade
se za pocatek, respektive konec trasy, urcı nejblizsı silnice. V druhem prıpade
si aplikace sama urcı centroid polygonu mesta a pote nejblizsı silnici.
32
Trasu je mozne volit z mısta do mısta, prıpadne volit bod/mesto, pres
ktere ma vest. Dale je potreba volit mezi trasou nejrychlejsı a nejkratsı.
V obou prıpadech je pro vypocet trasy pouzit algoritmus Shooting star.
Nejrychlejsı trasa je urcena klasicky jako podıl drahy ku maximalnı
povolene (mozne) rychlosti na silnici. Kvuli teto funkcionalite musela byt
silnicnı sıt’ rychlostne ohodnocena v zavislosti na typu silnice. Zde je potreba
pripomenout, ze OSM je komunitnı projekt, tudız je presnost dat zavisla na
uzivatelıch a nekdy jsou vysledky viditelne nepresne.
Pri ulozenı spolujızdy do databaze je potreba jeste zvolit datum cesty,
pocet osob a typ cesty, neboli jestli hledame spolujezdce, ridice. Zaroven je
zde moznost pridat dalsı informace k jızde.
4.5.1 Modely
Aplikace rides zavadı do projektu Stopar 4 modely:
Cities: byl vytvoren a naplnen vektorovymi daty ve formatu ESRI Shape-
file.
Roads: vznikl na zaklade tabulky vytvorene utilitou osm2pgrouting.
Vertices: vznikl stejne jako model Roads.
Rides: nove definovany model pro ukladanı spolujızd.
Ukazka definice modelu Rides:
class Rides(models.Model):
city_from = models.CharField(’odkud’, max_length=35,)
city_cross = models.CharField(’prez’,max_length=35,blank=True)
city_to = models.CharField(’kam’,max_length=35, )
gps_from = models.PointField(srid=4326)
gps_cross = models.PointField(srid=4326,blank=True)
gps_to = models.PointField(srid=4326)
fp = models.BooleanField()
cp = models.BooleanField(blank=True)
tp = models.BooleanField()
trace = models.TextField()
mode = models.CharField(max_length=10, choices=WAY_CHOICES)
date = models.DateField(’datum’)
33
count = models.PositiveSmallIntegerField("pocet mıst",
choices=COUNT_CHOICES)
description = models.TextField("dalsı info",blank=True)
role = models.PositiveSmallIntegerField("role",
choices=ROLE_CHOICES,
max_length=15)
geom = models.GeometryCollectionField(srid=4326)
user = models.ForeignKey(User)
objects = models.GeoManager()
class Meta:
verbose_name = ’trasa’
verbose_name_plural = ’trasy’
Pozn.: Vıce informacı o datech ulozenych v tabulkach je v sekci 4.2.
4.5.2 Funkce
V aplikaci rides jsou definovany 4 hlavnı funkce (show ride, add, edit,
delete, all), ktere majı naprosto stejnou funkcionalitu jako jim odpovıdajıcı
funkce v aplikaci points uvedene v 4.4.2.
Dale je v souboru views.py definovano nekolik pomocnych funkcı na
vyhledavanı mest z GPS souradnic, nejblizsıch silnic atd.
Cast programu, ktera obstarava vyhledanı nejkratsı trasy:
def add(request):
select1 = ... # shortest path SELECT
select2 = ... # fastest path SELECT
if request.method == ’POST’:
form = RidesForm(request.POST)
if form.is_valid():
mode = form.cleaned_data[’fastest’]
if mode == ’fastest’:
select = select2
else:
select = select1
34
point1 = getPoint(form.cleaned_data[’city_from’])
start_node = getRoad(point1)
point2 = getPoint(form.cleaned_data[’city_to’])
target_node = getRoad(point2)
cursor = connection.cursor()
cursor.execute(select % (start_node.id, target_node.id))
ways = cursor.fetchall()
ways.pop()
list = (getList(ways))
ride = Roads.objects.filter(id__in=list)
return render_to_response(’rides_add.html’, {"ride":ride})
Konec funkce, ktera spravuje vyhledavanı spolujızd:
# role filter
role = form.cleaned_data[’role’]
rides = rides.filter(role=role)
# count filter
count = form.cleaned_data[’count’]
if count>0:
if role==1:
rides.filter(count__lte=count)
else:
rides = rides.filter(count__gte=count)
# date filter
day = form.cleaned_data[’day’]
if day != ’0’:
rides = rides.filter(date__day=day)
month = form.cleaned_data[’month’]
if month != ’0’:
rides = rides.filter(date__month=month)
35
year = form.cleaned_data[’year’]
if year != ’0’:
rides = rides.filter(date__year=year)
return render_to_response(’rides_all.html’,
{’rides’:rides})
4.6 Planovana funkcionalita
Bohuzel v ramci bakalarske prace nebylo moc casu. Stavajıcı aplikace je sice
funkcnı ve vsech smerech, ktere byly na zacatku vytyceny, ale bohuzel zatım
neprinası neco zcela noveho, co by presvedcilo vetsı mnozstvı lidı k jejımu
uzıvanı. Aplikace zaroven nenı dostatecne uzivatelsky prıvetiva, aby obstala
v dnesnıch pozadavcıch uzivatelu.
Co se tyce uzivatelske prıvetivosti, tak je zde neustale co zlepsovat.
Cılem je usnadnovat uzivatelum ovladanı aplikace tak, aby byla rychlejsı, in-
tuitivnejsı a prehlednejsı. V budoucnu by tedy bylo dobre rozsırit funkciona-
litu aplikace o interaktivnejsı vyhledavanı tras, spıse tedy editaci, kdy uziva-
tel bude moci prımo editovat trasu na mape pomocı mysi. Rovnez by bylo
vhodne predelat celkove vzhled aplikace. Nynı je sice aplikace prehledna,
ale nenı prılis lıbiva. Bohuzel tento ukol je spıse pro profesionalnı grafiky,
respektive web-designery.
Jak bylo zmıneno na zacatku teto kapitoly, z pohledu funkcionality je
v planu pridat podporu pro vkladanı tras, naprıklad cyklotras nebo tras
pro koleckove brusle, dale moznost vkladat cele zajezdy, ke kterym si bude
uzivatel moci pridavat cestovnı zapisky, fotky a dalsı veci. Vse by melo byt
sdıleno mezi uzivateli, kterı si budou moci jednotlive prvky komentovat a
hodnotit.
Dale by bylo vhodne rozsırit aplikaci o funkce, ktere by exportovaly data
vlozena uzivateli a ta by se nasledne vkladala do databaze OSM. Tımto by
projekt Stopar pomohl v rozsirovanı komunitnıho projektu OSM, kteremu
vdecı za zakladnı data.
Na zaver jen zmınım veci, ktere by bylo dobre implementovat. Je to
naprıklad lokalizace do vıce jazyku, pridanı vıce mapovych vrstev (naprıklad
Google Maps) nebo napojenı na dalsı projekty (Facebook, Picasa, Foursquare).
36
Kapitola 5
Zaver
Cılem teto prace bylo navrhnout a implementovat webovou aplikaci pro
stopare s pouzitım frameworku Django. Cıl byl vıcemene splnen uspesne,
aplikace byla naprogramovana, je funkcnı a bezı na serveru josef.fsv.cvut.cz.
Jejı pouzitelnost pro sirsı verejnost je jiz otazkou diskuze.
Aplikace Stopar v soucasne podobe umoznuje navstevnıkum moznost
registrace a vytvorenı vlastnıho uzivatelskeho profilu, na ktery je navazano
nasledne ukladanı zajımavych bodu a take vyhledavanı a ukladanı tras,
respektive spolujızd at’ z pohledu ridice, tak z pohledu spolujezdce. Nere-
gistrovanı uzivatele mohou pouze prohlızet profily uzivatelu, jednotlive body
a spolujızdy.
Framework Django, ktery byl pouzit pri tvorbe aplikace, je postaveny na
programovacım jazyku Python a dokaze pracovat s nekolika databazovymi
systemy. Dale byla pouzita nadstavba GeoDjango, ktera rozsiruje framework
o moznost prace s geoprostorovymi daty. Framework tak integruje vsechny
nastroje potrebne k ukladanı, zpracovanı a zobrazovanı geoprostorovych dat
a dıky dodrzovanı standardu je jeho propojenı s nastroji jako OpenLayers
velice snadne.
Django vsak nenı dokonale. Jako nevyhody Djanga bych zmınil hlavne
tezkopadnou praci s grafickym prizpusobenım formularovych polı a take s
javascriptem. Mezi nejvetsı prednosti Djanga patrı jednotny a optimalizo-
vany prıstup k databazi, komplexnı sprava uzivatelskych uctu a efektivnı
sablonovacı system.
Pouzitım frameworku Django byla prace znacne ulehcena. Programator
se naucı pracovat s frameworkem pomerne rychle, hlavne dıky mnozstvı
37
prıkladu, ktere jsou k dispozici na webu a dıky podrobne a prehledne doku-
mentaci, ktera je k nahlednutı na oficialnıch strankach projektu. Vyhodou
je take siroka komunita ochotnych uzivatelu, kterı radi poradı s jakymkoliv
problemem.
38
Seznam pouzitych zdroju
[1] DVORAK, Pavel. Hrajeme si s Djangem [online]. 2009 [cit. 2010-04-20].
Dostupne z WWW:
http://zdrojak.root.cz/serialy/hrajeme-si-s-djangem/.
[2] Georepublic [online]. 2010 [cit. 2010-05-01]. Georepublic - pgRouting.
Dostupne z WWW:
http://georepublic.de/en/projects/pgrouting/.
[3] HOLOVATY, Adrian; KAPLAN-MOSS, Jacob. The Definitive Guide
to Django : Web Development Done Right. 2nd edition. 2009. 499 s.
[4] SVEC Jan, Ucebnice jazyka Python. 2002. 90 s.
[5] Hunt, Andrew; THOMAS, David. The Pragmatic Programmer. 1999.
320 s.
[6] Oficialnı dokumentace projektu Django [online]. 2010 [cit. 2010-04-15].
Dostupne z WWW:
http://docs.djangoproject.com/en/dev/.
Webove odkazy:
[7] Webovy portal Excess
http://excess.org/
[8] Javascriptova knihovna OpenLayers
http://openlayers.org/
[9] Komunitnı projekt OpenStreetMap
http://www.openstreetmap.org/
39
[10] Projekt pgRouting
http://pgrouting.postlbs.org/
[11] Projekt PostGIS
http://postgis.refractions.net/
[12] Databazovy system PostgreSQL
http://www.postgresql.org/
[13] Programovacı jazyk Python
http://www.python.org/
40
Prıloha A
Ukazky vzhledu webove
aplikace Stopar
41
Obrazek A.1: Ukazka uvodnı stranky.
42
Obrazek A.2: Ukazka stranky s podrobnostmi o bodu.
43
Obrazek A.3: Ukazka stranky s podrobnostmi o spolujızde.
44