BAKALÁŘSKÁ PRÁCE Tvorba geografického informačního

Transkript

BAKALÁŘSKÁ PRÁCE Tvorba geografického informačního
ZÁPADOČESKÁ UNIVERZITA V PLZNI
FAKULTA APLIKOVANÝCH VĚD
KATEDRA MATEMATIKY
BAKALÁŘSKÁ PRÁCE
Tvorba geografického informačního systému pro občanské sdružení PilsFree
Plzeň, 2007
Vojtěch Královec
Zadání bakalářské práce
1
Prohlášení
Předkládám tímto k posouzení a následné obhajobě bakalářskou práci zpracovanou na závěr bakalářského studia na Fakultě aplikovaných věd Západočeské univerzity v Plzni. Prohlašuji, že jsem předloženou bakalářskou práci vypracoval samostatně s použitím literatury a pramenů, jejichž úplný seznam je její součástí.
Plzeň, červen 2007
....................................................
vlastnoruční podpis
2
Poděkování
Na tomto místě bych chtěl poděkovat vedoucímu bakalářské práce Ing. Martinu Kadlecovi za metodické vedení, věcné připomínky a zapůjčení odborné literatury pro zpracování bakalářské práce.
Dále bych rád poděkoval členům sdružení PilsFree Pavlu Muknšnáblovi a Janu Hejtmánkovi za poskytnutí dat pro zpracování této práce. Zároveň děkuji Ing. Janu Růžičkovi za poskytnutí skriptu pro tvorbu liniové vrstvy na základě dat z databáze.
3
Anotace
Práce popisuje analýzy a funkce, které byly vytvořeny pro geografický informační systém postavený na datech sdružení PilsFree. Klíčové je využití svobodného software pro jejich vytvoření. Zvolený software je GRASS GIS 6.2. V teoretické části je představen program GRASS a postup skriptování v něm. Je ukázána struktura databáze PilsFree. V praktické části jsou do GRASS importována a upravena rastrová a vektorová data. Tyto vrstvy jsou transformovány do souřadnicových systémů S­JTSK a WGS 84. Dále jsou navrženy vhodné funkce pro GIS a některé z nich jsou implementovány pomocí skriptů v programu GRASS.
Klíčová slova:
GIS, GRASS, rastry, vektory, import geodat, transformace, programování, geografické analýzy
Annotation
This work describes analyses and functions for geographic information system based on data of association PilsFree. The condition is usage of free software for their creation. Selected software is GRASS GIS 6.2. In theoretical part programme GRASS and the process of scripting in it is presented. The structure of PilsFree database is shown. In practical part the raster and vector data are imported and adjusted in GRASS. These layers are transformed to coordinate systems S­JTSK and WGS 84. Then appropriate fuctions for GIS are suggested and some of them are implemented by scripts in programme GRASS.
Keywords:
GIS, GRASS, rasters, vectors, geodata import, transformations, scripting, geographic analyses
4
Obsah
1 Úvod................................................................................................................
....................7
2 Softwarové vybavení.............................................................................................
..............8
2.1 Svobodný software a GIS...................................................................................
.........8
2.2 GRASS .......................................................................................................
................9
2.3 Skriptování v GRASS...................................................................
............................11
2.3.1 BASH..............................................................................................
...................11
2.3.2 Postup skriptování.................................................................
............................11
3 Seznámení s daty sdružení PilsFree.............................................................................
.....13
3.1 O PilsFree..........................................................................................
........................13
3.2 Databáze PilsFree...........................................................................................
...........13
3.2.1 Technologie.............................................................................................
...........14
3.2.2 Datový model...................................................................................................
..14
4 Vizualizace prostorových dat........................................................................
....................16
4.1 Založení lokací v GRASS.................................................................
........................16
4.2 Vytvoření bodových vrstev.................................................................................
.......17
4.2.1 Práce s atributovými tabulkami v GRASS........................................................17
4.2.2 Úprava souřadnic v databázi.............................................................................18
4.2.3 Spojení tabulek v MySQL...........................................................................
......18
4.2.4 Import tabulek...........................................................................
........................19
4.2.5 Tvorba bodových vrstev..............................................................................
.......19
4.3 Vytvoření liniové vrstvy.............................................................................
...............19
4.3.1 Popis funkce skriptu........................................................................
..................20
4.3.2 Import liniové vrstvy a její atributové tabulky.................................................20
4.4 Spojení liniové a bodové vrstvy......................................................................
..........20
4.4.1 Úprava bodových vrstev.................................................................
...................20
4.4.2 Spojení................................................................................................
...............21
4.5 Vytvoření rastrové podkladové mapy..................................................................
......21
4.5.1 Příprava dat.....................................................................................
...................21
4.5.2 Import a zpracování........................................................................................
...22
4.5.3 Popis použitého skriptu..........................................................................
...........23
4.6 Posun vektoru na rastr.................................................................................
..............24
4.7 Import DMT................................................................................................
..............25
4.8 Georeferencování............................................................................
..........................26
4.8.1 Transformace podkladové mapy.......................................................................26
4.8.2 Zhodnocení přesnosti transformací...................................................................29
4.8.3 Transformace vektorové vrstvy.........................................................................29
4.9 Transformace DMT.........................................................................................
..........30
4.9.1 Transformace do lokálního systému..............................................................
....30
4.9.2 Transformace z S­JTSK do WGS 84................................................................30
4.10 Shrnutí.............................................................................................................
.........31
5 Návrh vhodných analýz a funkcí a implementace některých z nich................................32
5.1 Výřez mapy na základě souřadnic GPS....................................................................32
5.1.1 Požadavky...................................................................................
.......................32
5
5.1.2 Příprava dat......................................................................................
..................32
5.1.3 Popis skriptů.............................................................................
.........................33
5.1.4 Výstupy.............................................................................................
.................36
5.2 Nahrazení spoje...........................................................................................
..............39
5.2.1 Požadavky.................................................................................................
.........39
5.2.2 Příprava dat...................................................................................................
.....40
5.2.3 Popis skriptů..................................................................................
....................41
5.2.4 Výstupy.............................................................................................................
.44
5.3 Tematická mapa......................................................................................................
...46
5.3.1 Požadavky.................................................................................................
.........46
5.3.2 Popis skriptu..........................................................................................
............46
5.3.3 Výstupy......................................................................................................
........47
5.4 Návrhy dalších funkcí.....................................................................
..........................47
5.4.1 Automatická aktualizace .................................................................................
..47
5.4.2 Výškové profily..................................................................................
...............48
5.4.3 Trojrozměrné zobrazení dat..............................................................................48
5.4.4 Hustota bodů sítě......................................................................................
.........49
6 Závěr.................................................................................................................................
.50
Seznam použitých pramenů a literatury.............................................................................51
Příloha A – Skripty.......................................................................................
......................53
Import rastrů.........................................................................................................
..........53
Importpng................................................................................................
..................53
Výřez mapy na základě souřadnic GPS.................................................................
........53
Nacteni..............................................................................................................
.........53
Planek.................................................................................................
.......................54
Nahrazení spoje..............................................................................................
................56
Nacteni..............................................................................................................
.........56
Hlavni........................................................................................................................
.57
Cesta..................................................................................................
........................58
Tematická mapa.........................................................................................................
.....59
Tematicka................................................................................................................
...59
Příloha B – Struktura DVD......................................................................................
...........62
6
1 Úvod
Geografické informační systémy se s rozvojem informačních technologií v posledních letech staly jedním z nejčastěji využívaných způsobů prezentace geografických dat. Nejrůznější firmy, společnosti a organizace zřizují vlastní GIS servery, aby nabídly zájemcům jednoduchý přístup k prostorovým informacím. Služeb GIS nemusejí využívat pouze komerční firmy, ale také různé neziskové organizace či občanská sdružení. Jedním z těchto sdružení je také počítačová síť PilsFree.
Cílem této bakalářské práce je prozkoumat a navrhnout možnosti tvorby GIS pro sdružení PilsFree pomocí volně šiřitelného programu GRASS GIS 6.2. Sdružení má vlastní interní databázi členů, která obsahuje i prostorové informace o poloze prvků sítě
v místním souřadnicovém systému. Tato data budou vizualizována v programu GRASS a dále využita pro analýzy a funkce GIS.
V teoretické části práce se zabýváme problematikou svobodného software, představíme si program GRASS a postup skriptování v tomto programu.
V praktické části práce se seznámíme s dostupnými daty v databázi, která bude možno využít pro tvorbu GIS a připravíme další vhodná geodata. Těmi jsou podkladová mapa a digitální model terénu.
Provedeme import těchto dat do programu GRASS a různé potřebné úpravy. Transformujeme je z místního souřadnicového systému do dalších vhodných souřadnicových systémů.
Hlavním úkolem této práce je navržení vhodných analýz a funkcí geografického informačního systému pro potřeby PilsFree a jejich implementace pomocí skriptů tak, aby mohly být využity v případném GIS, jehož tvorba by se měla stát náplní mé diplomové práce.
7
2 Softwarové vybavení
2.1 Svobodný software a GIS
Jedním ze základních požadavků v zadání této práce je využití nekomerčního software pro provádění geografických analýz. Proto by bylo vhodné nejprve představit, co je to svobodný software a jaké jsou možnosti v oblasti GIS.
Svobodný software, někdy také nazývaný free software, je software, ke kterému je
k dispozici také zdrojový kód, spolu s právem tento software používat, modifikovat a distribuovat. Naprostá většina svobodného software je zdarma, ačkoliv to není podmínkou [18].
V roce 1984 založil Richard Stallman projekt GNU, aby tak vytvořil kompletní unixový operační systém založený na svobodném software. Jako krédo svobodného software definoval tyto čtyři svobody [18]:
Svoboda používat program za jakýmkoliv účelem. ● Svoboda studovat, jak program pracuje a možnost přizpůsobit ho svým potřebám. ● Svoboda redistribuovat kopie programu.
● Svoboda vylepšovat program a zveřejňovat zlepšení, aby z nich mohla mít prospěch celá komunita. ●
Za získání kopií svobodného software lze platit, nebo je obdržet zdarma, ovšem bez ohledu na způsob, jak je uživatel získal, má vždy svobodu kopírovat a měnit software, dokonce prodávat nebo darovat jeho kopie nebo pozměněné verze [18].
Richard Stallman založil také Free Software Foundation (Nadace pro svobodný software), která se stará o právní a organizační stránky projektu GNU a o rozšiřování povědomí o svobodném software. Myšlenky svobodného software byly formulovány prostřednictvím GNU General Public License a GNU Lesser General Public License, které se časem staly nejrozšířenějšími licencemi svobodného software [18].
GNU General Public License zajišťuje uvedené základní svobody svobodného software a někdy je také nazývána copyleft licencí. Copyleft licence říká, že pokud redistribuujeme originální nebo pozměněnou verzi programu, musíme tuto verzi redistribuovat pod stejnou licencí pod jakou jsme získali původní program. V podstatě to znamená, že k němu nesmíme přidat žádná omezení, abychom tak odepřeli základní svobody ostatním. Tato licence tedy nijak neomezuje základní svobody; spíše je chrání [18].
Sféra svobodného software nabízí i velké množství nejrůznějších nástrojů pro práci
s prostorovými daty (jejich velmi podrobné seznamy lze nalézt na stránkách www.freegis.org resp. www.opensourcegis.org). Tyto nástroje lze rozdělit do několika základních skupin. Nezanedbatelná část vývojářů v oblasti open source GIS se zaměřila na vývoj knihoven, které poskytují rozšířenou funkcionalitu pro jiné aplikace. Vznikly tak soubory knihoven specializovaných na užší oblasti, které ale přebírá většina open source a i některé 8
komerční programy. Do této skupiny patří například knihovna GDAL/OGR (Geospatial Data Abstraction Library) pro převody mezi různými rastrovými i vektorovými formáty, PROJ.4 pro převody mezi kartografickými projekcemi či sbírka nástrojů GeoTools pro GIS napsané v jazyce Java.
Další skupinu tvoří nástroje pro tvorbu internetových mapových serverů, které zažívají
v posledních letech nebývalý rozmach. Tyto aplikace nabízejí přehledné uživatelské prostředí pro zobrazení prostorových dat v klasickém internetovém prohlížeči. Dalšími funkcemi mohou být například zobrazení map z jiných serverů pomocí služeb WMS (Web Map Service) nebo WFS (Web Feature Service) či transformace mezi souřadnicovými systémy. Rozhodně nejslavnější a nejpoužívanější software z této skupiny je UMN MapServer vyvíjený na University of Minnesota. Dalšími zástupci jsou MapBender, MapBuilder, MapGuide nebo GeoServer.
Poslední skupinou jsou plnohodnotné geografické informační systémy schopné spravovat, zpracovávat, analyzovat a vizualizovat prostorová data. V některých oblastech dosahují kvalit klasických komerčních GIS a někdy je dokonce i předčí. Tyto programy jsou většinou vyvíjeny větším počtem vývojářů z celého světa a často je využívají i různé státní organizace či univerzity. Nejvýznamnějším zástupcem této skupiny je systém GRASS, který bude použit i pro zpracování této práce. Dále lze zmínit geografické informační systémy QGIS, OpenJUMP, uDig nebo SAGA GIS.
2.2 GRASS Geografický informační systém GRASS (Geographical Resources Analysis Support System) je kombinovaný rastrový a vektorový GIS s integrovaným systémem pro správu obrazových dat a vizualizaci. Obsahuje přes 400 programů a pomocných prostředků, sloužících k práci s rastrovými, vektorovými a bodovými daty, vytváření map v digitální a analogové formě, zpracování multispektrálních obrazových dat, vytváření a ukládání prostorových dat [9]. Původně byl vyvinut ve výzkumných laboratořích stavebního inženýrství americké armády (U.S. Army Construction Engineering Research Laboratories, USA­CERL, 1982­
1995) jako nástroj pro územní správu a environmentální plánování v rámci armády. Postupem času se vyvinul v mocný nástroj s širokými možnostmi využití v mnoha různých oblastech. V současné době je GRASS využíván v akademických podmínkách i
v komerčních firmách na celém světě. Zároveň ho využívají i mnohé vládní organizace (např. NASA, NOAA, USDA, DLR, CSIRO, USGS a mnoho dalších) [4].
Z koncepčního hlediska je GRASS modulárně vystavěný GIS. To znamená, že veškerou práci s daty obsluhuje zvláštní modul. Tím jsou jednotlivé části GIS přehledně rozděleny a umožňují transparentní práci.
Vedle graficky orientovaného uživatelského rozhraní disponuje GRASS i textovou příkazovou konzolí. GRASS lze připojit na tiskárnu a plotr. Jeho prostřednictvím je možné přistupovat k datům z externích databází. Je proto vhodný pro plánování krajiny a inženýrsko­technické použití [9]. Stejně jako jiné GIS balíky, umožňuje i GRASS práci s vektorovými daty. Prostřednictvím integrovaných digitalizačních funkcí lze aktualizovat vektorové mapy. Je 9
velmi silný při zpracování prostorových rastrových dat. Mapy je v GRASS možné importovat a exportovat do většího množství formátů než v rozšířenějších GIS včetně ArcInfo a IDRISI [9].
Velmi zajímavá je možnost doprogramování vlastních modulů. Pokročilejší uživatelé se je mohou na základě zdrojového kódu programů nebo s pomocí manuálu pro programátory naučit psát a využít k nim dokumentované knihovny GRASS (API pro programovací jazyk C). Tyto knihovny umožňují přidávání nových funkcí. Na úrovni skriptů si lze usnadnit práci a zautomatizovat často ručně prováděné a opakující se operace [9]. Díky schopnosti pracovat s rastrovými daty lze GRASS využít jako povrchového modelovacího systému. GRASS obsahuje více než 100 multifunkčních modulů pro analýzu a zpřístupnění rastrových dat. Modely srážek a povrchových odtoků, počítání drah povrchových odtoků, šetření stability svahů a mnoho dalších. Jelikož je mnoho modulů multifunkčních, mohou uživatelé vytvářet vlastní mapy s daty uloženými v GRASS [9].
Kromě standardní dvojrozměrné analýzy dovoluje GRASS zpracovávat data i ve třech dimenzích. Při vizualizaci lze použít rastrová i vektorová data. Příkladem tohoto použití může být návrh letiště nebo analýza krajiny. Vizuální prostředky umožňují animaci prostorových dat. 3D pohledy tak mohou být prezentovány jako jednotlivé obrázky nebo jako MPEG film a uloženy pro další práci [9].
GRASS obsahuje také soubor modelů z oblasti hydrologických modelů a analýz. Jedná se mimo jiné o vymezení povodí, analýzy povodňových vln a využití různých modulů pro kompletní simulaci povrchového odtoku z daného území. Další moduly mohou vytvářet diagramy a statistiky k modelovaným a kalibrovaným datům. Dále je možné v GRASS pracovat s krajinnými daty a odvodit některé parametry na základě numerických dat [9].
Moduly pro práci s obrazovými daty jsou srovnatelné se špičkovými produkty tohoto sektoru. Obsahují množství nástrojů sloužících ke zpracování a vyhodnocování multispektrálních satelitních dat, stejně jako moduly pro produkci ortogonálních map
z naskenovaných leteckých snímků. GRASS tak umožňuje využít takřka veškerých možných cest, vedoucích k importu dat do GIS [9]. Vývojářský tým GRASS, jehož programátoři jsou rozptýleni téměř po všech kontinentech, pracuje na tom, aby funkcionalita GRASS byla i nadále rozšiřována. Od GRASS 5.7 je zcela přepracována celá vektorová architektura a došlo také k přidání podpory externích databází [9].
Nejnovější verze, GRASS 6, obsahuje přepracovanou sadu nástrojů pro správu vektorových dat a podporu analýz vektorových sítí. Byl implementován nový správce zobrazení (Display manager). Nástroj pro vizualizaci trojrozměrných dat NVIZ byl vylepšen o zobrazování 3D vektorových dat. Nové lokace mohou být generovány pomocí kódů EPSG (kódy mapových projekcí, definované viz. http://www.epsg.org/) a zabudovaná podpora knihoven GDAL a OGR umožňuje podporu velkého množství rastrových i vektorových formátů. Současná stabilní verze programu, se kterou budeme pracovat, má číslo 6.2.1 a byla vydána v prosinci 2006 [4].
GRASS je distribuován po internetu a na CD v binární podobě pro různé platformy, stejně jako v podobě zdrojového kódu v jazyce C. 10
2.3 Skriptování v GRASS
GRASS poskytuje díky modulární struktuře velký potenciál k vlastnímu programování. Rozlišujeme programování v shellu (tzv. skriptování) a programování v jazyce C. Pro psaní skriptů nejsou nutné žádné explicitní znalosti programování. Jedná se spíše o automatizované použití modulů GRASS ve spojení s dalšími UNIXovými nástroji. Programování v jazyce C vyžaduje naproti tomu poměrně bohaté znalosti a zkušenosti.
V této práci se budeme zabývat pouze skriptováním [9].
Skriptování provádíme pomocí unixového shellu (příkazového interpretru). Nejpoužívanějším shellem je BASH.
2.3.1 BASH
BASH (Bourne Again Shell) je jeden z možných interpretrů příkazového řádku
v operačním systému Linux. Příkazový interpretr přijímá příkazy a realizuje je, neboli funguje jako rozhraní mezi uživatelem a systémem [1]. BASH nám však nabízí ještě více. Je to také velice mocný programovací nástroj. Můžeme ho tedy využít i pro psaní skriptů, které nám výrazně usnadní práci a čas při řešení úkolů. Podporuje práci
s proměnnými, cykly while, for, do, funkce, podmínky a mnoho dalšího [16].
Do značné míry je možno BASH přenést i do operačního systému Windows. Je to umožněno pomocí projektu Cygwin. Jde o kolekci programů, které napodobují chování unixových systémů pod systémem Microsoft Windows. Díky Cygwin můžeme používat GRASS, který je primárně napsán pro Linux, i na Windows. Při používání GRASS ve Windows ale může docházet k chybám. Například nebudou správně nebo vůbec fungovat vytvořené skripty [1].
2.3.2 Postup skriptování
Skript je část programu nebo program, zapsaný ve formě kódu, vykonávající určitý úkol. Obvykle je uložen jako soubor. Skládá se ze souvislé série příkazů.
Vytváření skriptů pro GRASS je analogické vytváření .bat souborů. Skript se skládá
z jednotlivých příkazů, které se píší do příkazové řádky při spuštěném GRASS. Při spuštění skriptu jsou jednotlivé příkazy vykonávány v pořadí, v jakém byly zapsány [1].
Chceme­li vytvořit skript, vytvoříme nejdříve nový soubor, do kterého budeme následně zapisovat příkazy. Zapisovaný text nesmí být nijak formátován. K editaci je tedy vhodné používat poznámkový blok (v MS Windows) nebo jinou obdobnou aplikaci. Přípona souboru není důležitá. Skript je rozpoznán na základě svého obsahu [1].
První řádek skriptu musí obsahovat:
#!/bin/bash
Tento příkaz je povinnou a nepostradatelnou součástí každého skriptu. Nese informaci
o tom, který příkazový interpretr má být spuštěn. Následující řádky skriptu jsou již identické s příkazy zadávanými do okna terminálu. Je vhodné, aby byl každý příkaz zapsaný na nové řádce. Skript může obsahovat i prázdné řádky. Pokud nastane situace, že je příkaz příliš dlouhý, můžeme ho rozdělit pomocí znaku obráceného lomítka. Naopak 11
chceme­li umístit na jeden řádek více příkazů, oddělíme je středníkem [1].
Při psaní skriptu bychom měli dodržovat přehlednou strukturu. Ta nám pomůže zorientovat se při případné editaci skriptu. Z tohoto důvodu je vhodné používat prázdné řádky a komentáře. Komentář umožňuje psaní poznámek. Za komentář je považováno vše, co následuje po znaku # do konce řádky.
Máme­li zapsané všechny potřebné příkazy ve správné formě, uložíme skript (soubor) do zvoleného adresáře. Ještě než samotný skript v GRASS spustíme, je třeba ho označit jako spustitelný. To provedeme například jedním z těchto příkazů [1]:
chmod +x jmeno_skriptu
chmod 755 jmeno_skriptu
Skript spustíme jako jakýkoli jiný program (z příkazové řádky v Linuxu) příkazem:
./jmeno_skriptu
12
3 Seznámení s daty sdružení PilsFree
3.1 O PilsFree
Informace čerpány z [12], [13].
PilsFree je občanské sdružení provozující na území Plzně a v blízkém okolí počítačovou komunitní síť. Síť PilsFree se skládá z nezávislých přístupových bodů (AP, z anglického Access Point). Tyto body jsou spojeny do struktury, která umožňuje přenos dat v síti. Zájemci se mohou připojovat k přístupovým bodům po domluvě se správcem daného AP. Samotný název sdružení odkazuje na to, že PilsFree je součástí projektu neziskové vysokorychlostní telekomunikační sítě, nazvaného CZFree.Net.
CZFree.Net je neveřejná amatérská počítačová síť na území České republiky. Síť se řídí sadou technických pravidel, která určují, jak spolu jednotlivé počítače a podsítě komunikují. Kdokoliv se může na své náklady připojit, sám poskytnout určité služby a podílet se tak na rozšiřování sítě. Sdílí se tak filozofie spřátelených sítí vznikajících po celém světě [2]. PilsFree začalo vznikat v roce 2003. Nejprve šlo pouze o propojení několika lidí za pomoci bezdrátového přístupového bodu na technologii Wi­Fi, ale s přibývajícími zájemci bylo potřeba síť dále rozšiřovat. 20. 10. 2003 bylo formálně založeno Občanské sdružení PilsFree, které mělo na počátku asi 45 členů. Sdružení začalo poskytovat i levný internet a rozrůstalo se obrovskou rychlostí Ke konci roku 2004 mělo již více než 500 členů. Pro tento počet lidí již byly bezdrátové spoje Wi­Fi nedostatečné a na nejdůležitější spoje bylo potřeba nasazovat výkonnější technologie jako optická pojítka a optické kabely. Na počátku roku 2006 zaznamenalo PilsFree velký úspěch, když z pěti podaných žádostí
o grant Ministerstva informatiky ČR byly čtyři schváleny. Z hlediska počtu přidělených grantů se PilsFree stalo nejúspěšnějším žadatelem. Celková výše finanční podpory byla asi 803 000 Kč. Za tyto peníze byly připojeny některé vzdálenější části Plzně a Plzeňska a bylo vytvořeno pokrytí 17 menších obcí severního Plzeňska. Mezitím stále docházelo ke zkvalitňování spojů a připojení k internetu, neboť nárust počtu členů byl a je stále velmi výrazný. V současné době má PilsFree více než 4000 členů a měsíčně se připojí kolem 200 dalších zájemců. Tato čísla řadí PilsFree mezi největší a nejrychleji se rozrůstající komunitní sítě nejen v České Republice. 3.2 Databáze PilsFree
Tak velká organizace jako je PilsFree samozřejmě potřebuje ukládat velké množství informací. Sdružení má pro tento účel již několik let vlastní interní databázi, která slouží pro evidování nezbytných údajů o členech, strojích a vlastnostech sítě. Jejím hlavním úkolem je správa těchto dat a využití pro případné další aplikace v rámci sítě PilsFree. Mezi tyto aplikace patří například interní webové stránky, na kterých si lze kromě jiného zobrazit údaje o jednotlivých uživatelích, jejich strojích a spojích. Na interních stránkách lze také nalézt jednoduchou webovou mapu, na které jsou tyto informace vizualizovány. 13
3.2.1 Technologie
Interní databáze je postavena na technologii MySQL. Tento SŘBD (systém řízení báze dat) je nejoblíbenější open source relační databázový systém, a díky této široké základně uživatelů také jeden z nejspolehlivějších. Nabízí výtečný výkon, přenositelnost a spolehlivost a je tak životaschopným konkurentem drahých systémů [17]. Server MySQL běží spolu s dalšími klíčovými aplikacemi na aplikačním serveru sdružení PilsFree.
Vlastní přístup do databáze je umožněn dvěma způsoby. Jednou možností je přístup přes interní web. Každý nový člen PilsFree má povinnost po zaregistrování vyplnit pravdivě všechny požadované informace o své osobě a svém počítači a to včetně adresy, spoje a umístění na mapce. Větší část těchto informací (kromě soukromých dat o uživateli jako jsou jméno, datum narození či telefonní číslo) si poté mohou na stránkách prohlížet i ostatní členové. Vyplněné údaje lze samozřejmě později opravit či doplnit o další nepovinné. Tímto způsobem mohou pracovat s databází všichni členové sdružení.
Druhým způsobem je přímý přístup na databázový server přes různé MySQL klienty. Tato možnost ale vyžaduje speciální uživatelské jméno a heslo, které může na požádání a při dobrém zdůvodnění přidělit správce databáze. Úplný přístup k soukromým informacím uživatelů je možný až po odsouhlasení požadavku radou PilsFree. Asi nejpoužívanějším klientem pro přístup k MySQL databázovému serveru je phpMyAdmin, který umožňuje efektivní a přehlednou správu databází přes internetový prohlížeč pomocí jazyka PHP [9]. Ten je také nainstalován na aplikačním serveru sdružení.
3.2.2 Datový model
Obrázek 1: ERA model databáze PilsFree
14
Základ databáze tvoří pět tabulek jejichž vzájemné propojení můžeme vidět v ERA modelu na obrázku.
Nejdůležitější tabulkou pro tuto práci je pf_adresa, která obsahuje informace o jednotlivých adresních bodech, včetně jejich souřadnic x a y v lokálním souřadnicovém systému webové mapy PilsFree. Z této tabulky bude v GRASS vygenerována bodová vrstva.
Další důležitou tabulkou je tabulka pf_spoje. Ta obsahuje údaje o použité technologii propojení, o přibližné délce, zda je spoj páteřní a hlavně z jakého a do jakého adresního bodu míří. Tabulka obsahuje také sloupec rychlost, který ovšem není u žádného ze spojů vyplněn. Z této tabulky bude vygenerována liniová vrstva, nad kterou budeme provádět analýzy vektorových sítí. Pro tyto analýzy by se jistě hodil i údaj o rychlosti spojů, který proto bude muset vycházet z použité technologie.
V tabulce pf_pc jsou uloženy informace o počítačích uživatelů. Jsou to údaje o majiteli a adrese, ale i o použitém hardware a nainstalovaném software. Pokud na počítači běží ftp server pro sdílení dat, mohou být tyto informace ve sloupcích ftp_popis ftp_heslo a ftp_user. Důležitý je také sloupec typ. Ten udává zda se jedná o stolní počítač, notebook, přístupový bod AP či jiný druh zařízení.
S tabulkou pf_pc úzce souvisí tabulka pf_ip, které obsahuje technické údaje o počítači, potřebné pro běh sítě, jako je IP adresa či název počítače (tzv. DNS).
Největší tabulkou celé databáze je tabulka pf_uzivatele. Ta obsahuje údaje o uživateli důležité pro sdružení – přezdívku, heslo, funkci v rámci sdružení, datum připojení, zda má zaplacený internet a pod kterého správce spadá. Dále veškeré osobní informace jako jméno a příjmení, datum narození, pohlaví, titul. Dále to jsou možnosti spojení
s uživatelem jako Jabber, ICQ, e­mail, telefonní číslo či webové stránky. Většina těchto údajů je soukromá a přístup k nim lze dostat až po odsouhlasení radou PilsFree. Pro účely této práce jsou k dispozici pouze sloupce id_uzivatele, nick, id_spravce a id_adresa, což je však dostačující, neboť tato tabulka neobsahuje příliš geograficky zajímavých informací. 15
4 Vizualizace prostorových dat
Před započetím vlastní práce v programu GRASS je nejprve potřeba zvážit, jaká prostorová data jsou pro tuto práci k dispozici. Dalším krokem bude jejich import do nativního formátu programu a poslední částí případné úpravy a transformace.
Vektorové vrstvy obsahující informace o vlastní počítačové síti, kterou chceme zobrazit a analyzovat, budou vytvořeny na základě souřadnic obsažených v databázi PilsFree. Rastrovou podkladovou vrstvu s mapou Plzeňska velkého měřítka získáme z digitálního atlasu Odysseus, ke kterému má PilsFree zakoupeno licence. Sdružení totiž využívá mapy z tohoto programu pro současnou webovou mapu. Souřadnice adres v databázi vycházejí
z této webové mapy, a proto musí rozložení adresních bodů odpovídat. Kdyby byl použit jiný podkladový rastr, mohlo by dojít k chybám.
Poslední použitou vrstvou bude digitální model terénu (DMT), který může sloužit pro různé prostorové analýzy jako například analýzy dohledu či výškové profily. Získaný model terénu má rozlišení 6 metrů, je v souřadnicovém systému S­JTSK a ve formátu programu Erdas Imagine. Veškeré úkoly v této práci budou zpracovány v lokálním systému bez definované mapové projekce, protože georeferencováním podkladového rastru dojde k výraznému snížení jeho čitelnosti a také ke zhoršení vzhledu výsledných výstupů. Data však budou přesto i georeferencována, a to do systémů WGS 84 a S­JTSK. To se bude hodit v případě, že budeme chtít znát souřadnice v těchto systémech, či pokud získáme později nějaké nové vrstvy v těchto systémech a nebudeme chtít provádět transformaci nových dat do lokálního systému.
4.1 Založení lokací v GRASS
Než začneme do GRASS importovat jednotlivé mapové vrstvy, je nutné založit lokace (location), ve kterých budeme pracovat, a také pracovní mapset. Data v GRASS jsou uložena v interní adresářové struktuře. Nejvyšší adresář, tzv. lokace, vymezuje oblast projektu, ve které lze pracovat s daty. Je definována krajními souřadnicemi a informací o použité mapové projekci. tyto informace se ukládají do automaticky vytvořeného mapsetu PERMANENT. Další mapsety slouží pro vymezení jednotlivých zpracovávaných úkolů v rámci dané lokace [3].
Pro import vektorových dat i podkladové rastrové mapy, které nejsou georeferencovány, založíme lokaci bez definované projekce. Nazvěme ji xy. Pro import rastru DMT, který je v systému S­JTSK založíme lokaci krovak s Křovákovým zobrazením. Protože chceme data georeferencovat také do systému WGS 84, založíme i lokaci WGS84.
Postup tvorby nové lokace je jednoduchý. Po spuštění vlastního programu se objeví grafická uvítací obrazovka. Ta slouží k výběru stávající, či založení nové lokace. Novou lokaci můžeme založit třemi způsoby. Můžeme použít georeferencovaný soubor, kód EPSG či zadat hodnoty projekce ručně. My zvolíme třetí možnost a zadáme hodnoty ručně.
16
Po stisku tlačítka Hodnoty Projekce se GRASS přepne do textového režimu. Na první obrazovce je třeba vyplnit název lokace a mapsetu. Názvy lokací jsme již zvolili a mapsety v těchto lokacích, ve kterých budeme zpracovávat naše data, nazvěme například mapa. Potvrdíme stiskem Esc a Enter.
Pro lokaci bez definované projekce dále nastavujeme pouze jedinou hodnotu:
●
Coordinate system for location: A (x, y)
A pak je pouze třeba nadefinovat okrajové souřadnice a rozlišení zájmové oblasti (tyto hodnoty lze kdykoliv změnit pomocí příkazu g.region).
Pro souřadnicový systém S­JTSK nastavíme:
●
Coordinate system for location: D (other projection)
A další údaje o mapové projekci:
●
Specify projection name: krovak
●
Specify ellipsoid name: bessel
●
Do you want to specify a map datum for this location? hermannskogel
●
Now select Datum Transformation Parameters: 2 (Used in Czech Republic)
●
Enter plural form of units: meters
Během jednotlivých otázek lze definované hodnoty vypsat pomocí příkazu list.
Při vytváření lokace v systému WGS 84 postupujeme obdobně, pouze zadávané údaje se změní:
●
Coordinate system for location: B (latitude­longitude)
●
Please specify datum name: wgs84
●
Now select Datum Transformation Parameters: 1 (Used in whole wgs84 region)
4.2 Vytvoření bodových vrstev
4.2.1 Práce s atributovými tabulkami v GRASS
Geografický informační systém GRASS byl původně vyvíjen primárně pro zpracování rastrových dat a v této oblasti může překonat i komerční produkty. Podpora vektorových dat a atributových tabulek však byla přidávána postupně v průběhu vývoje a GRASS zatím nemá tolik možností jako jiné GIS. Každý vektorový prvek má v základu pouze jeden atribut, tzv. kategorii, podle kterého se pak připojují jednotlivé řádky z tabulky.
Z toho plyne několik problémů:
1. GRASS neumožňuje žádným způsobem zobrazit data v dalších tabulkách, které jsou s připojenou tabulkou v relaci. Z toho plyne, že musíme veškeré informace, které chceme mít v atributech vektoru, spojit do jedné tabulky. To provedeme již 17
pomocí aplikace phpMyAdmin v původní databázi, ještě než tabulku importujeme do nativního formátu tabulek v GRASS, tedy dbf. Tím sice dojde ke zbytečnému zvětšení dat, ale jinou možnost nemáme.
2. Z prvního bodu vyplývá i druhý problém. Abychom mohli vytvořit tabulku se všemi informacemi, musí být kategorií, podle které ji propojíme s vektorem, id_pc. Na jedné adrese může být více počítačů a také jeden uživatel samozřejmě může vlastnit více strojů. Tabulka pf_pc má tedy s tabulkami pf_adresa i pf_uzivatele relaci N:1. Když však nad tabulkou se všemi informacemi provedeme atributový dotaz týkající se pouze uživatele, uživatelé s více počítači se objeví ve výsledku několikrát. To samé platí při dotazu pouze na adresu. Proto musíme vytvořit tři bodové vrstvy a také různé tabulky. První vrstva bodů bude mít jako kategorii sloupec id_adresa a bude propojena s importovanou tabulkou pf_adresa. Druhá vrstva bodů bude mít kategorii id_uzivatele a propojena bude
s importovanými spojenými tabulkami pf_adresa a pf_uzivatele. Poslední vrstva bude mít kategorii id_pc a importovanou tabulku se všemi informacemi z tabulek pf_pc, pf_uzivatele i pf_adresa.
3. Poslední problém není již nijak závažný, ale je třeba dávat si na něj pozor. Pokud mažeme vektorová data, která jsou připojena k tabulce, smaže se s nimi daná atributová tabulka. To platí, i když je vektor připojen k externí databázi. Je proto důležité před smazáním vrstvy vždy odpojit tabulky, které chceme zachovat, pomocí příkazu v.db.connect a případně je zálohovat.
4.2.2 Úprava souřadnic v databázi
Než vytvoříme propojené tabulky, musíme nejprve upravit souřadnice v tabulce pf_adresa. Souřadnicový systém webové mapy PilsFree je totiž levotočivý a osa y má kladné hodnoty směrem dolů. Počátek je v levém horním rohu webové mapy. Když bychom ale tyto souřadnice použili pro import, zobrazila by se vektorová vrstva vertikálně převrácená, protože GRASS pracuje v pravotočivém systému stejně jako ostatní GIS.
Opravu provedeme snadno. Maximální hodnota souřadnice y v databázi je 18 512. My potřebujeme převrátit pořadí hodnot a toho dosáhneme tak, že hodnoty jednoduše odečteme od 20 000. Použijeme SQL příkaz [15]:
UPDATE pf_adresa SET y=20000­y
4.2.3 Spojení tabulek v MySQL
Spojení tabulek není příliš komplikované a nezabere téměř žádné místo na disku. Od verze 5.0 lze v MySQL totiž vytvářet tzv. pohledy (view) [15]. To jsou vlastně virtuální tabulky, které se tváří jako pravé, ale místo dat obsahují pouze předpis jak data vybrat
z jiných tabulek či pohledů. V phpMyAdmin si tedy pomocí MySQL příkazu vytvoříme dva pohledy. První pohled spojí významné sloupce z tabulek pf_adresa a pf_uzivatele:
CREATE VIEW uz AS SELECT u.id_uzivatele, u.id_adresa, a.ulice, a.cp, a.mesto, a.ctvrt, a.psc, a.x, a.y, u.nick, u.id_spravce
18
FROM pf_adresa a, pf_uzivatele u
WHERE a.id_adresa = u.id_adresa
Druhý pohled spojí tabulky pf_adresa, pf_uzivatele i pf_pc:
CREATE VIEW vse AS SELECT p.id_pc, u.id_uzivatele, u.id_spravce, u.nick, p.id_adresa, a.ulice, a.cp, a.mesto, a.ctvrt, a.psc, a.x, a.y, p.hw, p.sw, p.note, p.id_ip, p.typ, p.inet
FROM pf_adresa a, pf_pc p, pf_uzivatele u
WHERE a.id_adresa = p.id_adresa AND a.id_adresa = u.id_adresa
4.2.4 Import tabulek
Zapneme GRASS a zvolíme lokaci xy. Než můžeme začít importovat tabulky, musíme nejdřív v GRASS nastavit připojení k naší externí MySQL databázi. To provedeme pomocí příkazů db.login, kde nastavíme jméno a heslo uživatele, a db.connect, kde zadáme typ a název databáze. Import tabulek do nativního formátu dbf se provádí příkazem db.copy. Zvolíme typ (mysql) a název (pf) vstupní databáze, jméno tabulky pro import, výstupní databázi necháme nastavenou na dbf a zadáme název výsledné tabulky. Takto importujeme tabulku pf_adresa a pohledy uz a vse do tabulek adresa, uzivatel a vse.
Poznámka: GRASS podporuje názvy sloupců o maximální délce 10 znaků. Tím se nám zkrátí názvy např. id_uzivatele na id_uzivate nebo technologie na technologi.
4.2.5 Tvorba bodových vrstev
Pro tvorbu bodových vrstev z vytvořených atributových tabulek slouží v GRASS příkaz v.in.db [4]. V této funkci stačí nastavit typ a jméno databáze, název tabulky, sloupce obsahující hodnoty x a y, sloupec, ze kterého budou přidány bodům kategorie, a název výsledné vektorové vrstvy. Vytvoříme tedy vrstvu body z tabulky adresa, kde kategorií bude sloupec id_adresa, vrstvu uz z tabulky uzivatel, kde kategorií bude sloupec id_uzivate, a vrstvu pc z tabulky vse s kategorií id_pc.
4.3 Vytvoření liniové vrstvy
Zatímco pro import bodových dat z databázových tabulek existuje v GRASS jednoduchá funkce v.in.db, která vrstvu automaticky vytvoří, liniové vrstvy bohužel GRASS takto vytvořit neumí. Proto je potřeba hledat jinou cestu. V této práci byl zvolen následující postup. Jde o skript v PHP, který se připojí k MySQL databázi, čte data
z tabulky pf_spoje a pf_adresa a zapisuje je do formátu .gml (Geography Markup Language). Soubor ve formátu .gml lze do GRASS importovat. Tento skript dbgml.php byl napsán Ing. Janem Růžičkou z Vysoké školy báňské v Ostravě a pouze upraven pro potřeby této práce. Tímto Ing. Janu Růžičkovi děkuji.
19
4.3.1 Popis funkce skriptu
●
V první části se skript připojí k MySQL databázi a SQL dotazem vybere sloupce z tabulek pf_spoje a pf_adresa, které jsou potřeba pro tvorbu souboru ve formátu gml. To jsou sloupce id_adresa, x a y z tabulky pf_adresa a sloupce id_spoj, z a do z tabulky pf_spoje. Kde id_adresa odpovídá sloupci z nebo do.
●
Ve druhé části vytvoří skript hlavičku souboru gml a v cyklu vyplňuje údaje
o jednotlivých liniových prvcích na základě dotazu z prvního kroku. Příklad jednoho výsledného liniového prvku:
<gml:featureMember>
<ogr:spoje fid="F0">
<ogr:geometryProperty>
<gml:LineString>
<gml:coordinates>14540,6418 14266,6361</gml:coordinates>
</gml:LineString>
</ogr:geometryProperty>
<ogr:id_spoj>10</ogr:id_spoj>
</ogr:spoje>
</gml:featureMember>
Když necháme skript proběhnout ve webovém prohlížeči, stačí již jen uložit zdrojový kód výsledné stránky jako textový soubor linie.gml a lze provést import do GRASS.
Celý skript je součástí přílohy.
4.3.2 Import liniové vrstvy a její atributové tabulky
Import vektorových dat se v GRASS nejčastěji provádí příkazem v.in.ogr. Tento příkaz využívá externí knihovnu OGR sloužící pro převody mezi různými vektorovými formáty. Stačí jen zvolit soubor linie.gml a napsat jméno výsledné vektorové vrstvy, v tomto případě spoje. Bohužel nelze nijak zvolit hodnoty kategorií, příkaz v.in.ogr automaticky přidělí kategorie od 1 do celkového počtu linií. V atributové tabulce ale již některé spoje neexistují, a tak není obsazeno jejich číslo, a naopak novější spoje mají vyšší čísla než je počet spojů. Z toho plyne, že musíme provést zásah do atributové tabulky – odstranit sloupec id_spoj a vytvořit ho znovu. Tím se pomocí autoinkrementace přidělí čísla právě od 1 do počtu linií. Pak již tabulku importujeme stejně jako tabulky pro bodové vrstvy pomocí příkazu db.copy a vznikne nám dbf tabulka spoje.
4.4 Spojení liniové a bodové vrstvy
4.4.1 Úprava bodových vrstev
Vektorová vrstva v GRASS je vytvořena tak, že sama může ještě obsahovat data ve více vrstvách, a ke každé této vnitřní vrstvě lze připojit jinou atributovou tabulku [3]. 20
V základu jsou data ve vektorové vrstvě vždy ve vrstvě 1. Protože ale nyní chceme propojit 4 vektorové vrstvy do jedné, je třeba přesunout data do různých vrstev. Data ve vrstvě spoje necháme ve vrstvě 1 a v bodových vrstvách body, pc a uz data přesuneme pomocí příkazu v.category. V něm zvolíme akci chlayer pro změnu vrstvy, název výstupní mapy a z jaké do jaké vrstvy se mají data přesunout:
●
Pro mapu body přesuneme data z vrstvy 1 do vrstvy 2.
●
Pro mapu uz přesuneme data z vrstvy 1 do vrstvy 3.
●
Pro mapu pc přesuneme data z vrstvy 1 do vrstvy 4.
Nyní již můžeme mapy spojit.
4.4.2 Spojení
Spojení map provedeme příkazem v.patch. Vyplníme vstupní mapy a výstupní mapu nazveme sit. K takto vzniklé mapě pak připojíme tabulky příkazem v.db.connect:
●
K vrstvě 1 připojíme tabulku spoje pomocí sloupce id_spoj.
●
K vrstvě 2 připojíme tabulku adresa pomocí sloupce id_adresa.
●
K vrstvě 3 připojíme tabulku uzivatel pomocí sloupce id_uzivate.
●
K vrstvě 4 připojíme tabulku pc pomocí sloupce id_pc.
4.5 Vytvoření rastrové podkladové mapy
4.5.1 Příprava dat
Jak již bylo napsáno výše, tuto mapu získáme z digitálního atlasu od společnosti Odysseus. Bohužel tento program neumožňuje žádný jednoduchý způsob exportu dat. Jediná možnost jak uložit rastr o velikosti větší než jedna obrazovka je tisk obrázků do souboru ve formátu .pdf. Z .pdf je lze již exportovat do rastrových formátů jako například .png, .tiff a jiné. Tak ovšem získáme větší množství rastrů o velikosti stránky zvolené při tisku do souboru, které neobsahují žádnou informaci o poloze ani souřadnicovém systému. Protože jsme při tisku do .pdf zvolili velké měřítko (1 : 3000), získáme takto 126 rastrových obrázků ve formátu .png o velikosti 6084 x 8598 pixelů.
Řešením, jak přidat rastrům informaci alespoň o pozici mezi ostatními rastry, je vytvořit pro každý soubor tzv. world soubor [7]. Jedná se o textový soubor s názvem stejným jako rastrový soubor, který obsahuje informace o rozlišení v metrech a souřadnicích levého horního rohu rastru. Jeho tvar je např.:
1.0000
0.0000
0.0000
­1.0000 54326.0000 ­27415.0000 (měřítko ve směru X, velikost pixelu v metrech)
(rotační koeficient)
(rotační koeficient)
(měřítko ve směru Y)
(X souřadnice levého horního pixelu rastru)
(Y souřadnice levého horního pixelu rastru)
Podle formátu rastrového souboru má pak tento soubor příponu například .pgw pro 21
soubory typu .png nebo .twf pro soubory .tiff. Hodnoty vyplníme tak, že pro levý horní obrázek nastavíme souřadnice na 0, 0 a pak pro obrázek vedle přičítáme k souřadnici X délku horizontální strany obrázku v pixelech a pro obrázek o řádek níž odečteme od souřadnice Y délku vertikální strany v pixelech. Měřítko přitom necháme stále nastaveno na hodnotu 1. Když rastry s těmito world soubory importujeme do GRASS, program je sám umístí na zadané souřadnice a vznikne nám požadovaná mapa.
4.5.2 Import a zpracování
Import rastrových dat do GRASS se provádí pomocí skupiny příkazů r.in.*, nejčastěji pomocí r.in.gdal, který využívá pro import dat externí knihovnu GDAL (Geospatial Data Abstraction Library), podporující velké množství různých rastrových formátů od běžně používaných typů až po nativní formáty jiných GIS. Nyní již přistoupíme k importu. Zůstáváme stále v lokaci xy, protože budeme pracovat
s negeoreferencovanými daty. Práce s příkazem r.in.gdal je jednoduchá. V nejjednodušším případě stačí pouze zvolit soubor pro import a název výstupního rastru. Po proběhnutí příkazu vzniknou v GRASS tři nové vrstvy se zvoleným názvem a příponami .red, .green a .blue. Tyto vrstvy jsou tři barevné kanály (červený, modrý a zelený) importované mapy. Abychom získali jeden barevný rastr, musíme tyto kanály spojit pomocí příkazu r.composite. Zvolíme, jaká vrstva představuje jaký barevný kanál, a vybereme název spojeného rastru. Můžeme také změnit počet stupňů intenzity jednotlivých barev. Základní nastavení je 32 stupňů, ale ani při 8 stupních nedojde k výraznějším odchylkám od původních barev. Tím se navíc zrychlí nejen spojování barevných vrstev, ale i zobrazování výsledné mapy příkazem d.rast [4].
Nyní jsme vytvořili v GRASS vrstvy, které odpovídají původním rastrům, a když je všechny zobrazíme, uvidíme je zařazené na svých místech podle world souborů. Posledním krokem je jejich propojení do jedné vrstvy pomocí příkazu r.patch. Stačí zvolit všechny vstupní vrstvy a název výsledné podkladové rastrové mapy. Tu nazveme třeba jednoduše mapa.
22
Obrázek 2: Výsledná rastrová podkladová mapa
4.5.3 Popis použitého skriptu
Popsaný postup není sice příliš složitý, ale pokud importujeme větší množství rastrů, je časově náročný a musí se provádět stále znovu. V našem případě, kdy máme 126 rastrů, by bylo ruční zpracování neúnosné, a proto import a spojování provedeme jednoduchým skriptem. Celý skript importpng je součástí přílohy, zde je popis jeho funkcí:
●
V první části skript postupně přečte a importuje všechny soubory s příponou png v adresáři, ve kterém se nachází. Importované vrstvy nazve čísly od jedné do čísla posledního souboru.
●
Druhým krokem je spojení jednotlivých kanálů do jedné vrstvy pomocí r.composite. Přitom hlídá, aby byl vždy nastaven region odpovídající právě zpracovávaným vrstvám.
●
V poslední části vytvoří proměnou obsahující čísla map oddělená čárkou. Tuto proměnnou pak použije v příkazu r.patch pro spojení všech vrstev do výsledné vrstvy mapa.
23
4.6 Posun vektoru na rastr
Nyní již máme v GRASS importovanou podkladovou rastrovou mapu i vektorovou vrstvu vytvořenou z databáze. Zatím na sebe ale nepasují. Vektorová vrstva má souřadnice x i y v rozmezí přibližně od 0 do 20 000, zatímco u rastru je souřadnice x v intervalu od ­1 do 80 000 a y od ­70 225 do 1. Protože souřadnice v databázi vycházely ze stejné mapy, jakou nyní používáme jako podklad, stačí jen vektorovou mapu posunout a změnit její měřítko. Tuto jednoduchou transformaci provedeme pomocí funkce v.transform. Funkce umožňuje provádět transformace vektorových dat na základě bodů v textovém souboru, či na základě hodnot transformace (posun, zvětšení, otočení). My přesný vztah neznáme, a tak si vytvoříme textový soubor se souřadnicemi bodů. Formát textového souboru je snadno pochopitelný. Jeden řádek textu obsahuje údaje o jednom bodu. První je souřadnice x před transformací, druhá souřadnice y před transformací, třetí souřadnice x po transformaci a čtvrtá souřadnice y po transformaci. Souřadnice jsou odděleny mezerami. Příklad:
11307 2062 31407.21 ­49825.9
Nejprve si ve webové aplikaci zvolíme čtyři body, které jsou rovnoměrně rozložené po mapě a které dobře najdeme na podkladovém rastru. Body pro transformaci
původní souř. x
původní souř. y
posunutá souř. x posunutá souř. y 11307
2062
31407.21
­49825.9
6686
17377
18569.92
­7291.25
16433
6644
45640.47
­37098.53
5325
4221
14785.94
­43824.44
Tabulka 1: Seznam bodů použitých pro transformaci vektorových vrstev
Souřadnice ve vektorové vrstvě můžeme jednoduše zjistit dotazem na atributovou tabulku v.db.select s podmínkou WHERE id_adresa='číslo bodu'.
Poté místa najdeme na rastrové mapě a jejich souřadnice zjistíme dotazem d.what.rast.
Zapíšeme souřadnice do souboru a uložíme ho. Poté provedeme transformaci pomocí v.transform a rastr s vektorovou mapou by na sebe měly pasovat. Soubor s body použitými pro transformaci je nazván posun_vekt a je součástí DVD.
Nakonec ještě upravíme atributové tabulky bodových vrstev ve vrstvách dva až čtyři vektorové mapy. Do všech tabulek přidáme sloupce x1 a y1 příkazem v.db.addcol. Datový typ sloupců nastavíme na double. Poté do těchto sloupců načteme nové souřadnice pomocí příkazu v.to.db. Tyto nové souřadnice v atributové tabulce se nám později budou hodit pro různé atributové dotazy při provádění analýz. 24
4.7 Import DMT
Digitální model terénu je v souřadnicovém systému S­JTSK, a proto si GRASS přepneme před importem do lokace krovak. K importu použijeme opět příkaz r.in.gdal. Zvolíme soubor pro import a nazveme výsledný rastr dmt6. Někdy GRASS nedokáže poznat zda nastavená lokace odpovídá projekci, ve které je importovaný soubor. Proto musíme zvolit parametr ­o (override projection) [10], který automaticky použije projekci lokace v GRASS. To není problém, protože víme, že si projekce odpovídají.
Takto získáme rastrový DMT v lokaci krovak, ale my chceme provádět analýzy
v lokálním systému xy. Zatím však nemáme klíč pro transformaci. Proto zatím necháme DMT v S­JTSK, a k transformaci se vrátíme, až provedeme georeferencování podkladové rastrové mapy a vektorové sítě do S­JTSK. Poté prostě využijeme soubor s body pro transformaci, přehodíme pořadí lokálních a georeferencovaných souřadnic a transformujeme. Tak vlastně provedeme inverzní transformaci.
Obrázek 3: Digitální model terénu
25
4.8 Georeferencování
Georeferencování rastrových dat je dobře popsána v rukovětích pro GRASS [3], [9]. Proto bude transformace rastrů popsána jen jednoduše a spíše se zaměříme na to jaké soubory a adresáře přitom vznikají. Budeme totiž editovat přímo soubor s body, abychom mohli použít stejné body pro georeferencování do S­JTSK, WGS 84 i zpětnou transformaci DMT do xy.
4.8.1 Transformace podkladové mapy
Transformace se v GRASS provádí v lokaci, ze které chceme data transformovat. Proto zapneme lokaci xy. Nejprve budeme transformovat mapy do S­JTSK. Stručný postup georeferencování:
1. Rastry se v GRASS transformují ve skupinách (group). Skupinu vytvoříme příkazem i.group. Zvolíme název a jaké rastry bude obsahovat. Přitom v aktuálním mapsetu v adresáři group vznikne adresář se jménem skupiny a v něm textový soubor REF. V tomto souboru je uložena informace o mapách obsažených ve skupině a v jakém mapsetu se mapy nachází. Příklad:
mapa mapa
2. Dalším krokem je určení cílové lokace a mapsetu, do kterých transformujeme. Použijeme k tomu příkaz i.target. Přitom vznikne v adresáři skupiny soubor TARGET, který bode tyto informace obsahovat. V prvním řádku je název lokace a ve druhém název mapsetu. Příklad:
krovak
mapa
3. Nyní se dostáváme k zadání vlícovacích bodů pro transformaci. To se provádí interaktivně pomocí příkazu i.points, předtím však musíme otevřít okno pro zobrazování příkazem d.mon. Zobrazí se nám rastr pro transformaci, a když do něj klikneme levým tlačítkem myši, zeptá se nás program na nové souřadnice pro zvolený bod. Takto zadáme všechny body. souřadnice lze zjistit více způsoby,
v této práci byly souřadnice v S­JTSK zjišťovány na GIS serveru města Plzně (http://gis.plzen­city.cz/). Minimální počet bodů, které jsou pro transformaci potřeba, závisí na stupni transformačního polynomu – my použijeme polynom 2. stupně. Ten vyžaduje nejméně 6 bodů, ale my pro větší přesnost použijeme 12 bodů. Body volíme rovnoměrně z celého rastru, snažíme se abychom pokryli hlavně okraje rastru. Když i.points ukončíme uloží se body do souboru POINTS v adresáři skupiny. Formát je stejný jako u souboru pro transformaci vektoru posun_vekt, pouze je navíc na konci každé řádky 1 nebo 0, podle toho zda má být bod pro transformaci použit nebo ne.
26
Obrázek 4: Rozložení bodů pro transformace do S­JTSK a WGS 84
4. Vlastní transformace se provede příkazem i.rectify. Zvolíme skupinu, rastr, stupeň polynomu, a příponu výsledné mapy. Když transformace proběhne, vznikne nový rastr v cílové lokaci.
Když známe strukturu souborů pro transformaci, není problém vytvořit skupinu, cíl a vlícovací body i bez použití příkazů i.group, i.target a i.points prostým vytvořením či upravením textových souborů.
27
Obrázek 5: Seznam bodů pro transformaci do S­JTSK
Kromě S­JTSK chceme tranformovat data také do systému WGS 84. Pro transformaci do systému WGS 84 stačí změnit soubor TARGET na:
WGS84
mapa
a souřadnice v souboru POINTS přepočítat z S­JTSK do WGS 84 (například pomocí webové aplikace http://www.gpsweb.cz/JTSK­WGS.htm). Potom musíme opět spustit příkaz i.rectify a rastr bude transformován do systému WGS 84.
28
Obrázek 6: Seznam bodů pro transformaci do WGS 84
Poznámka: Pokud je rastr příliš velký, může transformace skončit s chybovým hlášením. Příčinou může být nedostatek místa na pevném disku. V tom případě lze rozdělit mapu na několik částí pomocí r.mapcalc. Tyto části pak transformujeme podle stejných bodů jako celou mapu a v cílové lokaci je spojíme pomocí r.patch [4]. 4.8.2 Zhodnocení přesnosti transformací
Střední polohová chyba (v obrázcích 5 a 6 označena jako forward RMS error, z anglického root mean square error) je 5,45 metru pro transformaci do S­JTSK, resp. 5.0079 x 10­5 stupně pro transformaci do WGS 84. To je výrazně vyšší hodnota než je rozlišení rastru (přibližně 0,6 m).
Je to způsobeno tím, že vytvořená podkladová rastrová mapa neobsahuje prvky jako například souřadnicovou síť a neznáme ani souřadnice rohů mapy. Proto jsou vlícovací body voleny na rozích budov či křižovatkách, a dochází tak ke ztrátě přesnosti.
Pro potřeby této práce je však dosažená přesnost dostačující. 4.8.3 Transformace vektorové vrstvy
Transformace vektorových vrstev se provádí pomocí příkazu v.transform, který jsme použili již pro posun vektorové vrstvy na rastrový podklad. Transformaci můžeme provést podle stejných bodů jako u rastrů, stačí ve v.transform vybrat soubor s body POINTS ze skupiny rastrů. Po transformaci se vektory, na rozdíl od rastrů, neobjeví rovnou v nové lokaci (protože ji ani nikde nezadáváme), ale zůstanou v původní lokaci, jen se jim změní souřadnice. Nejjednodušší způsob jak je dostat do lokace krovak, resp. WGS84 je 29
zkopírovat adresář s názvem vektoru v adresáři vector a atributové tabulky patřící
k tomuto vektoru v adresáři dbf (které tabulky jsou připojené k vektoru lze zjistit příkazem v.db.connect).
4.9 Transformace DMT
4.9.1 Transformace do lokálního systému
Jak již bylo napsáno při importu DMT do GRASS, nejjednodušším způsobem jak DMT transformovat je využití souboru s body pro transformaci podkladové mapy do S­JTSK. Založíme v lokaci krovak novou skupinu s i.group, obsahující DMT, a nasměrujeme ji pomocí i.target do lokace xy a mapsetu mapa. Zkopírujeme soubor POINTS, použitý pro transformaci podkladového rastru, do této skupiny. Přehodíme pořadí lokálních a georeferencovaných souřadnic a transformujeme pomocí i.rectify. Tak provedeme inverzní transformaci ke georeferencování podkladové mapy.
4.9.2 Transformace z S­JTSK do WGS 84
Pro transformaci DMT ze systému S­JTSK do WGS 84 není potřeba provádět transformaci pomocí vlícovacích bodů. Místo toho použijeme příkaz r.proj pro transformaci rastrů z jednoho souřadnicového systému do jiného na základě vztahů mezi systémy. Funguje tak, že přečte mapu z jiné lokace, transformuje ji, a zapíše do aktuální lokace. Musíme tedy otevřít lokaci, do které chceme mapu transformovat (v našem případě lokaci WGS84). Nastavíme lokaci, mapset a jméno vstupní mapy, název výsledné mapy a použitou interpolační metodu. Použijeme metodu bilinear, ta určuje hodnotu výsledné buňky jako vážený průměr hodnot čtyř nejbližších buněk ve vstupní vrstvě na základě vzdálenosti, a proto se hodí pro plynule se měnící hodnoty rastrů.
Poznámka: Rozlišení a hranice výsledné transformované mapy závisí na nastavení cílové oblasti. Pokud jsme tedy nenastavili vhodné hodnoty při tvorbě lokace je nutné je opravit pomocí příkazu g.region.
30
4.10 Shrnutí
V této kapitole jsme si připravili prostorová data, která budeme využívat při následné tvorbě funkcí GIS. Seznam vstupních dat a výsledných vrstev v GRASS lze vidět
v tabulce. Vrstvy mají ve všech třech lokacích (xy, krovak i WGS84) stejné názvy.
Přehled dat
Typ dat
Rastrová
Vstupní data
Výstupy (ve všech třech lokacích)
rastry ve formátu .png
mapa
DMT ­ soubor dem_6m.img
dmt6
spoje
body
Vektorová
databáze PilsFree
pc
uz
sit
Tabulka 2: Seznam prostorových dat
31
5 Návrh vhodných analýz a funkcí a implementace některých z nich
V této kapitole se budeme zabývat návrhy funkcí nad vizualizovanými daty. Některé
z těchto funkcí zároveň implementujeme pomocí skriptů [1]. Jak již bylo napsáno, veškeré funkce budou zpracovány v datech v lokálním systému, a proto se musí skripty spouštět v příkazové řádce GRASS se zapnutou lokací xy.
5.1 Výřez mapy na základě souřadnic GPS
5.1.1 Požadavky
Tato funkce by měla sloužit hlavně zájemcům o připojení k síti PilsFree. Chceme umožnit lidem, kteří zvažují připojení, aby si mohli na základě souřadnic z GPS zobrazit dostupné informace o síti ve svém okolí. Přitom se snažme vytvořit takové výstupy, které by bylo možné jednoduše zobrazit na webové stránce. Základní požadavky jsou:
1. Vytvořit rastrový obrázek s podkladovou mapou a sítí v okolí bodu zadaného souřadnicemi.
2. Od zadaného bodu provést analýzu viditelnosti a zobrazit ji v obrázku jako poloprůhlednou masku.
3. Jako další výstupy připravit tabulku s adresami bodů, které jsou na výřezu vidět a tabulku, ve které bude adresa nejbližšího správce sítě.
5.1.2 Příprava dat
Před samotným skriptováním je třeba vytvořit vektorovou vrstvu, která bude obsahovat pouze adresy správců sítě. Tu využijeme při zjišťování informací o nejbližším správci. Vytvoříme ji z vektorové vrstvy sit funkcí v.extract. Zvolíme mapu sit, výstup nazveme spravce, vrstva vstupní mapy bude mít číslo 3 (protože ve vrstvě tři je připojena tabulka uzivatel a nás zajímají informace o uživateli a adrese) a do parametru where zadáme uživatelská čísla (id_uzivate) všech správců oddělená čárkou. Tato čísla zjistíme na interním webu PilsFree, kde lze seznam správců zobrazit. Poznámka: mezi správce zařadíme i členy PilsFree zastávající jiné funkce než přímo funkci správce. Jsou to například techničtí a správní radní nebo i předseda PilsFree. Většina těchto lidí totiž správcovskou práci stále vykonává a pokud ne, jistě budou schopni fundovaně poradit na koho se obrátit.
Dále si musíme připravit soubor s body pro převod souřadnic z WGS 84 do lokálního systému příkazem v.transform. Ten vytvoříme stejně jako jsme získali soubor pro transformaci DMT z S­JTSK do lokálního systému, a to tak, že vezmeme soubor POINTS, který jsme použili pro georeferencování dat do WGS 84, a zaměníme pořadí lokálních a georeferencovaných souřadnic. Upravený soubor nazveme WGS a uložíme ho do adresáře, kde budou skripty. 32
5.1.3 Popis skriptů
V této části rozebereme jednotlivé kroky, které skripty po spuštění vykonávají. Zdrojový kód skriptů rozebírat nebudeme. Ten je součástí přílohy a DVD.
Tato funkce byla zpracována do dvou skriptů. Skript nacteni slouží pro zadání souřadnic GPS ve stupních a v případě tvorby webové stránky pro tuto funkci by byl s největší pravděpodobností nahrazen jednoduchým webovým formulářem. Jeho funkce je jednoduchá. Postupně přečte z příkazové řádky stupně, minuty a vteřiny GPS souřadnic N i E. Poté se zeptá, zda jsou zadané souřadnice správné, a případně je umožní zadat znovu. Po odsouhlasení souřadnic předá hodnoty souřadnic druhém skriptu.
Druhý skript je nazván planek a slouží k vykonání vlastní funkce. Postup je následující:
33
Obrázek 7: Vývojový diagram skriptu planek
1. Zadané souřadnice skript převedeme na desetinná čísla. Protože BASH pracuje pouze s celými čísly, používáme externí aplikaci bc. Bc je jazyk právě pro matematické operace v příkazové řádce [14].
34
2. Přepočítané souřadnice uložíme do jednoho řádku v pomocném souboru. Tento soubor importujeme do GRASS pomocí příkazu v.in.ascii. Tak získáme bodovou vrstvu pom_point obsahující jediný bod se zadanými souřadnicemi.
3. Tuto bodovou vrstvu transformujeme do lokálního systému příkazem v.transform. Využijeme k tomu vytvořený soubor WGS. Dostaneme další pomocnou vektorovou vrstvu, nazvanou pom_local.
4. Vytvoříme pro transformovaný bod atributovou tabulku příkazem v.db.addtable. Tabulka obsahuje čtyři sloupce: cat s automaticky vyplněným číslem kategorie pro propojení tabulky s vektorem, x, y a spravce.
5. Vyplníme sloupce x a y v tabulce hodnotami souřadnic bodu pomocí příkazu v.to.db. Sloupec spravce prozatím zůstane prázdný.
6. Souřadnice z tabulky načteme do proměnných x a y příkazem v.db.select. Pomocí podmínky if [16] zkontrolujeme, zda souřadnice bodu spadají do území, které je pokryté rastrovou podkladovou mapou. Pokud jsou mimo toto území, skript se automaticky ukončí.
7. Vytvoříme čtverec výřezu kolem bodu tak, že k souřadnicím v proměnných x a y přičteme a odečteme polovinu strany požadovaného čtverce a hodnoty uložíme do nových proměnných n, s, e, w. Nastavená hodnota 878 je v pixelech a představuje při rozlišení rastrového podkladu 0,57 metru přesně 500 m. Čtverec bude mít tedy strany 1000 metrů dlouhé. Nové proměnné využijeme v příkazu g.region pro nastavení oblasti zobrazení právě na tento čtverec.
8. Příkaz r.mapcalc použijeme pro vyříznutí čtverce z podkladového rastru mapa a uložení do nového rastru podklad.
9. Pomocí g.region nastavíme rozlišení oblasti na rozlišení DMT (aby funkce viditelnosti neprobíhala déle kvůli velkému rozlišení oblasti) a provedeme analýzu viditelnosti [6] ze zadaného bodu příkazem r.los. Výšku bodu nad terénem nastavíme na 10 m. Vysílače jsou v naprosté většině případů umístěny na střechách budov, jejichž výšky však náš DMT neobsahuje ­ hodnotu 10 metrů zvolíme jako vhodnou výšku nad terénem simulující umístění na budově.
V případě, že bychom získali rastrovou nebo i vektorovou vrstvu obsahující výšky budov, nebyl by problém sečíst ji s DMT pomocí funkce r.mapcalc a získat tak kvalitnější výsledky. Poloměr viditelnosti nastavíme na 1,5 krát polovina délky strany (aby byla viditelnost zjištěna až do rohů čtverce, ale ne příliš daleko za okraj). Získáme nový rastr pom_los.
10. Rastr viditelnosti uchovává ve viditelných buňkách hodnotu vertikálního úhlu při pohledu z bodu a neviditelné buňky mají hodnotu NULL. My však chceme vytvořit masku, kde viditelné buňky mají hodnotu NULL a neviditelné buňky mají jinou hodnotu. Proto provedeme reklasifikaci. Nejprve příkazem r.reclass změníme hodnotu všech buněk s hodnotami jinými než NULL na 1, a poté pomocí příkazu r.null změníme hodnotu 1 na NULL a opačně. 11. Příkazem r.colors změníme barvu masky na šedou (RGB 190:190:190), aby se dala použít pro stínování. Poté ještě příkazem g.region vrátíme rozlišení oblasti na 35
hodnotu 1.
12. Příkazem d.mon nastartujeme okno pro zobrazení vrstev a příkazem d.resize změníme jeho tvar na čtverec.
13. Pomocí příkazu d.his [4] zobrazíme rastr podklad spolu s maskou viditelnosti a dosáhneme tak vystínování podkladového rastru.
14. Zobrazíme vektorovou mapu sit. Použijeme příkaz d.vect a zobrazíme všechny vrstvy této mapy. Ke každému bodu zobrazíme také atribut id_adresa jako popisek a linie i body obarvíme na tmavě modrou barvu (RGB 0:0:150). 15. Znovu použijeme příkaz d.vect a zobrazíme páteřní linie. Páteřní linie jsou nejdůležitější spoje a v atributové tabulce mají ve sloupci pater hodnotu 1. Zobrazíme je červeně a silnější čarou.
16. Naposledy použijeme příkaz d.vect a zobrazíme červeně adresní body na nichž se nachází přístupové body pro připojení k síti. Jsou to počítače, které mají ve sloupci typ hodnoty 2 nebo 5.
17. Příkazem d.out.png uložíme v okně zobrazené vrstvy do souboru mapa.png a vypneme okno pro zobrazení příkazem d.mon.
18. Vytvoříme soubor s tabulkou adres. Pomocí atributového dotazu v.db.select vybereme z 3. vrstvy mapy sit sloupce id_adresa, nick, ulice, cp, ctvrt, mesto a psc z řádků kde hodnoty souřadnic x1 a y1 jsou v zadaném čtverci. hodnoty uložíme do souboru tabulka.txt. Protože se při ukládání v souboru nezalamují řádky upravíme tvar souboru pomocí malého skriptu transtab.
19. Příkazem v.distance zjistíme, který bod z vektorové mapy spravce je nejblíže našim zadaným souřadnicím a zjistíme číslo uživatele tohoto správce.
20. Podle čísla správce vybereme z atributové tabulky mapy spravce sloupce id_adresa, nick, ulice, cp, ctvrt, mesto, psc a uložíme je do textového souboru spravce.txt.
5.1.4 Výstupy
Výstupy tohoto skriptu jsou tedy rastrový obrázek mapa.png a dva textové soubory tabuka.txt a spravce.txt. Pokud ve zvoleném okolí bodu není žádný adresní bod sítě PilsFree, bude soubor tabulka.txt prázdný, ale v souboru spravce.txt bude uložena adresa nejbližšího správce, i když je mimo toto území. Výstupní textové soubory neobsahují žádná jména ani osobní údaje o uživatelích, protože tato data jsou chráněna. Žadatel o připojení bez znalosti jmen členů dál sám postupovat nemůže, ale může využít získané informace o situaci v okolí jeho bydliště pro formulaci žádosti o členství ve sdružení.
Nebyl by problém modifikovat skript tak, aby se dala zobrazit i chráněná data. Potom by funkci mohli využívat členové vedení PilsFree, kteří mají oprávnění k těmto datům přistupovat.
36
Obrázek 8: Ukázka výstupu ­ soubor mapa.png (zmenšeno)
37
Obrázek 9: Ukázka výstupu ­ soubor tabulka.txt
38
Obrázek 10: Ukázka výstupu ­ soubor spravce.txt
5.2 Nahrazení spoje
5.2.1 Požadavky
Tato funkce má sloužit převážně správcům. S narůstajícím počtem členů PilsFree se zvyšuje zatížení spojů sítě, a proto se spoj často musí nahradit výkonnějším s kvalitnější technologií. Chceme, aby na základě čísla spoje a čísla nové technologie, provedla funkce tyto operace:
1. Určit, který z krajních bodů zadaného spoje se nachází, dle nejlevnější cesty [6], dále od internetové brány sdružení.
2. Určit hodnoty nejlevnějších cest od spojů vedoucích do tohoto bodu
k internetové bráně.
3. Změnit technologii zadaného spoje a vypočítat ceny cest znovu. 4. Vytvořit tabulku s porovnáním cen cest před a po změně technologie. Uložit tvar nejkratší cest do vektorových vrstev.
Pomocí funkce nejlevnější cesty můžeme snadno určit, kterými spoji protékají data mezi dvěma body. Cena cesty se určuje součtem cen spojů mezi těmito body.
Tento skript bude možné do budoucna použít například při určování návratnosti investic do nových spojů v různých částech sítě. Vypočteme požadované cesty v místech s návrhy na nový spoj a porovnáme, jaký přínos bude nový spoj mít. To lze poznat například
z rozdílu cen cest před a po změně technologie a také z počtu dalších ovlivněných spojů. Na základě toho lze poté vybrat nejvhodnější místo pro nákup nového spoje.
39
Obrázek 11: Ukázka ­ požadované cesty
5.2.2 Příprava dat
Nejlevnější cestu budeme určovat pomocí hodnot v atributové tabulce. Zajímá nás jaký průtok dat mají jednotlivé spoje. To závisí především na použité technologii. Informace
o ní je uložena v atributovém sloupci technologi v tabulce první vrstvy mapy sit. Na základě technologie lze tedy odvodit rychlost spoje. GRASS ale umožňuje určování nejlevnější cesty pouze sčítáním cen jednotlivých úseků cesty. Kdybychom vytvořili sloupec s hodnotami rychlostí a použili ho, vedla by nejlevnější cesta přes spoje
s nejnižším výsledným součtem, tedy přes nejpomalejší spoje. My tedy potřebujeme získat převrácenou hodnotu rychlosti, tzv. „pomalost“. Získáme ji ze vzorce:
1000
= pomalost
rychlost
,
1000
∗2= pomalost
rychlost
Druhý vzorec použijeme, pokud se jedná o tzv. half­duplexní technologii (technologii, ve které data nemohou téct zároveň oběma směry – tedy vlastně s polovičním průtokem než je udávaný).
40
Technologie
technologie
slovní popis technologie
FD/HD
rychlost [Mbit]
pomalost
1
Ethernet
FD
10
100
2
Ethernet
FD
100
10
3
Ethernet
FD
1000
1
4
Wi­Fi 2,4 Ghz 11b
HD
11
182
5
Wi­Fi 2,4 Ghz 11g
HD
32
62
6
Wi­Fi 5,8 Ghz
HD
54
37
7
Ronja – optické pojítko
FD
10
100
9
Optické vlákno
FD
1000
1
11
Bezdrátové pojítko SVM 10,2 Ghz
FD
20
50
12
Návrh spoje uložený v db
x
x
1000
FD/HD označuje, zda je technologie full­duplexní či half­duplexní Tabulka 3: Použité technologie, jejich rychlost a vypočtená pomalost
Kvůli použití pomalosti jako sloupce pro cenu cesty, budou výsledné hodnoty cen cest pouze relativní. I tak ale dobře ukáží změny cen po výměně spoje. Máme tedy navržen nový sloupec pomalost pro atributovou tabulku spojů a nyní ho do tabulky přidáme. Využijeme příkaz v.db.addcol a datový typ sloupce zvolíme integer. Pro vyplnění hodnot sloupce použijeme příkaz v.db.update a pomocí databázových příkazů přiřadíme do nového sloupce hodnoty pomalosti dle jednotlivých typů technologií ve sloupci technologi.
5.2.3 Popis skriptů
Zadanou funkci vytvoříme za použití tří skriptů.
Prvním skriptem je nacteni. Slouží opět pouze pro zadání vstupních dat pro ostatní skripty. Nejprve přečte z příkazové řádky číslo měněného spoje, poté do ní vypíše tabulku možných technologií a nakonec přečte zadané číslo technologie. Číslo spoje lze zjistit
z vektorové mapy sit příkazem d.what.vect. Zadané dvě hodnoty skript předá dalšímu skriptu.
Ten má název hlavni a provedeme v něm následující:
41
Obrázek 12: Vývojový diagram skriptu hlavni
1. Spustíme skript cesta s parametry číslo spoje, název vstupní vrstvy a název výstupní vrstvy. Vstupní vrstvou bude původní vektorová mapa sit před změnou technologie spoje. Výstupní vrstvu nazveme path1.
2. Zkopírujeme vstupní vektorovou vrstvu sit do vrstvy vektor, kterou budeme editovat.
3. Změníme hodnotu ve sloupci technologi v nové vrstvě vektor na číslo nové technologie.
4. Na základě čísla nové technologie změníme příslušně hodnotu ve sloupci pomalost.
5. Znovu spustíme skript cesta, tentokrát je vstupní mapou vrstva vektor a výstupem vrstva path2.
6. Z atributových tabulek vrstev path1 a path2 vybereme příkazem v.db.select číslo cesty, její cenu před a po změně technologie spoje. Tyto hodnoty uložíme do souboru cena.txt.
Pro určení ceny nejlevnější cesty a vytvoření vektorové mapy s jejím tvarem slouží skript cesta. Ve skriptu proběhne toto:
42
Obrázek 13: Vývojový diagram skriptu cesta
43
1. Na základě zadaného čísla spoje vybereme z atributové tabulky vstupní vrstvy čísla bodů, které jsou spojem propojeny (sloupce z a do). Tato čísla jsou čísla adres (id_adresa).
2. Vytvoříme pomocný soubor, do nějž uložíme dva řádky s těmito hodnotami: číslo cesty, číslo počátečního bodu cesty (v prvním řádku je to číslo bodu ve sloupci z, ve druhém číslo bodu ve sloupci do), číslo koncového bodu cesty (tedy v našem případě číslo adresy internetové brány PilsFree, tj. 283).
3. Tento soubor využijeme při výpočtu pomocné nejlevnější cesty pomocí příkazu v.net.path. Jako sloupec obsahující údaje o ceně cest zvolíme pomalost, vrstva
s liniemi má číslo 1, vrstva s body číslo 2.
4. Z atributové tabulky výsledné vrstvy s pomocnými nejlevnějšími cestami vybereme ceny těchto cest a porovnáme je. Číslo bodu, ze kterého vede dražší cesta, uložíme do proměnné bod, s níž budeme dále pracovat.
5. Vybereme všechna čísla spojů ze vstupní vrstvy, které mají ve sloupci z nebo do hodnotu stejnou jako proměnná bod. Takto získaný seznam spojů vedoucích do tohoto bodu a uložíme do pomocného souboru. Spočítáme počet řádek v tomto souboru a tuto hodnotu uložíme do pomocné proměnné pro další použití.
6. Pokud je počet řádek souboru roven 1, znamená to, že do bodu vede pouze jeden spoj, a tedy bod je koncový. V tom případě vypočte skript nejlevnější cestu
z tohoto bodu.
7. Pokud je počet řádek jiný než 1, čte skript postupně jednotlivé řádky ze seznamu spojů a zjišťuje čísla bodů na druhém konci spoje. Přitom hlídá, aby vynechal spoj, který byl zadán. Ze zjištěných čísel bodů vytvoříme pomocný soubor stejně jako v bodě 2.
8. Provedeme výpočet nejlevnějších cest z bodů uložených v pomocném souboru příkazem v.net.path.
5.2.4 Výstupy
Výstupy z těchto skriptů jsou dvě vektorové vrstvy, path1 a path2, které si můžeme
v GRASS zobrazit pomocí d.vect. Ve většině případů se tvary cest před a po změně technologie shodují, ale mohou nastat situace, kdy se budou lišit (např. pokud vylepšíme záložní spoj, který tak nahradí původní hlavní spoj) .Dalším výstupem je tabulka cena.txt s porovnáním cen cest před a po změně technologie spoje.
44
Obrázek 14: Ukázka výstupu ­ zobrazená vrstva path1
Obrázek 15: Ukázka výstupu ­ soubor cena.txt
45
5.3 Tematická mapa
5.3.1 Požadavky
GRASS bohužel neumožňuje zobrazovat jednoduchým způsobem tematické vektorové mapy. Pro zobrazení tematických prvků je potřeba několikrát použít příkaz d.vect, vybírat jednotlivé kategorie dat pomocí atributových dotazů a nastavovat pro ně různé barvy. To je ovšem dost časově náročné, a protože se tematická mapa může hodit často, je dobré si pro její zobrazování připravit skript. Dále popsaným postupem lze samozřejmě připravit více různých zobrazovacích skriptů a používat je dle potřeby.
Chceme tedy v GRASS jednoduše zobrazit tematickou mapu sítě. Máme tyto požadavky:
1. Zobrazit podkladovou mapu.
2. Rozlišit barvou spoje podle použité technologie.
3. Silou čáry odlišit páteřní spoje od obyčejných.
4. Odlišit adresy s přístupovými body.
5. Odlišit adresy, kde bydlí správci.
5.3.2 Popis skriptu
Skript tematicka je v podstatě velmi jednoduchý. Slouží pouze ke zautomatizování opakující se činnosti. Postup:
1. Nastavíme oblast zobrazení podle podkladové mapy pomocí g.region. Zde by se dala malou editací skriptu základní oblast zobrazení změnit, či předělat tak aby byla zadávána z jiného skriptu. Po ukončení skriptu a zobrazení celé oblasti je možné přiblížit si části mapy pomocí d.zoom.
2. Zapneme zobrazovací okno pomocí d.mon a pomocí d.rast zobrazíme podkladovou mapu.
3. Pomocí série příkazů d.vect zobrazíme všechny linie obarvené podle typu technologie.
4. Podobnou sérií příkazů d.vect zobrazíme přes linie druhou vrstvu se stejnými barvami, ale s větší šířkou linie. Budou to linie, které mají v atributovém sloupci pater hodnotu 1. Tím si zvýrazníme páteřní spoje.
5. Zobrazíme vrstvu bodů pomocí d.vect.
6. Zobrazíme body, které mají v tabulce pc ve sloupci typ hodnoty 2 nebo 5. Při zobrazování zvolíme větší velikost bodu. Tím zvýrazníme adresy s přístupovými body k síti. 7. Zobrazíme vrstvu spravce, která obsahuje body s adresami, na nichž bydlí správci. Při zobrazení použijeme jinou barvu bodů než u předchozích dvou kroků.
46
5.3.3 Výstupy
Výstupem tohoto skriptu je v okně zobrazená tematická mapa sítě PilsFree.
Obrázek 16: Ukázka výstupu ­ výřez tematické mapy
5.4 Návrhy dalších funkcí
Výše popsané skripty představují aplikaci jen části toho, co lze v GRASS vytvořit.
V této kapitole uvedeme návrhy některých dalších zajímavých funkcí použitelných pro GIS. Skriptování v GRASS je velmi mocný nástroj a ani tyto další návrhy nevyčerpávají všechny možnosti tvorby funkcí.
5.4.1 Automatická aktualizace Jednou z nejdůležitějších funkcí případného GIS PilsFree by bylo udržování aktuálnosti vektorových vrstev vytvořených z databáze. Znamená to vytvořit skript, který automaticky 47
provede úkony nad vektorovými vrstvami, popsané v této práci. To je:
1. Pomocí v.in.db vytvořit bodové vrstvy z tabulky pf_adresa a pohledů uz a vse
v databázi PilsFree.
2. Spustit PHP skript dbgml.php, importovat do GRASS vytvořený .gml soubor a získat tak liniovou vrstvu spojů.
3. Zkopírovat tabulky z databáze PilsFree do GRASS a upravit hodnoty kategorií tabulky spoje tak, aby se dala propojit s vektorovou vrstvou (viz. kapitola 4.3.2).
4. Pomocí v.transform transformovat vektorové vrstvy na rastr a pomocí v.category změnit vnitřní vrstvu dat v bodových vrstvách (viz. 4.4.1).
5. Propojit vektorové vrstvy do jedné vrstvy sit pomocí v.patch, přidat tabulkám bodových vrstev sloupce s novými souřadnicemi x1 a y1 a tabulce liniové vrstvy sloupec pomalost. Sloupec pomalost vyplnit dle uvedeného vztahu (viz. 5.2.2).
Vytvořený skript by se na serveru s GIS nechal proběhnout například jednou denně a udržoval by tak vektorové vrstvy v souladu s databází.
5.4.2 Výškové profily
Pro bezdrátovou počítačovou síť představují zajímavou informaci výškové rozdíly mezi dvěma body sítě (kvůli vertikálnímu úhlu antény a s tím související kvalitě signálu) a také tvar profilu terénu. Profil terénu hodně napoví o viditelnosti z bodu na bod a umožňuje možná lepší představu než samotná funkce viditelnosti r.los. Případný skript by mohl například vytvářet profily na základě zadaných souřadnic dvou bodů a ukládat je jako rastrový obrázek.
GRASS obsahuje dvě možnosti jak profily vytvářet:
●
Příkaz d.profile slouží pro interaktivní zadávání koncových bodů profilu a okamžité zobrazení až čtyř různých profilů v okně monitoru GRASS.
●
Pro skriptování se více hodí příkaz r.profile, který vytvoří na základě zadaných souřadnic bodů textový soubor s daty profilu (souřadnice x, y, kumulativní vzdálenost od počátku profilu a hodnota rastru). Tento soubor lze do GRASS importovat jako vektorovou vrstvu pomocí v.in.ascii nebo ho využít i v jiných programech.
5.4.3 Trojrozměrné zobrazení dat
GRASS umožňuje vytvářet nejen 2D mapové výstupy, ale i 3D vizualizace a animace. A to s využitím interního modulu NVIZ. NVIZ je nástroj, který umožňuje vizualizaci třídimenzionálních rastrových, vektorových a bodových dat. Uživatel má možnost klást mimo jiné prostorově orientované dotazy a generovat animace. [3]
Příliš velká území, jako např. výřez o velikosti 1 000 x 1 000 mapových jednotek, chod NVIZ výrazně zpomalují a při větší velikosti území se NVIZ nemusí spustit kvůli nedostatku paměti. Proto není možné zobrazit celý DMT, který máme k dispozici, ale jen výřezy.
48
Protože je práce v NVIZ plně interaktivní, není možné využít tento modul při skriptování, ale lze pomocí něj vytvořit různé zajímavé pohledy a animace terénu použitelné například pro propagační materiály či prezentace sdružení PilsFree. Postup práce s modulem NVIZ je popsán v příručce ke GRASS 6.0 [3] a částečně se zobrazením DMR pomocí NVIZ zabývá i Jan Pacina ve své diplomové práci [11].
5.4.4 Hustota bodů sítě
Rastrovou mapu hustoty vektorových bodů lze získat pomocí příkazu v.kernel. Tato funkce by se dala použít opět spíše pro prezentace, protože nemá příliš velký praktický význam.
49
6 Závěr
Domnívám se, že cíle stanovené v zadání této práce byly splněny a doufám, že má práce bude alespoň malým přínosem pro všechny čtenáře.
V teoretické části byly podány potřebné základní informace o používaném programu GRASS a základy skriptování. Představil jsem stručně sdružení PilsFree. Ukázal jsem strukturu databáze členů, jejíž data byla využita v praktické části práce.
V praktické části jsem vytvořil ze získaných dat rastrové vrstvy podkladové mapy a digitálního modelu terénu. Ze souřadnic v databázi jsem vytvořil vektorové vrstvy vlastní sítě PilsFree, kterou se v této práci zabývám. Také jsem všechna tyto data transformoval do souřadnicových systémů S­JTSK a WGS 84. Přesto, že se dále těmito georeferencovanými daty v práci dále nezabývám, mohou posloužit pro nejrůznější funkce určování souřadnic nebo nad nimi lze po úpravě skriptů provést tytéž analýzy, které provádím nad daty v místním souřadnicovém systému v hlavní části práce.
V hlavní části práce jsem vytvořil pomocí skriptů několik různých funkcí využívajících příkazy a analýzy z modulů programu GRASS. Funkce, která vytvoří výřez mapy dle zadaných souřadnic z GPS, je myslím velmi dobře použitelná pro vytvoření jednoduchého webového GIS pro žadatele o členství, ale i současné členy sdružení. Funkce nahrazení spoje je naopak spíše určena pro vedení a správce sítě. Může pomáhat při určování vhodnosti vylepšování spojů v síti a ušetřit tak finance celému sdružení. Poslední funkce tematická mapa slouží hlavně pro ukázku možností zobrazování dat v GRASS. Pokud by se vytvořilo několik podobných funkcí, zobrazujících různé druhy informací, daly by se tyto využít i ve funkci tvořící výřez mapy na základě souřadnic z GPS a rozšířit tak možnosti výstupů této funkce. Ostatní navržené funkce slouží hlavně pro představení dalších možností programu GRASS a případného GIS sdružení PilsFree.
Při tvorbě práce jsem se setkal s nejrůznějšími většími či menšími problémy. Jednalo se o především o komplikace při tvorbě vektorových vrstev ze souřadnic v databázi a zpracování velkých rastrů.
Věřím, že výstupy této práce lze využít v případném geografickém informačním systému sdružení, a je mým cílem vytvořit funkční verzi tohoto systému v diplomové práci.
50
Seznam použitých pramenů a literatury
[1] BOUDA, J. Scriptování pro Grass, řetězení prostorových analýz [online]. [cit. 2007­
05­13]. Dostupné z WWW: <http://gis.zcu.cz/studium/apa/referaty/2006/Bouda_skripty/>
[2] CZFree.Net ­ projekt neziskové broadband telekomunikační sítě v České Republice [online]. [cit. 2007­05­05]. Dostupné z WWW: <http://www.czfree.net/home/index.php>
[3] DASSAU, O.; HOLL, S.; NETELER, M.; REDSLOB, M. GRASS GIS 6.0 Kursskript [online]. c2004­2005 [cit. 2007­05­08]. Dostupné z WWW: <http://gama.fsv.cvut.cz/data/grasswikicz/grass6_prirucka/grass6_prirucka_0.2.pdf>
[4] GRASS GIS 6.2.2cvs Reference Manual [online]. c2003­2006 [cit. 2007­05­08]. Dostupné z WWW: <http://grass.itc.it/grass62/manuals/html62_user/index.html>
[5] JEDLIČKA, J. Problematika zpracování vektorových dat v prostředí GIS GRASS [diplomová práce]. Ostrava: Vysoká škola báňská – Technická univerzita Ostrava. Fakulta elektrotechniky a informatiky, 2003.
[6] JEDLIČKA, K. Úvod do geografických informačních systémů [online]. [cit. 2007­05­
10]. Dostupné z WWW: <http://gis.zcu.cz/studium/ugi/elearning/index1.htm>
[7] KOLLINGER, M. Návrh a implementace finančně nenáročného způsobu publikace geografických dat v síti Internet [diplomová práce]. Plzeň: Západočeská univerzita. Fakulta aplikovaných věd, 2004.
[8] LONGLEY, P. A.; GOODCHILD, M. F.; MAGUIRE, D. J.; RHIND, D. W. Geographic Information Systems and Science. Chichester, England: John Wiley & Sons, 2001. 454 s. ISBN 0­471­89275­0
[9] NETELER, M. GRASS ­ Handbuch [online]. c2003 [cit. 2007­05­08]. Dostupné z WWW: <http://gama.fsv.cvut.cz/data/grasswikicz/grass_prirucka/grass_prirucka_0.4.pdf>
[10] NETELER, M.; MITASOVA, H. Open Source GIS: a GRASS GIS Approach. Norwell, Massachusetts: Kluwer Academic Publishers, 2004. 387 s. ISBN 1­4020­8064­6
[11] PACINA, J. Popis principů fungování vybraných prostorových analýz a jejich implementace v nekomerčním GIS GRASS pro názornou výuku [diplomová práce]. Plzeň: Západočeská univerzita. Fakulta aplikovaných věd, 2005.
[12] PilsFree, Občanské sdružení a komunitní počítačová síť [online]. [cit. 2007­05­16]. Dostupné z WWW: <http://www.pilsfree.net/>
[13] PilsFree wiki: Historie Pilsfree [online]. [cit. 2007­05­04]. Dostupné z WWW: <http://wikipedia.pilsfree.net/index.php/Historie_PilsFree>
[14] RAYMOND, E. S. Umění programování v Unixu. Brno: Computer Press, 2004. 509 s. ISBN 80­251­0225­4
[15] SCHNEIDER, R. D. MySQL Oficiální průvodce tvorbou, správou a laděním databází. Praha: Granada Publishing, 2006. 372 s. ISBN 80­247­1516­3
[16] SOBELL, M. G. LINUX Praktický průvodce. Praha: Computer Press, 1999. 946 s. ISBN 80­7226­190­8
51
[17] ULLMAN, L. PHP a MySQL. Brno: Computer Press, 2004. 534 s. ISBN 80­251­
0063­4
[18] Wikipedie, Otevřená encyklopedie: Svobodný software [online]. [cit. 2007­05­13]. Dostupné z WWW: <http://cs.wikipedia.org/wiki/Svobodn%C3%BD_software>.
52
Příloha A – Skripty
Import rastrů
Importpng
#!/bin/bash
#importuje vsechny soubory png z aktualniho adresare a #pojmenuje je cisly 1­n
a=0;
for png in `ls *.png`;do
a=`expr $a + 1`
r.in.gdal ­o input=$png out=$a
done
#spojeni rgb do jednoho rastru pro mapy 1­a
for ((i=1;i<=$a;i=i+1)); do
g.region rast=$i.blue
r.composite red=$i.red green=$i.green blue=$i.blue output=$i levels=8
g.remove rast=$i.blue,$i.red,$i.green
done
#spojeni map 1­a
g.region n=1 e=80000 w=­1 s=­70225;
k=1;
for ((j=2;j<=$a;j=j+1)); do
k=$k,$j
done
r.patch input=$k output=mapa
Výřez mapy na základě souřadnic GPS
Nacteni
#!/bin/bash
kontrola=0
until [ "$kontrola" = "1" ]; do
echo "ZADANI SOURADNIC GPS"
echo "Zadejte souradnici N"
echo ­n "stupne:"
read sn
echo ­n "minuty:"
read mn
echo ­n "vteriny:"
read vn
echo "ZADANI SOURADNIC GPS"
echo "Zadejte souradnici E"
echo ­n "stupne:"
53
read se
echo ­n "minuty:"
read me
echo ­n "vteriny:"
read ve
echo ­n "Zadany souradnice "$sn" "$mn"' "$vn"'' N a "$se" "$me"' "$ve"'' E. Jsou hodnoty spravne? (y/n) "
read yn
if [ "$yn" = "y" ]; then
kontrola=1
fi
done
./planek $sn $mn $vn $se $me $ve
Planek
#!/bin/bash
POINTS=WGS
#jmeno souboru s body pro transformaci z WGS84 do #lokalniho systemu
STRANA=878
#tato hodnota udava polovinu strany vygenerovane mapy #v pixelech. pri rozliseni 0.57m=1pxl je 878pxl 500m
PODKLAD=mapa
#nazev podkladoveho rastru
VEKTOR=sit
#nazev vektorove mapy s adresami a spoji
VEKT_SPRAVCI=spravce
#nazev vektorove mapy obsahujici adresni body #spravcu site
DMT=dmt6
#nazev rastru DMT
VYSTUP=mapa
#nazev vysledneho obrazku ve formatu png
TABULKA=tabulka.txt
#nazev souboru s tabulkou vsech uzivatelu #na mapce
SPRAVCE=spravce.txt
#nazev souboru s udaji o nejblizsim #spravci
N=`echo "$1+$2/60+$3/3600"|bc ­l`
echo "Prevedeni na desetinna cisla: "$N
E=`echo "$4+$5/60+$6/3600"|bc ­l`
echo "Prevedeni na desetinna cisla: "$E
echo $E"|"$N>pom #zapsani souradnic do souboru pom
sleep 2
echo "import"
g.remove vect=pom_point
#vytvoreni vektoru (bodu) ze souboru pom
v.in.ascii ­t input=pom output=pom_point format=point sleep 2
echo "transformuji do lokalniho systemu"
g.remove vect=pom_local
v.transform ­q input=pom_point output=pom_local pointsfile=$POINTS ­­
overwrite
echo "pridavam tabulku souradnic"
v.db.addtable map=pom_local layer=1 'columns=cat integer,x double,y double,spravce integer' 54
echo "plnim tabulku souradnic"
v.to.db map=pom_local type=point layer=1 qlayer=1 option=coor units=meters column=x,y #prida aktualni souradnice do tabulky vektoru
sleep 2
x=`v.db.select map=pom_local layer=1 column=x`
x=${x:2:10}
echo "transformovana souradnice x: "$x
y=`v.db.select map=pom_local layer=1 column=y`
y=${y:2:10}
echo "transformovana souradnice y: "$y
#odstraneni desetinnych mist pro porovnani v if
xx=${x%'.'*}
yy=${y%'.'*}
if [ "$xx" ­gt 80000 ] || [ "$xx" ­lt ­1 ] || [ "$yy" ­gt 1 ] || [ "$yy" ­lt ­70225 ]; then
echo " "
echo "BOD LEZI MIMO DOSTUPNE MAPOVE PODKLADY.. UKONCUJI SKRIPT"
echo " "
sleep 2
exit 2
fi
n=`echo "$y+$STRANA"|bc ­l`
s=`echo "$y­$STRANA"|bc ­l`
e=`echo "$x+$STRANA"|bc ­l`
w=`echo "$x­$STRANA"|bc ­l`
#nastavi region na ctverec 1756x1756 pixelu kolem bodu, coz je (pri velikosti pixelu 0.57m) 1000x1000 metru
g.region n=$n s=$s e=$e w=$w res=1
echo "vytvarim podkladovou mapu"
r.mapcalc podklad=$PODKLAD $end
echo "vytvarim mapu viditelnosti"
g.region nsres=13.8291573 ewres=12.84446532
dist=$(($STRANA*3/2))
r.los input=$DMT output=pom_los coordinate=$x,$y obs_elev=10 max_dist=$dist ­­overwrite
echo "upravuji mapu viditelnosti"
#zmeni hodnoty rastru 1­180 na 1
echo "0 thru 180=1"|r.reclass input=pom_los output=los1
r.mapcalc los2=los1 $end
g.remove rast=los1
r.null map=los2 setnull=1 null=1 #invertuje masku
#zmeni barvu masky na sedou ­ kvuli stinovani
echo "100% 190 190 190"|r.colors map=los2 color=rules g.region res=1
55
echo "zobrazuji"
d.mon start=x1
d.mon select=x1
d.resize width=600 height=600
#zobrazi stinovani viditelneho/neviditelneho
d.his h_map=podklad i_map=los2 d.vect map=$VEKTOR display=shape,attr attrcol=id_adresa icon=basic/point size=18 layer=­1 width=2 color=0:0:150 fcolor=0:0:150 llayer=2 lcolor=black bgcolor=white bcolor=black lsize=9 font=romans xref=left yref=bottom
d.vect map=$VEKTOR type=line display=shape layer=1 where=pater=1 width=3 color=red d.vect map=$VEKTOR display=shape,attr attrcol=id_adresa icon=basic/point size=25 layer=4 'where=typ=5 or typ=2' fcolor=red llayer=4 lcolor=red bgcolor=white bcolor=red lsize=9 font=romans xref=left yref=bottom d.out.png output=$VYSTUP res=2 #vytvori soubor mapa.png
d.mon stop=x1
rm $TABULKA
where=`v.db.select map=$VEKTOR layer=3 column=id_adresa,nick,ulice,cp,ctvrt,mesto,psc "where=x1>$w and x1<$e and y1>$s and y1<$n"`
echo $where>tab #vytvori soubor tabulka s adresami uzivatelu
#skript, ktery zajisti zalamovani radek v tabulce
cat tab | awk ­f transtab >$TABULKA #zjisti nejblizsi adresu zpravce od zadanych souradnic a ulozi do souboru spravce
v.distance from=pom_local to=$VEKT_SPRAVCI from_type=point to_type=point from_layer=1 to_layer=1 dmax=­1 upload=cat column=spravce
spr=`v.db.select ­c map=pom_local layer=1 column=spravce`
spravce=`v.db.select ­c map=$VEKT_SPRAVCI layer=1 column=id_adresa,nick,ulice,cp,ctvrt,mesto,psc "where=id_uzivate=$spr"`
echo $spravce>$SPRAVCE
rm tab pom
Nahrazení spoje
Nacteni
#!/bin/bash
kontrola=0
until [ "$kontrola" = "1" ]; do
echo ­n "Zadete cislo spoje, ktery chcete zmenit a otestovat: "
read spoj
echo "TABULKA MOZNYCH TECHNOLOGII"
echo "1 = Ethernet 10Mbit"
echo "2 = Ethernet 100Mbit"
56
echo "3 = Ethernet 1Gbit"
echo "4 = WIFI 2.4Ghz 11b 11Mbit HD"
echo "5 = WIFI 2.4Ghz 11g 11­54Mbit HD"
echo "6 = WIFI 5.8Ghz 54Mbit HD"
echo "7 = Ronja ­ Opticke pojitko 10 Mbit"
echo "9 = Opticke vlakno 1Ghz"
echo "11 = SVM Bezdratove pojitko 10.2Ghz 20Mbit"
echo ­n "Zadejte cislo technologie, kterou chcete pouzit: "
read tech
echo ­n "Zadany hodnoty: cislo spoje=$spoj a technologie=$tech. Jsou hodnoty spravne? (y/n) "
read yn
if [ "$yn" = "y" ]; then
kontrola=1
fi
done
./hlavni $spoj $tech
Hlavni
#!/bin/bash
VSTUP=sit
UPDATED=vektor
VYSTUP1=path1
VYSTUP2=path2
TABULKA=cena.txt CENA=pomalost
TECH=technologi
ID=id_spoj #nazev vstupniho vektoru
#nazev upraveneho vektoru
#vysledny vektor s cestami
#vysledny vektor s upravenymi cestami
#vysledny soubor s body a hodnotamy nakladu pred a po #zmene spoje
#sloupec obsahujici cenu cesty pro v.net.path
#sloupec obsahujici cislo pouzite technologie
#sloupec obsahujici cislo spoje
#"pomalost" spoje dle typu techologie
TYP1=100
#Ethernet 10Mbit
TYP2=10
#Ethernet 100Mbit
TYP3=1
#Ethernet 1Gbit
TYP4=182
#WIFI 2.4Ghz 11b 11Mbit HD
TYP5=62
#WIFI 2.4Ghz 11g 11­54Mbit HD
TYP6=37
#WIFI 5.8Ghz 54Mbit HD
TYP7=100
#Ronja ­ Opticke pojitko 10 Mbit
TYP9=1
#Opticke vlakno 1Ghz
TYP11=50
#SVM Bezdratove pojitko 10.2Ghz 20Mbit
./cesta $1 $VSTUP $VYSTUP1
g.copy vect=$VSTUP,$UPDATED
v.db.update map=$UPDATED layer=1 column=$TECH value=$2 where=$ID=$1
if [ $2 ­eq 1 ]; then
v.db.update map=$UPDATED layer=1 column=$CENA value=$TYP1 where=$ID=$1
elif [ $2 ­eq 2 ]; then
v.db.update map=$UPDATED layer=1 column=$CENA value=$TYP2 where=$ID=$1
elif [ $2 ­eq 3 ]; then
v.db.update map=$UPDATED layer=1 column=$CENA value=$TYP3 where=$ID=$1
elif [ $2 ­eq 4 ]; then
57
v.db.update map=$UPDATED layer=1 column=$CENA value=$TYP4 where=$ID=$1
elif [ $2 ­eq 5 ]; then
v.db.update map=$UPDATED layer=1 column=$CENA value=$TYP5 where=$ID=$1
elif [ $2 ­eq 6 ]; then
v.db.update map=$UPDATED layer=1 column=$CENA value=$TYP6 where=$ID=$1
elif [ $2 ­eq 7 ]; then
v.db.update map=$UPDATED layer=1 column=$CENA value=$TYP7 where=$ID=$1
elif [ $2 ­eq 9 ]; then
v.db.update map=$UPDATED layer=1 column=$CENA value=$TYP9 where=$ID=$1
elif [ $2 ­eq 11 ]; then
v.db.update map=$UPDATED layer=1 column=$CENA value=$TYP11 where=$ID=$1
else
echo "Chybne zadani typu technologie"
exit 2
fi
./cesta $1 $UPDATED $VYSTUP2
g.remove vect=$UPDATED
body=`v.db.select ­c map=$VYSTUP1 layer=1 column=id`
echo $body>pom5
cat pom5|tr ' ' '\n'>pom6
cost1=`v.db.select ­c map=$VYSTUP1 layer=1 column=cost`
echo $cost1>pom5
cat pom5|tr ' ' '\n'>pom7
cost2=`v.db.select ­c map=$VYSTUP2 layer=1 column=cost`
echo $cost2>pom5
cat pom5|tr ' ' '\n'>pom8
paste pom6 pom7 pom8 > $TABULKA
rm pom5 pom6 pom7 pom8
Cesta
#!/bin/bash
GW=283
CENA=pomalost
TECH=technologi
ID=id_spoj
Z=z
DO=do
#id adresy internetove gatewaye, ci jineho bodu, ke #kteremu cesty povedou
#sloupec obsahujici cenu cesty pro v.net.path
#sloupec obsahujici cislo pouzite technologie
#sloupec obsahujici cislo spoje
#sloupec obsahujici cislo bodu, ze ktereho spoj vede #sloupec obsahujici cislo bodu, do ktereho spoj vede
from=`v.db.select ­c map=$2 layer=1 column=$Z where=$ID=$1`
to=`v.db.select ­c map=$2 layer=1 column=$DO where=$ID=$1`
echo "1 $from $GW">pom1
echo "2 $to $GW">>pom1
cat pom1|v.net.path input=$2 output=cesta1 alayer=1 nlayer=2 afcolumn=$CENA ­­overwrite
a=`v.db.select ­c map=cesta1 layer=1 column=cost where=id=1`
b=`v.db.select ­c map=cesta1 layer=1 column=cost where=id=2`
if [ "$a" ­gt "$b" ]; then
58
bod=`v.db.select ­c map=cesta1 layer=1 column=fcat where=id=1`
elif [ "$a" ­lt "$b" ]; then
bod=`v.db.select ­c map=cesta1 layer=1 column=fcat where=id=2`
else
echo "CHYBA ­ ceny cest z obou bodů jsou stejné"
exit 3
fi
g.remove vect=cesta1
echo $bod
body=`v.db.select ­c map=$2 layer=1 column=$ID "where=z=$bod or do=$bod"`
echo $body>pom2
cat pom2|tr ' ' '\n'>pom3
x=`wc ­l<pom3`
echo $x
i=0
if [ $x ­eq 1 ]; then
echo "1 $bod $GW"|v.net.path input=$2 output=$3 alayer=1 nlayer=2 afcolumn=$CENA ­­overwrite
echo "Bod byl koncovy a proto vede cesta jen od nej"
else
while read radek; do
if [ $radek ­ne $1 ]; then
i=`expr $i + 1`
from1=`v.db.select ­c map=$2 layer=1 column=$Z where=$ID=$radek`
to1=`v.db.select ­c map=$2 layer=1 column=$DO where=$ID=$radek`
if [ $from1 ­eq $bod ]; then
echo "$i $to1 $GW">>pom4
else
echo "$i $from1 $GW">>pom4
fi
fi
done < pom3
cat pom4|v.net.path input=$2 output=$3 alayer=1 nlayer=2 afcolumn=$CENA ­­overwrite
fi
rm pom1 pom2 pom3 pom4
Tematická mapa
Tematicka
#!/bin/bash
#vstupni mapy
PODKLAD=mapa
VEKTOR=sit
SPRAVCI=spravce
59
# barvy spoju dle technologie
TECH1=0:0:100
#tmave modra
TECH2=0:0:180
#tmavsi modra
TECH3=0:0:255
#modra
TECH4=180:0:0
#tmave cervena
TECH5=255:0:0
#cervena
TECH6=255:150:0
#oranzova
TECH7=200:0:200
#fialova
TECH9=180:100:0
#hneda
TECH11=255:140:255
#ruzova
TECH12=0:0:0
#cerna
\
|­ Ethernet
/
\
|­ Wi­Fi
/
#sila cary paterniho a nepaterniho spoje
NEPATER=2
PATER=4
#velikost bodu bez nebo s pristupovym bodem (AP)
NEAP=15
AP=20
#barva bodu na kterem nesidli/sidli spravce
NESPRAVCE=150:80:0
#hneda
SPRAVCE=255:0:0
#cervena
g.region rast=$PODKLAD
d.mon start=x1
d.rast $PODKLAD
#zobrazeni spoju dle technologie
d.vect map=$VEKTOR display=shape layer=1 where=technologi=1 width=$NEPATER color=$TECH1
d.vect map=$VEKTOR display=shape layer=1 where=technologi=2 width=$NEPATER color=$TECH2
d.vect map=$VEKTOR display=shape layer=1 where=technologi=3 width=$NEPATER color=$TECH3
d.vect map=$VEKTOR display=shape layer=1 where=technologi=4 width=$NEPATER color=$TECH4
d.vect map=$VEKTOR display=shape layer=1 where=technologi=5 width=$NEPATER color=$TECH5
d.vect map=$VEKTOR display=shape layer=1 where=technologi=6 width=$NEPATER color=$TECH6
d.vect map=$VEKTOR display=shape layer=1 where=technologi=7 width=$NEPATER color=$TECH7
d.vect map=$VEKTOR display=shape layer=1 where=technologi=9 width=$NEPATER color=$TECH9
d.vect map=$VEKTOR display=shape layer=1 where=technologi=11 width=$NEPATER color=$TECH11
d.vect map=$VEKTOR display=shape layer=1 where=technologi=12 width=$NEPATER color=$TECH12
#zobrazeni paternich spoju
d.vect map=$VEKTOR display=shape layer=1 'where=technologi=1 and pater=1' width=$PATER color=$TECH1
d.vect map=$VEKTOR display=shape layer=1 'where=technologi=2 and pater=1' width=$PATER color=$TECH2
d.vect map=$VEKTOR display=shape layer=1 'where=technologi=3 and pater=1' width=$PATER color=$TECH3
d.vect map=$VEKTOR display=shape layer=1 'where=technologi=4 and pater=1' width=$PATER color=$TECH4
60
d.vect map=$VEKTOR display=shape layer=1 'where=technologi=5 and pater=1' width=$PATER color=$TECH5
d.vect map=$VEKTOR display=shape layer=1 'where=technologi=6 and pater=1' width=$PATER color=$TECH6
d.vect map=$VEKTOR display=shape layer=1 'where=technologi=7 and pater=1' width=$PATER color=$TECH7
d.vect map=$VEKTOR display=shape layer=1 'where=technologi=9 and pater=1' width=$PATER color=$TECH9
d.vect map=$VEKTOR display=shape layer=1 'where=technologi=11 and pater=1' width=$PATER color=$TECH11
d.vect map=$VEKTOR display=shape layer=1 'where=technologi=12 and pater=1' width=$PATER color=$TECH12
#zobrazeni bodu
d.vect map=$VEKTOR display=shape icon=basic/point size=$NEAP layer=2 fcolor=$NESPRAVCE
#zobrazeni AP
d.vect map=$VEKTOR display=shape icon=basic/point size=$AP layer=4 'where=typ=5 or typ=2' fcolor=$NESPRAVCE
#zobrazeni spravcu
d.vect map=$SPRAVCI display=shape icon=basic/point size=$NEAP layer=1 fcolor=$SPRAVCE
61
Příloha B – Struktura DVD
●
●
●
●
●
Data_GRASS
●
xy
●
krovak
●
WGS84
Data_Vstupni
●
DB
●
DMT
●
Rastry_PNG
Klice_Transformace
●
Posun_Vektoru
●
S­JTSK
●
WGS84
Skripty
●
Import_Rastru
●
Nahrazeni_Spoje
●
Tematicka_Mapa
●
Tvorba_GML
●
Vyrez_Mapy
Text_BP
62

Podobné dokumenty

Informace o sérii datových sad INSPIRE tématu Zeměpisná jména

Informace o sérii datových sad INSPIRE tématu Zeměpisná jména Data vznikla v souladu se Směrnicí Evropského parlamentu a Rady 2007/2/ES ze dne 14.3.2007 o zřízení infrastruktury pro prostorové informace v Evropském společenství (INSPIRE) a podle navazujících ...

Více

aktuálne problémy v zakladaní a pestovaní lesa

aktuálne problémy v zakladaní a pestovaní lesa b) neceloplošná (skupinová) výsadba (N–I, N–II) na 2 dílčích plochách o rozměrech 25 × 25 m. Zde byla na jaře roku 2012 provedena skupinová výsadba buku v počtu 9 skupin na plochu 25 × 25 m, tj. 1...

Více

01082305-2_06_SP6_User_m

01082305-2_06_SP6_User_m Obrázek 2 – Servisní modul SM2 Servisní modul slouží k detailní informaci o procesech probíhajících v zařízení. Umožňuje také lepší diagnostiku a odhalování problémů bez použití PC. Objednací číslo...

Více

SE2212XGPRS - uživatelský manuál

SE2212XGPRS - uživatelský manuál Připojte k zařízení USB kabel a zařízení zapněte. Poté spusťte ovládací program . Tento začne vyhledávat port, na který je zařízení nainstalováno. (Instalace ovladačů viz dále.) Po jeho nalezení z...

Více

CD-Rom pro Windows

CD-Rom pro Windows v sekci nazvané Otázky o operacích a funkcích na straně 99 nebo v indexu na straně 117. Detailní nastavení Tato sekce vysvětluje jak provést detailní nastavení různých funkcí Clavinovy. Obraťte se ...

Více

O GRASSu - Les-ejk

O GRASSu - Les-ejk http://grass.gdf-hannover.de/GRASS Add Ons r.in.wms, v.trees, r.in.gdalwarp, . . .

Více

Webový systém pro správu mapových aplikací digitálních modelů

Webový systém pro správu mapových aplikací digitálních modelů Geografický informační systém (GIS) je pro získávání, ukládání, správu a vizualizaci geografických dat nepostradatelná aplikace. Tradiční desktopový GIS je mocný nástroj schopný provádět složité an...

Více