+ All Categories
Home > Documents > pro zac ate cn kygeo.fsv.cvut.cz/gdata/2013/pin2/e/dokumentace/... · 2013-06-05 · CESK E VYSOK E...

pro zac ate cn kygeo.fsv.cvut.cz/gdata/2013/pin2/e/dokumentace/... · 2013-06-05 · CESK E VYSOK E...

Date post: 03-Aug-2020
Category:
Upload: others
View: 0 times
Download: 0 times
Share this document with a friend
45
ˇ CESK ´ E VYSOK ´ EU ˇ CEN ´ I TECHNICK ´ E V PRAZE FAKULTA STAVEBN ´ I OBOR GEOD ´ EZIE A KARTOGRAFIE Dokumentace Projektu informatika 2 (PIN2) Tutorial Programov ´ an ´ ı v Pythonu pro ArcGIS 10.0“ pro za ˇ c ´ ate ˇ cn ´ ıky MICHAL BE ˇ CI ˇ CKA, JAN ZAJ ´ I ˇ CEK 15. kvˇ etna 2013
Transcript
Page 1: pro zac ate cn kygeo.fsv.cvut.cz/gdata/2013/pin2/e/dokumentace/... · 2013-06-05 · CESK E VYSOK E U CEN I TECHNICKE V PRAZE FAKULTA STAVEBN I OBOR GEODEZIE A KARTOGRAFIE Dokumentace

CESKE VYSOKE UCENI TECHNICKE V PRAZE

FAKULTA STAVEBNI

OBOR GEODEZIE A KARTOGRAFIE

Dokumentace Projektu informatika 2 (PIN2)

TutorialrdquoProgramovanı v Pythonu

pro ArcGIS 100ldquo pro zacatecnıky

MICHAL BECICKA JAN ZAJICEK

15 kvetna 2013

Obsah

1 Uvod 211 Poznamka ke kompatibilite 212 Moduly 2

2 Jak zacıt skriptovat 221 Zalozenı noveho skriptu 222 Obecne poznatky pro psanı skriptu 5

221 Vybrane syntakticke zasady Pythonu 5222 Help 6223 Nactenı vstupnıch parametru 6224 Vypisy zprav a atributovych typu 7225 Prıstup k prvkum atributove tabulky 7226 Nastavenı pracovnıho adresare a prace s pozicemi na

disku 8227 Prace s Feature Class a Feature Layer 8228 Seznam parametru 9229 Testovanı existence atributoveho sloupce 92210 Balıcek NumPy a jeho pouzitı 10

3 Zaver 11

1

1 Uvod

Tato dokumentace by mela slouzit jako manual pro zacatecnıky kterı chtejızacıt psat skripty v prostredı ArcGIS verze 100

11 Poznamka ke kompatibilite

Na uvod jen par zakladnıch informacı o skriptovanı v ArcGISKazda nova verze ArcGIS ma integrovanou nejnovejsı verzi Pythonu Stejnetak se vyvıjı i moduly potrebne k vyuzıvanı ArcGIS funkcı v Pythonu Tobohuzel neumoznuje zpetnou kompatibilitu Napr zde byl vyuzıvan ArcGIS100 a Python 26 Pri vyhledavanı informacı a navodu je dobre mıt totona pameti a vyuzıvat zejmena zdroje odkazujıcı na ctenarovu aktualnı verziprostredı ArcGIS

12 Moduly

Pri skriptovanı v ArcGIS musıme implementovat i dalsı zadoucı modulyJednım z nejdulezitejsıch modulu je ArcPy ktery pod sebou zahrnuje stan-dardnı toolboxy v ArcGISu Jeho cılem je vytvorit uzitecny a produktivnızpusob jak provest geografickou analyzu dat konverze dat a spravu datDalsım velice vyznamnym modulem je balıcek NumPy uzıvany pro vedeckevypocty Umoznuje podporu velkych multi-dimenzionalnıch polı a maticspolu s velkou knihovnou matematickych funkcı pro praci s temito poliModul Math podporuje praci s matematickymi funkcemi a objekty Naprgoniometricke funkce konstanty atd Dalsım uzitecnym modulem muze bytOs Sys a String String umoznuje praci s textovymi retezci Napr funkciprint Os a Sys podporujı mj praci se systemovymi operacemi Napr praces pozicemi na disku apod Vsechny moduly se zavolajı pomocı funkce importNapr import arcpy zprıstupnı knihovny v balıcku arcpy

2 Jak zacıt skriptovat

21 Zalozenı noveho skriptu

Nejprve je potreba v libovolnem adresari zalozit soubor s prıponou py Tentosoubor bude obsahovat zdrojovy kod Kod muzeme editovat jak v externımIDLE tak v IDLE integrovanem v instalaci ArcGIS jmenujıcı se PythonWinV kazdem prıpade je vhodne toto prostredı v ArcGIS urcit aby mohl ArcGISs editorem spolupracovat

2

1 Nastavenı editoru v ArcGIS - Geoprocessing rarr Geoprocessing op-tionsZde v poli Geoprocessing tool rarr editordebugger zvolıme nami pre-ferovany editor Zada se cesta k exe souboru programu PythonWin

Obrazek 1 Nastavenı editoru a debuggeru

Nynı pri volbe editace skriptu prımo v ArcGIS se nam zdrojovy kodotevre v danem editoru viz nıze

3

2 Vytvorenı nastroje (tool) Nove toolboxy a nastroje se vytvarejıstejne jako jine objekty v ArcGIS - tedy v ArcCataloguNovy toolbox se vytvorı po kliknutı pravym tlacıtkem mysi na ad-resar ToolboxesMy Toolboxes a zvolenı polozky New rarr Toolbox V ta-kovemto uzivatelskem Toolboxu muzeme pridat skript Opet pres pravetlacıtko mysi Add rarr Script najdeme soubor py do ktereho budemepsat zdrojovy kod Nynı pri opetovnem zapnutı ArcGIS stacı najıt vArcCatalogu tento skript kliknout pravym a zvolit Edit Zdrojovykod se automaticky otevre v definovanem editoru

Obrazek 2 Vytvorenı noveho toolboxu

Pri pridavanı skriptu muzeme zadavat vstupnı a vystupnı parametryTento krok muzeme preskocit a editovat tyto parametry pozdeji

4

Obrazek 3 Pridanı skriptu

3 Editace vstupnıch a vystupnıch parametru Pro editaci parametruklikneme pravym na skript v ArcCatalogu a zvolıme Properties Zdemuzeme mimo jine editovat i cestu k souboru py V zalozce Parametersje seznam parametru Po kliknutı na parametr se ve spodnım okne ob-jevı jejich atributy z nichz nejdulezitejsı je Direction tj zda-li se jedna ovstupnı nebo vystupnı parametr Vyznam dalsıch atributu je jasny z je-jich nazvu a nabıdky jejich hodnot Pri definovanı parametru je potrebazvolit spravny datovy typ parametru z preddefinovane nabıdky

5

Obrazek 4 Editace parametru

22 Obecne poznatky pro psanı skriptu

Pred psanım skriptu je samozrejme zadoucı si nejprve osvojit zakladnı syntaxiPythonu Pote muzeme psat skript pro ArcGIS Protoze uvod do Pythonuje perfektne zpracovan v mnoha dokumentech zde jen strucne uvedeme parzasad

221 Vybrane syntakticke zasady Pythonu

Python rozeznava bıle znaky Napr telo cyklu je oznaceno pouze odsa-zenım tabulatorem V C++ by funkce bılych znaku byla nahrazena slozenymizavorkami Python rozlisuje velka a mala pısmena Komentare se znacı oznacujecely radek Vıceradkovy komentar nenı moznyPole je nejprve nutne inicializovat pak je mozne plnit jej pomocı indexuDalsı informace jsou pekne sepsany napr zde httpwwwsallyxorgsallypythonindexphp

222 Help

Pro uvod do skriptovanı v ArcGIS je nejvyznamnejsım pomocnıkem Helpprımo od spolecnosti ESRI

6

httphelparcgiscomenarcgisdesktop100helpHelp je v anglictine a je zde prehledne popsana hledana funkce a jejı pouzitı jedemonstrovano na ukazce kodu coz je obrovskou vyhodou pro porozumenıjak dana funkce pracuje a funguje

223 Nactenı vstupnıch parametru

arcpyGetParameterAsText(index)

Indexy v Pythonu zacınajı od 0 a zde oznacujı poradı parametru jak byldefinovan v ArcCataloguVzdy je potreba parametr ulozit do nejake promenne tedy spravna syntaxebude

NazevPromenne = arcpyGetParameterAsText(0)

Stejne tak vytvorıme promennou ktera bude reprezentovat vystupnı para-metr Do teto promenne pak ukladame vysledek

PRIKLADSkript ktery zkopıruje shapefile a ulozı jej pod uzivatelem zvolenym nazvemdo zvoleneho adresare

import arcpy

inShapefile = arcpyGetParameterAsText(0)

outShapefile = arcpyGetParameterAsText(1)

arcpyCopy_management (inShapefile outShapefile)

224 Vypisy zprav a atributovych typu

Pro jakykoliv textovy vystup do vysledneho dialogu se pouzıva funkce Ad-dMessage() Pokud chceme touto funkcı vypsat hodnotu atributu nebo jinepromenne ktera nenı datoveho typu string pouzijeme pretypovanı str(promenna)Pro zjistenı atributu objektu se casto vyuzıva funkce Describe ktera umoznıpraci s mnozstvım atributovych typu PRIKLAD

import arcpy

inShapefile = arcpyGetParameterAsText(0)

ShpShapeType = arcpyDescribe(inShapefile)shapeType

7

arcpyAddMessage(Shape Type + str(ShpShapeType))

Na prıkladu je demonstrovano jak vypsat typ vstupnıho rastruVedle vypisu zpravy AddMessage existujı jeste vypis varovanı AddWarning(text je zvyrazneny) a vypis chybove hlasky AddError (beh programu seukoncı ve vyslednem dialogu v ArcGIS se vypıse dana hlaska a vypocet jevyhodnocen jako neuspesny)

225 Prıstup k prvkum atributove tabulky

K prvkum atributove tabulky se dostaneme pomocı funkce SearchCursor Tanam vytvorı pole ntit (jednotlivych radku) tabulky Ty se pak dajı kromeindexovanı prochazet napr cyklem for V tomto cyklu muzeme porovnavathodnoty atributu s hledanou hodnotou atributu Tu nalezneme jako ntitanazev atributuV prıkladu je to formule rowPOINT XHodnota FID je hodnota zadana uzivatelem ntity jsou body z shapefilu Kodv prıkladu ulozı souradnice bodu do polı X Y

PRIKLAD

import arcpy

inShapefile = arcpyGetParameterAsText(0) typu shapefile

FID_P1 = arcpyGetParameterAsText(1) typu long

FID_P2 = arcpyGetParameterAsText(2) typu long

inicializace dvouprvkovych polı a pomocne promenne

X = [00]

Y = [00]

a=0

for row in rows

if i==int(FID_P1) or i==int(FID_P2)

X[a] = mathradians(rowPOINT_X)

Y[a] = mathradians(rowPOINT_Y)

a = a+1

i = i+1

Pokud bychom nehledali ntitu podle FID ktere tvorı vzdy posloupnost prirozenychcısel muzeme promenne i priradit mısto cısla naprıklad jmeno mesta i =

8

rowName Pak by ovsem vstupnı parametr musel byt typu String byl bypovinny a neobsahoval by prednastavene hodnoty

226 Nastavenı pracovnıho adresare a prace s pozicemi na disku

Pokud nenı nastaven pracovnı adresar (tzv workspace) ArcGIS automa-ticky nabızı cestu k vystupnım parametrum podle parametru vstupnıch De-faultne je nastavena cesta k systemove geodatabazi ArcGISu DefaultgdbPokud chceme toto zmenit muzeme pracovnı adresar nastavit prıkazem

arcpyenvworkspace = cesta

Pracovnı adresar muze byt slozka i geodatabaze

227 Prace s Feature Class a Feature Layer

Nektere funkce pracujı s Feature Class a nektere s Feature Layer Nekterefunkce umı pracovat s obema typy dat Musıme se tedy rozhodnout kteradata pouzıt a popr je vytvoritRozdıl mezi temito typy je v tom ze Feature Class jsou data ulozena pevnena disku Tedy naprıklad shapefile nebo vrstva geodatabaze Typ FeatureLayer je uchovavan v pameti pocıtace a obsahuje aktualnı situaci vrstvyPredevsım tedy pouze selektovane prvkyChceme-li mıt prıstup k selektovanym prvkum musıme vzdy pouzıt typ Fe-ature Layer PRIKLAD

Chceme-li naplnit zasobnık identifikatory vsech prvku vrstvy nezavisle natom jestli jsou nektere oznaceny pouzijeme Feature Class Chceme-li na-plnit zasobnık identifikatory aktualne oznacenych prvku pouzijeme FeatureLayerVytvorenı Feature Layer z Feature Class

path = arcpyGetParameterAsText(0)

arcpyMakeFeatureLayer_management(path layer)

228 Seznam parametru

Nektere funkce jako napr Merge management pouzıvajı jako vstupnı para-metr seznam parametru (vrstev) Ten se vytvarı jako bezny seznam kteryovsem obsahuje textove retezce urcujıcı cestu k danym vrstvam

9

merge_list = []

while pathToFeatureClass

merge_listappend(rsquopathToFeatureClassrsquo)

arcpyMerge_management(merge_list outFeatureClass)

229 Testovanı existence atributoveho sloupce

Pokud chceme pridat atributovy sloupec funkcı AddField management jevhodne nejprve otestovat zda-li jiz neexistuje To se provede pomocı seznamusloupcu

fieldList = arcpyListFields(inFeatureClass rsquosectionrsquo)

fieldCount = len(fieldList)

if (fieldCount = 1)

arcpyAddField_management(inFeatureClass rsquosectionrsquo rsquoSHORTrsquo)

2210 Balıcek NumPy a jeho pouzitı

Balıcek NumPy ma obrovsky vyznam pri praci s poli a maticemi Pokudmame na vstupu rastr je treba ho prevest do podoby ve ktere budou hodnotyv jednotlivych bunkach snadno dostupne a mozne matematicke operace snimi K tomuto vyuzijeme funkce RasterToNumPyArray()

arcpyRasterToNumPyArray(InputRaster)

Tato funkce prevede na rastr na matici a jı uz muzeme bez problemu indexo-vat a provadet s nı pocetnı operace Jestlize potrebujeme dostat jako vysledekopet rastr prevedeme vyslednou matici opacnym postupem na rastr

NumPyArrayToRaster (maticelevy_dolnı_rohvelikost_pixelu_x

velikost_pixelu_y hodnota_pro_NoData)

10

3 Zaver

V tomto dokumentu byly demonstrovany ukazky a prıpady pro uplne zacatkypri programovanı skriptu spustitelneho v prostredı ESRI ArcGIS 100 Kom-pletnı zdrojove kody ze kterych se cerpaly ukazky jsou ke stazenı na strankachpredmetu PIN2

11

CESKE VYSOKE UCENI TECHNICKE V PRAZE

FAKULTA STAVEBNI

OBOR GEODEZIE A KARTOGRAFIE

Dokumentace k projektu informatika 2

Automatizace sestavenı Atlasueroznıho smyvu a transportu

splavenin ve velkych povodıch

MICHAL BECICKA

15 kvetna 2013

Obsah

1 Uvod 211 O tematu 212 Strucny souhrn 2

2 Popis pracı 321 Nastroj pro tvorbu gridu 3

211 Uvodnı dialog 4212 Vysledny log 5213 Vysledne vrstvy 5214 Cinnost nastroje podrobne 6

22 Generalizace 9221 Uvodnı dialog 9222 Vysledny log 10

23 Finalnı upravy a export 10

3 Problemy a moznosti rozsırenı 1031 Pripojovanı externıch tabulek 1032 Doba behu tvorby gridu 1133 Moznosti rozsırenı 11

4 Zaver 12

5 Prılohy 1351 Vysledny log tvorby gridu 1352 Vysledny log generalizace 14

1

1 Uvod

11 O tematu

Tema bylo urceno doc Krasou z katedry Hydromelioracı a krajinneho inzenyrstvıpro prezentovanı vysledku vypoctu eroznıho smyvu a transportu splaveninPresto ze je nastroj primarne urcen pro toto pouzitı byla snaha jej napsatco nejuniverzalnejiCılem projektu je vytvorit atlas sestaveny z jednotlivych tematickych mapTyto mapy jsou vytvoreny pro cca tretinu uzemı Ceske Republiky V potrebnemmerıtku (cca 150 000) je nemozne vytvaret spojene tematicke mapy Bylotedy nutne nejprve vyhodnotit jak nejlepe vysledky prezentovat pote vy-tvorit nastroj ktery mapy podle pozadavku upravı (generalizuje vizualizo-vane prvky) vygeneruje jednotlive mapove listy a jejich prehledku Dalevygeneruje seznam mapovych listu pro jednotliva povodı a dalsı potrebneudajeNastroj je psan v jazyce Python pro ArcGIS 100

12 Strucny souhrn

Prace se sklada z nekolika castı

1 Vytvorenı gridu - Tato cast je nejrozsahlejsı Jedna se o skript kterypro dana povodı vytvorı rozsah mapovych listu (tzv index grid layer)a do atributovych tabulek ulozı potrebne hodnoty viz dale

2 Generalizace obsahu mapy - Generalizace nakonec probehla velmijednoduse a to kategorizacı hodnot kumulovaneho smyvu

3 Uprava vzhledu a export - Tato cast byla provadena manualne varcgis layout view Po vytvorenı kyzeneho vzhledu pote probehlo ge-nerovanı jednotlivych mapovych listu pomocı toolbaru Data DrivenPages

2

2 Popis pracı

21 Nastroj pro tvorbu gridu

Tento nastroj vytvorı polygonovou vrstvu obsahujıcı grid a to podle zadanehomerıtka a velikosti mapoveho pole Do atributove tabulky gridu vlozı sloupecs nazvy mapovych listu a sloupec s cısly sekcı (bude vysvetleno dale) Zarovenprida do vstupnı polygonove vrstvy sloupec s cısly sekcı a sloupec s nazvymapovych listu na kterych se dany polygon (povodı) nachazı Dale vytvorıvrstvu nazev gridu dissolve pro prehledku sekcı

Pojem sekce Sekce je tvorena vsemi dotykajıcımi se polygony Mapovelisty jsou ke kazde sekci tvoreny zvlastrsquo a jejich nazvy jsou pote rozsıreny ocıslo sekce Prıklad cıslovanı mapovych listu 1-A1 1-A2 2-A1 2-A2

Obrazek 1 Vstupnı polygonova vrstva

3

Obrazek 2 Ocıslovane sekce polygonove vrstvy

211 Uvodnı dialog

Uvodnı dialog nastroje obsahuje pole pro 5 parametru

bull In - vstupnı parametr datovy typ Feature classVstupnı vrstva polygonu

bull Scale - vstupnı parametr datovy typ LongPozadovane merıtko

bull Map field width - vstupnı parametr s nastavenou defaultnı hodnotou25 datovy typ DoubleSırka vysledneho mapoveho ramce v cm

bull Map field height - vstupnı parametr s nastavenou defaultnı hodnotou30 datovy typ DoubleVyska vysledneho mapoveho ramce v cm

bull Out - vystupnı parametr datovy typ Feature classVystupnı vrstva gridu

4

Obrazek 3 Grid - Uvodnı dialog

212 Vysledny log

Kompletnı prıklad vysledneho logu je k nalezenı v prıloze 51Obsahuje tyto informace

bull Umıstenı pouzıvane databaze na disku

bull Dale v kazdem cyklu

ndash Poradove cıslo cyklu

ndash Aktualnı pocet nezpracovanych polygonu

ndash Cıslo vytvarene sekce

ndash Identifikatory polygonu tvorıcıch danou sekci

bull Pocet sekcı

bull Pocet mapovych listu v kazde sekci

213 Vysledne vrstvy

Vysledny grid pro merıtko 1 80 000 a defaultnı velikost mapoveho pole (25x 30 cm) vypada nasledovne

5

Obrazek 4 Grid - Vysledna vrstva

214 Cinnost nastroje podrobne

1 Prıpravne cinnostiV prvnıch radcıch kodu jsou vytvoreny pomocne promenne a pole znichz pro dalsı cinnost je potreba zmınit zasobnık IDs Ten je naplnenidentifikatory povodıPokud jiz neexistujı jsou ve vstupnı polygonove vrstve vytvoreny atri-butove sloupce hard ID section MapSheets

bull hard ID - Do tohoto sloupce byly zkopırovany identifikatory abyi po rozdelenı do nekolika vrstev mely polygony jednoznacny iden-tifikator

bull section - Po vypoctu sekcı sem bude pro kazdy polygon zapsanocıslo sekce ve ktere se nachazı

bull MapSheets - Atribut se seznamem mapovych listu na kterych sedane povodı nachazı

Ukazka tvorby atributoveho sloupce

fieldList = arcpyListFields(inFeatureClass rsquoMapSheetsrsquo)

6

fieldCount = len(fieldList)

if (fieldCount = 1)

arcpyAddField_management(inFeatureClass rsquoMapSheetsrsquo rsquoTEXTrsquo)

2 Hlavnı vypocetnı cast

Hlavnı cast je cela v cyklu while (len(IDs) gt 0) tj cyklus probıhadokud jsou v zasobnıku IDs hodnoty Na konci cyklu jsou vzdy identi-fikatory zpracovanych povodı ze zasobnıku mazany V kazdem prubehucyklu jsou selektovany povodı tvorıcı 1 sekci k takove sekci je potevytvoren grid a jsou plneny nove atributove sloupce

Ukazka hlavnıho cyklu

while len(IDs) gt 0

oznacenı povodı i-te sekce

rows_sel = arcpySearchCursor(rsquopovodi_classrsquo)

for row_sel in rows_sel

IDsremove(row_selOBJECTID)

V kazdem prubehu cyklu je zpracovana 1 sekce - tj shluk povodı kteremajı spolecnou cast hranice Sekce je tvorena na zaklade dotazu Se-lectByLocation s definicı BOUNDARY TOUCHES Dotaz se opakujev cyklu dokud se pocet oznacenych povodı zvetsuje K tomu slouzıpromenne matchcount1 matchcount2 ktere obsahujı pocet oznacenychpolygonu

Vytvorenı sekce

bull Oznacenı prvnıho nezpracovaneho polygonu

first_ID = str(IDs[0])

fieldName = OBJECTID

Query = + fieldName + = + first_ID

arcpySelectLayerByAttribute_management(rsquopovodi_classrsquo rsquoNEW_SELECTIONrsquo Query)

matchcount1 = int(arcpyGetCount_management(rsquopovodi_classrsquo)getOutput(0))

bull Prvnı prubeh SelectByLocation

7

arcpySelectLayerByLocation_management(rsquopovodi_classrsquo rsquoBOUNDARY_TOUCHESrsquo

rsquopovodi_classrsquo)

matchcount2 = int(arcpyGetCount_management(rsquopovodi_classrsquo)getOutput(0))

bull Dalsı prubehy SelectByLocation

while matchcount1 lt matchcount2

matchcount1 = matchcount2

arcpySelectLayerByLocation_management(rsquopovodi_classrsquo rsquoBOUNDARY_TOUCHESrsquo

rsquopovodi_classrsquo)

matchcount2 = int(arcpyGetCount_management(rsquopovodi_classrsquo)getOutput(0))

Oznacene polygony jsou ulozeny jako polygonova vrstva do vstupnı ge-odatabaze Tato vrstva je dale pouzita pro tvorbu gridu

Vytvorenı gridu

Pred samotnou tvorbou bylo potreba zjistit rozsah sekce Pokud bylasekce mensı nez 1 mapovy list bylo treba definovat souradnice polohylistu tak aby povodı lezelo na stredu listu Do zasobnıku byly nactenysouradnice lomovych bodu povodı a byly z nich vybrany maximalnı aminimalnı hodnoty Jejich rozdıl pak urcil rozsah sekce

Prıklad plnenı zasobnıku souradnicema

desc = arcpyDescribe(outputFeatureClassPath+rsquorsquo+output_name)

shape_field_name = descShapeFieldName

rows3 = arcpySearchCursor(outputFeatureClassPath+rsquorsquo+output_name)

mbr_X=[]

mbr_Y=[]

for row3 in rows3

Create the geometry object

feat = row3getValue(shape_field_name)

partnum = 0

for pnt in featgetPart(partnum)

mbr_Xappend(pntX)

mbr_Yappend(pntY)

partnum += 1

8

Vytvorenı gridu pote probıha budrsquo s definovanou nebo s nedefinovanoupolohou pocatecnıho mapoveho listu Pro vytvorenı gridu je pouzitafunkce GridIndexFeatures cartography

Ukazka

arcpyGridIndexFeatures_cartography(outputFeatureClassPath+rsquorsquo+grid_name

outputFeatureClassPath+rsquorsquo+output_name USEPAGEUNIT scale_str

sheet_width_str sheet_high_str str(grid_start_pnt_X)+rsquo rsquo+str(grid_start_pnt_Y))

Grid je tedy vytvoren pro jednu sekci Po vsech prubezıch cyklu jsoutakto vytvorene vrstvy gridu spojeny do jedne finalnı vrstvy V cyklujsou dale plneny nove atributove sloupce - cısla sekcı a nazvy mapovychlistu a to jak do nove (vystupnı) vrstvy gridu tak do vstupnı vrstvypovodı

3 Vytvorenı finalnıch vrstev tisk vysledku Jak bylo receno na zaverjsou spojeny jednotlive vrstvy gridu Vedle toho je vytvorena vrstvaspojenych mapovych listu po sekcıch - funkcı Dissolve - pro tvorbuprehledky Jsou vytisknuty vysledne hodnoty viz 212

22 Generalizace

Pro generalizaci byl napsan skript ktery nacıta liniovou vrstvu toku Tentoskript byl jiz psan na mıru podkladovym datum a pri nacıtanı je v nemvyuzito znalosti struktury danych podkladovych dat Skript k vrstve pripojıexternı tabulku a vytvorı atributovy sloupec kategorie Podle dat z externıtabulky pak plnı novy sloupec hodnotami 1 - 5 podle mnozstvı unasenehosedimentu Tato hodnota je pak pouzita pri vizualizaci datZajımavostı je ze pro nacıtanı musela byt tabulka indexovana viz 31

221 Uvodnı dialog

Uvodnı dialog obsahuje dva parametry

bull Input Feature Class Vstupnı liniova vrstva rıcnıch useku

bull Table Vstupnı tabulka obsahujıcı hodnoty rıcnıch splavnenin

9

222 Vysledny log

Vysledny log je k nahlednutı v prıloze 52 Obsahuje tyto informace

bull Pocet vsech rıcnıch useku

bull Pocet useku v jednotlivych kategoriıch

23 Finalnı upravy a export

Jak jiz bylo zmıneno finalnı vzhled mapoveho listu byl vytvoren manualne vLayout view a pomocı toolbaru Data Driven Pages Tento postup je casoveekonomictejsı a je jım dosazeno lepsıch vysledku dıky prehlednosti ToolbarData Driven Pages pak umoznuje vkladat dynamicke textove pole ktere seautomaticky menı s menıcım se mapovym listem Takovym polem je naprnazev mapoveho listu Stacı tedy definovat vzhled jednoho mapoveho listuv toolbaru Data Driven Pages navolit prıslusne pole - ty byly vytvorenynastrojem Grid viz 21 Dynamicky bylo potreba propojit s mapovym oknemi prehledku ktera byla vytvorena jako druhy Data Frame To se provedlo defi-novanım rozsahu podle hlavnıho mapoveho okna v Properties -iquest Data Frame-iquest Extant a definovanım Definition Query ve vlastnostech vrstvy Dalsım dy-namickym prvkem jsou oznacenı sousednıch mapovych listu a cıslo strankyNa takto sestavenou stranku s dynamickymi prvky bylo mozne pouzıt exportmapy do pdf a Atlas byl vygenerovanPrıklad dynamickeho textu pro nazev mapoveho listultdyn type=page property=PageNamegt

3 Problemy a moznosti rozsırenı

31 Pripojovanı externıch tabulek

Pri pripjovanı externıch tabulek musely byt indexovany hodnoty atribu-toveho sloupce pouziteho k parovanı To probehlo prıkazemarcpyAddIndex management (layer HydroID)Pripojenı tabulky musı probıhat k Feature layer Proto bylo nutne nejprve zFeature Class vytvorit Feature Layer1 Pote mohla byt tabulka pripojena

arcpyAddIndex_management (layer HydroID)

arcpyAddJoin_management(layer HydroID table Riverid)

1Rozdıl mezi Feature Layer a Feature Class je vysvetlen v prilozenem Tutorialu pro-gramovanı v Pythonu pro ArcGIS

10

Zde nastal problem s prıstupem k atributum Obecne nesmı nazvy atri-butovych sloupcu obsahovat mezery K hodnotam je pristupovano pres jed-notlive radky s parametrem nazev sloupce

rows= arcpySearchCursor(layer)

for row in rows

value=rownazev_sloupce

Pripojena tabulka ovsem mela v nazvech sloupcu mezeru K takto pojmeno-vanemu sloupci muselo byt pristupovano prıkazem getValue

rows= arcpySearchCursor(layer)

for row in rows

value=rowgetValue(rsquonazev tabulky$nazev sloupcersquo)

32 Doba behu tvorby gridu

Doba behu nastroje pro tvorbu gridu je znepokolive dlouha Bylo prove-deno merenı casu behu jednotlivych castı kodu funkcı time z modulu timeVysledky ukazaly ze nejdele trva vytvarenı novych vrstev Vrstva se muzevytvaret az 20 sekund Snaha o optimalizaci donutila nahradit vytvarenı vrs-tev s minimalnım ohranicujıcım obdelnıkem sekvencnım ukladanım souradniclomovych bodu polygonu z nichz pak funkcemi min a max byly tyto hodnotyzıskany Prubeh se tak urychlil o desıtky sekund (v jednom prubehu cyklupriblizne o 15 sekund) Dalsı moznostı bylo vyuzıt prostoroveho indexu datTato moznost nebyla vyuzita protoze ArcGIS pouzıva k prostorovemu in-dexovanı pravidelny grid Zıskanı MBR2 nebylo nalezeno Vyuzitı indexu byovsem problem neresilo Jak jiz bylo zmıneno nejdele trva vytvarenı novychvrstev Bohuzel funkce GridIndexFeatures cartography pro vytvorenı griduneumı pracovat se selektovanymi daty Tedy v kazdem cyklu musı byt ulozenapolygonova vrstva tvorıcı 1 sekci Pote mohla byt vytvorena vrstva tvorıcıgrid Tedy v kazdem prubehu cyklu jsou vytvareny 2 nove vrstvy Jelikozautor neprisel na zpusob jine optimalizace je nastroj pomaly Pro zadanydataset s 58mi povodımi jeho cinnost probıha desıtky minut

33 Moznosti rozsırenı

Do skriptu by se dal zakomponovat export seznamu mapovych listu pro kazdepovodı V soucasne verzi je tvoren exportem atributove tabulky

2minimum bounding rectangle - minimalnı ohranicujıcı obdelnık

11

4 Zaver

Byly vytvoreny nastroje pro automatizaci tvorby Atlasu pro mapy eroznıhosmyvu a transportu splavenin Tvorba Atlasu probıha v nekolika krocıchVizualizovane prvku jsou generalizovany Dale je vytvoren Grid ktery jepouzit jako indexova vrstva pro funkci Data Driven Pages Tou jsou vy-tvoreny jednotlive mapove listy Pomocı dynamickych prvku je pak vytvorenvzhled ktery se menı se zmenou mapoveho listu Nedostatkem je rychlostnastroje pro tvorbu gridu Presto ze je nastroj pomaly je zcela funkcnı Vprıpade potreby dalsıho rozsırenı bude ale vhodne vysledky nacıtat do novehonastroje Vzorovy vytisk vysledneho atlasu je prilozen Vzhledem k tomu zezpracovavana data jsou rozsahla a podlehajı autorskemu zakonu je vytvorenjen vzorovy vytisk z 6ti povodı Nastroje jsou psany v jazyce Python 26 proArcGIS 100 Pri praci byla vyuzıvana predevsım online napoveda ArcGISa diskuznı programatorska fora Kompletnı zdrojovy kod je ke stazenı nastrankach predmetu PIN2

12

5 Prılohy

51 Vysledny log tvorby gridu

Executing Grid

JAtlasvzorektemp_selectpovodi_vzorekgdbpokusne_povodi

70000 25 30 JAtlasvzorektemp_selectpovodi_vzorekgdbgrid70

Start Time Wed May 15 020551 2013

Running script Script2

Output folder JAtlasvzorektemp_selectpovodi_vzorekgdb

_____________________________________________________________________

count of basin polygon to process 6

_____________________________________________________________________

RUN 1

count of basins in 1 section 3

Their ID

ID 1

ID 3

ID 6

_____________________________________________________________________

count of basin polygon to process 3

_____________________________________________________________________

RUN 2

count of basins in 2 section 1

Their ID

ID 2

_____________________________________________________________________

count of basin polygon to process 2

_____________________________________________________________________

RUN 3

count of basins in 3 section 2

Their ID

ID 4

ID 5

----- RESULT -----

Number of sections 3

Number of map sheets

in section 1 13

in section 2 1

in section 3 2

Completed script Grid

Succeeded at Wed May 15 021359 2013 (Elapsed Time 8 minutes 8 seconds

13

52 Vysledny log generalizace

Executing generalization JAtlasvzorek2011_NAZV_nadrze2011_watemsedem

NAZV_tokyVT28_finshp

JAtlasvzorek2011_NAZV_nadrze2011_watemsedem28_vypocet

projectriversedimentxlsxprojectriversediment$

Start Time Wed May 15 075624 2013

Running script generalization

Category created

Total count of river parts 2879

Count of category 1 2428

Count of category 2 118

Count of category 3 68

Count of category 4 20

Count of category 5 245

Completed script generalization

Succeeded at Wed May 15 075638 2013 (Elapsed Time 1400 seconds)

14

CESKE VYSOKE UCENI TECHNICKE V PRAZE

FAKULTA STAVEBNI

OBOR GEODEZIE A KARTOGRAFIE

Dokumentace k projektu informatika 2

Stanovenı smeru odtokuna rastrovem digitalnım modelu

a implementace algoritmudo prostredı ArcGIS

BC JAN ZAJICEK

5 cervna 2013

Obsah

Obsah 1

1 Uvod 2

2 Nejbeznejsı existujıcı algoritmy 3

3 Flow Direction D8 431 Obecny princip D8 432 Popis algoritmu D8 5

4 Popis algoritmu MDinfin 641 Obecny princip MDinfin 642 Technicke resenı MDinfin 8

5 Vysledky 1151 Realna data - Bykovice 1152 Realna data - Nucice 12

6 Zaver 13

Reference 14

7 Prılohy 1571 Bykovice a Nucice vstupnı DMT rastry 1572 Bykovice vysledky 1673 Nucice vysledky 17

1

1 Uvod

Tato dokumentace byla zpracovana v ramci predmetu Projekt Informatika 2Semestralnı prace bude pouzita jako z jedna castı autorovi diplomove praces nazvem SMODERP 2D rozsırenı resıcı vztahy soustredeneho a plosnehoodtoku na danem uzemı Duvodem zpracovanı tohoto tematu byla potrebapouzitı v diplomove praci vıce nez jednoho algoritmu pro urcenı smeruodtoku v prostredı ArcGIS V soucasne dobe ArcGIS vyuzıva algoritmusD8 viz kapitola 3 jako jediny algoritmus pro vypocet smeru odtoku Tentoalgoritmus je soucastı Hydrology tools Nastroje ze skupiny Hydrology sepouzıvajı k modelovanı chovanı toku vody na povrchu Nejbeznejsı pouzıvanadigitalnı data povrchu Zeme jsou rastry digitalnı modelu terenu DMT slozenez jednotlivych bunek pixelu Tyto DMT rastry jsou pouzity jako vstupypro ruzne charakteristiky povrchu DMT rastr je souvisly povrch obvykleodkazujıcı na povrch Zeme Presnost dat je dana rozlisenım rastru taktezvzdalenostı mezi body rastru Informace o tvaru zemskeho povrchu je uzitecnapro mnoho oboru jako je napr zemedelstvı lesnictvı zivotnı prostredı neboregionalnı planovanı Tyto obory vyzadujı pochopenı jak voda tece v ramciuzemı a jak zmeny na tomto uzemı nasledne ovlivnı jejı tok

Cılem projektu bylo naprogramovat algoritmus ktery v roce 2007 publiko-vali Jan Seibert a Brian L McGlynn s nazvem MDinfin [1] Tento algoritmusje vylepsenım stavajıcıch algoritmu pro resenı urcenı smeru odtoku na ras-tru viz kapitola 2 Pro overenı spravnosti vysledku byla pouzita realnadata dvou pozemku u obcı Bykovice a Nucice Testovanı probıhalo na ras-trech o rozlisenı 5 metru Algoritmus byl naprogramovan v jazyce Pythonv prostredı NetBeans IDE 69 Pro spustenı v ArcGISu je potreba pridatdo prostredı vytvoreny toolbox upravit aktualnı cestu ke skriptu mainpya tento model nasledne spustit Vstupem modelu je rastr DMT a vystupnıadresar do ktereho se po dobehnutı modelu ulozı vysledny rastr s hodnotamismeru odtoku 1255 Algoritmus MDinfin je testovan na verzi ArcGIS 100Na nejnovejsı verzi ArcGIS 101 ktera vysla v cervnu 2012 nenı overenakompatibilita algoritmu v dusledku nefunkcnosti vıce nez jedne verze tohotoprogramu na jednom pocıtaci

2

2 Nejbeznejsı existujıcı algoritmy

Existujı tri nejbeznejsı algoritmy kazdy odlisne resıcı problematiku odtokuvody z rastru do sousednıch bunek Prvnım z nich je algoritmus D8 z roku1984 Algoritmus je podrobne popsan v nasledujıcı kapitole 3 Jelikoz odtoknastava vzdy jen do jedne sousednı bunky dochazı casto ke koncentracivodnıch sıtı a sıtrsquo odtoku pak neodpovıda skutecnosti Na druhou stranuje jeho vyhodou jeho jednoduchost a fakt ze nedochazı k nechtene disperzijako je tomu u druheho algoritmu

Druhym algoritmem je MD8 neboli multiple flow direction algorithm MD8algoritmem je voda odvadena do vsech nıze polozenych sousednıch buneka pomer vody je rozdelen procentualne podle sklonu Ve vysledku ma algo-ritmus tendenci vytvaret vıce realisticke prostorove sıte toku nez D8 tımze nedochazı k takove koncentraci vody v sıti U D8 ma mnohem vetsıvliv maly rozdıl vysek mezi sousednımi bunkami na to ktera bunka prijmeveskerou vodu Pouzitım MD8 tyto male vyskove rozdıly nemajı zdalekatakovy vliv jelikoz je mnozstvı vody rozdeleno pomerem mezi tyto bunkyNejvetsı nevyhodou tohoto algoritmu je jeho prılisna disperze na konver-gentnıch svazıch v dusledku odtoku do vsech nıze polozenych bunek

V roce 1997 byl navrzen algoritmus pojmenovany Dinfin Davidem G Tar-botonem z americke univerzity v Utahu Byl navrzen prıstup ktery je zalozenna osmi trojuhelnıkovych ploskach viz obrazek 3 Dıky tomuto postupu jsouodstraneny limitace v podobe moznosti pouze osmi smeru odtoku z bunkyProto je algoritmus pojmenovan Dinfin jelikoz muze nastat nekonecne moznostıvysledneho smeru odtoku Tento prıstup umoznuje pouze jeden smer odtokurozdeleny mezi jednu nebo dve bunky v zavislosti na smeru odtoku

Poslednı dva zmınene algoritmy MD8 a Dinfinmajı oproti D8 nevyhodu ve vetsıcasove narocnosti vypoctu V kapitole 4 je popsan algoritmus MDinfin kteryvyuzıva vyhody MD8 algoritmu za pouzitı trojuhelnıkovych plosek obdobnejako Dinfin algoritmus

3

3 Flow Direction D8

Pro pochopenı problematiky a zjevnost rozdılu mezi algoritmy je vhodneuvest jak funguje nastroj ktery pouzıva ArcGIS Zaklad algoritmu MDinfino nemz pojednava tato dokumentace je zalozen na podobnych postupech

31 Obecny princip D8

Princip nastroje urcenı smeru odtoku (Flow Direction) ktery pouzıva prostredıArcGIS je nasledujıcı Tento nastroj (tool) vezme vstupnı rastr digitalnıhomodelu terenu neboli vyskovy rastr Provede vypocet jehoz vystupem jerastr ktery v kazde bunce rastru obsahuje hodnotu urcujıcı smer odtokuz teto bunky Hodnot je osm podle osmi sousednıch bunek do kterych muzeodtekat voda viz obrazek 1 Prave podle osmi smeru odtoku se tento prıstupnazyva D8 (eight-direction approach)

Obrazek 1 Flow Direction D8 [3]

4

32 Popis algoritmu D8

Samotny vypocet algoritmu je v zasade primitivnı Pro vsechny sousednıbunky se vypocte maximalnı sklon [3]

maximalnı sklon = rozdıl vysek vzdalenost 100

Rozdıl vysek je rozdıl vysky v aktualnım bode a konkretnı sousednı bunkyVzdalenost je vypoctena mezi stredy bunek a lisı se v zavislosti na polozesousednı bunky Pro bunky sousedıcı vrcholem je hodnota velikosti pixeluprenasobena o odmocninu ze dvou Pro zbyle bunky sousedıcı hranou jevelikost vzdalenosti rovna velikosti pixelu Po nalezenı nejstrmejsıho smeruodtoku je hodnota ulozena v podobe bitove hodnoty reprezentujıcı danysmer Pred pouzitım nastroje Flow Direction se obvykle zpracuje vstupnırastr pomocı nastroje Sink Tento algoritmus zaplnı bezodtoke oblasti rastrunejnizsı hodnotou z okolı a do teto nejnizsı sousednı bunky pak posle voduPote jiz nemuze dojıt k situaci kdy vsechny sousednı bunky k dane buncemajı vyssı hodnoty vysek a nedochazelo by tedy k odtokuVysledny rastr nemusı obsahovat pouze bunky s hodnotami 202127 [4]Jestlize nastane situace kdy ma vıce sousednıch bunek nejnizsı hodnotuvysek pak je vysledna hodnota souctem vsech smeru Napr hodnota maximalnıhosklonu bude stejna pro sousednı bunku vlevo a nahore odtok tedy budesmerem na zapad (hodnota = 16) a na sever (hodnota = 64) vysledna hod-nota bude souctem 16 a 64 tedy 84

5

4 Popis algoritmu MDinfin

41 Obecny princip MDinfinObecny postup je prevzat z [1] Stejne jako v prıpade algoritmu Dinfin bylyzavedeny trojuhelnıkove plosky pro vypocet lokalnıho sklonu a smeru pro kazdoutrojuhelnıkovou plosku Okolo stredoveho boduM bylo vytvoreno osm trojuhelnıkuviz obrazek 3 Kazdy se zbyvajıcımi dvema vrcholy P1 P2 ve dvou sousedıcıchbunkach Pro kazdy z techto trojuhelnıku je vypocten smer nejvetsıho sklonuPokud oznacıme vysky bodu M P1 P2 jako hM hP1 hP2 rozdıly vysek sevypoctou takto

z1 = hP1 minus hM z2 = hP2 minus hM (1)

Obdobne se vypoctou rozdıly v x-ovych a y-ovych souradnicıch Po vypocturozdılu jednotlivych souradnic je vypocten normalovy vektor

n =

nx

ny

nz

=

z1y2 minus z2y1z1x2 minus z2x1y1x2 minus y2x1

(2)

Smer odtoku d a sklon s na trojuhelnıkove plose se vypocte pomocı rovnice3 Hodnota nula pro d oznacuje smer osy y a hodnota 3π2 oznacuje smerosy x

d =

0 nx = 0 ny ge 0

π nx = 0 ny lt 0

π2minus arctan(

ny

nx

) nx gt 0

3π2minus arctan(

ny

nx

) nx lt 0

(3)

s = minus tan

(arccos

(nzradic

n2x + n2

y + n2z

))(4)

Jestlize nejvetsı sklon od bodu M je mimo rozpetı 0-45 (π4 radian) jepouzit sklon strmejsı k jednomu z bodu P1 P2 a zaroven i sklon je spoctenk tomuto bodu V prıpade ze oba sousednı body jsou vyse polozeny nez bodM smer nenı pro tento trojuhelnık uvazovan Po spoctenı vsech osmi smerua sklonu pro jednotlive plosky jsou tyto smery povazovany za lokalne ne-jstrmejsı pro kazdy trojuhelnık v rozsahu 45 Smery vedoucı prımo do bodu

6

P1 nebo P2 tedy ty kde d = 0 nebo d = π4 jsou uvazovany pouze vprıpade kdy obe vedlejsı sousednı bunky majı smer k bodu P1 nebo P2Tato situace je znazornena na obrazku 2

Obrazek 2 Ukazka urcenı smeru odtoku z bunky [1]

Prvnı prıpad je smer mırıcı mezi bunky 5 a 6 Druhy prıpad je smer kteryvede prımo do bunky 3 Tato situace nastane jestlize pro trojuhelnık M43vyjde lokalnı smer d = π4 a pro trojuhelnık M32 smer vyjde d = 0Pote co je smer odtoku pro bunku vypocten je celkovy odtok rozdelendo vsech vyslednych smeru na zaklade sklonu Resenı teto problematiky jevıce popsano v sekci 42 Pro smery mırıcı mezi body P1 a P2 je odtokrozdelen do dvou bunek na zaklade nevejtsıho sklonu Pomer odtoku do buneks body P1 a P2 bude v tomto poradı α245 a α145

Obrazek 3 Trojuhelnıkove plosky [1]

7

42 Technicke resenı MDinfinVyse jiz bylo zmıneno ze algoritmus je napsan v jazyce Python Algoritmusje rozdelen do dvou skriptu Prvnı z nich obsahuje funkce a druhy je hlavnıVstupem do modelu je rastr digitalnıho modelu terenu a vystupnı adresardo ktereho se ulozı finalnı rastr smeru odtoku viz obr 4 Po nactenı rastruze vstupnıch parametru je tento rastr preveden na matici NumPy pomocıfunkce

arcpy RasterToNumPyArray ( InputRaster )

NumPy [5] je rozsırenı programovacıho jazyka Python je to balıcek uzıvanypro vedecke vypocty Umoznuje podporu velkych multi-dimenzionalnıch polıa matic spolu s velkou knihovnou matematickych funkcı pro praci s temitopoli

Algoritmus cyklem projızdı vsechny prvky matice a u tech ktere majı hod-notu ruznou od NoData nalezne okolı Hledanı okolı bunky provadı funkceneighbors ta je definovana takto

def ne ighbors ( i j array x y ) return nb1 nb2 nb3 nb4 nb5 nb6 nb7 nb8

Vstupem funkce je pozice v matici dale cela matice a jejı rozmery Funkceneighbors vypocıta hodnoty vysek sousednıch osmi bunek a vratı je na vystup

Obrazek 4 Dialogove okno nastroje MDinfin

Vystup z funkce neighbors slouzı jako jeden z vstupnıch parametru pro dalsıfunkci

8

Funkce byla pojmenovana dir slope jelikoz jejım vystupem je smer odtokua sklon tohoto smeru

def d i r s l o p e ( pointM nbrs vpix sp ix ) return d i r e c t i o n s l ope

Pro kazdy trojuhelnık byla spoctena hodnota d viz vzorec 3 Hodnota s bylapo spatnych a nelogickych vysledcıch pocıtana podle jineho vzorce ktery jizdaval spravne vysledky

s0 =

radicz212y21

+z22y22

(5)

Vzorec se lisı pro kazdy trojuhelnıcek uvedeny je pro vypocet sklonu kdy sousednıbunka je severozapadnı a severnı Tımto postupem bylo zbytecne pocıtatz-tovou slozku vekotoru n vzorec 2 Byly osetreny prıpady kdy sousednıbunky aktualnıho pocıtaneho trojuhelnıku jsou obe vyse polozene nebo obemimo rastr (NoData) Dalsı prıpad nastane jestlize je jeden bod vne rastra druhy v rastru lezı Smer je potom urcen prımo do toho bodu ktery nalezırastru Taktez i sklon je pocıtan pouze mezi tımto bodem a bodem M Lokalnı smer d v kazde plosce po vypoctenı nesmı prekrocit 45 V situacize tuto hodnotu prekrocı je smeru prirazena hodnota 0 nebo 45 v zavislostina vzajemnem porovnanı vysek bodu v trojuhelnıku Takto jsou zpracovanyvsechny plosky a je zjisteno zda-li do kazdeho trojuhelnıku nastava smerodtoku nebo ne Na konci funkce dir slope se kontroluje prıpad kdy smersousednıch trojuhelnıku odkazuje presne do stejneho bodu tedy hodnotysmeru musı byt pro prvnı trojuhelnık d = 45 a pro nasledujıcı sousednıtrojuhelnık d = 0 Vystupem funkce jsou dva vektory o osmi prvcıch smera sklon pro kazdou plosku

Dalsı fazı vypoctu je zjistenı pomeru vody ktera potece do jednotlivychsmeru K vypoctu pomeru byl pouzit tento vzorec [2]

fi =sxi8sum

j=1

sxj

(6)

kde s vyznacuje sklon vypocteneho smeru konkretnı trojuhelnıkove ploskya x je promenny exponent Pokud by byl exponent zvolen 1 bude vyslednasıtrsquo obdobna jako pri pouzitı MD8 algoritmu Pri zvetsovanı exponentu xk nekonecnu bude sıtrsquo stejna jako pri pouzitı D8 metody Vychozı hodnotaexponentu byla zvolena x = 4 coz je kompromis mezi obema variantami

9

Zmena exponentu se v soucasne podobe neprojevı na vyslednem rastru je-likoz vysledek prezentuje pouze smer odtoku a ne procentualnı cast Tohotopomeru bude vyuzito az pri spojenı skriptu s 2D modelem SMODERP

V dalsı casti vypoctu je rozdelen jiz zjisteny pomer z celkoveho odtokudo dvou prıpadne pouze do jedne bunky v zavislosti na smeru odtoku dVe vysledku je vypocten vektor osmi cısel kde kazda hodnota od 0 do 1prestavuje jiz procentualnı pomer z celkoveho odtoku do kazde sousednıbunky

Pro vyslednou reprezentaci smeru odtoku na vystup byl pro kazdou bunkuvytvoren vektor obsahujıcı 1 a 0 rıkajıcı zda nastava ci nenastava odtokdo sousednı bunky Tento vektor byl preveden na celocıselnou hodnotu po-mocı funkce bool2int

def boo l 2 i n t ( x ) y = 0for i j in enumerate ( x )

i f j y += 1ltlt ireturn y

Funkce ma na vstupu vektor jedicek a nul Naprıklad pro vektor 00000111kdy voda tece na severozapad sever a severovychod se funkce chova taktoJe testovano jestli platı j = 1 tedy prvnıch pet nul vektoru funkce preskocıa pro prvnı jednicku se pricte k promenne y 20 v dalsım kroku 21 a v poslednım22 Operator vyjadruje totiz bitovy posun smerem doleva Vysledkem jena vystupu cıslo y = 1 + 2 + 4 = 7

Pro vsechny bunky byla vypoctena hodnota reprezentujıcı smer odtoku Tatohodnota se ulozı do matice a ta se nasledne prevede na vysledny rastr

f l o w d i r = arcpy NumPyArrayToRaster ( value LLcorner spix vpix rdquordquo )

value hodnota reprezentujıcı smer odtokuLLcorner souradnice leveho dolnıho rohuspix sırka pixeluvpix vyska pixelu

10

5 Vysledky

Algoritmus MDinfin byl testovan na skutecnych datech dvou pozemku u obcıNucice ve Stredoceskem kraji a Bykovice v kraji Jihomoravskem rastry jsouv prıloze 71 Oba dva rastry jsou o rozlisenı 5 metru Finalnı rastry jsouporovnavany s rastry vytvorenymi v prostredı ArcGIS nastrojem Flow Di-rection metodou D8

51 Realna data - Bykovice

Vysledne rastry Flow Direction pro uzemı Bykovice jsou uvedeny v prıloze72 Oba rastry byly pro hodnoty 202127 obarveny shodnou barvou kvulilepsı nazornosti a porovnatelnosti vysledku Rastr ktery obsahuje z celkovehopoctu 44807 bunek celkem 23655 bunek s hodnotami vysek po probehnutıalgoritmy dal nasledujıcı vysledky

FD D8 MDinfin1 3650 7372 666 9174 207 188 21 716 94 3732 791 8564 8818 1045128 9408 14983sum

23655 14983

Tabulka 1 Tabulka porovnanı obou algoritmu pro rastr Bykovic

FD je zkratka pro Flow Direction cili smer odtoku reprezentovany celocıselnouhodnotou Ostatnı hodnoty u vysledneho rastru na ktery byl pouzit algorit-mus MDinfin jsou v rozpetı 0246 V rozmezı hodnot smeru odtoku 246255se nevyskytujı zadne bunky Cas potrebny pro vykonanı skriptu byl v prıpadeD8 4 vteriny Pro algoritmus MDinfin byl cas 15 vterin

11

52 Realna data - Nucice

Vysledne rastry jsou uvedeny v prıloze 73 Opet bylo pouzito shodne obar-venı pro zakladnı smery u obou rastru Rastr Nucice obsahoval data na 82732bunkach z celkove poctu 125449 bunek Vysledky jsou pro prehlednost uve-deny v tabulce

FD D8 MDinfin1 12186 12332 12441 87034 16907 10278 9826 1642316 2516 28832 5010 241764 7788 366128 16058 25475sum

82732 55932

Tabulka 2 Tabulka porovnanı obou algoritmu pro rastr Nucic

Ostatnı hodnoty u vysledneho rastru na ktery byl pouzit algoritmusMDinfin jsou v rozpetı 0255 Cas potrebny pro vykonanı skriptu byl v prıpadeD8 6 vterin Pro algoritmus MDinfin byl cas 50 vterin

12

6 Zaver

Cılem projektu bylo vytvorit funkcnı skript obsahujıcı algoritmus pojmen-ovany MDinfin [1] ktery resı odtok do sousednıch bunek rastru Algoritmusbyl napsan v programovacım jazyce Python a testovan na realnych datechVysledky byly mırnym prekvapenım kdy zejmena hodnoty smeru 128 tedyseverovychodnıho se vyskytovaly ve vysledku velmi casto viz tabulky 1 a 2Predpokladem bylo ze se odtok rozlozı do vıce smeru a pocet bunek s hod-notami zakladnıch smeru 1248163264 a 128 bude mene nez v prıpade al-goritmu D8 K rozkladu do vıce smeru sice doslo ale pocet nekterych bunekse zakladnımi smery byl vetsı u algoritmu MDinfin

Co se tyce delky doby behu algoritmu je algoritmus MDinfin pomalejsı viz casyv kapitole 5 nez D8 z nekolika zrejmych duvodu Predevsım algoritmus D8provadı mnohem mene pocetnıch operacı z duvodu jeho mensı slozitostiviz 3 Dalsım duvodem je take rozdıl v jazyce ve kterem jsou oba algo-ritmy napsany D8 je napsan v programovacım jazyce C++ ktery na vetsıchdatech je mnohonasobne rychlejsı nez Python Prepsanım algoritmu MDinfindo jazyka C++ by mohla byt cesta k budoucımu zvysenı rychlosti pracealgoritmu

13

Reference

[1] SEIBERT Jan McGlynn BL A new triangular multiple flow di-rection algortihm for computing upslope areas from gridded digi-tal elevation models [online] [cit 13 5 2013] Dostupne ke stazenız URL lthttpciteseerxistpsueduviewdocdownloaddoi=101179977amprep=rep1amptype=pdfgt

[2] HOLMGREN Peter Multiple direction algortihms for runoff modellingin grid based elevation models An empirical evaluation [online] [cit13 5 2013] Dostupny z URL ltftpwwwlwrkthseCommonUllaMFor_Imran[1994]20holmgren20-20multiple20flow

20direction20algorithms20for20runoff20modelling20in

20grid20based20elevation20modelspdf gt

[3] ESRI ESRI WebHelp - How Flow Direction works [online] [cit13 5 2013] Dostupne z URL lthttphelparcgiscomenarcgisdesktop100helpindexhtml009z00000063000000

htmgt

[4] ESRI ESRI Webhelp - Flow Direction (Spatial Analyst) [online][cit 13 5 2013] Dostupne z URL lthttphelparcgiscomenarcgisdesktop100helpindexhtml009z00000052000000

htmgt

[5] WIKIPEDIA NumPy [online] [cit 13 5 2013] Dostupne z URLlthttpenwikipediaorgwikiNumPygt

[6] INFORMIT Working with operators [online] [cit 13 5 2013] Dos-tupne z URL lthttpwwwinformitcomarticlesarticleaspxp=2002831ampseqNum=6gt

14

7 Prılohy

71 Bykovice a Nucice vstupnı DMT rastry

Obrazek 5 DMT Bykovice

Obrazek 6 DMT Nucice

15

72 Bykovice vysledky

Obrazek 7 Flow Direction D8

Obrazek 8 Flow Direction MDinfin

16

73 Nucice vysledky

Obrazek 9 Flow Direction D8

Obrazek 10 Flow Direction MDinfin

17

Page 2: pro zac ate cn kygeo.fsv.cvut.cz/gdata/2013/pin2/e/dokumentace/... · 2013-06-05 · CESK E VYSOK E U CEN I TECHNICKE V PRAZE FAKULTA STAVEBN I OBOR GEODEZIE A KARTOGRAFIE Dokumentace

Obsah

1 Uvod 211 Poznamka ke kompatibilite 212 Moduly 2

2 Jak zacıt skriptovat 221 Zalozenı noveho skriptu 222 Obecne poznatky pro psanı skriptu 5

221 Vybrane syntakticke zasady Pythonu 5222 Help 6223 Nactenı vstupnıch parametru 6224 Vypisy zprav a atributovych typu 7225 Prıstup k prvkum atributove tabulky 7226 Nastavenı pracovnıho adresare a prace s pozicemi na

disku 8227 Prace s Feature Class a Feature Layer 8228 Seznam parametru 9229 Testovanı existence atributoveho sloupce 92210 Balıcek NumPy a jeho pouzitı 10

3 Zaver 11

1

1 Uvod

Tato dokumentace by mela slouzit jako manual pro zacatecnıky kterı chtejızacıt psat skripty v prostredı ArcGIS verze 100

11 Poznamka ke kompatibilite

Na uvod jen par zakladnıch informacı o skriptovanı v ArcGISKazda nova verze ArcGIS ma integrovanou nejnovejsı verzi Pythonu Stejnetak se vyvıjı i moduly potrebne k vyuzıvanı ArcGIS funkcı v Pythonu Tobohuzel neumoznuje zpetnou kompatibilitu Napr zde byl vyuzıvan ArcGIS100 a Python 26 Pri vyhledavanı informacı a navodu je dobre mıt totona pameti a vyuzıvat zejmena zdroje odkazujıcı na ctenarovu aktualnı verziprostredı ArcGIS

12 Moduly

Pri skriptovanı v ArcGIS musıme implementovat i dalsı zadoucı modulyJednım z nejdulezitejsıch modulu je ArcPy ktery pod sebou zahrnuje stan-dardnı toolboxy v ArcGISu Jeho cılem je vytvorit uzitecny a produktivnızpusob jak provest geografickou analyzu dat konverze dat a spravu datDalsım velice vyznamnym modulem je balıcek NumPy uzıvany pro vedeckevypocty Umoznuje podporu velkych multi-dimenzionalnıch polı a maticspolu s velkou knihovnou matematickych funkcı pro praci s temito poliModul Math podporuje praci s matematickymi funkcemi a objekty Naprgoniometricke funkce konstanty atd Dalsım uzitecnym modulem muze bytOs Sys a String String umoznuje praci s textovymi retezci Napr funkciprint Os a Sys podporujı mj praci se systemovymi operacemi Napr praces pozicemi na disku apod Vsechny moduly se zavolajı pomocı funkce importNapr import arcpy zprıstupnı knihovny v balıcku arcpy

2 Jak zacıt skriptovat

21 Zalozenı noveho skriptu

Nejprve je potreba v libovolnem adresari zalozit soubor s prıponou py Tentosoubor bude obsahovat zdrojovy kod Kod muzeme editovat jak v externımIDLE tak v IDLE integrovanem v instalaci ArcGIS jmenujıcı se PythonWinV kazdem prıpade je vhodne toto prostredı v ArcGIS urcit aby mohl ArcGISs editorem spolupracovat

2

1 Nastavenı editoru v ArcGIS - Geoprocessing rarr Geoprocessing op-tionsZde v poli Geoprocessing tool rarr editordebugger zvolıme nami pre-ferovany editor Zada se cesta k exe souboru programu PythonWin

Obrazek 1 Nastavenı editoru a debuggeru

Nynı pri volbe editace skriptu prımo v ArcGIS se nam zdrojovy kodotevre v danem editoru viz nıze

3

2 Vytvorenı nastroje (tool) Nove toolboxy a nastroje se vytvarejıstejne jako jine objekty v ArcGIS - tedy v ArcCataloguNovy toolbox se vytvorı po kliknutı pravym tlacıtkem mysi na ad-resar ToolboxesMy Toolboxes a zvolenı polozky New rarr Toolbox V ta-kovemto uzivatelskem Toolboxu muzeme pridat skript Opet pres pravetlacıtko mysi Add rarr Script najdeme soubor py do ktereho budemepsat zdrojovy kod Nynı pri opetovnem zapnutı ArcGIS stacı najıt vArcCatalogu tento skript kliknout pravym a zvolit Edit Zdrojovykod se automaticky otevre v definovanem editoru

Obrazek 2 Vytvorenı noveho toolboxu

Pri pridavanı skriptu muzeme zadavat vstupnı a vystupnı parametryTento krok muzeme preskocit a editovat tyto parametry pozdeji

4

Obrazek 3 Pridanı skriptu

3 Editace vstupnıch a vystupnıch parametru Pro editaci parametruklikneme pravym na skript v ArcCatalogu a zvolıme Properties Zdemuzeme mimo jine editovat i cestu k souboru py V zalozce Parametersje seznam parametru Po kliknutı na parametr se ve spodnım okne ob-jevı jejich atributy z nichz nejdulezitejsı je Direction tj zda-li se jedna ovstupnı nebo vystupnı parametr Vyznam dalsıch atributu je jasny z je-jich nazvu a nabıdky jejich hodnot Pri definovanı parametru je potrebazvolit spravny datovy typ parametru z preddefinovane nabıdky

5

Obrazek 4 Editace parametru

22 Obecne poznatky pro psanı skriptu

Pred psanım skriptu je samozrejme zadoucı si nejprve osvojit zakladnı syntaxiPythonu Pote muzeme psat skript pro ArcGIS Protoze uvod do Pythonuje perfektne zpracovan v mnoha dokumentech zde jen strucne uvedeme parzasad

221 Vybrane syntakticke zasady Pythonu

Python rozeznava bıle znaky Napr telo cyklu je oznaceno pouze odsa-zenım tabulatorem V C++ by funkce bılych znaku byla nahrazena slozenymizavorkami Python rozlisuje velka a mala pısmena Komentare se znacı oznacujecely radek Vıceradkovy komentar nenı moznyPole je nejprve nutne inicializovat pak je mozne plnit jej pomocı indexuDalsı informace jsou pekne sepsany napr zde httpwwwsallyxorgsallypythonindexphp

222 Help

Pro uvod do skriptovanı v ArcGIS je nejvyznamnejsım pomocnıkem Helpprımo od spolecnosti ESRI

6

httphelparcgiscomenarcgisdesktop100helpHelp je v anglictine a je zde prehledne popsana hledana funkce a jejı pouzitı jedemonstrovano na ukazce kodu coz je obrovskou vyhodou pro porozumenıjak dana funkce pracuje a funguje

223 Nactenı vstupnıch parametru

arcpyGetParameterAsText(index)

Indexy v Pythonu zacınajı od 0 a zde oznacujı poradı parametru jak byldefinovan v ArcCataloguVzdy je potreba parametr ulozit do nejake promenne tedy spravna syntaxebude

NazevPromenne = arcpyGetParameterAsText(0)

Stejne tak vytvorıme promennou ktera bude reprezentovat vystupnı para-metr Do teto promenne pak ukladame vysledek

PRIKLADSkript ktery zkopıruje shapefile a ulozı jej pod uzivatelem zvolenym nazvemdo zvoleneho adresare

import arcpy

inShapefile = arcpyGetParameterAsText(0)

outShapefile = arcpyGetParameterAsText(1)

arcpyCopy_management (inShapefile outShapefile)

224 Vypisy zprav a atributovych typu

Pro jakykoliv textovy vystup do vysledneho dialogu se pouzıva funkce Ad-dMessage() Pokud chceme touto funkcı vypsat hodnotu atributu nebo jinepromenne ktera nenı datoveho typu string pouzijeme pretypovanı str(promenna)Pro zjistenı atributu objektu se casto vyuzıva funkce Describe ktera umoznıpraci s mnozstvım atributovych typu PRIKLAD

import arcpy

inShapefile = arcpyGetParameterAsText(0)

ShpShapeType = arcpyDescribe(inShapefile)shapeType

7

arcpyAddMessage(Shape Type + str(ShpShapeType))

Na prıkladu je demonstrovano jak vypsat typ vstupnıho rastruVedle vypisu zpravy AddMessage existujı jeste vypis varovanı AddWarning(text je zvyrazneny) a vypis chybove hlasky AddError (beh programu seukoncı ve vyslednem dialogu v ArcGIS se vypıse dana hlaska a vypocet jevyhodnocen jako neuspesny)

225 Prıstup k prvkum atributove tabulky

K prvkum atributove tabulky se dostaneme pomocı funkce SearchCursor Tanam vytvorı pole ntit (jednotlivych radku) tabulky Ty se pak dajı kromeindexovanı prochazet napr cyklem for V tomto cyklu muzeme porovnavathodnoty atributu s hledanou hodnotou atributu Tu nalezneme jako ntitanazev atributuV prıkladu je to formule rowPOINT XHodnota FID je hodnota zadana uzivatelem ntity jsou body z shapefilu Kodv prıkladu ulozı souradnice bodu do polı X Y

PRIKLAD

import arcpy

inShapefile = arcpyGetParameterAsText(0) typu shapefile

FID_P1 = arcpyGetParameterAsText(1) typu long

FID_P2 = arcpyGetParameterAsText(2) typu long

inicializace dvouprvkovych polı a pomocne promenne

X = [00]

Y = [00]

a=0

for row in rows

if i==int(FID_P1) or i==int(FID_P2)

X[a] = mathradians(rowPOINT_X)

Y[a] = mathradians(rowPOINT_Y)

a = a+1

i = i+1

Pokud bychom nehledali ntitu podle FID ktere tvorı vzdy posloupnost prirozenychcısel muzeme promenne i priradit mısto cısla naprıklad jmeno mesta i =

8

rowName Pak by ovsem vstupnı parametr musel byt typu String byl bypovinny a neobsahoval by prednastavene hodnoty

226 Nastavenı pracovnıho adresare a prace s pozicemi na disku

Pokud nenı nastaven pracovnı adresar (tzv workspace) ArcGIS automa-ticky nabızı cestu k vystupnım parametrum podle parametru vstupnıch De-faultne je nastavena cesta k systemove geodatabazi ArcGISu DefaultgdbPokud chceme toto zmenit muzeme pracovnı adresar nastavit prıkazem

arcpyenvworkspace = cesta

Pracovnı adresar muze byt slozka i geodatabaze

227 Prace s Feature Class a Feature Layer

Nektere funkce pracujı s Feature Class a nektere s Feature Layer Nekterefunkce umı pracovat s obema typy dat Musıme se tedy rozhodnout kteradata pouzıt a popr je vytvoritRozdıl mezi temito typy je v tom ze Feature Class jsou data ulozena pevnena disku Tedy naprıklad shapefile nebo vrstva geodatabaze Typ FeatureLayer je uchovavan v pameti pocıtace a obsahuje aktualnı situaci vrstvyPredevsım tedy pouze selektovane prvkyChceme-li mıt prıstup k selektovanym prvkum musıme vzdy pouzıt typ Fe-ature Layer PRIKLAD

Chceme-li naplnit zasobnık identifikatory vsech prvku vrstvy nezavisle natom jestli jsou nektere oznaceny pouzijeme Feature Class Chceme-li na-plnit zasobnık identifikatory aktualne oznacenych prvku pouzijeme FeatureLayerVytvorenı Feature Layer z Feature Class

path = arcpyGetParameterAsText(0)

arcpyMakeFeatureLayer_management(path layer)

228 Seznam parametru

Nektere funkce jako napr Merge management pouzıvajı jako vstupnı para-metr seznam parametru (vrstev) Ten se vytvarı jako bezny seznam kteryovsem obsahuje textove retezce urcujıcı cestu k danym vrstvam

9

merge_list = []

while pathToFeatureClass

merge_listappend(rsquopathToFeatureClassrsquo)

arcpyMerge_management(merge_list outFeatureClass)

229 Testovanı existence atributoveho sloupce

Pokud chceme pridat atributovy sloupec funkcı AddField management jevhodne nejprve otestovat zda-li jiz neexistuje To se provede pomocı seznamusloupcu

fieldList = arcpyListFields(inFeatureClass rsquosectionrsquo)

fieldCount = len(fieldList)

if (fieldCount = 1)

arcpyAddField_management(inFeatureClass rsquosectionrsquo rsquoSHORTrsquo)

2210 Balıcek NumPy a jeho pouzitı

Balıcek NumPy ma obrovsky vyznam pri praci s poli a maticemi Pokudmame na vstupu rastr je treba ho prevest do podoby ve ktere budou hodnotyv jednotlivych bunkach snadno dostupne a mozne matematicke operace snimi K tomuto vyuzijeme funkce RasterToNumPyArray()

arcpyRasterToNumPyArray(InputRaster)

Tato funkce prevede na rastr na matici a jı uz muzeme bez problemu indexo-vat a provadet s nı pocetnı operace Jestlize potrebujeme dostat jako vysledekopet rastr prevedeme vyslednou matici opacnym postupem na rastr

NumPyArrayToRaster (maticelevy_dolnı_rohvelikost_pixelu_x

velikost_pixelu_y hodnota_pro_NoData)

10

3 Zaver

V tomto dokumentu byly demonstrovany ukazky a prıpady pro uplne zacatkypri programovanı skriptu spustitelneho v prostredı ESRI ArcGIS 100 Kom-pletnı zdrojove kody ze kterych se cerpaly ukazky jsou ke stazenı na strankachpredmetu PIN2

11

CESKE VYSOKE UCENI TECHNICKE V PRAZE

FAKULTA STAVEBNI

OBOR GEODEZIE A KARTOGRAFIE

Dokumentace k projektu informatika 2

Automatizace sestavenı Atlasueroznıho smyvu a transportu

splavenin ve velkych povodıch

MICHAL BECICKA

15 kvetna 2013

Obsah

1 Uvod 211 O tematu 212 Strucny souhrn 2

2 Popis pracı 321 Nastroj pro tvorbu gridu 3

211 Uvodnı dialog 4212 Vysledny log 5213 Vysledne vrstvy 5214 Cinnost nastroje podrobne 6

22 Generalizace 9221 Uvodnı dialog 9222 Vysledny log 10

23 Finalnı upravy a export 10

3 Problemy a moznosti rozsırenı 1031 Pripojovanı externıch tabulek 1032 Doba behu tvorby gridu 1133 Moznosti rozsırenı 11

4 Zaver 12

5 Prılohy 1351 Vysledny log tvorby gridu 1352 Vysledny log generalizace 14

1

1 Uvod

11 O tematu

Tema bylo urceno doc Krasou z katedry Hydromelioracı a krajinneho inzenyrstvıpro prezentovanı vysledku vypoctu eroznıho smyvu a transportu splaveninPresto ze je nastroj primarne urcen pro toto pouzitı byla snaha jej napsatco nejuniverzalnejiCılem projektu je vytvorit atlas sestaveny z jednotlivych tematickych mapTyto mapy jsou vytvoreny pro cca tretinu uzemı Ceske Republiky V potrebnemmerıtku (cca 150 000) je nemozne vytvaret spojene tematicke mapy Bylotedy nutne nejprve vyhodnotit jak nejlepe vysledky prezentovat pote vy-tvorit nastroj ktery mapy podle pozadavku upravı (generalizuje vizualizo-vane prvky) vygeneruje jednotlive mapove listy a jejich prehledku Dalevygeneruje seznam mapovych listu pro jednotliva povodı a dalsı potrebneudajeNastroj je psan v jazyce Python pro ArcGIS 100

12 Strucny souhrn

Prace se sklada z nekolika castı

1 Vytvorenı gridu - Tato cast je nejrozsahlejsı Jedna se o skript kterypro dana povodı vytvorı rozsah mapovych listu (tzv index grid layer)a do atributovych tabulek ulozı potrebne hodnoty viz dale

2 Generalizace obsahu mapy - Generalizace nakonec probehla velmijednoduse a to kategorizacı hodnot kumulovaneho smyvu

3 Uprava vzhledu a export - Tato cast byla provadena manualne varcgis layout view Po vytvorenı kyzeneho vzhledu pote probehlo ge-nerovanı jednotlivych mapovych listu pomocı toolbaru Data DrivenPages

2

2 Popis pracı

21 Nastroj pro tvorbu gridu

Tento nastroj vytvorı polygonovou vrstvu obsahujıcı grid a to podle zadanehomerıtka a velikosti mapoveho pole Do atributove tabulky gridu vlozı sloupecs nazvy mapovych listu a sloupec s cısly sekcı (bude vysvetleno dale) Zarovenprida do vstupnı polygonove vrstvy sloupec s cısly sekcı a sloupec s nazvymapovych listu na kterych se dany polygon (povodı) nachazı Dale vytvorıvrstvu nazev gridu dissolve pro prehledku sekcı

Pojem sekce Sekce je tvorena vsemi dotykajıcımi se polygony Mapovelisty jsou ke kazde sekci tvoreny zvlastrsquo a jejich nazvy jsou pote rozsıreny ocıslo sekce Prıklad cıslovanı mapovych listu 1-A1 1-A2 2-A1 2-A2

Obrazek 1 Vstupnı polygonova vrstva

3

Obrazek 2 Ocıslovane sekce polygonove vrstvy

211 Uvodnı dialog

Uvodnı dialog nastroje obsahuje pole pro 5 parametru

bull In - vstupnı parametr datovy typ Feature classVstupnı vrstva polygonu

bull Scale - vstupnı parametr datovy typ LongPozadovane merıtko

bull Map field width - vstupnı parametr s nastavenou defaultnı hodnotou25 datovy typ DoubleSırka vysledneho mapoveho ramce v cm

bull Map field height - vstupnı parametr s nastavenou defaultnı hodnotou30 datovy typ DoubleVyska vysledneho mapoveho ramce v cm

bull Out - vystupnı parametr datovy typ Feature classVystupnı vrstva gridu

4

Obrazek 3 Grid - Uvodnı dialog

212 Vysledny log

Kompletnı prıklad vysledneho logu je k nalezenı v prıloze 51Obsahuje tyto informace

bull Umıstenı pouzıvane databaze na disku

bull Dale v kazdem cyklu

ndash Poradove cıslo cyklu

ndash Aktualnı pocet nezpracovanych polygonu

ndash Cıslo vytvarene sekce

ndash Identifikatory polygonu tvorıcıch danou sekci

bull Pocet sekcı

bull Pocet mapovych listu v kazde sekci

213 Vysledne vrstvy

Vysledny grid pro merıtko 1 80 000 a defaultnı velikost mapoveho pole (25x 30 cm) vypada nasledovne

5

Obrazek 4 Grid - Vysledna vrstva

214 Cinnost nastroje podrobne

1 Prıpravne cinnostiV prvnıch radcıch kodu jsou vytvoreny pomocne promenne a pole znichz pro dalsı cinnost je potreba zmınit zasobnık IDs Ten je naplnenidentifikatory povodıPokud jiz neexistujı jsou ve vstupnı polygonove vrstve vytvoreny atri-butove sloupce hard ID section MapSheets

bull hard ID - Do tohoto sloupce byly zkopırovany identifikatory abyi po rozdelenı do nekolika vrstev mely polygony jednoznacny iden-tifikator

bull section - Po vypoctu sekcı sem bude pro kazdy polygon zapsanocıslo sekce ve ktere se nachazı

bull MapSheets - Atribut se seznamem mapovych listu na kterych sedane povodı nachazı

Ukazka tvorby atributoveho sloupce

fieldList = arcpyListFields(inFeatureClass rsquoMapSheetsrsquo)

6

fieldCount = len(fieldList)

if (fieldCount = 1)

arcpyAddField_management(inFeatureClass rsquoMapSheetsrsquo rsquoTEXTrsquo)

2 Hlavnı vypocetnı cast

Hlavnı cast je cela v cyklu while (len(IDs) gt 0) tj cyklus probıhadokud jsou v zasobnıku IDs hodnoty Na konci cyklu jsou vzdy identi-fikatory zpracovanych povodı ze zasobnıku mazany V kazdem prubehucyklu jsou selektovany povodı tvorıcı 1 sekci k takove sekci je potevytvoren grid a jsou plneny nove atributove sloupce

Ukazka hlavnıho cyklu

while len(IDs) gt 0

oznacenı povodı i-te sekce

rows_sel = arcpySearchCursor(rsquopovodi_classrsquo)

for row_sel in rows_sel

IDsremove(row_selOBJECTID)

V kazdem prubehu cyklu je zpracovana 1 sekce - tj shluk povodı kteremajı spolecnou cast hranice Sekce je tvorena na zaklade dotazu Se-lectByLocation s definicı BOUNDARY TOUCHES Dotaz se opakujev cyklu dokud se pocet oznacenych povodı zvetsuje K tomu slouzıpromenne matchcount1 matchcount2 ktere obsahujı pocet oznacenychpolygonu

Vytvorenı sekce

bull Oznacenı prvnıho nezpracovaneho polygonu

first_ID = str(IDs[0])

fieldName = OBJECTID

Query = + fieldName + = + first_ID

arcpySelectLayerByAttribute_management(rsquopovodi_classrsquo rsquoNEW_SELECTIONrsquo Query)

matchcount1 = int(arcpyGetCount_management(rsquopovodi_classrsquo)getOutput(0))

bull Prvnı prubeh SelectByLocation

7

arcpySelectLayerByLocation_management(rsquopovodi_classrsquo rsquoBOUNDARY_TOUCHESrsquo

rsquopovodi_classrsquo)

matchcount2 = int(arcpyGetCount_management(rsquopovodi_classrsquo)getOutput(0))

bull Dalsı prubehy SelectByLocation

while matchcount1 lt matchcount2

matchcount1 = matchcount2

arcpySelectLayerByLocation_management(rsquopovodi_classrsquo rsquoBOUNDARY_TOUCHESrsquo

rsquopovodi_classrsquo)

matchcount2 = int(arcpyGetCount_management(rsquopovodi_classrsquo)getOutput(0))

Oznacene polygony jsou ulozeny jako polygonova vrstva do vstupnı ge-odatabaze Tato vrstva je dale pouzita pro tvorbu gridu

Vytvorenı gridu

Pred samotnou tvorbou bylo potreba zjistit rozsah sekce Pokud bylasekce mensı nez 1 mapovy list bylo treba definovat souradnice polohylistu tak aby povodı lezelo na stredu listu Do zasobnıku byly nactenysouradnice lomovych bodu povodı a byly z nich vybrany maximalnı aminimalnı hodnoty Jejich rozdıl pak urcil rozsah sekce

Prıklad plnenı zasobnıku souradnicema

desc = arcpyDescribe(outputFeatureClassPath+rsquorsquo+output_name)

shape_field_name = descShapeFieldName

rows3 = arcpySearchCursor(outputFeatureClassPath+rsquorsquo+output_name)

mbr_X=[]

mbr_Y=[]

for row3 in rows3

Create the geometry object

feat = row3getValue(shape_field_name)

partnum = 0

for pnt in featgetPart(partnum)

mbr_Xappend(pntX)

mbr_Yappend(pntY)

partnum += 1

8

Vytvorenı gridu pote probıha budrsquo s definovanou nebo s nedefinovanoupolohou pocatecnıho mapoveho listu Pro vytvorenı gridu je pouzitafunkce GridIndexFeatures cartography

Ukazka

arcpyGridIndexFeatures_cartography(outputFeatureClassPath+rsquorsquo+grid_name

outputFeatureClassPath+rsquorsquo+output_name USEPAGEUNIT scale_str

sheet_width_str sheet_high_str str(grid_start_pnt_X)+rsquo rsquo+str(grid_start_pnt_Y))

Grid je tedy vytvoren pro jednu sekci Po vsech prubezıch cyklu jsoutakto vytvorene vrstvy gridu spojeny do jedne finalnı vrstvy V cyklujsou dale plneny nove atributove sloupce - cısla sekcı a nazvy mapovychlistu a to jak do nove (vystupnı) vrstvy gridu tak do vstupnı vrstvypovodı

3 Vytvorenı finalnıch vrstev tisk vysledku Jak bylo receno na zaverjsou spojeny jednotlive vrstvy gridu Vedle toho je vytvorena vrstvaspojenych mapovych listu po sekcıch - funkcı Dissolve - pro tvorbuprehledky Jsou vytisknuty vysledne hodnoty viz 212

22 Generalizace

Pro generalizaci byl napsan skript ktery nacıta liniovou vrstvu toku Tentoskript byl jiz psan na mıru podkladovym datum a pri nacıtanı je v nemvyuzito znalosti struktury danych podkladovych dat Skript k vrstve pripojıexternı tabulku a vytvorı atributovy sloupec kategorie Podle dat z externıtabulky pak plnı novy sloupec hodnotami 1 - 5 podle mnozstvı unasenehosedimentu Tato hodnota je pak pouzita pri vizualizaci datZajımavostı je ze pro nacıtanı musela byt tabulka indexovana viz 31

221 Uvodnı dialog

Uvodnı dialog obsahuje dva parametry

bull Input Feature Class Vstupnı liniova vrstva rıcnıch useku

bull Table Vstupnı tabulka obsahujıcı hodnoty rıcnıch splavnenin

9

222 Vysledny log

Vysledny log je k nahlednutı v prıloze 52 Obsahuje tyto informace

bull Pocet vsech rıcnıch useku

bull Pocet useku v jednotlivych kategoriıch

23 Finalnı upravy a export

Jak jiz bylo zmıneno finalnı vzhled mapoveho listu byl vytvoren manualne vLayout view a pomocı toolbaru Data Driven Pages Tento postup je casoveekonomictejsı a je jım dosazeno lepsıch vysledku dıky prehlednosti ToolbarData Driven Pages pak umoznuje vkladat dynamicke textove pole ktere seautomaticky menı s menıcım se mapovym listem Takovym polem je naprnazev mapoveho listu Stacı tedy definovat vzhled jednoho mapoveho listuv toolbaru Data Driven Pages navolit prıslusne pole - ty byly vytvorenynastrojem Grid viz 21 Dynamicky bylo potreba propojit s mapovym oknemi prehledku ktera byla vytvorena jako druhy Data Frame To se provedlo defi-novanım rozsahu podle hlavnıho mapoveho okna v Properties -iquest Data Frame-iquest Extant a definovanım Definition Query ve vlastnostech vrstvy Dalsım dy-namickym prvkem jsou oznacenı sousednıch mapovych listu a cıslo strankyNa takto sestavenou stranku s dynamickymi prvky bylo mozne pouzıt exportmapy do pdf a Atlas byl vygenerovanPrıklad dynamickeho textu pro nazev mapoveho listultdyn type=page property=PageNamegt

3 Problemy a moznosti rozsırenı

31 Pripojovanı externıch tabulek

Pri pripjovanı externıch tabulek musely byt indexovany hodnoty atribu-toveho sloupce pouziteho k parovanı To probehlo prıkazemarcpyAddIndex management (layer HydroID)Pripojenı tabulky musı probıhat k Feature layer Proto bylo nutne nejprve zFeature Class vytvorit Feature Layer1 Pote mohla byt tabulka pripojena

arcpyAddIndex_management (layer HydroID)

arcpyAddJoin_management(layer HydroID table Riverid)

1Rozdıl mezi Feature Layer a Feature Class je vysvetlen v prilozenem Tutorialu pro-gramovanı v Pythonu pro ArcGIS

10

Zde nastal problem s prıstupem k atributum Obecne nesmı nazvy atri-butovych sloupcu obsahovat mezery K hodnotam je pristupovano pres jed-notlive radky s parametrem nazev sloupce

rows= arcpySearchCursor(layer)

for row in rows

value=rownazev_sloupce

Pripojena tabulka ovsem mela v nazvech sloupcu mezeru K takto pojmeno-vanemu sloupci muselo byt pristupovano prıkazem getValue

rows= arcpySearchCursor(layer)

for row in rows

value=rowgetValue(rsquonazev tabulky$nazev sloupcersquo)

32 Doba behu tvorby gridu

Doba behu nastroje pro tvorbu gridu je znepokolive dlouha Bylo prove-deno merenı casu behu jednotlivych castı kodu funkcı time z modulu timeVysledky ukazaly ze nejdele trva vytvarenı novych vrstev Vrstva se muzevytvaret az 20 sekund Snaha o optimalizaci donutila nahradit vytvarenı vrs-tev s minimalnım ohranicujıcım obdelnıkem sekvencnım ukladanım souradniclomovych bodu polygonu z nichz pak funkcemi min a max byly tyto hodnotyzıskany Prubeh se tak urychlil o desıtky sekund (v jednom prubehu cyklupriblizne o 15 sekund) Dalsı moznostı bylo vyuzıt prostoroveho indexu datTato moznost nebyla vyuzita protoze ArcGIS pouzıva k prostorovemu in-dexovanı pravidelny grid Zıskanı MBR2 nebylo nalezeno Vyuzitı indexu byovsem problem neresilo Jak jiz bylo zmıneno nejdele trva vytvarenı novychvrstev Bohuzel funkce GridIndexFeatures cartography pro vytvorenı griduneumı pracovat se selektovanymi daty Tedy v kazdem cyklu musı byt ulozenapolygonova vrstva tvorıcı 1 sekci Pote mohla byt vytvorena vrstva tvorıcıgrid Tedy v kazdem prubehu cyklu jsou vytvareny 2 nove vrstvy Jelikozautor neprisel na zpusob jine optimalizace je nastroj pomaly Pro zadanydataset s 58mi povodımi jeho cinnost probıha desıtky minut

33 Moznosti rozsırenı

Do skriptu by se dal zakomponovat export seznamu mapovych listu pro kazdepovodı V soucasne verzi je tvoren exportem atributove tabulky

2minimum bounding rectangle - minimalnı ohranicujıcı obdelnık

11

4 Zaver

Byly vytvoreny nastroje pro automatizaci tvorby Atlasu pro mapy eroznıhosmyvu a transportu splavenin Tvorba Atlasu probıha v nekolika krocıchVizualizovane prvku jsou generalizovany Dale je vytvoren Grid ktery jepouzit jako indexova vrstva pro funkci Data Driven Pages Tou jsou vy-tvoreny jednotlive mapove listy Pomocı dynamickych prvku je pak vytvorenvzhled ktery se menı se zmenou mapoveho listu Nedostatkem je rychlostnastroje pro tvorbu gridu Presto ze je nastroj pomaly je zcela funkcnı Vprıpade potreby dalsıho rozsırenı bude ale vhodne vysledky nacıtat do novehonastroje Vzorovy vytisk vysledneho atlasu je prilozen Vzhledem k tomu zezpracovavana data jsou rozsahla a podlehajı autorskemu zakonu je vytvorenjen vzorovy vytisk z 6ti povodı Nastroje jsou psany v jazyce Python 26 proArcGIS 100 Pri praci byla vyuzıvana predevsım online napoveda ArcGISa diskuznı programatorska fora Kompletnı zdrojovy kod je ke stazenı nastrankach predmetu PIN2

12

5 Prılohy

51 Vysledny log tvorby gridu

Executing Grid

JAtlasvzorektemp_selectpovodi_vzorekgdbpokusne_povodi

70000 25 30 JAtlasvzorektemp_selectpovodi_vzorekgdbgrid70

Start Time Wed May 15 020551 2013

Running script Script2

Output folder JAtlasvzorektemp_selectpovodi_vzorekgdb

_____________________________________________________________________

count of basin polygon to process 6

_____________________________________________________________________

RUN 1

count of basins in 1 section 3

Their ID

ID 1

ID 3

ID 6

_____________________________________________________________________

count of basin polygon to process 3

_____________________________________________________________________

RUN 2

count of basins in 2 section 1

Their ID

ID 2

_____________________________________________________________________

count of basin polygon to process 2

_____________________________________________________________________

RUN 3

count of basins in 3 section 2

Their ID

ID 4

ID 5

----- RESULT -----

Number of sections 3

Number of map sheets

in section 1 13

in section 2 1

in section 3 2

Completed script Grid

Succeeded at Wed May 15 021359 2013 (Elapsed Time 8 minutes 8 seconds

13

52 Vysledny log generalizace

Executing generalization JAtlasvzorek2011_NAZV_nadrze2011_watemsedem

NAZV_tokyVT28_finshp

JAtlasvzorek2011_NAZV_nadrze2011_watemsedem28_vypocet

projectriversedimentxlsxprojectriversediment$

Start Time Wed May 15 075624 2013

Running script generalization

Category created

Total count of river parts 2879

Count of category 1 2428

Count of category 2 118

Count of category 3 68

Count of category 4 20

Count of category 5 245

Completed script generalization

Succeeded at Wed May 15 075638 2013 (Elapsed Time 1400 seconds)

14

CESKE VYSOKE UCENI TECHNICKE V PRAZE

FAKULTA STAVEBNI

OBOR GEODEZIE A KARTOGRAFIE

Dokumentace k projektu informatika 2

Stanovenı smeru odtokuna rastrovem digitalnım modelu

a implementace algoritmudo prostredı ArcGIS

BC JAN ZAJICEK

5 cervna 2013

Obsah

Obsah 1

1 Uvod 2

2 Nejbeznejsı existujıcı algoritmy 3

3 Flow Direction D8 431 Obecny princip D8 432 Popis algoritmu D8 5

4 Popis algoritmu MDinfin 641 Obecny princip MDinfin 642 Technicke resenı MDinfin 8

5 Vysledky 1151 Realna data - Bykovice 1152 Realna data - Nucice 12

6 Zaver 13

Reference 14

7 Prılohy 1571 Bykovice a Nucice vstupnı DMT rastry 1572 Bykovice vysledky 1673 Nucice vysledky 17

1

1 Uvod

Tato dokumentace byla zpracovana v ramci predmetu Projekt Informatika 2Semestralnı prace bude pouzita jako z jedna castı autorovi diplomove praces nazvem SMODERP 2D rozsırenı resıcı vztahy soustredeneho a plosnehoodtoku na danem uzemı Duvodem zpracovanı tohoto tematu byla potrebapouzitı v diplomove praci vıce nez jednoho algoritmu pro urcenı smeruodtoku v prostredı ArcGIS V soucasne dobe ArcGIS vyuzıva algoritmusD8 viz kapitola 3 jako jediny algoritmus pro vypocet smeru odtoku Tentoalgoritmus je soucastı Hydrology tools Nastroje ze skupiny Hydrology sepouzıvajı k modelovanı chovanı toku vody na povrchu Nejbeznejsı pouzıvanadigitalnı data povrchu Zeme jsou rastry digitalnı modelu terenu DMT slozenez jednotlivych bunek pixelu Tyto DMT rastry jsou pouzity jako vstupypro ruzne charakteristiky povrchu DMT rastr je souvisly povrch obvykleodkazujıcı na povrch Zeme Presnost dat je dana rozlisenım rastru taktezvzdalenostı mezi body rastru Informace o tvaru zemskeho povrchu je uzitecnapro mnoho oboru jako je napr zemedelstvı lesnictvı zivotnı prostredı neboregionalnı planovanı Tyto obory vyzadujı pochopenı jak voda tece v ramciuzemı a jak zmeny na tomto uzemı nasledne ovlivnı jejı tok

Cılem projektu bylo naprogramovat algoritmus ktery v roce 2007 publiko-vali Jan Seibert a Brian L McGlynn s nazvem MDinfin [1] Tento algoritmusje vylepsenım stavajıcıch algoritmu pro resenı urcenı smeru odtoku na ras-tru viz kapitola 2 Pro overenı spravnosti vysledku byla pouzita realnadata dvou pozemku u obcı Bykovice a Nucice Testovanı probıhalo na ras-trech o rozlisenı 5 metru Algoritmus byl naprogramovan v jazyce Pythonv prostredı NetBeans IDE 69 Pro spustenı v ArcGISu je potreba pridatdo prostredı vytvoreny toolbox upravit aktualnı cestu ke skriptu mainpya tento model nasledne spustit Vstupem modelu je rastr DMT a vystupnıadresar do ktereho se po dobehnutı modelu ulozı vysledny rastr s hodnotamismeru odtoku 1255 Algoritmus MDinfin je testovan na verzi ArcGIS 100Na nejnovejsı verzi ArcGIS 101 ktera vysla v cervnu 2012 nenı overenakompatibilita algoritmu v dusledku nefunkcnosti vıce nez jedne verze tohotoprogramu na jednom pocıtaci

2

2 Nejbeznejsı existujıcı algoritmy

Existujı tri nejbeznejsı algoritmy kazdy odlisne resıcı problematiku odtokuvody z rastru do sousednıch bunek Prvnım z nich je algoritmus D8 z roku1984 Algoritmus je podrobne popsan v nasledujıcı kapitole 3 Jelikoz odtoknastava vzdy jen do jedne sousednı bunky dochazı casto ke koncentracivodnıch sıtı a sıtrsquo odtoku pak neodpovıda skutecnosti Na druhou stranuje jeho vyhodou jeho jednoduchost a fakt ze nedochazı k nechtene disperzijako je tomu u druheho algoritmu

Druhym algoritmem je MD8 neboli multiple flow direction algorithm MD8algoritmem je voda odvadena do vsech nıze polozenych sousednıch buneka pomer vody je rozdelen procentualne podle sklonu Ve vysledku ma algo-ritmus tendenci vytvaret vıce realisticke prostorove sıte toku nez D8 tımze nedochazı k takove koncentraci vody v sıti U D8 ma mnohem vetsıvliv maly rozdıl vysek mezi sousednımi bunkami na to ktera bunka prijmeveskerou vodu Pouzitım MD8 tyto male vyskove rozdıly nemajı zdalekatakovy vliv jelikoz je mnozstvı vody rozdeleno pomerem mezi tyto bunkyNejvetsı nevyhodou tohoto algoritmu je jeho prılisna disperze na konver-gentnıch svazıch v dusledku odtoku do vsech nıze polozenych bunek

V roce 1997 byl navrzen algoritmus pojmenovany Dinfin Davidem G Tar-botonem z americke univerzity v Utahu Byl navrzen prıstup ktery je zalozenna osmi trojuhelnıkovych ploskach viz obrazek 3 Dıky tomuto postupu jsouodstraneny limitace v podobe moznosti pouze osmi smeru odtoku z bunkyProto je algoritmus pojmenovan Dinfin jelikoz muze nastat nekonecne moznostıvysledneho smeru odtoku Tento prıstup umoznuje pouze jeden smer odtokurozdeleny mezi jednu nebo dve bunky v zavislosti na smeru odtoku

Poslednı dva zmınene algoritmy MD8 a Dinfinmajı oproti D8 nevyhodu ve vetsıcasove narocnosti vypoctu V kapitole 4 je popsan algoritmus MDinfin kteryvyuzıva vyhody MD8 algoritmu za pouzitı trojuhelnıkovych plosek obdobnejako Dinfin algoritmus

3

3 Flow Direction D8

Pro pochopenı problematiky a zjevnost rozdılu mezi algoritmy je vhodneuvest jak funguje nastroj ktery pouzıva ArcGIS Zaklad algoritmu MDinfino nemz pojednava tato dokumentace je zalozen na podobnych postupech

31 Obecny princip D8

Princip nastroje urcenı smeru odtoku (Flow Direction) ktery pouzıva prostredıArcGIS je nasledujıcı Tento nastroj (tool) vezme vstupnı rastr digitalnıhomodelu terenu neboli vyskovy rastr Provede vypocet jehoz vystupem jerastr ktery v kazde bunce rastru obsahuje hodnotu urcujıcı smer odtokuz teto bunky Hodnot je osm podle osmi sousednıch bunek do kterych muzeodtekat voda viz obrazek 1 Prave podle osmi smeru odtoku se tento prıstupnazyva D8 (eight-direction approach)

Obrazek 1 Flow Direction D8 [3]

4

32 Popis algoritmu D8

Samotny vypocet algoritmu je v zasade primitivnı Pro vsechny sousednıbunky se vypocte maximalnı sklon [3]

maximalnı sklon = rozdıl vysek vzdalenost 100

Rozdıl vysek je rozdıl vysky v aktualnım bode a konkretnı sousednı bunkyVzdalenost je vypoctena mezi stredy bunek a lisı se v zavislosti na polozesousednı bunky Pro bunky sousedıcı vrcholem je hodnota velikosti pixeluprenasobena o odmocninu ze dvou Pro zbyle bunky sousedıcı hranou jevelikost vzdalenosti rovna velikosti pixelu Po nalezenı nejstrmejsıho smeruodtoku je hodnota ulozena v podobe bitove hodnoty reprezentujıcı danysmer Pred pouzitım nastroje Flow Direction se obvykle zpracuje vstupnırastr pomocı nastroje Sink Tento algoritmus zaplnı bezodtoke oblasti rastrunejnizsı hodnotou z okolı a do teto nejnizsı sousednı bunky pak posle voduPote jiz nemuze dojıt k situaci kdy vsechny sousednı bunky k dane buncemajı vyssı hodnoty vysek a nedochazelo by tedy k odtokuVysledny rastr nemusı obsahovat pouze bunky s hodnotami 202127 [4]Jestlize nastane situace kdy ma vıce sousednıch bunek nejnizsı hodnotuvysek pak je vysledna hodnota souctem vsech smeru Napr hodnota maximalnıhosklonu bude stejna pro sousednı bunku vlevo a nahore odtok tedy budesmerem na zapad (hodnota = 16) a na sever (hodnota = 64) vysledna hod-nota bude souctem 16 a 64 tedy 84

5

4 Popis algoritmu MDinfin

41 Obecny princip MDinfinObecny postup je prevzat z [1] Stejne jako v prıpade algoritmu Dinfin bylyzavedeny trojuhelnıkove plosky pro vypocet lokalnıho sklonu a smeru pro kazdoutrojuhelnıkovou plosku Okolo stredoveho boduM bylo vytvoreno osm trojuhelnıkuviz obrazek 3 Kazdy se zbyvajıcımi dvema vrcholy P1 P2 ve dvou sousedıcıchbunkach Pro kazdy z techto trojuhelnıku je vypocten smer nejvetsıho sklonuPokud oznacıme vysky bodu M P1 P2 jako hM hP1 hP2 rozdıly vysek sevypoctou takto

z1 = hP1 minus hM z2 = hP2 minus hM (1)

Obdobne se vypoctou rozdıly v x-ovych a y-ovych souradnicıch Po vypocturozdılu jednotlivych souradnic je vypocten normalovy vektor

n =

nx

ny

nz

=

z1y2 minus z2y1z1x2 minus z2x1y1x2 minus y2x1

(2)

Smer odtoku d a sklon s na trojuhelnıkove plose se vypocte pomocı rovnice3 Hodnota nula pro d oznacuje smer osy y a hodnota 3π2 oznacuje smerosy x

d =

0 nx = 0 ny ge 0

π nx = 0 ny lt 0

π2minus arctan(

ny

nx

) nx gt 0

3π2minus arctan(

ny

nx

) nx lt 0

(3)

s = minus tan

(arccos

(nzradic

n2x + n2

y + n2z

))(4)

Jestlize nejvetsı sklon od bodu M je mimo rozpetı 0-45 (π4 radian) jepouzit sklon strmejsı k jednomu z bodu P1 P2 a zaroven i sklon je spoctenk tomuto bodu V prıpade ze oba sousednı body jsou vyse polozeny nez bodM smer nenı pro tento trojuhelnık uvazovan Po spoctenı vsech osmi smerua sklonu pro jednotlive plosky jsou tyto smery povazovany za lokalne ne-jstrmejsı pro kazdy trojuhelnık v rozsahu 45 Smery vedoucı prımo do bodu

6

P1 nebo P2 tedy ty kde d = 0 nebo d = π4 jsou uvazovany pouze vprıpade kdy obe vedlejsı sousednı bunky majı smer k bodu P1 nebo P2Tato situace je znazornena na obrazku 2

Obrazek 2 Ukazka urcenı smeru odtoku z bunky [1]

Prvnı prıpad je smer mırıcı mezi bunky 5 a 6 Druhy prıpad je smer kteryvede prımo do bunky 3 Tato situace nastane jestlize pro trojuhelnık M43vyjde lokalnı smer d = π4 a pro trojuhelnık M32 smer vyjde d = 0Pote co je smer odtoku pro bunku vypocten je celkovy odtok rozdelendo vsech vyslednych smeru na zaklade sklonu Resenı teto problematiky jevıce popsano v sekci 42 Pro smery mırıcı mezi body P1 a P2 je odtokrozdelen do dvou bunek na zaklade nevejtsıho sklonu Pomer odtoku do buneks body P1 a P2 bude v tomto poradı α245 a α145

Obrazek 3 Trojuhelnıkove plosky [1]

7

42 Technicke resenı MDinfinVyse jiz bylo zmıneno ze algoritmus je napsan v jazyce Python Algoritmusje rozdelen do dvou skriptu Prvnı z nich obsahuje funkce a druhy je hlavnıVstupem do modelu je rastr digitalnıho modelu terenu a vystupnı adresardo ktereho se ulozı finalnı rastr smeru odtoku viz obr 4 Po nactenı rastruze vstupnıch parametru je tento rastr preveden na matici NumPy pomocıfunkce

arcpy RasterToNumPyArray ( InputRaster )

NumPy [5] je rozsırenı programovacıho jazyka Python je to balıcek uzıvanypro vedecke vypocty Umoznuje podporu velkych multi-dimenzionalnıch polıa matic spolu s velkou knihovnou matematickych funkcı pro praci s temitopoli

Algoritmus cyklem projızdı vsechny prvky matice a u tech ktere majı hod-notu ruznou od NoData nalezne okolı Hledanı okolı bunky provadı funkceneighbors ta je definovana takto

def ne ighbors ( i j array x y ) return nb1 nb2 nb3 nb4 nb5 nb6 nb7 nb8

Vstupem funkce je pozice v matici dale cela matice a jejı rozmery Funkceneighbors vypocıta hodnoty vysek sousednıch osmi bunek a vratı je na vystup

Obrazek 4 Dialogove okno nastroje MDinfin

Vystup z funkce neighbors slouzı jako jeden z vstupnıch parametru pro dalsıfunkci

8

Funkce byla pojmenovana dir slope jelikoz jejım vystupem je smer odtokua sklon tohoto smeru

def d i r s l o p e ( pointM nbrs vpix sp ix ) return d i r e c t i o n s l ope

Pro kazdy trojuhelnık byla spoctena hodnota d viz vzorec 3 Hodnota s bylapo spatnych a nelogickych vysledcıch pocıtana podle jineho vzorce ktery jizdaval spravne vysledky

s0 =

radicz212y21

+z22y22

(5)

Vzorec se lisı pro kazdy trojuhelnıcek uvedeny je pro vypocet sklonu kdy sousednıbunka je severozapadnı a severnı Tımto postupem bylo zbytecne pocıtatz-tovou slozku vekotoru n vzorec 2 Byly osetreny prıpady kdy sousednıbunky aktualnıho pocıtaneho trojuhelnıku jsou obe vyse polozene nebo obemimo rastr (NoData) Dalsı prıpad nastane jestlize je jeden bod vne rastra druhy v rastru lezı Smer je potom urcen prımo do toho bodu ktery nalezırastru Taktez i sklon je pocıtan pouze mezi tımto bodem a bodem M Lokalnı smer d v kazde plosce po vypoctenı nesmı prekrocit 45 V situacize tuto hodnotu prekrocı je smeru prirazena hodnota 0 nebo 45 v zavislostina vzajemnem porovnanı vysek bodu v trojuhelnıku Takto jsou zpracovanyvsechny plosky a je zjisteno zda-li do kazdeho trojuhelnıku nastava smerodtoku nebo ne Na konci funkce dir slope se kontroluje prıpad kdy smersousednıch trojuhelnıku odkazuje presne do stejneho bodu tedy hodnotysmeru musı byt pro prvnı trojuhelnık d = 45 a pro nasledujıcı sousednıtrojuhelnık d = 0 Vystupem funkce jsou dva vektory o osmi prvcıch smera sklon pro kazdou plosku

Dalsı fazı vypoctu je zjistenı pomeru vody ktera potece do jednotlivychsmeru K vypoctu pomeru byl pouzit tento vzorec [2]

fi =sxi8sum

j=1

sxj

(6)

kde s vyznacuje sklon vypocteneho smeru konkretnı trojuhelnıkove ploskya x je promenny exponent Pokud by byl exponent zvolen 1 bude vyslednasıtrsquo obdobna jako pri pouzitı MD8 algoritmu Pri zvetsovanı exponentu xk nekonecnu bude sıtrsquo stejna jako pri pouzitı D8 metody Vychozı hodnotaexponentu byla zvolena x = 4 coz je kompromis mezi obema variantami

9

Zmena exponentu se v soucasne podobe neprojevı na vyslednem rastru je-likoz vysledek prezentuje pouze smer odtoku a ne procentualnı cast Tohotopomeru bude vyuzito az pri spojenı skriptu s 2D modelem SMODERP

V dalsı casti vypoctu je rozdelen jiz zjisteny pomer z celkoveho odtokudo dvou prıpadne pouze do jedne bunky v zavislosti na smeru odtoku dVe vysledku je vypocten vektor osmi cısel kde kazda hodnota od 0 do 1prestavuje jiz procentualnı pomer z celkoveho odtoku do kazde sousednıbunky

Pro vyslednou reprezentaci smeru odtoku na vystup byl pro kazdou bunkuvytvoren vektor obsahujıcı 1 a 0 rıkajıcı zda nastava ci nenastava odtokdo sousednı bunky Tento vektor byl preveden na celocıselnou hodnotu po-mocı funkce bool2int

def boo l 2 i n t ( x ) y = 0for i j in enumerate ( x )

i f j y += 1ltlt ireturn y

Funkce ma na vstupu vektor jedicek a nul Naprıklad pro vektor 00000111kdy voda tece na severozapad sever a severovychod se funkce chova taktoJe testovano jestli platı j = 1 tedy prvnıch pet nul vektoru funkce preskocıa pro prvnı jednicku se pricte k promenne y 20 v dalsım kroku 21 a v poslednım22 Operator vyjadruje totiz bitovy posun smerem doleva Vysledkem jena vystupu cıslo y = 1 + 2 + 4 = 7

Pro vsechny bunky byla vypoctena hodnota reprezentujıcı smer odtoku Tatohodnota se ulozı do matice a ta se nasledne prevede na vysledny rastr

f l o w d i r = arcpy NumPyArrayToRaster ( value LLcorner spix vpix rdquordquo )

value hodnota reprezentujıcı smer odtokuLLcorner souradnice leveho dolnıho rohuspix sırka pixeluvpix vyska pixelu

10

5 Vysledky

Algoritmus MDinfin byl testovan na skutecnych datech dvou pozemku u obcıNucice ve Stredoceskem kraji a Bykovice v kraji Jihomoravskem rastry jsouv prıloze 71 Oba dva rastry jsou o rozlisenı 5 metru Finalnı rastry jsouporovnavany s rastry vytvorenymi v prostredı ArcGIS nastrojem Flow Di-rection metodou D8

51 Realna data - Bykovice

Vysledne rastry Flow Direction pro uzemı Bykovice jsou uvedeny v prıloze72 Oba rastry byly pro hodnoty 202127 obarveny shodnou barvou kvulilepsı nazornosti a porovnatelnosti vysledku Rastr ktery obsahuje z celkovehopoctu 44807 bunek celkem 23655 bunek s hodnotami vysek po probehnutıalgoritmy dal nasledujıcı vysledky

FD D8 MDinfin1 3650 7372 666 9174 207 188 21 716 94 3732 791 8564 8818 1045128 9408 14983sum

23655 14983

Tabulka 1 Tabulka porovnanı obou algoritmu pro rastr Bykovic

FD je zkratka pro Flow Direction cili smer odtoku reprezentovany celocıselnouhodnotou Ostatnı hodnoty u vysledneho rastru na ktery byl pouzit algorit-mus MDinfin jsou v rozpetı 0246 V rozmezı hodnot smeru odtoku 246255se nevyskytujı zadne bunky Cas potrebny pro vykonanı skriptu byl v prıpadeD8 4 vteriny Pro algoritmus MDinfin byl cas 15 vterin

11

52 Realna data - Nucice

Vysledne rastry jsou uvedeny v prıloze 73 Opet bylo pouzito shodne obar-venı pro zakladnı smery u obou rastru Rastr Nucice obsahoval data na 82732bunkach z celkove poctu 125449 bunek Vysledky jsou pro prehlednost uve-deny v tabulce

FD D8 MDinfin1 12186 12332 12441 87034 16907 10278 9826 1642316 2516 28832 5010 241764 7788 366128 16058 25475sum

82732 55932

Tabulka 2 Tabulka porovnanı obou algoritmu pro rastr Nucic

Ostatnı hodnoty u vysledneho rastru na ktery byl pouzit algoritmusMDinfin jsou v rozpetı 0255 Cas potrebny pro vykonanı skriptu byl v prıpadeD8 6 vterin Pro algoritmus MDinfin byl cas 50 vterin

12

6 Zaver

Cılem projektu bylo vytvorit funkcnı skript obsahujıcı algoritmus pojmen-ovany MDinfin [1] ktery resı odtok do sousednıch bunek rastru Algoritmusbyl napsan v programovacım jazyce Python a testovan na realnych datechVysledky byly mırnym prekvapenım kdy zejmena hodnoty smeru 128 tedyseverovychodnıho se vyskytovaly ve vysledku velmi casto viz tabulky 1 a 2Predpokladem bylo ze se odtok rozlozı do vıce smeru a pocet bunek s hod-notami zakladnıch smeru 1248163264 a 128 bude mene nez v prıpade al-goritmu D8 K rozkladu do vıce smeru sice doslo ale pocet nekterych bunekse zakladnımi smery byl vetsı u algoritmu MDinfin

Co se tyce delky doby behu algoritmu je algoritmus MDinfin pomalejsı viz casyv kapitole 5 nez D8 z nekolika zrejmych duvodu Predevsım algoritmus D8provadı mnohem mene pocetnıch operacı z duvodu jeho mensı slozitostiviz 3 Dalsım duvodem je take rozdıl v jazyce ve kterem jsou oba algo-ritmy napsany D8 je napsan v programovacım jazyce C++ ktery na vetsıchdatech je mnohonasobne rychlejsı nez Python Prepsanım algoritmu MDinfindo jazyka C++ by mohla byt cesta k budoucımu zvysenı rychlosti pracealgoritmu

13

Reference

[1] SEIBERT Jan McGlynn BL A new triangular multiple flow di-rection algortihm for computing upslope areas from gridded digi-tal elevation models [online] [cit 13 5 2013] Dostupne ke stazenız URL lthttpciteseerxistpsueduviewdocdownloaddoi=101179977amprep=rep1amptype=pdfgt

[2] HOLMGREN Peter Multiple direction algortihms for runoff modellingin grid based elevation models An empirical evaluation [online] [cit13 5 2013] Dostupny z URL ltftpwwwlwrkthseCommonUllaMFor_Imran[1994]20holmgren20-20multiple20flow

20direction20algorithms20for20runoff20modelling20in

20grid20based20elevation20modelspdf gt

[3] ESRI ESRI WebHelp - How Flow Direction works [online] [cit13 5 2013] Dostupne z URL lthttphelparcgiscomenarcgisdesktop100helpindexhtml009z00000063000000

htmgt

[4] ESRI ESRI Webhelp - Flow Direction (Spatial Analyst) [online][cit 13 5 2013] Dostupne z URL lthttphelparcgiscomenarcgisdesktop100helpindexhtml009z00000052000000

htmgt

[5] WIKIPEDIA NumPy [online] [cit 13 5 2013] Dostupne z URLlthttpenwikipediaorgwikiNumPygt

[6] INFORMIT Working with operators [online] [cit 13 5 2013] Dos-tupne z URL lthttpwwwinformitcomarticlesarticleaspxp=2002831ampseqNum=6gt

14

7 Prılohy

71 Bykovice a Nucice vstupnı DMT rastry

Obrazek 5 DMT Bykovice

Obrazek 6 DMT Nucice

15

72 Bykovice vysledky

Obrazek 7 Flow Direction D8

Obrazek 8 Flow Direction MDinfin

16

73 Nucice vysledky

Obrazek 9 Flow Direction D8

Obrazek 10 Flow Direction MDinfin

17

Page 3: pro zac ate cn kygeo.fsv.cvut.cz/gdata/2013/pin2/e/dokumentace/... · 2013-06-05 · CESK E VYSOK E U CEN I TECHNICKE V PRAZE FAKULTA STAVEBN I OBOR GEODEZIE A KARTOGRAFIE Dokumentace

1 Uvod

Tato dokumentace by mela slouzit jako manual pro zacatecnıky kterı chtejızacıt psat skripty v prostredı ArcGIS verze 100

11 Poznamka ke kompatibilite

Na uvod jen par zakladnıch informacı o skriptovanı v ArcGISKazda nova verze ArcGIS ma integrovanou nejnovejsı verzi Pythonu Stejnetak se vyvıjı i moduly potrebne k vyuzıvanı ArcGIS funkcı v Pythonu Tobohuzel neumoznuje zpetnou kompatibilitu Napr zde byl vyuzıvan ArcGIS100 a Python 26 Pri vyhledavanı informacı a navodu je dobre mıt totona pameti a vyuzıvat zejmena zdroje odkazujıcı na ctenarovu aktualnı verziprostredı ArcGIS

12 Moduly

Pri skriptovanı v ArcGIS musıme implementovat i dalsı zadoucı modulyJednım z nejdulezitejsıch modulu je ArcPy ktery pod sebou zahrnuje stan-dardnı toolboxy v ArcGISu Jeho cılem je vytvorit uzitecny a produktivnızpusob jak provest geografickou analyzu dat konverze dat a spravu datDalsım velice vyznamnym modulem je balıcek NumPy uzıvany pro vedeckevypocty Umoznuje podporu velkych multi-dimenzionalnıch polı a maticspolu s velkou knihovnou matematickych funkcı pro praci s temito poliModul Math podporuje praci s matematickymi funkcemi a objekty Naprgoniometricke funkce konstanty atd Dalsım uzitecnym modulem muze bytOs Sys a String String umoznuje praci s textovymi retezci Napr funkciprint Os a Sys podporujı mj praci se systemovymi operacemi Napr praces pozicemi na disku apod Vsechny moduly se zavolajı pomocı funkce importNapr import arcpy zprıstupnı knihovny v balıcku arcpy

2 Jak zacıt skriptovat

21 Zalozenı noveho skriptu

Nejprve je potreba v libovolnem adresari zalozit soubor s prıponou py Tentosoubor bude obsahovat zdrojovy kod Kod muzeme editovat jak v externımIDLE tak v IDLE integrovanem v instalaci ArcGIS jmenujıcı se PythonWinV kazdem prıpade je vhodne toto prostredı v ArcGIS urcit aby mohl ArcGISs editorem spolupracovat

2

1 Nastavenı editoru v ArcGIS - Geoprocessing rarr Geoprocessing op-tionsZde v poli Geoprocessing tool rarr editordebugger zvolıme nami pre-ferovany editor Zada se cesta k exe souboru programu PythonWin

Obrazek 1 Nastavenı editoru a debuggeru

Nynı pri volbe editace skriptu prımo v ArcGIS se nam zdrojovy kodotevre v danem editoru viz nıze

3

2 Vytvorenı nastroje (tool) Nove toolboxy a nastroje se vytvarejıstejne jako jine objekty v ArcGIS - tedy v ArcCataloguNovy toolbox se vytvorı po kliknutı pravym tlacıtkem mysi na ad-resar ToolboxesMy Toolboxes a zvolenı polozky New rarr Toolbox V ta-kovemto uzivatelskem Toolboxu muzeme pridat skript Opet pres pravetlacıtko mysi Add rarr Script najdeme soubor py do ktereho budemepsat zdrojovy kod Nynı pri opetovnem zapnutı ArcGIS stacı najıt vArcCatalogu tento skript kliknout pravym a zvolit Edit Zdrojovykod se automaticky otevre v definovanem editoru

Obrazek 2 Vytvorenı noveho toolboxu

Pri pridavanı skriptu muzeme zadavat vstupnı a vystupnı parametryTento krok muzeme preskocit a editovat tyto parametry pozdeji

4

Obrazek 3 Pridanı skriptu

3 Editace vstupnıch a vystupnıch parametru Pro editaci parametruklikneme pravym na skript v ArcCatalogu a zvolıme Properties Zdemuzeme mimo jine editovat i cestu k souboru py V zalozce Parametersje seznam parametru Po kliknutı na parametr se ve spodnım okne ob-jevı jejich atributy z nichz nejdulezitejsı je Direction tj zda-li se jedna ovstupnı nebo vystupnı parametr Vyznam dalsıch atributu je jasny z je-jich nazvu a nabıdky jejich hodnot Pri definovanı parametru je potrebazvolit spravny datovy typ parametru z preddefinovane nabıdky

5

Obrazek 4 Editace parametru

22 Obecne poznatky pro psanı skriptu

Pred psanım skriptu je samozrejme zadoucı si nejprve osvojit zakladnı syntaxiPythonu Pote muzeme psat skript pro ArcGIS Protoze uvod do Pythonuje perfektne zpracovan v mnoha dokumentech zde jen strucne uvedeme parzasad

221 Vybrane syntakticke zasady Pythonu

Python rozeznava bıle znaky Napr telo cyklu je oznaceno pouze odsa-zenım tabulatorem V C++ by funkce bılych znaku byla nahrazena slozenymizavorkami Python rozlisuje velka a mala pısmena Komentare se znacı oznacujecely radek Vıceradkovy komentar nenı moznyPole je nejprve nutne inicializovat pak je mozne plnit jej pomocı indexuDalsı informace jsou pekne sepsany napr zde httpwwwsallyxorgsallypythonindexphp

222 Help

Pro uvod do skriptovanı v ArcGIS je nejvyznamnejsım pomocnıkem Helpprımo od spolecnosti ESRI

6

httphelparcgiscomenarcgisdesktop100helpHelp je v anglictine a je zde prehledne popsana hledana funkce a jejı pouzitı jedemonstrovano na ukazce kodu coz je obrovskou vyhodou pro porozumenıjak dana funkce pracuje a funguje

223 Nactenı vstupnıch parametru

arcpyGetParameterAsText(index)

Indexy v Pythonu zacınajı od 0 a zde oznacujı poradı parametru jak byldefinovan v ArcCataloguVzdy je potreba parametr ulozit do nejake promenne tedy spravna syntaxebude

NazevPromenne = arcpyGetParameterAsText(0)

Stejne tak vytvorıme promennou ktera bude reprezentovat vystupnı para-metr Do teto promenne pak ukladame vysledek

PRIKLADSkript ktery zkopıruje shapefile a ulozı jej pod uzivatelem zvolenym nazvemdo zvoleneho adresare

import arcpy

inShapefile = arcpyGetParameterAsText(0)

outShapefile = arcpyGetParameterAsText(1)

arcpyCopy_management (inShapefile outShapefile)

224 Vypisy zprav a atributovych typu

Pro jakykoliv textovy vystup do vysledneho dialogu se pouzıva funkce Ad-dMessage() Pokud chceme touto funkcı vypsat hodnotu atributu nebo jinepromenne ktera nenı datoveho typu string pouzijeme pretypovanı str(promenna)Pro zjistenı atributu objektu se casto vyuzıva funkce Describe ktera umoznıpraci s mnozstvım atributovych typu PRIKLAD

import arcpy

inShapefile = arcpyGetParameterAsText(0)

ShpShapeType = arcpyDescribe(inShapefile)shapeType

7

arcpyAddMessage(Shape Type + str(ShpShapeType))

Na prıkladu je demonstrovano jak vypsat typ vstupnıho rastruVedle vypisu zpravy AddMessage existujı jeste vypis varovanı AddWarning(text je zvyrazneny) a vypis chybove hlasky AddError (beh programu seukoncı ve vyslednem dialogu v ArcGIS se vypıse dana hlaska a vypocet jevyhodnocen jako neuspesny)

225 Prıstup k prvkum atributove tabulky

K prvkum atributove tabulky se dostaneme pomocı funkce SearchCursor Tanam vytvorı pole ntit (jednotlivych radku) tabulky Ty se pak dajı kromeindexovanı prochazet napr cyklem for V tomto cyklu muzeme porovnavathodnoty atributu s hledanou hodnotou atributu Tu nalezneme jako ntitanazev atributuV prıkladu je to formule rowPOINT XHodnota FID je hodnota zadana uzivatelem ntity jsou body z shapefilu Kodv prıkladu ulozı souradnice bodu do polı X Y

PRIKLAD

import arcpy

inShapefile = arcpyGetParameterAsText(0) typu shapefile

FID_P1 = arcpyGetParameterAsText(1) typu long

FID_P2 = arcpyGetParameterAsText(2) typu long

inicializace dvouprvkovych polı a pomocne promenne

X = [00]

Y = [00]

a=0

for row in rows

if i==int(FID_P1) or i==int(FID_P2)

X[a] = mathradians(rowPOINT_X)

Y[a] = mathradians(rowPOINT_Y)

a = a+1

i = i+1

Pokud bychom nehledali ntitu podle FID ktere tvorı vzdy posloupnost prirozenychcısel muzeme promenne i priradit mısto cısla naprıklad jmeno mesta i =

8

rowName Pak by ovsem vstupnı parametr musel byt typu String byl bypovinny a neobsahoval by prednastavene hodnoty

226 Nastavenı pracovnıho adresare a prace s pozicemi na disku

Pokud nenı nastaven pracovnı adresar (tzv workspace) ArcGIS automa-ticky nabızı cestu k vystupnım parametrum podle parametru vstupnıch De-faultne je nastavena cesta k systemove geodatabazi ArcGISu DefaultgdbPokud chceme toto zmenit muzeme pracovnı adresar nastavit prıkazem

arcpyenvworkspace = cesta

Pracovnı adresar muze byt slozka i geodatabaze

227 Prace s Feature Class a Feature Layer

Nektere funkce pracujı s Feature Class a nektere s Feature Layer Nekterefunkce umı pracovat s obema typy dat Musıme se tedy rozhodnout kteradata pouzıt a popr je vytvoritRozdıl mezi temito typy je v tom ze Feature Class jsou data ulozena pevnena disku Tedy naprıklad shapefile nebo vrstva geodatabaze Typ FeatureLayer je uchovavan v pameti pocıtace a obsahuje aktualnı situaci vrstvyPredevsım tedy pouze selektovane prvkyChceme-li mıt prıstup k selektovanym prvkum musıme vzdy pouzıt typ Fe-ature Layer PRIKLAD

Chceme-li naplnit zasobnık identifikatory vsech prvku vrstvy nezavisle natom jestli jsou nektere oznaceny pouzijeme Feature Class Chceme-li na-plnit zasobnık identifikatory aktualne oznacenych prvku pouzijeme FeatureLayerVytvorenı Feature Layer z Feature Class

path = arcpyGetParameterAsText(0)

arcpyMakeFeatureLayer_management(path layer)

228 Seznam parametru

Nektere funkce jako napr Merge management pouzıvajı jako vstupnı para-metr seznam parametru (vrstev) Ten se vytvarı jako bezny seznam kteryovsem obsahuje textove retezce urcujıcı cestu k danym vrstvam

9

merge_list = []

while pathToFeatureClass

merge_listappend(rsquopathToFeatureClassrsquo)

arcpyMerge_management(merge_list outFeatureClass)

229 Testovanı existence atributoveho sloupce

Pokud chceme pridat atributovy sloupec funkcı AddField management jevhodne nejprve otestovat zda-li jiz neexistuje To se provede pomocı seznamusloupcu

fieldList = arcpyListFields(inFeatureClass rsquosectionrsquo)

fieldCount = len(fieldList)

if (fieldCount = 1)

arcpyAddField_management(inFeatureClass rsquosectionrsquo rsquoSHORTrsquo)

2210 Balıcek NumPy a jeho pouzitı

Balıcek NumPy ma obrovsky vyznam pri praci s poli a maticemi Pokudmame na vstupu rastr je treba ho prevest do podoby ve ktere budou hodnotyv jednotlivych bunkach snadno dostupne a mozne matematicke operace snimi K tomuto vyuzijeme funkce RasterToNumPyArray()

arcpyRasterToNumPyArray(InputRaster)

Tato funkce prevede na rastr na matici a jı uz muzeme bez problemu indexo-vat a provadet s nı pocetnı operace Jestlize potrebujeme dostat jako vysledekopet rastr prevedeme vyslednou matici opacnym postupem na rastr

NumPyArrayToRaster (maticelevy_dolnı_rohvelikost_pixelu_x

velikost_pixelu_y hodnota_pro_NoData)

10

3 Zaver

V tomto dokumentu byly demonstrovany ukazky a prıpady pro uplne zacatkypri programovanı skriptu spustitelneho v prostredı ESRI ArcGIS 100 Kom-pletnı zdrojove kody ze kterych se cerpaly ukazky jsou ke stazenı na strankachpredmetu PIN2

11

CESKE VYSOKE UCENI TECHNICKE V PRAZE

FAKULTA STAVEBNI

OBOR GEODEZIE A KARTOGRAFIE

Dokumentace k projektu informatika 2

Automatizace sestavenı Atlasueroznıho smyvu a transportu

splavenin ve velkych povodıch

MICHAL BECICKA

15 kvetna 2013

Obsah

1 Uvod 211 O tematu 212 Strucny souhrn 2

2 Popis pracı 321 Nastroj pro tvorbu gridu 3

211 Uvodnı dialog 4212 Vysledny log 5213 Vysledne vrstvy 5214 Cinnost nastroje podrobne 6

22 Generalizace 9221 Uvodnı dialog 9222 Vysledny log 10

23 Finalnı upravy a export 10

3 Problemy a moznosti rozsırenı 1031 Pripojovanı externıch tabulek 1032 Doba behu tvorby gridu 1133 Moznosti rozsırenı 11

4 Zaver 12

5 Prılohy 1351 Vysledny log tvorby gridu 1352 Vysledny log generalizace 14

1

1 Uvod

11 O tematu

Tema bylo urceno doc Krasou z katedry Hydromelioracı a krajinneho inzenyrstvıpro prezentovanı vysledku vypoctu eroznıho smyvu a transportu splaveninPresto ze je nastroj primarne urcen pro toto pouzitı byla snaha jej napsatco nejuniverzalnejiCılem projektu je vytvorit atlas sestaveny z jednotlivych tematickych mapTyto mapy jsou vytvoreny pro cca tretinu uzemı Ceske Republiky V potrebnemmerıtku (cca 150 000) je nemozne vytvaret spojene tematicke mapy Bylotedy nutne nejprve vyhodnotit jak nejlepe vysledky prezentovat pote vy-tvorit nastroj ktery mapy podle pozadavku upravı (generalizuje vizualizo-vane prvky) vygeneruje jednotlive mapove listy a jejich prehledku Dalevygeneruje seznam mapovych listu pro jednotliva povodı a dalsı potrebneudajeNastroj je psan v jazyce Python pro ArcGIS 100

12 Strucny souhrn

Prace se sklada z nekolika castı

1 Vytvorenı gridu - Tato cast je nejrozsahlejsı Jedna se o skript kterypro dana povodı vytvorı rozsah mapovych listu (tzv index grid layer)a do atributovych tabulek ulozı potrebne hodnoty viz dale

2 Generalizace obsahu mapy - Generalizace nakonec probehla velmijednoduse a to kategorizacı hodnot kumulovaneho smyvu

3 Uprava vzhledu a export - Tato cast byla provadena manualne varcgis layout view Po vytvorenı kyzeneho vzhledu pote probehlo ge-nerovanı jednotlivych mapovych listu pomocı toolbaru Data DrivenPages

2

2 Popis pracı

21 Nastroj pro tvorbu gridu

Tento nastroj vytvorı polygonovou vrstvu obsahujıcı grid a to podle zadanehomerıtka a velikosti mapoveho pole Do atributove tabulky gridu vlozı sloupecs nazvy mapovych listu a sloupec s cısly sekcı (bude vysvetleno dale) Zarovenprida do vstupnı polygonove vrstvy sloupec s cısly sekcı a sloupec s nazvymapovych listu na kterych se dany polygon (povodı) nachazı Dale vytvorıvrstvu nazev gridu dissolve pro prehledku sekcı

Pojem sekce Sekce je tvorena vsemi dotykajıcımi se polygony Mapovelisty jsou ke kazde sekci tvoreny zvlastrsquo a jejich nazvy jsou pote rozsıreny ocıslo sekce Prıklad cıslovanı mapovych listu 1-A1 1-A2 2-A1 2-A2

Obrazek 1 Vstupnı polygonova vrstva

3

Obrazek 2 Ocıslovane sekce polygonove vrstvy

211 Uvodnı dialog

Uvodnı dialog nastroje obsahuje pole pro 5 parametru

bull In - vstupnı parametr datovy typ Feature classVstupnı vrstva polygonu

bull Scale - vstupnı parametr datovy typ LongPozadovane merıtko

bull Map field width - vstupnı parametr s nastavenou defaultnı hodnotou25 datovy typ DoubleSırka vysledneho mapoveho ramce v cm

bull Map field height - vstupnı parametr s nastavenou defaultnı hodnotou30 datovy typ DoubleVyska vysledneho mapoveho ramce v cm

bull Out - vystupnı parametr datovy typ Feature classVystupnı vrstva gridu

4

Obrazek 3 Grid - Uvodnı dialog

212 Vysledny log

Kompletnı prıklad vysledneho logu je k nalezenı v prıloze 51Obsahuje tyto informace

bull Umıstenı pouzıvane databaze na disku

bull Dale v kazdem cyklu

ndash Poradove cıslo cyklu

ndash Aktualnı pocet nezpracovanych polygonu

ndash Cıslo vytvarene sekce

ndash Identifikatory polygonu tvorıcıch danou sekci

bull Pocet sekcı

bull Pocet mapovych listu v kazde sekci

213 Vysledne vrstvy

Vysledny grid pro merıtko 1 80 000 a defaultnı velikost mapoveho pole (25x 30 cm) vypada nasledovne

5

Obrazek 4 Grid - Vysledna vrstva

214 Cinnost nastroje podrobne

1 Prıpravne cinnostiV prvnıch radcıch kodu jsou vytvoreny pomocne promenne a pole znichz pro dalsı cinnost je potreba zmınit zasobnık IDs Ten je naplnenidentifikatory povodıPokud jiz neexistujı jsou ve vstupnı polygonove vrstve vytvoreny atri-butove sloupce hard ID section MapSheets

bull hard ID - Do tohoto sloupce byly zkopırovany identifikatory abyi po rozdelenı do nekolika vrstev mely polygony jednoznacny iden-tifikator

bull section - Po vypoctu sekcı sem bude pro kazdy polygon zapsanocıslo sekce ve ktere se nachazı

bull MapSheets - Atribut se seznamem mapovych listu na kterych sedane povodı nachazı

Ukazka tvorby atributoveho sloupce

fieldList = arcpyListFields(inFeatureClass rsquoMapSheetsrsquo)

6

fieldCount = len(fieldList)

if (fieldCount = 1)

arcpyAddField_management(inFeatureClass rsquoMapSheetsrsquo rsquoTEXTrsquo)

2 Hlavnı vypocetnı cast

Hlavnı cast je cela v cyklu while (len(IDs) gt 0) tj cyklus probıhadokud jsou v zasobnıku IDs hodnoty Na konci cyklu jsou vzdy identi-fikatory zpracovanych povodı ze zasobnıku mazany V kazdem prubehucyklu jsou selektovany povodı tvorıcı 1 sekci k takove sekci je potevytvoren grid a jsou plneny nove atributove sloupce

Ukazka hlavnıho cyklu

while len(IDs) gt 0

oznacenı povodı i-te sekce

rows_sel = arcpySearchCursor(rsquopovodi_classrsquo)

for row_sel in rows_sel

IDsremove(row_selOBJECTID)

V kazdem prubehu cyklu je zpracovana 1 sekce - tj shluk povodı kteremajı spolecnou cast hranice Sekce je tvorena na zaklade dotazu Se-lectByLocation s definicı BOUNDARY TOUCHES Dotaz se opakujev cyklu dokud se pocet oznacenych povodı zvetsuje K tomu slouzıpromenne matchcount1 matchcount2 ktere obsahujı pocet oznacenychpolygonu

Vytvorenı sekce

bull Oznacenı prvnıho nezpracovaneho polygonu

first_ID = str(IDs[0])

fieldName = OBJECTID

Query = + fieldName + = + first_ID

arcpySelectLayerByAttribute_management(rsquopovodi_classrsquo rsquoNEW_SELECTIONrsquo Query)

matchcount1 = int(arcpyGetCount_management(rsquopovodi_classrsquo)getOutput(0))

bull Prvnı prubeh SelectByLocation

7

arcpySelectLayerByLocation_management(rsquopovodi_classrsquo rsquoBOUNDARY_TOUCHESrsquo

rsquopovodi_classrsquo)

matchcount2 = int(arcpyGetCount_management(rsquopovodi_classrsquo)getOutput(0))

bull Dalsı prubehy SelectByLocation

while matchcount1 lt matchcount2

matchcount1 = matchcount2

arcpySelectLayerByLocation_management(rsquopovodi_classrsquo rsquoBOUNDARY_TOUCHESrsquo

rsquopovodi_classrsquo)

matchcount2 = int(arcpyGetCount_management(rsquopovodi_classrsquo)getOutput(0))

Oznacene polygony jsou ulozeny jako polygonova vrstva do vstupnı ge-odatabaze Tato vrstva je dale pouzita pro tvorbu gridu

Vytvorenı gridu

Pred samotnou tvorbou bylo potreba zjistit rozsah sekce Pokud bylasekce mensı nez 1 mapovy list bylo treba definovat souradnice polohylistu tak aby povodı lezelo na stredu listu Do zasobnıku byly nactenysouradnice lomovych bodu povodı a byly z nich vybrany maximalnı aminimalnı hodnoty Jejich rozdıl pak urcil rozsah sekce

Prıklad plnenı zasobnıku souradnicema

desc = arcpyDescribe(outputFeatureClassPath+rsquorsquo+output_name)

shape_field_name = descShapeFieldName

rows3 = arcpySearchCursor(outputFeatureClassPath+rsquorsquo+output_name)

mbr_X=[]

mbr_Y=[]

for row3 in rows3

Create the geometry object

feat = row3getValue(shape_field_name)

partnum = 0

for pnt in featgetPart(partnum)

mbr_Xappend(pntX)

mbr_Yappend(pntY)

partnum += 1

8

Vytvorenı gridu pote probıha budrsquo s definovanou nebo s nedefinovanoupolohou pocatecnıho mapoveho listu Pro vytvorenı gridu je pouzitafunkce GridIndexFeatures cartography

Ukazka

arcpyGridIndexFeatures_cartography(outputFeatureClassPath+rsquorsquo+grid_name

outputFeatureClassPath+rsquorsquo+output_name USEPAGEUNIT scale_str

sheet_width_str sheet_high_str str(grid_start_pnt_X)+rsquo rsquo+str(grid_start_pnt_Y))

Grid je tedy vytvoren pro jednu sekci Po vsech prubezıch cyklu jsoutakto vytvorene vrstvy gridu spojeny do jedne finalnı vrstvy V cyklujsou dale plneny nove atributove sloupce - cısla sekcı a nazvy mapovychlistu a to jak do nove (vystupnı) vrstvy gridu tak do vstupnı vrstvypovodı

3 Vytvorenı finalnıch vrstev tisk vysledku Jak bylo receno na zaverjsou spojeny jednotlive vrstvy gridu Vedle toho je vytvorena vrstvaspojenych mapovych listu po sekcıch - funkcı Dissolve - pro tvorbuprehledky Jsou vytisknuty vysledne hodnoty viz 212

22 Generalizace

Pro generalizaci byl napsan skript ktery nacıta liniovou vrstvu toku Tentoskript byl jiz psan na mıru podkladovym datum a pri nacıtanı je v nemvyuzito znalosti struktury danych podkladovych dat Skript k vrstve pripojıexternı tabulku a vytvorı atributovy sloupec kategorie Podle dat z externıtabulky pak plnı novy sloupec hodnotami 1 - 5 podle mnozstvı unasenehosedimentu Tato hodnota je pak pouzita pri vizualizaci datZajımavostı je ze pro nacıtanı musela byt tabulka indexovana viz 31

221 Uvodnı dialog

Uvodnı dialog obsahuje dva parametry

bull Input Feature Class Vstupnı liniova vrstva rıcnıch useku

bull Table Vstupnı tabulka obsahujıcı hodnoty rıcnıch splavnenin

9

222 Vysledny log

Vysledny log je k nahlednutı v prıloze 52 Obsahuje tyto informace

bull Pocet vsech rıcnıch useku

bull Pocet useku v jednotlivych kategoriıch

23 Finalnı upravy a export

Jak jiz bylo zmıneno finalnı vzhled mapoveho listu byl vytvoren manualne vLayout view a pomocı toolbaru Data Driven Pages Tento postup je casoveekonomictejsı a je jım dosazeno lepsıch vysledku dıky prehlednosti ToolbarData Driven Pages pak umoznuje vkladat dynamicke textove pole ktere seautomaticky menı s menıcım se mapovym listem Takovym polem je naprnazev mapoveho listu Stacı tedy definovat vzhled jednoho mapoveho listuv toolbaru Data Driven Pages navolit prıslusne pole - ty byly vytvorenynastrojem Grid viz 21 Dynamicky bylo potreba propojit s mapovym oknemi prehledku ktera byla vytvorena jako druhy Data Frame To se provedlo defi-novanım rozsahu podle hlavnıho mapoveho okna v Properties -iquest Data Frame-iquest Extant a definovanım Definition Query ve vlastnostech vrstvy Dalsım dy-namickym prvkem jsou oznacenı sousednıch mapovych listu a cıslo strankyNa takto sestavenou stranku s dynamickymi prvky bylo mozne pouzıt exportmapy do pdf a Atlas byl vygenerovanPrıklad dynamickeho textu pro nazev mapoveho listultdyn type=page property=PageNamegt

3 Problemy a moznosti rozsırenı

31 Pripojovanı externıch tabulek

Pri pripjovanı externıch tabulek musely byt indexovany hodnoty atribu-toveho sloupce pouziteho k parovanı To probehlo prıkazemarcpyAddIndex management (layer HydroID)Pripojenı tabulky musı probıhat k Feature layer Proto bylo nutne nejprve zFeature Class vytvorit Feature Layer1 Pote mohla byt tabulka pripojena

arcpyAddIndex_management (layer HydroID)

arcpyAddJoin_management(layer HydroID table Riverid)

1Rozdıl mezi Feature Layer a Feature Class je vysvetlen v prilozenem Tutorialu pro-gramovanı v Pythonu pro ArcGIS

10

Zde nastal problem s prıstupem k atributum Obecne nesmı nazvy atri-butovych sloupcu obsahovat mezery K hodnotam je pristupovano pres jed-notlive radky s parametrem nazev sloupce

rows= arcpySearchCursor(layer)

for row in rows

value=rownazev_sloupce

Pripojena tabulka ovsem mela v nazvech sloupcu mezeru K takto pojmeno-vanemu sloupci muselo byt pristupovano prıkazem getValue

rows= arcpySearchCursor(layer)

for row in rows

value=rowgetValue(rsquonazev tabulky$nazev sloupcersquo)

32 Doba behu tvorby gridu

Doba behu nastroje pro tvorbu gridu je znepokolive dlouha Bylo prove-deno merenı casu behu jednotlivych castı kodu funkcı time z modulu timeVysledky ukazaly ze nejdele trva vytvarenı novych vrstev Vrstva se muzevytvaret az 20 sekund Snaha o optimalizaci donutila nahradit vytvarenı vrs-tev s minimalnım ohranicujıcım obdelnıkem sekvencnım ukladanım souradniclomovych bodu polygonu z nichz pak funkcemi min a max byly tyto hodnotyzıskany Prubeh se tak urychlil o desıtky sekund (v jednom prubehu cyklupriblizne o 15 sekund) Dalsı moznostı bylo vyuzıt prostoroveho indexu datTato moznost nebyla vyuzita protoze ArcGIS pouzıva k prostorovemu in-dexovanı pravidelny grid Zıskanı MBR2 nebylo nalezeno Vyuzitı indexu byovsem problem neresilo Jak jiz bylo zmıneno nejdele trva vytvarenı novychvrstev Bohuzel funkce GridIndexFeatures cartography pro vytvorenı griduneumı pracovat se selektovanymi daty Tedy v kazdem cyklu musı byt ulozenapolygonova vrstva tvorıcı 1 sekci Pote mohla byt vytvorena vrstva tvorıcıgrid Tedy v kazdem prubehu cyklu jsou vytvareny 2 nove vrstvy Jelikozautor neprisel na zpusob jine optimalizace je nastroj pomaly Pro zadanydataset s 58mi povodımi jeho cinnost probıha desıtky minut

33 Moznosti rozsırenı

Do skriptu by se dal zakomponovat export seznamu mapovych listu pro kazdepovodı V soucasne verzi je tvoren exportem atributove tabulky

2minimum bounding rectangle - minimalnı ohranicujıcı obdelnık

11

4 Zaver

Byly vytvoreny nastroje pro automatizaci tvorby Atlasu pro mapy eroznıhosmyvu a transportu splavenin Tvorba Atlasu probıha v nekolika krocıchVizualizovane prvku jsou generalizovany Dale je vytvoren Grid ktery jepouzit jako indexova vrstva pro funkci Data Driven Pages Tou jsou vy-tvoreny jednotlive mapove listy Pomocı dynamickych prvku je pak vytvorenvzhled ktery se menı se zmenou mapoveho listu Nedostatkem je rychlostnastroje pro tvorbu gridu Presto ze je nastroj pomaly je zcela funkcnı Vprıpade potreby dalsıho rozsırenı bude ale vhodne vysledky nacıtat do novehonastroje Vzorovy vytisk vysledneho atlasu je prilozen Vzhledem k tomu zezpracovavana data jsou rozsahla a podlehajı autorskemu zakonu je vytvorenjen vzorovy vytisk z 6ti povodı Nastroje jsou psany v jazyce Python 26 proArcGIS 100 Pri praci byla vyuzıvana predevsım online napoveda ArcGISa diskuznı programatorska fora Kompletnı zdrojovy kod je ke stazenı nastrankach predmetu PIN2

12

5 Prılohy

51 Vysledny log tvorby gridu

Executing Grid

JAtlasvzorektemp_selectpovodi_vzorekgdbpokusne_povodi

70000 25 30 JAtlasvzorektemp_selectpovodi_vzorekgdbgrid70

Start Time Wed May 15 020551 2013

Running script Script2

Output folder JAtlasvzorektemp_selectpovodi_vzorekgdb

_____________________________________________________________________

count of basin polygon to process 6

_____________________________________________________________________

RUN 1

count of basins in 1 section 3

Their ID

ID 1

ID 3

ID 6

_____________________________________________________________________

count of basin polygon to process 3

_____________________________________________________________________

RUN 2

count of basins in 2 section 1

Their ID

ID 2

_____________________________________________________________________

count of basin polygon to process 2

_____________________________________________________________________

RUN 3

count of basins in 3 section 2

Their ID

ID 4

ID 5

----- RESULT -----

Number of sections 3

Number of map sheets

in section 1 13

in section 2 1

in section 3 2

Completed script Grid

Succeeded at Wed May 15 021359 2013 (Elapsed Time 8 minutes 8 seconds

13

52 Vysledny log generalizace

Executing generalization JAtlasvzorek2011_NAZV_nadrze2011_watemsedem

NAZV_tokyVT28_finshp

JAtlasvzorek2011_NAZV_nadrze2011_watemsedem28_vypocet

projectriversedimentxlsxprojectriversediment$

Start Time Wed May 15 075624 2013

Running script generalization

Category created

Total count of river parts 2879

Count of category 1 2428

Count of category 2 118

Count of category 3 68

Count of category 4 20

Count of category 5 245

Completed script generalization

Succeeded at Wed May 15 075638 2013 (Elapsed Time 1400 seconds)

14

CESKE VYSOKE UCENI TECHNICKE V PRAZE

FAKULTA STAVEBNI

OBOR GEODEZIE A KARTOGRAFIE

Dokumentace k projektu informatika 2

Stanovenı smeru odtokuna rastrovem digitalnım modelu

a implementace algoritmudo prostredı ArcGIS

BC JAN ZAJICEK

5 cervna 2013

Obsah

Obsah 1

1 Uvod 2

2 Nejbeznejsı existujıcı algoritmy 3

3 Flow Direction D8 431 Obecny princip D8 432 Popis algoritmu D8 5

4 Popis algoritmu MDinfin 641 Obecny princip MDinfin 642 Technicke resenı MDinfin 8

5 Vysledky 1151 Realna data - Bykovice 1152 Realna data - Nucice 12

6 Zaver 13

Reference 14

7 Prılohy 1571 Bykovice a Nucice vstupnı DMT rastry 1572 Bykovice vysledky 1673 Nucice vysledky 17

1

1 Uvod

Tato dokumentace byla zpracovana v ramci predmetu Projekt Informatika 2Semestralnı prace bude pouzita jako z jedna castı autorovi diplomove praces nazvem SMODERP 2D rozsırenı resıcı vztahy soustredeneho a plosnehoodtoku na danem uzemı Duvodem zpracovanı tohoto tematu byla potrebapouzitı v diplomove praci vıce nez jednoho algoritmu pro urcenı smeruodtoku v prostredı ArcGIS V soucasne dobe ArcGIS vyuzıva algoritmusD8 viz kapitola 3 jako jediny algoritmus pro vypocet smeru odtoku Tentoalgoritmus je soucastı Hydrology tools Nastroje ze skupiny Hydrology sepouzıvajı k modelovanı chovanı toku vody na povrchu Nejbeznejsı pouzıvanadigitalnı data povrchu Zeme jsou rastry digitalnı modelu terenu DMT slozenez jednotlivych bunek pixelu Tyto DMT rastry jsou pouzity jako vstupypro ruzne charakteristiky povrchu DMT rastr je souvisly povrch obvykleodkazujıcı na povrch Zeme Presnost dat je dana rozlisenım rastru taktezvzdalenostı mezi body rastru Informace o tvaru zemskeho povrchu je uzitecnapro mnoho oboru jako je napr zemedelstvı lesnictvı zivotnı prostredı neboregionalnı planovanı Tyto obory vyzadujı pochopenı jak voda tece v ramciuzemı a jak zmeny na tomto uzemı nasledne ovlivnı jejı tok

Cılem projektu bylo naprogramovat algoritmus ktery v roce 2007 publiko-vali Jan Seibert a Brian L McGlynn s nazvem MDinfin [1] Tento algoritmusje vylepsenım stavajıcıch algoritmu pro resenı urcenı smeru odtoku na ras-tru viz kapitola 2 Pro overenı spravnosti vysledku byla pouzita realnadata dvou pozemku u obcı Bykovice a Nucice Testovanı probıhalo na ras-trech o rozlisenı 5 metru Algoritmus byl naprogramovan v jazyce Pythonv prostredı NetBeans IDE 69 Pro spustenı v ArcGISu je potreba pridatdo prostredı vytvoreny toolbox upravit aktualnı cestu ke skriptu mainpya tento model nasledne spustit Vstupem modelu je rastr DMT a vystupnıadresar do ktereho se po dobehnutı modelu ulozı vysledny rastr s hodnotamismeru odtoku 1255 Algoritmus MDinfin je testovan na verzi ArcGIS 100Na nejnovejsı verzi ArcGIS 101 ktera vysla v cervnu 2012 nenı overenakompatibilita algoritmu v dusledku nefunkcnosti vıce nez jedne verze tohotoprogramu na jednom pocıtaci

2

2 Nejbeznejsı existujıcı algoritmy

Existujı tri nejbeznejsı algoritmy kazdy odlisne resıcı problematiku odtokuvody z rastru do sousednıch bunek Prvnım z nich je algoritmus D8 z roku1984 Algoritmus je podrobne popsan v nasledujıcı kapitole 3 Jelikoz odtoknastava vzdy jen do jedne sousednı bunky dochazı casto ke koncentracivodnıch sıtı a sıtrsquo odtoku pak neodpovıda skutecnosti Na druhou stranuje jeho vyhodou jeho jednoduchost a fakt ze nedochazı k nechtene disperzijako je tomu u druheho algoritmu

Druhym algoritmem je MD8 neboli multiple flow direction algorithm MD8algoritmem je voda odvadena do vsech nıze polozenych sousednıch buneka pomer vody je rozdelen procentualne podle sklonu Ve vysledku ma algo-ritmus tendenci vytvaret vıce realisticke prostorove sıte toku nez D8 tımze nedochazı k takove koncentraci vody v sıti U D8 ma mnohem vetsıvliv maly rozdıl vysek mezi sousednımi bunkami na to ktera bunka prijmeveskerou vodu Pouzitım MD8 tyto male vyskove rozdıly nemajı zdalekatakovy vliv jelikoz je mnozstvı vody rozdeleno pomerem mezi tyto bunkyNejvetsı nevyhodou tohoto algoritmu je jeho prılisna disperze na konver-gentnıch svazıch v dusledku odtoku do vsech nıze polozenych bunek

V roce 1997 byl navrzen algoritmus pojmenovany Dinfin Davidem G Tar-botonem z americke univerzity v Utahu Byl navrzen prıstup ktery je zalozenna osmi trojuhelnıkovych ploskach viz obrazek 3 Dıky tomuto postupu jsouodstraneny limitace v podobe moznosti pouze osmi smeru odtoku z bunkyProto je algoritmus pojmenovan Dinfin jelikoz muze nastat nekonecne moznostıvysledneho smeru odtoku Tento prıstup umoznuje pouze jeden smer odtokurozdeleny mezi jednu nebo dve bunky v zavislosti na smeru odtoku

Poslednı dva zmınene algoritmy MD8 a Dinfinmajı oproti D8 nevyhodu ve vetsıcasove narocnosti vypoctu V kapitole 4 je popsan algoritmus MDinfin kteryvyuzıva vyhody MD8 algoritmu za pouzitı trojuhelnıkovych plosek obdobnejako Dinfin algoritmus

3

3 Flow Direction D8

Pro pochopenı problematiky a zjevnost rozdılu mezi algoritmy je vhodneuvest jak funguje nastroj ktery pouzıva ArcGIS Zaklad algoritmu MDinfino nemz pojednava tato dokumentace je zalozen na podobnych postupech

31 Obecny princip D8

Princip nastroje urcenı smeru odtoku (Flow Direction) ktery pouzıva prostredıArcGIS je nasledujıcı Tento nastroj (tool) vezme vstupnı rastr digitalnıhomodelu terenu neboli vyskovy rastr Provede vypocet jehoz vystupem jerastr ktery v kazde bunce rastru obsahuje hodnotu urcujıcı smer odtokuz teto bunky Hodnot je osm podle osmi sousednıch bunek do kterych muzeodtekat voda viz obrazek 1 Prave podle osmi smeru odtoku se tento prıstupnazyva D8 (eight-direction approach)

Obrazek 1 Flow Direction D8 [3]

4

32 Popis algoritmu D8

Samotny vypocet algoritmu je v zasade primitivnı Pro vsechny sousednıbunky se vypocte maximalnı sklon [3]

maximalnı sklon = rozdıl vysek vzdalenost 100

Rozdıl vysek je rozdıl vysky v aktualnım bode a konkretnı sousednı bunkyVzdalenost je vypoctena mezi stredy bunek a lisı se v zavislosti na polozesousednı bunky Pro bunky sousedıcı vrcholem je hodnota velikosti pixeluprenasobena o odmocninu ze dvou Pro zbyle bunky sousedıcı hranou jevelikost vzdalenosti rovna velikosti pixelu Po nalezenı nejstrmejsıho smeruodtoku je hodnota ulozena v podobe bitove hodnoty reprezentujıcı danysmer Pred pouzitım nastroje Flow Direction se obvykle zpracuje vstupnırastr pomocı nastroje Sink Tento algoritmus zaplnı bezodtoke oblasti rastrunejnizsı hodnotou z okolı a do teto nejnizsı sousednı bunky pak posle voduPote jiz nemuze dojıt k situaci kdy vsechny sousednı bunky k dane buncemajı vyssı hodnoty vysek a nedochazelo by tedy k odtokuVysledny rastr nemusı obsahovat pouze bunky s hodnotami 202127 [4]Jestlize nastane situace kdy ma vıce sousednıch bunek nejnizsı hodnotuvysek pak je vysledna hodnota souctem vsech smeru Napr hodnota maximalnıhosklonu bude stejna pro sousednı bunku vlevo a nahore odtok tedy budesmerem na zapad (hodnota = 16) a na sever (hodnota = 64) vysledna hod-nota bude souctem 16 a 64 tedy 84

5

4 Popis algoritmu MDinfin

41 Obecny princip MDinfinObecny postup je prevzat z [1] Stejne jako v prıpade algoritmu Dinfin bylyzavedeny trojuhelnıkove plosky pro vypocet lokalnıho sklonu a smeru pro kazdoutrojuhelnıkovou plosku Okolo stredoveho boduM bylo vytvoreno osm trojuhelnıkuviz obrazek 3 Kazdy se zbyvajıcımi dvema vrcholy P1 P2 ve dvou sousedıcıchbunkach Pro kazdy z techto trojuhelnıku je vypocten smer nejvetsıho sklonuPokud oznacıme vysky bodu M P1 P2 jako hM hP1 hP2 rozdıly vysek sevypoctou takto

z1 = hP1 minus hM z2 = hP2 minus hM (1)

Obdobne se vypoctou rozdıly v x-ovych a y-ovych souradnicıch Po vypocturozdılu jednotlivych souradnic je vypocten normalovy vektor

n =

nx

ny

nz

=

z1y2 minus z2y1z1x2 minus z2x1y1x2 minus y2x1

(2)

Smer odtoku d a sklon s na trojuhelnıkove plose se vypocte pomocı rovnice3 Hodnota nula pro d oznacuje smer osy y a hodnota 3π2 oznacuje smerosy x

d =

0 nx = 0 ny ge 0

π nx = 0 ny lt 0

π2minus arctan(

ny

nx

) nx gt 0

3π2minus arctan(

ny

nx

) nx lt 0

(3)

s = minus tan

(arccos

(nzradic

n2x + n2

y + n2z

))(4)

Jestlize nejvetsı sklon od bodu M je mimo rozpetı 0-45 (π4 radian) jepouzit sklon strmejsı k jednomu z bodu P1 P2 a zaroven i sklon je spoctenk tomuto bodu V prıpade ze oba sousednı body jsou vyse polozeny nez bodM smer nenı pro tento trojuhelnık uvazovan Po spoctenı vsech osmi smerua sklonu pro jednotlive plosky jsou tyto smery povazovany za lokalne ne-jstrmejsı pro kazdy trojuhelnık v rozsahu 45 Smery vedoucı prımo do bodu

6

P1 nebo P2 tedy ty kde d = 0 nebo d = π4 jsou uvazovany pouze vprıpade kdy obe vedlejsı sousednı bunky majı smer k bodu P1 nebo P2Tato situace je znazornena na obrazku 2

Obrazek 2 Ukazka urcenı smeru odtoku z bunky [1]

Prvnı prıpad je smer mırıcı mezi bunky 5 a 6 Druhy prıpad je smer kteryvede prımo do bunky 3 Tato situace nastane jestlize pro trojuhelnık M43vyjde lokalnı smer d = π4 a pro trojuhelnık M32 smer vyjde d = 0Pote co je smer odtoku pro bunku vypocten je celkovy odtok rozdelendo vsech vyslednych smeru na zaklade sklonu Resenı teto problematiky jevıce popsano v sekci 42 Pro smery mırıcı mezi body P1 a P2 je odtokrozdelen do dvou bunek na zaklade nevejtsıho sklonu Pomer odtoku do buneks body P1 a P2 bude v tomto poradı α245 a α145

Obrazek 3 Trojuhelnıkove plosky [1]

7

42 Technicke resenı MDinfinVyse jiz bylo zmıneno ze algoritmus je napsan v jazyce Python Algoritmusje rozdelen do dvou skriptu Prvnı z nich obsahuje funkce a druhy je hlavnıVstupem do modelu je rastr digitalnıho modelu terenu a vystupnı adresardo ktereho se ulozı finalnı rastr smeru odtoku viz obr 4 Po nactenı rastruze vstupnıch parametru je tento rastr preveden na matici NumPy pomocıfunkce

arcpy RasterToNumPyArray ( InputRaster )

NumPy [5] je rozsırenı programovacıho jazyka Python je to balıcek uzıvanypro vedecke vypocty Umoznuje podporu velkych multi-dimenzionalnıch polıa matic spolu s velkou knihovnou matematickych funkcı pro praci s temitopoli

Algoritmus cyklem projızdı vsechny prvky matice a u tech ktere majı hod-notu ruznou od NoData nalezne okolı Hledanı okolı bunky provadı funkceneighbors ta je definovana takto

def ne ighbors ( i j array x y ) return nb1 nb2 nb3 nb4 nb5 nb6 nb7 nb8

Vstupem funkce je pozice v matici dale cela matice a jejı rozmery Funkceneighbors vypocıta hodnoty vysek sousednıch osmi bunek a vratı je na vystup

Obrazek 4 Dialogove okno nastroje MDinfin

Vystup z funkce neighbors slouzı jako jeden z vstupnıch parametru pro dalsıfunkci

8

Funkce byla pojmenovana dir slope jelikoz jejım vystupem je smer odtokua sklon tohoto smeru

def d i r s l o p e ( pointM nbrs vpix sp ix ) return d i r e c t i o n s l ope

Pro kazdy trojuhelnık byla spoctena hodnota d viz vzorec 3 Hodnota s bylapo spatnych a nelogickych vysledcıch pocıtana podle jineho vzorce ktery jizdaval spravne vysledky

s0 =

radicz212y21

+z22y22

(5)

Vzorec se lisı pro kazdy trojuhelnıcek uvedeny je pro vypocet sklonu kdy sousednıbunka je severozapadnı a severnı Tımto postupem bylo zbytecne pocıtatz-tovou slozku vekotoru n vzorec 2 Byly osetreny prıpady kdy sousednıbunky aktualnıho pocıtaneho trojuhelnıku jsou obe vyse polozene nebo obemimo rastr (NoData) Dalsı prıpad nastane jestlize je jeden bod vne rastra druhy v rastru lezı Smer je potom urcen prımo do toho bodu ktery nalezırastru Taktez i sklon je pocıtan pouze mezi tımto bodem a bodem M Lokalnı smer d v kazde plosce po vypoctenı nesmı prekrocit 45 V situacize tuto hodnotu prekrocı je smeru prirazena hodnota 0 nebo 45 v zavislostina vzajemnem porovnanı vysek bodu v trojuhelnıku Takto jsou zpracovanyvsechny plosky a je zjisteno zda-li do kazdeho trojuhelnıku nastava smerodtoku nebo ne Na konci funkce dir slope se kontroluje prıpad kdy smersousednıch trojuhelnıku odkazuje presne do stejneho bodu tedy hodnotysmeru musı byt pro prvnı trojuhelnık d = 45 a pro nasledujıcı sousednıtrojuhelnık d = 0 Vystupem funkce jsou dva vektory o osmi prvcıch smera sklon pro kazdou plosku

Dalsı fazı vypoctu je zjistenı pomeru vody ktera potece do jednotlivychsmeru K vypoctu pomeru byl pouzit tento vzorec [2]

fi =sxi8sum

j=1

sxj

(6)

kde s vyznacuje sklon vypocteneho smeru konkretnı trojuhelnıkove ploskya x je promenny exponent Pokud by byl exponent zvolen 1 bude vyslednasıtrsquo obdobna jako pri pouzitı MD8 algoritmu Pri zvetsovanı exponentu xk nekonecnu bude sıtrsquo stejna jako pri pouzitı D8 metody Vychozı hodnotaexponentu byla zvolena x = 4 coz je kompromis mezi obema variantami

9

Zmena exponentu se v soucasne podobe neprojevı na vyslednem rastru je-likoz vysledek prezentuje pouze smer odtoku a ne procentualnı cast Tohotopomeru bude vyuzito az pri spojenı skriptu s 2D modelem SMODERP

V dalsı casti vypoctu je rozdelen jiz zjisteny pomer z celkoveho odtokudo dvou prıpadne pouze do jedne bunky v zavislosti na smeru odtoku dVe vysledku je vypocten vektor osmi cısel kde kazda hodnota od 0 do 1prestavuje jiz procentualnı pomer z celkoveho odtoku do kazde sousednıbunky

Pro vyslednou reprezentaci smeru odtoku na vystup byl pro kazdou bunkuvytvoren vektor obsahujıcı 1 a 0 rıkajıcı zda nastava ci nenastava odtokdo sousednı bunky Tento vektor byl preveden na celocıselnou hodnotu po-mocı funkce bool2int

def boo l 2 i n t ( x ) y = 0for i j in enumerate ( x )

i f j y += 1ltlt ireturn y

Funkce ma na vstupu vektor jedicek a nul Naprıklad pro vektor 00000111kdy voda tece na severozapad sever a severovychod se funkce chova taktoJe testovano jestli platı j = 1 tedy prvnıch pet nul vektoru funkce preskocıa pro prvnı jednicku se pricte k promenne y 20 v dalsım kroku 21 a v poslednım22 Operator vyjadruje totiz bitovy posun smerem doleva Vysledkem jena vystupu cıslo y = 1 + 2 + 4 = 7

Pro vsechny bunky byla vypoctena hodnota reprezentujıcı smer odtoku Tatohodnota se ulozı do matice a ta se nasledne prevede na vysledny rastr

f l o w d i r = arcpy NumPyArrayToRaster ( value LLcorner spix vpix rdquordquo )

value hodnota reprezentujıcı smer odtokuLLcorner souradnice leveho dolnıho rohuspix sırka pixeluvpix vyska pixelu

10

5 Vysledky

Algoritmus MDinfin byl testovan na skutecnych datech dvou pozemku u obcıNucice ve Stredoceskem kraji a Bykovice v kraji Jihomoravskem rastry jsouv prıloze 71 Oba dva rastry jsou o rozlisenı 5 metru Finalnı rastry jsouporovnavany s rastry vytvorenymi v prostredı ArcGIS nastrojem Flow Di-rection metodou D8

51 Realna data - Bykovice

Vysledne rastry Flow Direction pro uzemı Bykovice jsou uvedeny v prıloze72 Oba rastry byly pro hodnoty 202127 obarveny shodnou barvou kvulilepsı nazornosti a porovnatelnosti vysledku Rastr ktery obsahuje z celkovehopoctu 44807 bunek celkem 23655 bunek s hodnotami vysek po probehnutıalgoritmy dal nasledujıcı vysledky

FD D8 MDinfin1 3650 7372 666 9174 207 188 21 716 94 3732 791 8564 8818 1045128 9408 14983sum

23655 14983

Tabulka 1 Tabulka porovnanı obou algoritmu pro rastr Bykovic

FD je zkratka pro Flow Direction cili smer odtoku reprezentovany celocıselnouhodnotou Ostatnı hodnoty u vysledneho rastru na ktery byl pouzit algorit-mus MDinfin jsou v rozpetı 0246 V rozmezı hodnot smeru odtoku 246255se nevyskytujı zadne bunky Cas potrebny pro vykonanı skriptu byl v prıpadeD8 4 vteriny Pro algoritmus MDinfin byl cas 15 vterin

11

52 Realna data - Nucice

Vysledne rastry jsou uvedeny v prıloze 73 Opet bylo pouzito shodne obar-venı pro zakladnı smery u obou rastru Rastr Nucice obsahoval data na 82732bunkach z celkove poctu 125449 bunek Vysledky jsou pro prehlednost uve-deny v tabulce

FD D8 MDinfin1 12186 12332 12441 87034 16907 10278 9826 1642316 2516 28832 5010 241764 7788 366128 16058 25475sum

82732 55932

Tabulka 2 Tabulka porovnanı obou algoritmu pro rastr Nucic

Ostatnı hodnoty u vysledneho rastru na ktery byl pouzit algoritmusMDinfin jsou v rozpetı 0255 Cas potrebny pro vykonanı skriptu byl v prıpadeD8 6 vterin Pro algoritmus MDinfin byl cas 50 vterin

12

6 Zaver

Cılem projektu bylo vytvorit funkcnı skript obsahujıcı algoritmus pojmen-ovany MDinfin [1] ktery resı odtok do sousednıch bunek rastru Algoritmusbyl napsan v programovacım jazyce Python a testovan na realnych datechVysledky byly mırnym prekvapenım kdy zejmena hodnoty smeru 128 tedyseverovychodnıho se vyskytovaly ve vysledku velmi casto viz tabulky 1 a 2Predpokladem bylo ze se odtok rozlozı do vıce smeru a pocet bunek s hod-notami zakladnıch smeru 1248163264 a 128 bude mene nez v prıpade al-goritmu D8 K rozkladu do vıce smeru sice doslo ale pocet nekterych bunekse zakladnımi smery byl vetsı u algoritmu MDinfin

Co se tyce delky doby behu algoritmu je algoritmus MDinfin pomalejsı viz casyv kapitole 5 nez D8 z nekolika zrejmych duvodu Predevsım algoritmus D8provadı mnohem mene pocetnıch operacı z duvodu jeho mensı slozitostiviz 3 Dalsım duvodem je take rozdıl v jazyce ve kterem jsou oba algo-ritmy napsany D8 je napsan v programovacım jazyce C++ ktery na vetsıchdatech je mnohonasobne rychlejsı nez Python Prepsanım algoritmu MDinfindo jazyka C++ by mohla byt cesta k budoucımu zvysenı rychlosti pracealgoritmu

13

Reference

[1] SEIBERT Jan McGlynn BL A new triangular multiple flow di-rection algortihm for computing upslope areas from gridded digi-tal elevation models [online] [cit 13 5 2013] Dostupne ke stazenız URL lthttpciteseerxistpsueduviewdocdownloaddoi=101179977amprep=rep1amptype=pdfgt

[2] HOLMGREN Peter Multiple direction algortihms for runoff modellingin grid based elevation models An empirical evaluation [online] [cit13 5 2013] Dostupny z URL ltftpwwwlwrkthseCommonUllaMFor_Imran[1994]20holmgren20-20multiple20flow

20direction20algorithms20for20runoff20modelling20in

20grid20based20elevation20modelspdf gt

[3] ESRI ESRI WebHelp - How Flow Direction works [online] [cit13 5 2013] Dostupne z URL lthttphelparcgiscomenarcgisdesktop100helpindexhtml009z00000063000000

htmgt

[4] ESRI ESRI Webhelp - Flow Direction (Spatial Analyst) [online][cit 13 5 2013] Dostupne z URL lthttphelparcgiscomenarcgisdesktop100helpindexhtml009z00000052000000

htmgt

[5] WIKIPEDIA NumPy [online] [cit 13 5 2013] Dostupne z URLlthttpenwikipediaorgwikiNumPygt

[6] INFORMIT Working with operators [online] [cit 13 5 2013] Dos-tupne z URL lthttpwwwinformitcomarticlesarticleaspxp=2002831ampseqNum=6gt

14

7 Prılohy

71 Bykovice a Nucice vstupnı DMT rastry

Obrazek 5 DMT Bykovice

Obrazek 6 DMT Nucice

15

72 Bykovice vysledky

Obrazek 7 Flow Direction D8

Obrazek 8 Flow Direction MDinfin

16

73 Nucice vysledky

Obrazek 9 Flow Direction D8

Obrazek 10 Flow Direction MDinfin

17

Page 4: pro zac ate cn kygeo.fsv.cvut.cz/gdata/2013/pin2/e/dokumentace/... · 2013-06-05 · CESK E VYSOK E U CEN I TECHNICKE V PRAZE FAKULTA STAVEBN I OBOR GEODEZIE A KARTOGRAFIE Dokumentace

1 Nastavenı editoru v ArcGIS - Geoprocessing rarr Geoprocessing op-tionsZde v poli Geoprocessing tool rarr editordebugger zvolıme nami pre-ferovany editor Zada se cesta k exe souboru programu PythonWin

Obrazek 1 Nastavenı editoru a debuggeru

Nynı pri volbe editace skriptu prımo v ArcGIS se nam zdrojovy kodotevre v danem editoru viz nıze

3

2 Vytvorenı nastroje (tool) Nove toolboxy a nastroje se vytvarejıstejne jako jine objekty v ArcGIS - tedy v ArcCataloguNovy toolbox se vytvorı po kliknutı pravym tlacıtkem mysi na ad-resar ToolboxesMy Toolboxes a zvolenı polozky New rarr Toolbox V ta-kovemto uzivatelskem Toolboxu muzeme pridat skript Opet pres pravetlacıtko mysi Add rarr Script najdeme soubor py do ktereho budemepsat zdrojovy kod Nynı pri opetovnem zapnutı ArcGIS stacı najıt vArcCatalogu tento skript kliknout pravym a zvolit Edit Zdrojovykod se automaticky otevre v definovanem editoru

Obrazek 2 Vytvorenı noveho toolboxu

Pri pridavanı skriptu muzeme zadavat vstupnı a vystupnı parametryTento krok muzeme preskocit a editovat tyto parametry pozdeji

4

Obrazek 3 Pridanı skriptu

3 Editace vstupnıch a vystupnıch parametru Pro editaci parametruklikneme pravym na skript v ArcCatalogu a zvolıme Properties Zdemuzeme mimo jine editovat i cestu k souboru py V zalozce Parametersje seznam parametru Po kliknutı na parametr se ve spodnım okne ob-jevı jejich atributy z nichz nejdulezitejsı je Direction tj zda-li se jedna ovstupnı nebo vystupnı parametr Vyznam dalsıch atributu je jasny z je-jich nazvu a nabıdky jejich hodnot Pri definovanı parametru je potrebazvolit spravny datovy typ parametru z preddefinovane nabıdky

5

Obrazek 4 Editace parametru

22 Obecne poznatky pro psanı skriptu

Pred psanım skriptu je samozrejme zadoucı si nejprve osvojit zakladnı syntaxiPythonu Pote muzeme psat skript pro ArcGIS Protoze uvod do Pythonuje perfektne zpracovan v mnoha dokumentech zde jen strucne uvedeme parzasad

221 Vybrane syntakticke zasady Pythonu

Python rozeznava bıle znaky Napr telo cyklu je oznaceno pouze odsa-zenım tabulatorem V C++ by funkce bılych znaku byla nahrazena slozenymizavorkami Python rozlisuje velka a mala pısmena Komentare se znacı oznacujecely radek Vıceradkovy komentar nenı moznyPole je nejprve nutne inicializovat pak je mozne plnit jej pomocı indexuDalsı informace jsou pekne sepsany napr zde httpwwwsallyxorgsallypythonindexphp

222 Help

Pro uvod do skriptovanı v ArcGIS je nejvyznamnejsım pomocnıkem Helpprımo od spolecnosti ESRI

6

httphelparcgiscomenarcgisdesktop100helpHelp je v anglictine a je zde prehledne popsana hledana funkce a jejı pouzitı jedemonstrovano na ukazce kodu coz je obrovskou vyhodou pro porozumenıjak dana funkce pracuje a funguje

223 Nactenı vstupnıch parametru

arcpyGetParameterAsText(index)

Indexy v Pythonu zacınajı od 0 a zde oznacujı poradı parametru jak byldefinovan v ArcCataloguVzdy je potreba parametr ulozit do nejake promenne tedy spravna syntaxebude

NazevPromenne = arcpyGetParameterAsText(0)

Stejne tak vytvorıme promennou ktera bude reprezentovat vystupnı para-metr Do teto promenne pak ukladame vysledek

PRIKLADSkript ktery zkopıruje shapefile a ulozı jej pod uzivatelem zvolenym nazvemdo zvoleneho adresare

import arcpy

inShapefile = arcpyGetParameterAsText(0)

outShapefile = arcpyGetParameterAsText(1)

arcpyCopy_management (inShapefile outShapefile)

224 Vypisy zprav a atributovych typu

Pro jakykoliv textovy vystup do vysledneho dialogu se pouzıva funkce Ad-dMessage() Pokud chceme touto funkcı vypsat hodnotu atributu nebo jinepromenne ktera nenı datoveho typu string pouzijeme pretypovanı str(promenna)Pro zjistenı atributu objektu se casto vyuzıva funkce Describe ktera umoznıpraci s mnozstvım atributovych typu PRIKLAD

import arcpy

inShapefile = arcpyGetParameterAsText(0)

ShpShapeType = arcpyDescribe(inShapefile)shapeType

7

arcpyAddMessage(Shape Type + str(ShpShapeType))

Na prıkladu je demonstrovano jak vypsat typ vstupnıho rastruVedle vypisu zpravy AddMessage existujı jeste vypis varovanı AddWarning(text je zvyrazneny) a vypis chybove hlasky AddError (beh programu seukoncı ve vyslednem dialogu v ArcGIS se vypıse dana hlaska a vypocet jevyhodnocen jako neuspesny)

225 Prıstup k prvkum atributove tabulky

K prvkum atributove tabulky se dostaneme pomocı funkce SearchCursor Tanam vytvorı pole ntit (jednotlivych radku) tabulky Ty se pak dajı kromeindexovanı prochazet napr cyklem for V tomto cyklu muzeme porovnavathodnoty atributu s hledanou hodnotou atributu Tu nalezneme jako ntitanazev atributuV prıkladu je to formule rowPOINT XHodnota FID je hodnota zadana uzivatelem ntity jsou body z shapefilu Kodv prıkladu ulozı souradnice bodu do polı X Y

PRIKLAD

import arcpy

inShapefile = arcpyGetParameterAsText(0) typu shapefile

FID_P1 = arcpyGetParameterAsText(1) typu long

FID_P2 = arcpyGetParameterAsText(2) typu long

inicializace dvouprvkovych polı a pomocne promenne

X = [00]

Y = [00]

a=0

for row in rows

if i==int(FID_P1) or i==int(FID_P2)

X[a] = mathradians(rowPOINT_X)

Y[a] = mathradians(rowPOINT_Y)

a = a+1

i = i+1

Pokud bychom nehledali ntitu podle FID ktere tvorı vzdy posloupnost prirozenychcısel muzeme promenne i priradit mısto cısla naprıklad jmeno mesta i =

8

rowName Pak by ovsem vstupnı parametr musel byt typu String byl bypovinny a neobsahoval by prednastavene hodnoty

226 Nastavenı pracovnıho adresare a prace s pozicemi na disku

Pokud nenı nastaven pracovnı adresar (tzv workspace) ArcGIS automa-ticky nabızı cestu k vystupnım parametrum podle parametru vstupnıch De-faultne je nastavena cesta k systemove geodatabazi ArcGISu DefaultgdbPokud chceme toto zmenit muzeme pracovnı adresar nastavit prıkazem

arcpyenvworkspace = cesta

Pracovnı adresar muze byt slozka i geodatabaze

227 Prace s Feature Class a Feature Layer

Nektere funkce pracujı s Feature Class a nektere s Feature Layer Nekterefunkce umı pracovat s obema typy dat Musıme se tedy rozhodnout kteradata pouzıt a popr je vytvoritRozdıl mezi temito typy je v tom ze Feature Class jsou data ulozena pevnena disku Tedy naprıklad shapefile nebo vrstva geodatabaze Typ FeatureLayer je uchovavan v pameti pocıtace a obsahuje aktualnı situaci vrstvyPredevsım tedy pouze selektovane prvkyChceme-li mıt prıstup k selektovanym prvkum musıme vzdy pouzıt typ Fe-ature Layer PRIKLAD

Chceme-li naplnit zasobnık identifikatory vsech prvku vrstvy nezavisle natom jestli jsou nektere oznaceny pouzijeme Feature Class Chceme-li na-plnit zasobnık identifikatory aktualne oznacenych prvku pouzijeme FeatureLayerVytvorenı Feature Layer z Feature Class

path = arcpyGetParameterAsText(0)

arcpyMakeFeatureLayer_management(path layer)

228 Seznam parametru

Nektere funkce jako napr Merge management pouzıvajı jako vstupnı para-metr seznam parametru (vrstev) Ten se vytvarı jako bezny seznam kteryovsem obsahuje textove retezce urcujıcı cestu k danym vrstvam

9

merge_list = []

while pathToFeatureClass

merge_listappend(rsquopathToFeatureClassrsquo)

arcpyMerge_management(merge_list outFeatureClass)

229 Testovanı existence atributoveho sloupce

Pokud chceme pridat atributovy sloupec funkcı AddField management jevhodne nejprve otestovat zda-li jiz neexistuje To se provede pomocı seznamusloupcu

fieldList = arcpyListFields(inFeatureClass rsquosectionrsquo)

fieldCount = len(fieldList)

if (fieldCount = 1)

arcpyAddField_management(inFeatureClass rsquosectionrsquo rsquoSHORTrsquo)

2210 Balıcek NumPy a jeho pouzitı

Balıcek NumPy ma obrovsky vyznam pri praci s poli a maticemi Pokudmame na vstupu rastr je treba ho prevest do podoby ve ktere budou hodnotyv jednotlivych bunkach snadno dostupne a mozne matematicke operace snimi K tomuto vyuzijeme funkce RasterToNumPyArray()

arcpyRasterToNumPyArray(InputRaster)

Tato funkce prevede na rastr na matici a jı uz muzeme bez problemu indexo-vat a provadet s nı pocetnı operace Jestlize potrebujeme dostat jako vysledekopet rastr prevedeme vyslednou matici opacnym postupem na rastr

NumPyArrayToRaster (maticelevy_dolnı_rohvelikost_pixelu_x

velikost_pixelu_y hodnota_pro_NoData)

10

3 Zaver

V tomto dokumentu byly demonstrovany ukazky a prıpady pro uplne zacatkypri programovanı skriptu spustitelneho v prostredı ESRI ArcGIS 100 Kom-pletnı zdrojove kody ze kterych se cerpaly ukazky jsou ke stazenı na strankachpredmetu PIN2

11

CESKE VYSOKE UCENI TECHNICKE V PRAZE

FAKULTA STAVEBNI

OBOR GEODEZIE A KARTOGRAFIE

Dokumentace k projektu informatika 2

Automatizace sestavenı Atlasueroznıho smyvu a transportu

splavenin ve velkych povodıch

MICHAL BECICKA

15 kvetna 2013

Obsah

1 Uvod 211 O tematu 212 Strucny souhrn 2

2 Popis pracı 321 Nastroj pro tvorbu gridu 3

211 Uvodnı dialog 4212 Vysledny log 5213 Vysledne vrstvy 5214 Cinnost nastroje podrobne 6

22 Generalizace 9221 Uvodnı dialog 9222 Vysledny log 10

23 Finalnı upravy a export 10

3 Problemy a moznosti rozsırenı 1031 Pripojovanı externıch tabulek 1032 Doba behu tvorby gridu 1133 Moznosti rozsırenı 11

4 Zaver 12

5 Prılohy 1351 Vysledny log tvorby gridu 1352 Vysledny log generalizace 14

1

1 Uvod

11 O tematu

Tema bylo urceno doc Krasou z katedry Hydromelioracı a krajinneho inzenyrstvıpro prezentovanı vysledku vypoctu eroznıho smyvu a transportu splaveninPresto ze je nastroj primarne urcen pro toto pouzitı byla snaha jej napsatco nejuniverzalnejiCılem projektu je vytvorit atlas sestaveny z jednotlivych tematickych mapTyto mapy jsou vytvoreny pro cca tretinu uzemı Ceske Republiky V potrebnemmerıtku (cca 150 000) je nemozne vytvaret spojene tematicke mapy Bylotedy nutne nejprve vyhodnotit jak nejlepe vysledky prezentovat pote vy-tvorit nastroj ktery mapy podle pozadavku upravı (generalizuje vizualizo-vane prvky) vygeneruje jednotlive mapove listy a jejich prehledku Dalevygeneruje seznam mapovych listu pro jednotliva povodı a dalsı potrebneudajeNastroj je psan v jazyce Python pro ArcGIS 100

12 Strucny souhrn

Prace se sklada z nekolika castı

1 Vytvorenı gridu - Tato cast je nejrozsahlejsı Jedna se o skript kterypro dana povodı vytvorı rozsah mapovych listu (tzv index grid layer)a do atributovych tabulek ulozı potrebne hodnoty viz dale

2 Generalizace obsahu mapy - Generalizace nakonec probehla velmijednoduse a to kategorizacı hodnot kumulovaneho smyvu

3 Uprava vzhledu a export - Tato cast byla provadena manualne varcgis layout view Po vytvorenı kyzeneho vzhledu pote probehlo ge-nerovanı jednotlivych mapovych listu pomocı toolbaru Data DrivenPages

2

2 Popis pracı

21 Nastroj pro tvorbu gridu

Tento nastroj vytvorı polygonovou vrstvu obsahujıcı grid a to podle zadanehomerıtka a velikosti mapoveho pole Do atributove tabulky gridu vlozı sloupecs nazvy mapovych listu a sloupec s cısly sekcı (bude vysvetleno dale) Zarovenprida do vstupnı polygonove vrstvy sloupec s cısly sekcı a sloupec s nazvymapovych listu na kterych se dany polygon (povodı) nachazı Dale vytvorıvrstvu nazev gridu dissolve pro prehledku sekcı

Pojem sekce Sekce je tvorena vsemi dotykajıcımi se polygony Mapovelisty jsou ke kazde sekci tvoreny zvlastrsquo a jejich nazvy jsou pote rozsıreny ocıslo sekce Prıklad cıslovanı mapovych listu 1-A1 1-A2 2-A1 2-A2

Obrazek 1 Vstupnı polygonova vrstva

3

Obrazek 2 Ocıslovane sekce polygonove vrstvy

211 Uvodnı dialog

Uvodnı dialog nastroje obsahuje pole pro 5 parametru

bull In - vstupnı parametr datovy typ Feature classVstupnı vrstva polygonu

bull Scale - vstupnı parametr datovy typ LongPozadovane merıtko

bull Map field width - vstupnı parametr s nastavenou defaultnı hodnotou25 datovy typ DoubleSırka vysledneho mapoveho ramce v cm

bull Map field height - vstupnı parametr s nastavenou defaultnı hodnotou30 datovy typ DoubleVyska vysledneho mapoveho ramce v cm

bull Out - vystupnı parametr datovy typ Feature classVystupnı vrstva gridu

4

Obrazek 3 Grid - Uvodnı dialog

212 Vysledny log

Kompletnı prıklad vysledneho logu je k nalezenı v prıloze 51Obsahuje tyto informace

bull Umıstenı pouzıvane databaze na disku

bull Dale v kazdem cyklu

ndash Poradove cıslo cyklu

ndash Aktualnı pocet nezpracovanych polygonu

ndash Cıslo vytvarene sekce

ndash Identifikatory polygonu tvorıcıch danou sekci

bull Pocet sekcı

bull Pocet mapovych listu v kazde sekci

213 Vysledne vrstvy

Vysledny grid pro merıtko 1 80 000 a defaultnı velikost mapoveho pole (25x 30 cm) vypada nasledovne

5

Obrazek 4 Grid - Vysledna vrstva

214 Cinnost nastroje podrobne

1 Prıpravne cinnostiV prvnıch radcıch kodu jsou vytvoreny pomocne promenne a pole znichz pro dalsı cinnost je potreba zmınit zasobnık IDs Ten je naplnenidentifikatory povodıPokud jiz neexistujı jsou ve vstupnı polygonove vrstve vytvoreny atri-butove sloupce hard ID section MapSheets

bull hard ID - Do tohoto sloupce byly zkopırovany identifikatory abyi po rozdelenı do nekolika vrstev mely polygony jednoznacny iden-tifikator

bull section - Po vypoctu sekcı sem bude pro kazdy polygon zapsanocıslo sekce ve ktere se nachazı

bull MapSheets - Atribut se seznamem mapovych listu na kterych sedane povodı nachazı

Ukazka tvorby atributoveho sloupce

fieldList = arcpyListFields(inFeatureClass rsquoMapSheetsrsquo)

6

fieldCount = len(fieldList)

if (fieldCount = 1)

arcpyAddField_management(inFeatureClass rsquoMapSheetsrsquo rsquoTEXTrsquo)

2 Hlavnı vypocetnı cast

Hlavnı cast je cela v cyklu while (len(IDs) gt 0) tj cyklus probıhadokud jsou v zasobnıku IDs hodnoty Na konci cyklu jsou vzdy identi-fikatory zpracovanych povodı ze zasobnıku mazany V kazdem prubehucyklu jsou selektovany povodı tvorıcı 1 sekci k takove sekci je potevytvoren grid a jsou plneny nove atributove sloupce

Ukazka hlavnıho cyklu

while len(IDs) gt 0

oznacenı povodı i-te sekce

rows_sel = arcpySearchCursor(rsquopovodi_classrsquo)

for row_sel in rows_sel

IDsremove(row_selOBJECTID)

V kazdem prubehu cyklu je zpracovana 1 sekce - tj shluk povodı kteremajı spolecnou cast hranice Sekce je tvorena na zaklade dotazu Se-lectByLocation s definicı BOUNDARY TOUCHES Dotaz se opakujev cyklu dokud se pocet oznacenych povodı zvetsuje K tomu slouzıpromenne matchcount1 matchcount2 ktere obsahujı pocet oznacenychpolygonu

Vytvorenı sekce

bull Oznacenı prvnıho nezpracovaneho polygonu

first_ID = str(IDs[0])

fieldName = OBJECTID

Query = + fieldName + = + first_ID

arcpySelectLayerByAttribute_management(rsquopovodi_classrsquo rsquoNEW_SELECTIONrsquo Query)

matchcount1 = int(arcpyGetCount_management(rsquopovodi_classrsquo)getOutput(0))

bull Prvnı prubeh SelectByLocation

7

arcpySelectLayerByLocation_management(rsquopovodi_classrsquo rsquoBOUNDARY_TOUCHESrsquo

rsquopovodi_classrsquo)

matchcount2 = int(arcpyGetCount_management(rsquopovodi_classrsquo)getOutput(0))

bull Dalsı prubehy SelectByLocation

while matchcount1 lt matchcount2

matchcount1 = matchcount2

arcpySelectLayerByLocation_management(rsquopovodi_classrsquo rsquoBOUNDARY_TOUCHESrsquo

rsquopovodi_classrsquo)

matchcount2 = int(arcpyGetCount_management(rsquopovodi_classrsquo)getOutput(0))

Oznacene polygony jsou ulozeny jako polygonova vrstva do vstupnı ge-odatabaze Tato vrstva je dale pouzita pro tvorbu gridu

Vytvorenı gridu

Pred samotnou tvorbou bylo potreba zjistit rozsah sekce Pokud bylasekce mensı nez 1 mapovy list bylo treba definovat souradnice polohylistu tak aby povodı lezelo na stredu listu Do zasobnıku byly nactenysouradnice lomovych bodu povodı a byly z nich vybrany maximalnı aminimalnı hodnoty Jejich rozdıl pak urcil rozsah sekce

Prıklad plnenı zasobnıku souradnicema

desc = arcpyDescribe(outputFeatureClassPath+rsquorsquo+output_name)

shape_field_name = descShapeFieldName

rows3 = arcpySearchCursor(outputFeatureClassPath+rsquorsquo+output_name)

mbr_X=[]

mbr_Y=[]

for row3 in rows3

Create the geometry object

feat = row3getValue(shape_field_name)

partnum = 0

for pnt in featgetPart(partnum)

mbr_Xappend(pntX)

mbr_Yappend(pntY)

partnum += 1

8

Vytvorenı gridu pote probıha budrsquo s definovanou nebo s nedefinovanoupolohou pocatecnıho mapoveho listu Pro vytvorenı gridu je pouzitafunkce GridIndexFeatures cartography

Ukazka

arcpyGridIndexFeatures_cartography(outputFeatureClassPath+rsquorsquo+grid_name

outputFeatureClassPath+rsquorsquo+output_name USEPAGEUNIT scale_str

sheet_width_str sheet_high_str str(grid_start_pnt_X)+rsquo rsquo+str(grid_start_pnt_Y))

Grid je tedy vytvoren pro jednu sekci Po vsech prubezıch cyklu jsoutakto vytvorene vrstvy gridu spojeny do jedne finalnı vrstvy V cyklujsou dale plneny nove atributove sloupce - cısla sekcı a nazvy mapovychlistu a to jak do nove (vystupnı) vrstvy gridu tak do vstupnı vrstvypovodı

3 Vytvorenı finalnıch vrstev tisk vysledku Jak bylo receno na zaverjsou spojeny jednotlive vrstvy gridu Vedle toho je vytvorena vrstvaspojenych mapovych listu po sekcıch - funkcı Dissolve - pro tvorbuprehledky Jsou vytisknuty vysledne hodnoty viz 212

22 Generalizace

Pro generalizaci byl napsan skript ktery nacıta liniovou vrstvu toku Tentoskript byl jiz psan na mıru podkladovym datum a pri nacıtanı je v nemvyuzito znalosti struktury danych podkladovych dat Skript k vrstve pripojıexternı tabulku a vytvorı atributovy sloupec kategorie Podle dat z externıtabulky pak plnı novy sloupec hodnotami 1 - 5 podle mnozstvı unasenehosedimentu Tato hodnota je pak pouzita pri vizualizaci datZajımavostı je ze pro nacıtanı musela byt tabulka indexovana viz 31

221 Uvodnı dialog

Uvodnı dialog obsahuje dva parametry

bull Input Feature Class Vstupnı liniova vrstva rıcnıch useku

bull Table Vstupnı tabulka obsahujıcı hodnoty rıcnıch splavnenin

9

222 Vysledny log

Vysledny log je k nahlednutı v prıloze 52 Obsahuje tyto informace

bull Pocet vsech rıcnıch useku

bull Pocet useku v jednotlivych kategoriıch

23 Finalnı upravy a export

Jak jiz bylo zmıneno finalnı vzhled mapoveho listu byl vytvoren manualne vLayout view a pomocı toolbaru Data Driven Pages Tento postup je casoveekonomictejsı a je jım dosazeno lepsıch vysledku dıky prehlednosti ToolbarData Driven Pages pak umoznuje vkladat dynamicke textove pole ktere seautomaticky menı s menıcım se mapovym listem Takovym polem je naprnazev mapoveho listu Stacı tedy definovat vzhled jednoho mapoveho listuv toolbaru Data Driven Pages navolit prıslusne pole - ty byly vytvorenynastrojem Grid viz 21 Dynamicky bylo potreba propojit s mapovym oknemi prehledku ktera byla vytvorena jako druhy Data Frame To se provedlo defi-novanım rozsahu podle hlavnıho mapoveho okna v Properties -iquest Data Frame-iquest Extant a definovanım Definition Query ve vlastnostech vrstvy Dalsım dy-namickym prvkem jsou oznacenı sousednıch mapovych listu a cıslo strankyNa takto sestavenou stranku s dynamickymi prvky bylo mozne pouzıt exportmapy do pdf a Atlas byl vygenerovanPrıklad dynamickeho textu pro nazev mapoveho listultdyn type=page property=PageNamegt

3 Problemy a moznosti rozsırenı

31 Pripojovanı externıch tabulek

Pri pripjovanı externıch tabulek musely byt indexovany hodnoty atribu-toveho sloupce pouziteho k parovanı To probehlo prıkazemarcpyAddIndex management (layer HydroID)Pripojenı tabulky musı probıhat k Feature layer Proto bylo nutne nejprve zFeature Class vytvorit Feature Layer1 Pote mohla byt tabulka pripojena

arcpyAddIndex_management (layer HydroID)

arcpyAddJoin_management(layer HydroID table Riverid)

1Rozdıl mezi Feature Layer a Feature Class je vysvetlen v prilozenem Tutorialu pro-gramovanı v Pythonu pro ArcGIS

10

Zde nastal problem s prıstupem k atributum Obecne nesmı nazvy atri-butovych sloupcu obsahovat mezery K hodnotam je pristupovano pres jed-notlive radky s parametrem nazev sloupce

rows= arcpySearchCursor(layer)

for row in rows

value=rownazev_sloupce

Pripojena tabulka ovsem mela v nazvech sloupcu mezeru K takto pojmeno-vanemu sloupci muselo byt pristupovano prıkazem getValue

rows= arcpySearchCursor(layer)

for row in rows

value=rowgetValue(rsquonazev tabulky$nazev sloupcersquo)

32 Doba behu tvorby gridu

Doba behu nastroje pro tvorbu gridu je znepokolive dlouha Bylo prove-deno merenı casu behu jednotlivych castı kodu funkcı time z modulu timeVysledky ukazaly ze nejdele trva vytvarenı novych vrstev Vrstva se muzevytvaret az 20 sekund Snaha o optimalizaci donutila nahradit vytvarenı vrs-tev s minimalnım ohranicujıcım obdelnıkem sekvencnım ukladanım souradniclomovych bodu polygonu z nichz pak funkcemi min a max byly tyto hodnotyzıskany Prubeh se tak urychlil o desıtky sekund (v jednom prubehu cyklupriblizne o 15 sekund) Dalsı moznostı bylo vyuzıt prostoroveho indexu datTato moznost nebyla vyuzita protoze ArcGIS pouzıva k prostorovemu in-dexovanı pravidelny grid Zıskanı MBR2 nebylo nalezeno Vyuzitı indexu byovsem problem neresilo Jak jiz bylo zmıneno nejdele trva vytvarenı novychvrstev Bohuzel funkce GridIndexFeatures cartography pro vytvorenı griduneumı pracovat se selektovanymi daty Tedy v kazdem cyklu musı byt ulozenapolygonova vrstva tvorıcı 1 sekci Pote mohla byt vytvorena vrstva tvorıcıgrid Tedy v kazdem prubehu cyklu jsou vytvareny 2 nove vrstvy Jelikozautor neprisel na zpusob jine optimalizace je nastroj pomaly Pro zadanydataset s 58mi povodımi jeho cinnost probıha desıtky minut

33 Moznosti rozsırenı

Do skriptu by se dal zakomponovat export seznamu mapovych listu pro kazdepovodı V soucasne verzi je tvoren exportem atributove tabulky

2minimum bounding rectangle - minimalnı ohranicujıcı obdelnık

11

4 Zaver

Byly vytvoreny nastroje pro automatizaci tvorby Atlasu pro mapy eroznıhosmyvu a transportu splavenin Tvorba Atlasu probıha v nekolika krocıchVizualizovane prvku jsou generalizovany Dale je vytvoren Grid ktery jepouzit jako indexova vrstva pro funkci Data Driven Pages Tou jsou vy-tvoreny jednotlive mapove listy Pomocı dynamickych prvku je pak vytvorenvzhled ktery se menı se zmenou mapoveho listu Nedostatkem je rychlostnastroje pro tvorbu gridu Presto ze je nastroj pomaly je zcela funkcnı Vprıpade potreby dalsıho rozsırenı bude ale vhodne vysledky nacıtat do novehonastroje Vzorovy vytisk vysledneho atlasu je prilozen Vzhledem k tomu zezpracovavana data jsou rozsahla a podlehajı autorskemu zakonu je vytvorenjen vzorovy vytisk z 6ti povodı Nastroje jsou psany v jazyce Python 26 proArcGIS 100 Pri praci byla vyuzıvana predevsım online napoveda ArcGISa diskuznı programatorska fora Kompletnı zdrojovy kod je ke stazenı nastrankach predmetu PIN2

12

5 Prılohy

51 Vysledny log tvorby gridu

Executing Grid

JAtlasvzorektemp_selectpovodi_vzorekgdbpokusne_povodi

70000 25 30 JAtlasvzorektemp_selectpovodi_vzorekgdbgrid70

Start Time Wed May 15 020551 2013

Running script Script2

Output folder JAtlasvzorektemp_selectpovodi_vzorekgdb

_____________________________________________________________________

count of basin polygon to process 6

_____________________________________________________________________

RUN 1

count of basins in 1 section 3

Their ID

ID 1

ID 3

ID 6

_____________________________________________________________________

count of basin polygon to process 3

_____________________________________________________________________

RUN 2

count of basins in 2 section 1

Their ID

ID 2

_____________________________________________________________________

count of basin polygon to process 2

_____________________________________________________________________

RUN 3

count of basins in 3 section 2

Their ID

ID 4

ID 5

----- RESULT -----

Number of sections 3

Number of map sheets

in section 1 13

in section 2 1

in section 3 2

Completed script Grid

Succeeded at Wed May 15 021359 2013 (Elapsed Time 8 minutes 8 seconds

13

52 Vysledny log generalizace

Executing generalization JAtlasvzorek2011_NAZV_nadrze2011_watemsedem

NAZV_tokyVT28_finshp

JAtlasvzorek2011_NAZV_nadrze2011_watemsedem28_vypocet

projectriversedimentxlsxprojectriversediment$

Start Time Wed May 15 075624 2013

Running script generalization

Category created

Total count of river parts 2879

Count of category 1 2428

Count of category 2 118

Count of category 3 68

Count of category 4 20

Count of category 5 245

Completed script generalization

Succeeded at Wed May 15 075638 2013 (Elapsed Time 1400 seconds)

14

CESKE VYSOKE UCENI TECHNICKE V PRAZE

FAKULTA STAVEBNI

OBOR GEODEZIE A KARTOGRAFIE

Dokumentace k projektu informatika 2

Stanovenı smeru odtokuna rastrovem digitalnım modelu

a implementace algoritmudo prostredı ArcGIS

BC JAN ZAJICEK

5 cervna 2013

Obsah

Obsah 1

1 Uvod 2

2 Nejbeznejsı existujıcı algoritmy 3

3 Flow Direction D8 431 Obecny princip D8 432 Popis algoritmu D8 5

4 Popis algoritmu MDinfin 641 Obecny princip MDinfin 642 Technicke resenı MDinfin 8

5 Vysledky 1151 Realna data - Bykovice 1152 Realna data - Nucice 12

6 Zaver 13

Reference 14

7 Prılohy 1571 Bykovice a Nucice vstupnı DMT rastry 1572 Bykovice vysledky 1673 Nucice vysledky 17

1

1 Uvod

Tato dokumentace byla zpracovana v ramci predmetu Projekt Informatika 2Semestralnı prace bude pouzita jako z jedna castı autorovi diplomove praces nazvem SMODERP 2D rozsırenı resıcı vztahy soustredeneho a plosnehoodtoku na danem uzemı Duvodem zpracovanı tohoto tematu byla potrebapouzitı v diplomove praci vıce nez jednoho algoritmu pro urcenı smeruodtoku v prostredı ArcGIS V soucasne dobe ArcGIS vyuzıva algoritmusD8 viz kapitola 3 jako jediny algoritmus pro vypocet smeru odtoku Tentoalgoritmus je soucastı Hydrology tools Nastroje ze skupiny Hydrology sepouzıvajı k modelovanı chovanı toku vody na povrchu Nejbeznejsı pouzıvanadigitalnı data povrchu Zeme jsou rastry digitalnı modelu terenu DMT slozenez jednotlivych bunek pixelu Tyto DMT rastry jsou pouzity jako vstupypro ruzne charakteristiky povrchu DMT rastr je souvisly povrch obvykleodkazujıcı na povrch Zeme Presnost dat je dana rozlisenım rastru taktezvzdalenostı mezi body rastru Informace o tvaru zemskeho povrchu je uzitecnapro mnoho oboru jako je napr zemedelstvı lesnictvı zivotnı prostredı neboregionalnı planovanı Tyto obory vyzadujı pochopenı jak voda tece v ramciuzemı a jak zmeny na tomto uzemı nasledne ovlivnı jejı tok

Cılem projektu bylo naprogramovat algoritmus ktery v roce 2007 publiko-vali Jan Seibert a Brian L McGlynn s nazvem MDinfin [1] Tento algoritmusje vylepsenım stavajıcıch algoritmu pro resenı urcenı smeru odtoku na ras-tru viz kapitola 2 Pro overenı spravnosti vysledku byla pouzita realnadata dvou pozemku u obcı Bykovice a Nucice Testovanı probıhalo na ras-trech o rozlisenı 5 metru Algoritmus byl naprogramovan v jazyce Pythonv prostredı NetBeans IDE 69 Pro spustenı v ArcGISu je potreba pridatdo prostredı vytvoreny toolbox upravit aktualnı cestu ke skriptu mainpya tento model nasledne spustit Vstupem modelu je rastr DMT a vystupnıadresar do ktereho se po dobehnutı modelu ulozı vysledny rastr s hodnotamismeru odtoku 1255 Algoritmus MDinfin je testovan na verzi ArcGIS 100Na nejnovejsı verzi ArcGIS 101 ktera vysla v cervnu 2012 nenı overenakompatibilita algoritmu v dusledku nefunkcnosti vıce nez jedne verze tohotoprogramu na jednom pocıtaci

2

2 Nejbeznejsı existujıcı algoritmy

Existujı tri nejbeznejsı algoritmy kazdy odlisne resıcı problematiku odtokuvody z rastru do sousednıch bunek Prvnım z nich je algoritmus D8 z roku1984 Algoritmus je podrobne popsan v nasledujıcı kapitole 3 Jelikoz odtoknastava vzdy jen do jedne sousednı bunky dochazı casto ke koncentracivodnıch sıtı a sıtrsquo odtoku pak neodpovıda skutecnosti Na druhou stranuje jeho vyhodou jeho jednoduchost a fakt ze nedochazı k nechtene disperzijako je tomu u druheho algoritmu

Druhym algoritmem je MD8 neboli multiple flow direction algorithm MD8algoritmem je voda odvadena do vsech nıze polozenych sousednıch buneka pomer vody je rozdelen procentualne podle sklonu Ve vysledku ma algo-ritmus tendenci vytvaret vıce realisticke prostorove sıte toku nez D8 tımze nedochazı k takove koncentraci vody v sıti U D8 ma mnohem vetsıvliv maly rozdıl vysek mezi sousednımi bunkami na to ktera bunka prijmeveskerou vodu Pouzitım MD8 tyto male vyskove rozdıly nemajı zdalekatakovy vliv jelikoz je mnozstvı vody rozdeleno pomerem mezi tyto bunkyNejvetsı nevyhodou tohoto algoritmu je jeho prılisna disperze na konver-gentnıch svazıch v dusledku odtoku do vsech nıze polozenych bunek

V roce 1997 byl navrzen algoritmus pojmenovany Dinfin Davidem G Tar-botonem z americke univerzity v Utahu Byl navrzen prıstup ktery je zalozenna osmi trojuhelnıkovych ploskach viz obrazek 3 Dıky tomuto postupu jsouodstraneny limitace v podobe moznosti pouze osmi smeru odtoku z bunkyProto je algoritmus pojmenovan Dinfin jelikoz muze nastat nekonecne moznostıvysledneho smeru odtoku Tento prıstup umoznuje pouze jeden smer odtokurozdeleny mezi jednu nebo dve bunky v zavislosti na smeru odtoku

Poslednı dva zmınene algoritmy MD8 a Dinfinmajı oproti D8 nevyhodu ve vetsıcasove narocnosti vypoctu V kapitole 4 je popsan algoritmus MDinfin kteryvyuzıva vyhody MD8 algoritmu za pouzitı trojuhelnıkovych plosek obdobnejako Dinfin algoritmus

3

3 Flow Direction D8

Pro pochopenı problematiky a zjevnost rozdılu mezi algoritmy je vhodneuvest jak funguje nastroj ktery pouzıva ArcGIS Zaklad algoritmu MDinfino nemz pojednava tato dokumentace je zalozen na podobnych postupech

31 Obecny princip D8

Princip nastroje urcenı smeru odtoku (Flow Direction) ktery pouzıva prostredıArcGIS je nasledujıcı Tento nastroj (tool) vezme vstupnı rastr digitalnıhomodelu terenu neboli vyskovy rastr Provede vypocet jehoz vystupem jerastr ktery v kazde bunce rastru obsahuje hodnotu urcujıcı smer odtokuz teto bunky Hodnot je osm podle osmi sousednıch bunek do kterych muzeodtekat voda viz obrazek 1 Prave podle osmi smeru odtoku se tento prıstupnazyva D8 (eight-direction approach)

Obrazek 1 Flow Direction D8 [3]

4

32 Popis algoritmu D8

Samotny vypocet algoritmu je v zasade primitivnı Pro vsechny sousednıbunky se vypocte maximalnı sklon [3]

maximalnı sklon = rozdıl vysek vzdalenost 100

Rozdıl vysek je rozdıl vysky v aktualnım bode a konkretnı sousednı bunkyVzdalenost je vypoctena mezi stredy bunek a lisı se v zavislosti na polozesousednı bunky Pro bunky sousedıcı vrcholem je hodnota velikosti pixeluprenasobena o odmocninu ze dvou Pro zbyle bunky sousedıcı hranou jevelikost vzdalenosti rovna velikosti pixelu Po nalezenı nejstrmejsıho smeruodtoku je hodnota ulozena v podobe bitove hodnoty reprezentujıcı danysmer Pred pouzitım nastroje Flow Direction se obvykle zpracuje vstupnırastr pomocı nastroje Sink Tento algoritmus zaplnı bezodtoke oblasti rastrunejnizsı hodnotou z okolı a do teto nejnizsı sousednı bunky pak posle voduPote jiz nemuze dojıt k situaci kdy vsechny sousednı bunky k dane buncemajı vyssı hodnoty vysek a nedochazelo by tedy k odtokuVysledny rastr nemusı obsahovat pouze bunky s hodnotami 202127 [4]Jestlize nastane situace kdy ma vıce sousednıch bunek nejnizsı hodnotuvysek pak je vysledna hodnota souctem vsech smeru Napr hodnota maximalnıhosklonu bude stejna pro sousednı bunku vlevo a nahore odtok tedy budesmerem na zapad (hodnota = 16) a na sever (hodnota = 64) vysledna hod-nota bude souctem 16 a 64 tedy 84

5

4 Popis algoritmu MDinfin

41 Obecny princip MDinfinObecny postup je prevzat z [1] Stejne jako v prıpade algoritmu Dinfin bylyzavedeny trojuhelnıkove plosky pro vypocet lokalnıho sklonu a smeru pro kazdoutrojuhelnıkovou plosku Okolo stredoveho boduM bylo vytvoreno osm trojuhelnıkuviz obrazek 3 Kazdy se zbyvajıcımi dvema vrcholy P1 P2 ve dvou sousedıcıchbunkach Pro kazdy z techto trojuhelnıku je vypocten smer nejvetsıho sklonuPokud oznacıme vysky bodu M P1 P2 jako hM hP1 hP2 rozdıly vysek sevypoctou takto

z1 = hP1 minus hM z2 = hP2 minus hM (1)

Obdobne se vypoctou rozdıly v x-ovych a y-ovych souradnicıch Po vypocturozdılu jednotlivych souradnic je vypocten normalovy vektor

n =

nx

ny

nz

=

z1y2 minus z2y1z1x2 minus z2x1y1x2 minus y2x1

(2)

Smer odtoku d a sklon s na trojuhelnıkove plose se vypocte pomocı rovnice3 Hodnota nula pro d oznacuje smer osy y a hodnota 3π2 oznacuje smerosy x

d =

0 nx = 0 ny ge 0

π nx = 0 ny lt 0

π2minus arctan(

ny

nx

) nx gt 0

3π2minus arctan(

ny

nx

) nx lt 0

(3)

s = minus tan

(arccos

(nzradic

n2x + n2

y + n2z

))(4)

Jestlize nejvetsı sklon od bodu M je mimo rozpetı 0-45 (π4 radian) jepouzit sklon strmejsı k jednomu z bodu P1 P2 a zaroven i sklon je spoctenk tomuto bodu V prıpade ze oba sousednı body jsou vyse polozeny nez bodM smer nenı pro tento trojuhelnık uvazovan Po spoctenı vsech osmi smerua sklonu pro jednotlive plosky jsou tyto smery povazovany za lokalne ne-jstrmejsı pro kazdy trojuhelnık v rozsahu 45 Smery vedoucı prımo do bodu

6

P1 nebo P2 tedy ty kde d = 0 nebo d = π4 jsou uvazovany pouze vprıpade kdy obe vedlejsı sousednı bunky majı smer k bodu P1 nebo P2Tato situace je znazornena na obrazku 2

Obrazek 2 Ukazka urcenı smeru odtoku z bunky [1]

Prvnı prıpad je smer mırıcı mezi bunky 5 a 6 Druhy prıpad je smer kteryvede prımo do bunky 3 Tato situace nastane jestlize pro trojuhelnık M43vyjde lokalnı smer d = π4 a pro trojuhelnık M32 smer vyjde d = 0Pote co je smer odtoku pro bunku vypocten je celkovy odtok rozdelendo vsech vyslednych smeru na zaklade sklonu Resenı teto problematiky jevıce popsano v sekci 42 Pro smery mırıcı mezi body P1 a P2 je odtokrozdelen do dvou bunek na zaklade nevejtsıho sklonu Pomer odtoku do buneks body P1 a P2 bude v tomto poradı α245 a α145

Obrazek 3 Trojuhelnıkove plosky [1]

7

42 Technicke resenı MDinfinVyse jiz bylo zmıneno ze algoritmus je napsan v jazyce Python Algoritmusje rozdelen do dvou skriptu Prvnı z nich obsahuje funkce a druhy je hlavnıVstupem do modelu je rastr digitalnıho modelu terenu a vystupnı adresardo ktereho se ulozı finalnı rastr smeru odtoku viz obr 4 Po nactenı rastruze vstupnıch parametru je tento rastr preveden na matici NumPy pomocıfunkce

arcpy RasterToNumPyArray ( InputRaster )

NumPy [5] je rozsırenı programovacıho jazyka Python je to balıcek uzıvanypro vedecke vypocty Umoznuje podporu velkych multi-dimenzionalnıch polıa matic spolu s velkou knihovnou matematickych funkcı pro praci s temitopoli

Algoritmus cyklem projızdı vsechny prvky matice a u tech ktere majı hod-notu ruznou od NoData nalezne okolı Hledanı okolı bunky provadı funkceneighbors ta je definovana takto

def ne ighbors ( i j array x y ) return nb1 nb2 nb3 nb4 nb5 nb6 nb7 nb8

Vstupem funkce je pozice v matici dale cela matice a jejı rozmery Funkceneighbors vypocıta hodnoty vysek sousednıch osmi bunek a vratı je na vystup

Obrazek 4 Dialogove okno nastroje MDinfin

Vystup z funkce neighbors slouzı jako jeden z vstupnıch parametru pro dalsıfunkci

8

Funkce byla pojmenovana dir slope jelikoz jejım vystupem je smer odtokua sklon tohoto smeru

def d i r s l o p e ( pointM nbrs vpix sp ix ) return d i r e c t i o n s l ope

Pro kazdy trojuhelnık byla spoctena hodnota d viz vzorec 3 Hodnota s bylapo spatnych a nelogickych vysledcıch pocıtana podle jineho vzorce ktery jizdaval spravne vysledky

s0 =

radicz212y21

+z22y22

(5)

Vzorec se lisı pro kazdy trojuhelnıcek uvedeny je pro vypocet sklonu kdy sousednıbunka je severozapadnı a severnı Tımto postupem bylo zbytecne pocıtatz-tovou slozku vekotoru n vzorec 2 Byly osetreny prıpady kdy sousednıbunky aktualnıho pocıtaneho trojuhelnıku jsou obe vyse polozene nebo obemimo rastr (NoData) Dalsı prıpad nastane jestlize je jeden bod vne rastra druhy v rastru lezı Smer je potom urcen prımo do toho bodu ktery nalezırastru Taktez i sklon je pocıtan pouze mezi tımto bodem a bodem M Lokalnı smer d v kazde plosce po vypoctenı nesmı prekrocit 45 V situacize tuto hodnotu prekrocı je smeru prirazena hodnota 0 nebo 45 v zavislostina vzajemnem porovnanı vysek bodu v trojuhelnıku Takto jsou zpracovanyvsechny plosky a je zjisteno zda-li do kazdeho trojuhelnıku nastava smerodtoku nebo ne Na konci funkce dir slope se kontroluje prıpad kdy smersousednıch trojuhelnıku odkazuje presne do stejneho bodu tedy hodnotysmeru musı byt pro prvnı trojuhelnık d = 45 a pro nasledujıcı sousednıtrojuhelnık d = 0 Vystupem funkce jsou dva vektory o osmi prvcıch smera sklon pro kazdou plosku

Dalsı fazı vypoctu je zjistenı pomeru vody ktera potece do jednotlivychsmeru K vypoctu pomeru byl pouzit tento vzorec [2]

fi =sxi8sum

j=1

sxj

(6)

kde s vyznacuje sklon vypocteneho smeru konkretnı trojuhelnıkove ploskya x je promenny exponent Pokud by byl exponent zvolen 1 bude vyslednasıtrsquo obdobna jako pri pouzitı MD8 algoritmu Pri zvetsovanı exponentu xk nekonecnu bude sıtrsquo stejna jako pri pouzitı D8 metody Vychozı hodnotaexponentu byla zvolena x = 4 coz je kompromis mezi obema variantami

9

Zmena exponentu se v soucasne podobe neprojevı na vyslednem rastru je-likoz vysledek prezentuje pouze smer odtoku a ne procentualnı cast Tohotopomeru bude vyuzito az pri spojenı skriptu s 2D modelem SMODERP

V dalsı casti vypoctu je rozdelen jiz zjisteny pomer z celkoveho odtokudo dvou prıpadne pouze do jedne bunky v zavislosti na smeru odtoku dVe vysledku je vypocten vektor osmi cısel kde kazda hodnota od 0 do 1prestavuje jiz procentualnı pomer z celkoveho odtoku do kazde sousednıbunky

Pro vyslednou reprezentaci smeru odtoku na vystup byl pro kazdou bunkuvytvoren vektor obsahujıcı 1 a 0 rıkajıcı zda nastava ci nenastava odtokdo sousednı bunky Tento vektor byl preveden na celocıselnou hodnotu po-mocı funkce bool2int

def boo l 2 i n t ( x ) y = 0for i j in enumerate ( x )

i f j y += 1ltlt ireturn y

Funkce ma na vstupu vektor jedicek a nul Naprıklad pro vektor 00000111kdy voda tece na severozapad sever a severovychod se funkce chova taktoJe testovano jestli platı j = 1 tedy prvnıch pet nul vektoru funkce preskocıa pro prvnı jednicku se pricte k promenne y 20 v dalsım kroku 21 a v poslednım22 Operator vyjadruje totiz bitovy posun smerem doleva Vysledkem jena vystupu cıslo y = 1 + 2 + 4 = 7

Pro vsechny bunky byla vypoctena hodnota reprezentujıcı smer odtoku Tatohodnota se ulozı do matice a ta se nasledne prevede na vysledny rastr

f l o w d i r = arcpy NumPyArrayToRaster ( value LLcorner spix vpix rdquordquo )

value hodnota reprezentujıcı smer odtokuLLcorner souradnice leveho dolnıho rohuspix sırka pixeluvpix vyska pixelu

10

5 Vysledky

Algoritmus MDinfin byl testovan na skutecnych datech dvou pozemku u obcıNucice ve Stredoceskem kraji a Bykovice v kraji Jihomoravskem rastry jsouv prıloze 71 Oba dva rastry jsou o rozlisenı 5 metru Finalnı rastry jsouporovnavany s rastry vytvorenymi v prostredı ArcGIS nastrojem Flow Di-rection metodou D8

51 Realna data - Bykovice

Vysledne rastry Flow Direction pro uzemı Bykovice jsou uvedeny v prıloze72 Oba rastry byly pro hodnoty 202127 obarveny shodnou barvou kvulilepsı nazornosti a porovnatelnosti vysledku Rastr ktery obsahuje z celkovehopoctu 44807 bunek celkem 23655 bunek s hodnotami vysek po probehnutıalgoritmy dal nasledujıcı vysledky

FD D8 MDinfin1 3650 7372 666 9174 207 188 21 716 94 3732 791 8564 8818 1045128 9408 14983sum

23655 14983

Tabulka 1 Tabulka porovnanı obou algoritmu pro rastr Bykovic

FD je zkratka pro Flow Direction cili smer odtoku reprezentovany celocıselnouhodnotou Ostatnı hodnoty u vysledneho rastru na ktery byl pouzit algorit-mus MDinfin jsou v rozpetı 0246 V rozmezı hodnot smeru odtoku 246255se nevyskytujı zadne bunky Cas potrebny pro vykonanı skriptu byl v prıpadeD8 4 vteriny Pro algoritmus MDinfin byl cas 15 vterin

11

52 Realna data - Nucice

Vysledne rastry jsou uvedeny v prıloze 73 Opet bylo pouzito shodne obar-venı pro zakladnı smery u obou rastru Rastr Nucice obsahoval data na 82732bunkach z celkove poctu 125449 bunek Vysledky jsou pro prehlednost uve-deny v tabulce

FD D8 MDinfin1 12186 12332 12441 87034 16907 10278 9826 1642316 2516 28832 5010 241764 7788 366128 16058 25475sum

82732 55932

Tabulka 2 Tabulka porovnanı obou algoritmu pro rastr Nucic

Ostatnı hodnoty u vysledneho rastru na ktery byl pouzit algoritmusMDinfin jsou v rozpetı 0255 Cas potrebny pro vykonanı skriptu byl v prıpadeD8 6 vterin Pro algoritmus MDinfin byl cas 50 vterin

12

6 Zaver

Cılem projektu bylo vytvorit funkcnı skript obsahujıcı algoritmus pojmen-ovany MDinfin [1] ktery resı odtok do sousednıch bunek rastru Algoritmusbyl napsan v programovacım jazyce Python a testovan na realnych datechVysledky byly mırnym prekvapenım kdy zejmena hodnoty smeru 128 tedyseverovychodnıho se vyskytovaly ve vysledku velmi casto viz tabulky 1 a 2Predpokladem bylo ze se odtok rozlozı do vıce smeru a pocet bunek s hod-notami zakladnıch smeru 1248163264 a 128 bude mene nez v prıpade al-goritmu D8 K rozkladu do vıce smeru sice doslo ale pocet nekterych bunekse zakladnımi smery byl vetsı u algoritmu MDinfin

Co se tyce delky doby behu algoritmu je algoritmus MDinfin pomalejsı viz casyv kapitole 5 nez D8 z nekolika zrejmych duvodu Predevsım algoritmus D8provadı mnohem mene pocetnıch operacı z duvodu jeho mensı slozitostiviz 3 Dalsım duvodem je take rozdıl v jazyce ve kterem jsou oba algo-ritmy napsany D8 je napsan v programovacım jazyce C++ ktery na vetsıchdatech je mnohonasobne rychlejsı nez Python Prepsanım algoritmu MDinfindo jazyka C++ by mohla byt cesta k budoucımu zvysenı rychlosti pracealgoritmu

13

Reference

[1] SEIBERT Jan McGlynn BL A new triangular multiple flow di-rection algortihm for computing upslope areas from gridded digi-tal elevation models [online] [cit 13 5 2013] Dostupne ke stazenız URL lthttpciteseerxistpsueduviewdocdownloaddoi=101179977amprep=rep1amptype=pdfgt

[2] HOLMGREN Peter Multiple direction algortihms for runoff modellingin grid based elevation models An empirical evaluation [online] [cit13 5 2013] Dostupny z URL ltftpwwwlwrkthseCommonUllaMFor_Imran[1994]20holmgren20-20multiple20flow

20direction20algorithms20for20runoff20modelling20in

20grid20based20elevation20modelspdf gt

[3] ESRI ESRI WebHelp - How Flow Direction works [online] [cit13 5 2013] Dostupne z URL lthttphelparcgiscomenarcgisdesktop100helpindexhtml009z00000063000000

htmgt

[4] ESRI ESRI Webhelp - Flow Direction (Spatial Analyst) [online][cit 13 5 2013] Dostupne z URL lthttphelparcgiscomenarcgisdesktop100helpindexhtml009z00000052000000

htmgt

[5] WIKIPEDIA NumPy [online] [cit 13 5 2013] Dostupne z URLlthttpenwikipediaorgwikiNumPygt

[6] INFORMIT Working with operators [online] [cit 13 5 2013] Dos-tupne z URL lthttpwwwinformitcomarticlesarticleaspxp=2002831ampseqNum=6gt

14

7 Prılohy

71 Bykovice a Nucice vstupnı DMT rastry

Obrazek 5 DMT Bykovice

Obrazek 6 DMT Nucice

15

72 Bykovice vysledky

Obrazek 7 Flow Direction D8

Obrazek 8 Flow Direction MDinfin

16

73 Nucice vysledky

Obrazek 9 Flow Direction D8

Obrazek 10 Flow Direction MDinfin

17

Page 5: pro zac ate cn kygeo.fsv.cvut.cz/gdata/2013/pin2/e/dokumentace/... · 2013-06-05 · CESK E VYSOK E U CEN I TECHNICKE V PRAZE FAKULTA STAVEBN I OBOR GEODEZIE A KARTOGRAFIE Dokumentace

2 Vytvorenı nastroje (tool) Nove toolboxy a nastroje se vytvarejıstejne jako jine objekty v ArcGIS - tedy v ArcCataloguNovy toolbox se vytvorı po kliknutı pravym tlacıtkem mysi na ad-resar ToolboxesMy Toolboxes a zvolenı polozky New rarr Toolbox V ta-kovemto uzivatelskem Toolboxu muzeme pridat skript Opet pres pravetlacıtko mysi Add rarr Script najdeme soubor py do ktereho budemepsat zdrojovy kod Nynı pri opetovnem zapnutı ArcGIS stacı najıt vArcCatalogu tento skript kliknout pravym a zvolit Edit Zdrojovykod se automaticky otevre v definovanem editoru

Obrazek 2 Vytvorenı noveho toolboxu

Pri pridavanı skriptu muzeme zadavat vstupnı a vystupnı parametryTento krok muzeme preskocit a editovat tyto parametry pozdeji

4

Obrazek 3 Pridanı skriptu

3 Editace vstupnıch a vystupnıch parametru Pro editaci parametruklikneme pravym na skript v ArcCatalogu a zvolıme Properties Zdemuzeme mimo jine editovat i cestu k souboru py V zalozce Parametersje seznam parametru Po kliknutı na parametr se ve spodnım okne ob-jevı jejich atributy z nichz nejdulezitejsı je Direction tj zda-li se jedna ovstupnı nebo vystupnı parametr Vyznam dalsıch atributu je jasny z je-jich nazvu a nabıdky jejich hodnot Pri definovanı parametru je potrebazvolit spravny datovy typ parametru z preddefinovane nabıdky

5

Obrazek 4 Editace parametru

22 Obecne poznatky pro psanı skriptu

Pred psanım skriptu je samozrejme zadoucı si nejprve osvojit zakladnı syntaxiPythonu Pote muzeme psat skript pro ArcGIS Protoze uvod do Pythonuje perfektne zpracovan v mnoha dokumentech zde jen strucne uvedeme parzasad

221 Vybrane syntakticke zasady Pythonu

Python rozeznava bıle znaky Napr telo cyklu je oznaceno pouze odsa-zenım tabulatorem V C++ by funkce bılych znaku byla nahrazena slozenymizavorkami Python rozlisuje velka a mala pısmena Komentare se znacı oznacujecely radek Vıceradkovy komentar nenı moznyPole je nejprve nutne inicializovat pak je mozne plnit jej pomocı indexuDalsı informace jsou pekne sepsany napr zde httpwwwsallyxorgsallypythonindexphp

222 Help

Pro uvod do skriptovanı v ArcGIS je nejvyznamnejsım pomocnıkem Helpprımo od spolecnosti ESRI

6

httphelparcgiscomenarcgisdesktop100helpHelp je v anglictine a je zde prehledne popsana hledana funkce a jejı pouzitı jedemonstrovano na ukazce kodu coz je obrovskou vyhodou pro porozumenıjak dana funkce pracuje a funguje

223 Nactenı vstupnıch parametru

arcpyGetParameterAsText(index)

Indexy v Pythonu zacınajı od 0 a zde oznacujı poradı parametru jak byldefinovan v ArcCataloguVzdy je potreba parametr ulozit do nejake promenne tedy spravna syntaxebude

NazevPromenne = arcpyGetParameterAsText(0)

Stejne tak vytvorıme promennou ktera bude reprezentovat vystupnı para-metr Do teto promenne pak ukladame vysledek

PRIKLADSkript ktery zkopıruje shapefile a ulozı jej pod uzivatelem zvolenym nazvemdo zvoleneho adresare

import arcpy

inShapefile = arcpyGetParameterAsText(0)

outShapefile = arcpyGetParameterAsText(1)

arcpyCopy_management (inShapefile outShapefile)

224 Vypisy zprav a atributovych typu

Pro jakykoliv textovy vystup do vysledneho dialogu se pouzıva funkce Ad-dMessage() Pokud chceme touto funkcı vypsat hodnotu atributu nebo jinepromenne ktera nenı datoveho typu string pouzijeme pretypovanı str(promenna)Pro zjistenı atributu objektu se casto vyuzıva funkce Describe ktera umoznıpraci s mnozstvım atributovych typu PRIKLAD

import arcpy

inShapefile = arcpyGetParameterAsText(0)

ShpShapeType = arcpyDescribe(inShapefile)shapeType

7

arcpyAddMessage(Shape Type + str(ShpShapeType))

Na prıkladu je demonstrovano jak vypsat typ vstupnıho rastruVedle vypisu zpravy AddMessage existujı jeste vypis varovanı AddWarning(text je zvyrazneny) a vypis chybove hlasky AddError (beh programu seukoncı ve vyslednem dialogu v ArcGIS se vypıse dana hlaska a vypocet jevyhodnocen jako neuspesny)

225 Prıstup k prvkum atributove tabulky

K prvkum atributove tabulky se dostaneme pomocı funkce SearchCursor Tanam vytvorı pole ntit (jednotlivych radku) tabulky Ty se pak dajı kromeindexovanı prochazet napr cyklem for V tomto cyklu muzeme porovnavathodnoty atributu s hledanou hodnotou atributu Tu nalezneme jako ntitanazev atributuV prıkladu je to formule rowPOINT XHodnota FID je hodnota zadana uzivatelem ntity jsou body z shapefilu Kodv prıkladu ulozı souradnice bodu do polı X Y

PRIKLAD

import arcpy

inShapefile = arcpyGetParameterAsText(0) typu shapefile

FID_P1 = arcpyGetParameterAsText(1) typu long

FID_P2 = arcpyGetParameterAsText(2) typu long

inicializace dvouprvkovych polı a pomocne promenne

X = [00]

Y = [00]

a=0

for row in rows

if i==int(FID_P1) or i==int(FID_P2)

X[a] = mathradians(rowPOINT_X)

Y[a] = mathradians(rowPOINT_Y)

a = a+1

i = i+1

Pokud bychom nehledali ntitu podle FID ktere tvorı vzdy posloupnost prirozenychcısel muzeme promenne i priradit mısto cısla naprıklad jmeno mesta i =

8

rowName Pak by ovsem vstupnı parametr musel byt typu String byl bypovinny a neobsahoval by prednastavene hodnoty

226 Nastavenı pracovnıho adresare a prace s pozicemi na disku

Pokud nenı nastaven pracovnı adresar (tzv workspace) ArcGIS automa-ticky nabızı cestu k vystupnım parametrum podle parametru vstupnıch De-faultne je nastavena cesta k systemove geodatabazi ArcGISu DefaultgdbPokud chceme toto zmenit muzeme pracovnı adresar nastavit prıkazem

arcpyenvworkspace = cesta

Pracovnı adresar muze byt slozka i geodatabaze

227 Prace s Feature Class a Feature Layer

Nektere funkce pracujı s Feature Class a nektere s Feature Layer Nekterefunkce umı pracovat s obema typy dat Musıme se tedy rozhodnout kteradata pouzıt a popr je vytvoritRozdıl mezi temito typy je v tom ze Feature Class jsou data ulozena pevnena disku Tedy naprıklad shapefile nebo vrstva geodatabaze Typ FeatureLayer je uchovavan v pameti pocıtace a obsahuje aktualnı situaci vrstvyPredevsım tedy pouze selektovane prvkyChceme-li mıt prıstup k selektovanym prvkum musıme vzdy pouzıt typ Fe-ature Layer PRIKLAD

Chceme-li naplnit zasobnık identifikatory vsech prvku vrstvy nezavisle natom jestli jsou nektere oznaceny pouzijeme Feature Class Chceme-li na-plnit zasobnık identifikatory aktualne oznacenych prvku pouzijeme FeatureLayerVytvorenı Feature Layer z Feature Class

path = arcpyGetParameterAsText(0)

arcpyMakeFeatureLayer_management(path layer)

228 Seznam parametru

Nektere funkce jako napr Merge management pouzıvajı jako vstupnı para-metr seznam parametru (vrstev) Ten se vytvarı jako bezny seznam kteryovsem obsahuje textove retezce urcujıcı cestu k danym vrstvam

9

merge_list = []

while pathToFeatureClass

merge_listappend(rsquopathToFeatureClassrsquo)

arcpyMerge_management(merge_list outFeatureClass)

229 Testovanı existence atributoveho sloupce

Pokud chceme pridat atributovy sloupec funkcı AddField management jevhodne nejprve otestovat zda-li jiz neexistuje To se provede pomocı seznamusloupcu

fieldList = arcpyListFields(inFeatureClass rsquosectionrsquo)

fieldCount = len(fieldList)

if (fieldCount = 1)

arcpyAddField_management(inFeatureClass rsquosectionrsquo rsquoSHORTrsquo)

2210 Balıcek NumPy a jeho pouzitı

Balıcek NumPy ma obrovsky vyznam pri praci s poli a maticemi Pokudmame na vstupu rastr je treba ho prevest do podoby ve ktere budou hodnotyv jednotlivych bunkach snadno dostupne a mozne matematicke operace snimi K tomuto vyuzijeme funkce RasterToNumPyArray()

arcpyRasterToNumPyArray(InputRaster)

Tato funkce prevede na rastr na matici a jı uz muzeme bez problemu indexo-vat a provadet s nı pocetnı operace Jestlize potrebujeme dostat jako vysledekopet rastr prevedeme vyslednou matici opacnym postupem na rastr

NumPyArrayToRaster (maticelevy_dolnı_rohvelikost_pixelu_x

velikost_pixelu_y hodnota_pro_NoData)

10

3 Zaver

V tomto dokumentu byly demonstrovany ukazky a prıpady pro uplne zacatkypri programovanı skriptu spustitelneho v prostredı ESRI ArcGIS 100 Kom-pletnı zdrojove kody ze kterych se cerpaly ukazky jsou ke stazenı na strankachpredmetu PIN2

11

CESKE VYSOKE UCENI TECHNICKE V PRAZE

FAKULTA STAVEBNI

OBOR GEODEZIE A KARTOGRAFIE

Dokumentace k projektu informatika 2

Automatizace sestavenı Atlasueroznıho smyvu a transportu

splavenin ve velkych povodıch

MICHAL BECICKA

15 kvetna 2013

Obsah

1 Uvod 211 O tematu 212 Strucny souhrn 2

2 Popis pracı 321 Nastroj pro tvorbu gridu 3

211 Uvodnı dialog 4212 Vysledny log 5213 Vysledne vrstvy 5214 Cinnost nastroje podrobne 6

22 Generalizace 9221 Uvodnı dialog 9222 Vysledny log 10

23 Finalnı upravy a export 10

3 Problemy a moznosti rozsırenı 1031 Pripojovanı externıch tabulek 1032 Doba behu tvorby gridu 1133 Moznosti rozsırenı 11

4 Zaver 12

5 Prılohy 1351 Vysledny log tvorby gridu 1352 Vysledny log generalizace 14

1

1 Uvod

11 O tematu

Tema bylo urceno doc Krasou z katedry Hydromelioracı a krajinneho inzenyrstvıpro prezentovanı vysledku vypoctu eroznıho smyvu a transportu splaveninPresto ze je nastroj primarne urcen pro toto pouzitı byla snaha jej napsatco nejuniverzalnejiCılem projektu je vytvorit atlas sestaveny z jednotlivych tematickych mapTyto mapy jsou vytvoreny pro cca tretinu uzemı Ceske Republiky V potrebnemmerıtku (cca 150 000) je nemozne vytvaret spojene tematicke mapy Bylotedy nutne nejprve vyhodnotit jak nejlepe vysledky prezentovat pote vy-tvorit nastroj ktery mapy podle pozadavku upravı (generalizuje vizualizo-vane prvky) vygeneruje jednotlive mapove listy a jejich prehledku Dalevygeneruje seznam mapovych listu pro jednotliva povodı a dalsı potrebneudajeNastroj je psan v jazyce Python pro ArcGIS 100

12 Strucny souhrn

Prace se sklada z nekolika castı

1 Vytvorenı gridu - Tato cast je nejrozsahlejsı Jedna se o skript kterypro dana povodı vytvorı rozsah mapovych listu (tzv index grid layer)a do atributovych tabulek ulozı potrebne hodnoty viz dale

2 Generalizace obsahu mapy - Generalizace nakonec probehla velmijednoduse a to kategorizacı hodnot kumulovaneho smyvu

3 Uprava vzhledu a export - Tato cast byla provadena manualne varcgis layout view Po vytvorenı kyzeneho vzhledu pote probehlo ge-nerovanı jednotlivych mapovych listu pomocı toolbaru Data DrivenPages

2

2 Popis pracı

21 Nastroj pro tvorbu gridu

Tento nastroj vytvorı polygonovou vrstvu obsahujıcı grid a to podle zadanehomerıtka a velikosti mapoveho pole Do atributove tabulky gridu vlozı sloupecs nazvy mapovych listu a sloupec s cısly sekcı (bude vysvetleno dale) Zarovenprida do vstupnı polygonove vrstvy sloupec s cısly sekcı a sloupec s nazvymapovych listu na kterych se dany polygon (povodı) nachazı Dale vytvorıvrstvu nazev gridu dissolve pro prehledku sekcı

Pojem sekce Sekce je tvorena vsemi dotykajıcımi se polygony Mapovelisty jsou ke kazde sekci tvoreny zvlastrsquo a jejich nazvy jsou pote rozsıreny ocıslo sekce Prıklad cıslovanı mapovych listu 1-A1 1-A2 2-A1 2-A2

Obrazek 1 Vstupnı polygonova vrstva

3

Obrazek 2 Ocıslovane sekce polygonove vrstvy

211 Uvodnı dialog

Uvodnı dialog nastroje obsahuje pole pro 5 parametru

bull In - vstupnı parametr datovy typ Feature classVstupnı vrstva polygonu

bull Scale - vstupnı parametr datovy typ LongPozadovane merıtko

bull Map field width - vstupnı parametr s nastavenou defaultnı hodnotou25 datovy typ DoubleSırka vysledneho mapoveho ramce v cm

bull Map field height - vstupnı parametr s nastavenou defaultnı hodnotou30 datovy typ DoubleVyska vysledneho mapoveho ramce v cm

bull Out - vystupnı parametr datovy typ Feature classVystupnı vrstva gridu

4

Obrazek 3 Grid - Uvodnı dialog

212 Vysledny log

Kompletnı prıklad vysledneho logu je k nalezenı v prıloze 51Obsahuje tyto informace

bull Umıstenı pouzıvane databaze na disku

bull Dale v kazdem cyklu

ndash Poradove cıslo cyklu

ndash Aktualnı pocet nezpracovanych polygonu

ndash Cıslo vytvarene sekce

ndash Identifikatory polygonu tvorıcıch danou sekci

bull Pocet sekcı

bull Pocet mapovych listu v kazde sekci

213 Vysledne vrstvy

Vysledny grid pro merıtko 1 80 000 a defaultnı velikost mapoveho pole (25x 30 cm) vypada nasledovne

5

Obrazek 4 Grid - Vysledna vrstva

214 Cinnost nastroje podrobne

1 Prıpravne cinnostiV prvnıch radcıch kodu jsou vytvoreny pomocne promenne a pole znichz pro dalsı cinnost je potreba zmınit zasobnık IDs Ten je naplnenidentifikatory povodıPokud jiz neexistujı jsou ve vstupnı polygonove vrstve vytvoreny atri-butove sloupce hard ID section MapSheets

bull hard ID - Do tohoto sloupce byly zkopırovany identifikatory abyi po rozdelenı do nekolika vrstev mely polygony jednoznacny iden-tifikator

bull section - Po vypoctu sekcı sem bude pro kazdy polygon zapsanocıslo sekce ve ktere se nachazı

bull MapSheets - Atribut se seznamem mapovych listu na kterych sedane povodı nachazı

Ukazka tvorby atributoveho sloupce

fieldList = arcpyListFields(inFeatureClass rsquoMapSheetsrsquo)

6

fieldCount = len(fieldList)

if (fieldCount = 1)

arcpyAddField_management(inFeatureClass rsquoMapSheetsrsquo rsquoTEXTrsquo)

2 Hlavnı vypocetnı cast

Hlavnı cast je cela v cyklu while (len(IDs) gt 0) tj cyklus probıhadokud jsou v zasobnıku IDs hodnoty Na konci cyklu jsou vzdy identi-fikatory zpracovanych povodı ze zasobnıku mazany V kazdem prubehucyklu jsou selektovany povodı tvorıcı 1 sekci k takove sekci je potevytvoren grid a jsou plneny nove atributove sloupce

Ukazka hlavnıho cyklu

while len(IDs) gt 0

oznacenı povodı i-te sekce

rows_sel = arcpySearchCursor(rsquopovodi_classrsquo)

for row_sel in rows_sel

IDsremove(row_selOBJECTID)

V kazdem prubehu cyklu je zpracovana 1 sekce - tj shluk povodı kteremajı spolecnou cast hranice Sekce je tvorena na zaklade dotazu Se-lectByLocation s definicı BOUNDARY TOUCHES Dotaz se opakujev cyklu dokud se pocet oznacenych povodı zvetsuje K tomu slouzıpromenne matchcount1 matchcount2 ktere obsahujı pocet oznacenychpolygonu

Vytvorenı sekce

bull Oznacenı prvnıho nezpracovaneho polygonu

first_ID = str(IDs[0])

fieldName = OBJECTID

Query = + fieldName + = + first_ID

arcpySelectLayerByAttribute_management(rsquopovodi_classrsquo rsquoNEW_SELECTIONrsquo Query)

matchcount1 = int(arcpyGetCount_management(rsquopovodi_classrsquo)getOutput(0))

bull Prvnı prubeh SelectByLocation

7

arcpySelectLayerByLocation_management(rsquopovodi_classrsquo rsquoBOUNDARY_TOUCHESrsquo

rsquopovodi_classrsquo)

matchcount2 = int(arcpyGetCount_management(rsquopovodi_classrsquo)getOutput(0))

bull Dalsı prubehy SelectByLocation

while matchcount1 lt matchcount2

matchcount1 = matchcount2

arcpySelectLayerByLocation_management(rsquopovodi_classrsquo rsquoBOUNDARY_TOUCHESrsquo

rsquopovodi_classrsquo)

matchcount2 = int(arcpyGetCount_management(rsquopovodi_classrsquo)getOutput(0))

Oznacene polygony jsou ulozeny jako polygonova vrstva do vstupnı ge-odatabaze Tato vrstva je dale pouzita pro tvorbu gridu

Vytvorenı gridu

Pred samotnou tvorbou bylo potreba zjistit rozsah sekce Pokud bylasekce mensı nez 1 mapovy list bylo treba definovat souradnice polohylistu tak aby povodı lezelo na stredu listu Do zasobnıku byly nactenysouradnice lomovych bodu povodı a byly z nich vybrany maximalnı aminimalnı hodnoty Jejich rozdıl pak urcil rozsah sekce

Prıklad plnenı zasobnıku souradnicema

desc = arcpyDescribe(outputFeatureClassPath+rsquorsquo+output_name)

shape_field_name = descShapeFieldName

rows3 = arcpySearchCursor(outputFeatureClassPath+rsquorsquo+output_name)

mbr_X=[]

mbr_Y=[]

for row3 in rows3

Create the geometry object

feat = row3getValue(shape_field_name)

partnum = 0

for pnt in featgetPart(partnum)

mbr_Xappend(pntX)

mbr_Yappend(pntY)

partnum += 1

8

Vytvorenı gridu pote probıha budrsquo s definovanou nebo s nedefinovanoupolohou pocatecnıho mapoveho listu Pro vytvorenı gridu je pouzitafunkce GridIndexFeatures cartography

Ukazka

arcpyGridIndexFeatures_cartography(outputFeatureClassPath+rsquorsquo+grid_name

outputFeatureClassPath+rsquorsquo+output_name USEPAGEUNIT scale_str

sheet_width_str sheet_high_str str(grid_start_pnt_X)+rsquo rsquo+str(grid_start_pnt_Y))

Grid je tedy vytvoren pro jednu sekci Po vsech prubezıch cyklu jsoutakto vytvorene vrstvy gridu spojeny do jedne finalnı vrstvy V cyklujsou dale plneny nove atributove sloupce - cısla sekcı a nazvy mapovychlistu a to jak do nove (vystupnı) vrstvy gridu tak do vstupnı vrstvypovodı

3 Vytvorenı finalnıch vrstev tisk vysledku Jak bylo receno na zaverjsou spojeny jednotlive vrstvy gridu Vedle toho je vytvorena vrstvaspojenych mapovych listu po sekcıch - funkcı Dissolve - pro tvorbuprehledky Jsou vytisknuty vysledne hodnoty viz 212

22 Generalizace

Pro generalizaci byl napsan skript ktery nacıta liniovou vrstvu toku Tentoskript byl jiz psan na mıru podkladovym datum a pri nacıtanı je v nemvyuzito znalosti struktury danych podkladovych dat Skript k vrstve pripojıexternı tabulku a vytvorı atributovy sloupec kategorie Podle dat z externıtabulky pak plnı novy sloupec hodnotami 1 - 5 podle mnozstvı unasenehosedimentu Tato hodnota je pak pouzita pri vizualizaci datZajımavostı je ze pro nacıtanı musela byt tabulka indexovana viz 31

221 Uvodnı dialog

Uvodnı dialog obsahuje dva parametry

bull Input Feature Class Vstupnı liniova vrstva rıcnıch useku

bull Table Vstupnı tabulka obsahujıcı hodnoty rıcnıch splavnenin

9

222 Vysledny log

Vysledny log je k nahlednutı v prıloze 52 Obsahuje tyto informace

bull Pocet vsech rıcnıch useku

bull Pocet useku v jednotlivych kategoriıch

23 Finalnı upravy a export

Jak jiz bylo zmıneno finalnı vzhled mapoveho listu byl vytvoren manualne vLayout view a pomocı toolbaru Data Driven Pages Tento postup je casoveekonomictejsı a je jım dosazeno lepsıch vysledku dıky prehlednosti ToolbarData Driven Pages pak umoznuje vkladat dynamicke textove pole ktere seautomaticky menı s menıcım se mapovym listem Takovym polem je naprnazev mapoveho listu Stacı tedy definovat vzhled jednoho mapoveho listuv toolbaru Data Driven Pages navolit prıslusne pole - ty byly vytvorenynastrojem Grid viz 21 Dynamicky bylo potreba propojit s mapovym oknemi prehledku ktera byla vytvorena jako druhy Data Frame To se provedlo defi-novanım rozsahu podle hlavnıho mapoveho okna v Properties -iquest Data Frame-iquest Extant a definovanım Definition Query ve vlastnostech vrstvy Dalsım dy-namickym prvkem jsou oznacenı sousednıch mapovych listu a cıslo strankyNa takto sestavenou stranku s dynamickymi prvky bylo mozne pouzıt exportmapy do pdf a Atlas byl vygenerovanPrıklad dynamickeho textu pro nazev mapoveho listultdyn type=page property=PageNamegt

3 Problemy a moznosti rozsırenı

31 Pripojovanı externıch tabulek

Pri pripjovanı externıch tabulek musely byt indexovany hodnoty atribu-toveho sloupce pouziteho k parovanı To probehlo prıkazemarcpyAddIndex management (layer HydroID)Pripojenı tabulky musı probıhat k Feature layer Proto bylo nutne nejprve zFeature Class vytvorit Feature Layer1 Pote mohla byt tabulka pripojena

arcpyAddIndex_management (layer HydroID)

arcpyAddJoin_management(layer HydroID table Riverid)

1Rozdıl mezi Feature Layer a Feature Class je vysvetlen v prilozenem Tutorialu pro-gramovanı v Pythonu pro ArcGIS

10

Zde nastal problem s prıstupem k atributum Obecne nesmı nazvy atri-butovych sloupcu obsahovat mezery K hodnotam je pristupovano pres jed-notlive radky s parametrem nazev sloupce

rows= arcpySearchCursor(layer)

for row in rows

value=rownazev_sloupce

Pripojena tabulka ovsem mela v nazvech sloupcu mezeru K takto pojmeno-vanemu sloupci muselo byt pristupovano prıkazem getValue

rows= arcpySearchCursor(layer)

for row in rows

value=rowgetValue(rsquonazev tabulky$nazev sloupcersquo)

32 Doba behu tvorby gridu

Doba behu nastroje pro tvorbu gridu je znepokolive dlouha Bylo prove-deno merenı casu behu jednotlivych castı kodu funkcı time z modulu timeVysledky ukazaly ze nejdele trva vytvarenı novych vrstev Vrstva se muzevytvaret az 20 sekund Snaha o optimalizaci donutila nahradit vytvarenı vrs-tev s minimalnım ohranicujıcım obdelnıkem sekvencnım ukladanım souradniclomovych bodu polygonu z nichz pak funkcemi min a max byly tyto hodnotyzıskany Prubeh se tak urychlil o desıtky sekund (v jednom prubehu cyklupriblizne o 15 sekund) Dalsı moznostı bylo vyuzıt prostoroveho indexu datTato moznost nebyla vyuzita protoze ArcGIS pouzıva k prostorovemu in-dexovanı pravidelny grid Zıskanı MBR2 nebylo nalezeno Vyuzitı indexu byovsem problem neresilo Jak jiz bylo zmıneno nejdele trva vytvarenı novychvrstev Bohuzel funkce GridIndexFeatures cartography pro vytvorenı griduneumı pracovat se selektovanymi daty Tedy v kazdem cyklu musı byt ulozenapolygonova vrstva tvorıcı 1 sekci Pote mohla byt vytvorena vrstva tvorıcıgrid Tedy v kazdem prubehu cyklu jsou vytvareny 2 nove vrstvy Jelikozautor neprisel na zpusob jine optimalizace je nastroj pomaly Pro zadanydataset s 58mi povodımi jeho cinnost probıha desıtky minut

33 Moznosti rozsırenı

Do skriptu by se dal zakomponovat export seznamu mapovych listu pro kazdepovodı V soucasne verzi je tvoren exportem atributove tabulky

2minimum bounding rectangle - minimalnı ohranicujıcı obdelnık

11

4 Zaver

Byly vytvoreny nastroje pro automatizaci tvorby Atlasu pro mapy eroznıhosmyvu a transportu splavenin Tvorba Atlasu probıha v nekolika krocıchVizualizovane prvku jsou generalizovany Dale je vytvoren Grid ktery jepouzit jako indexova vrstva pro funkci Data Driven Pages Tou jsou vy-tvoreny jednotlive mapove listy Pomocı dynamickych prvku je pak vytvorenvzhled ktery se menı se zmenou mapoveho listu Nedostatkem je rychlostnastroje pro tvorbu gridu Presto ze je nastroj pomaly je zcela funkcnı Vprıpade potreby dalsıho rozsırenı bude ale vhodne vysledky nacıtat do novehonastroje Vzorovy vytisk vysledneho atlasu je prilozen Vzhledem k tomu zezpracovavana data jsou rozsahla a podlehajı autorskemu zakonu je vytvorenjen vzorovy vytisk z 6ti povodı Nastroje jsou psany v jazyce Python 26 proArcGIS 100 Pri praci byla vyuzıvana predevsım online napoveda ArcGISa diskuznı programatorska fora Kompletnı zdrojovy kod je ke stazenı nastrankach predmetu PIN2

12

5 Prılohy

51 Vysledny log tvorby gridu

Executing Grid

JAtlasvzorektemp_selectpovodi_vzorekgdbpokusne_povodi

70000 25 30 JAtlasvzorektemp_selectpovodi_vzorekgdbgrid70

Start Time Wed May 15 020551 2013

Running script Script2

Output folder JAtlasvzorektemp_selectpovodi_vzorekgdb

_____________________________________________________________________

count of basin polygon to process 6

_____________________________________________________________________

RUN 1

count of basins in 1 section 3

Their ID

ID 1

ID 3

ID 6

_____________________________________________________________________

count of basin polygon to process 3

_____________________________________________________________________

RUN 2

count of basins in 2 section 1

Their ID

ID 2

_____________________________________________________________________

count of basin polygon to process 2

_____________________________________________________________________

RUN 3

count of basins in 3 section 2

Their ID

ID 4

ID 5

----- RESULT -----

Number of sections 3

Number of map sheets

in section 1 13

in section 2 1

in section 3 2

Completed script Grid

Succeeded at Wed May 15 021359 2013 (Elapsed Time 8 minutes 8 seconds

13

52 Vysledny log generalizace

Executing generalization JAtlasvzorek2011_NAZV_nadrze2011_watemsedem

NAZV_tokyVT28_finshp

JAtlasvzorek2011_NAZV_nadrze2011_watemsedem28_vypocet

projectriversedimentxlsxprojectriversediment$

Start Time Wed May 15 075624 2013

Running script generalization

Category created

Total count of river parts 2879

Count of category 1 2428

Count of category 2 118

Count of category 3 68

Count of category 4 20

Count of category 5 245

Completed script generalization

Succeeded at Wed May 15 075638 2013 (Elapsed Time 1400 seconds)

14

CESKE VYSOKE UCENI TECHNICKE V PRAZE

FAKULTA STAVEBNI

OBOR GEODEZIE A KARTOGRAFIE

Dokumentace k projektu informatika 2

Stanovenı smeru odtokuna rastrovem digitalnım modelu

a implementace algoritmudo prostredı ArcGIS

BC JAN ZAJICEK

5 cervna 2013

Obsah

Obsah 1

1 Uvod 2

2 Nejbeznejsı existujıcı algoritmy 3

3 Flow Direction D8 431 Obecny princip D8 432 Popis algoritmu D8 5

4 Popis algoritmu MDinfin 641 Obecny princip MDinfin 642 Technicke resenı MDinfin 8

5 Vysledky 1151 Realna data - Bykovice 1152 Realna data - Nucice 12

6 Zaver 13

Reference 14

7 Prılohy 1571 Bykovice a Nucice vstupnı DMT rastry 1572 Bykovice vysledky 1673 Nucice vysledky 17

1

1 Uvod

Tato dokumentace byla zpracovana v ramci predmetu Projekt Informatika 2Semestralnı prace bude pouzita jako z jedna castı autorovi diplomove praces nazvem SMODERP 2D rozsırenı resıcı vztahy soustredeneho a plosnehoodtoku na danem uzemı Duvodem zpracovanı tohoto tematu byla potrebapouzitı v diplomove praci vıce nez jednoho algoritmu pro urcenı smeruodtoku v prostredı ArcGIS V soucasne dobe ArcGIS vyuzıva algoritmusD8 viz kapitola 3 jako jediny algoritmus pro vypocet smeru odtoku Tentoalgoritmus je soucastı Hydrology tools Nastroje ze skupiny Hydrology sepouzıvajı k modelovanı chovanı toku vody na povrchu Nejbeznejsı pouzıvanadigitalnı data povrchu Zeme jsou rastry digitalnı modelu terenu DMT slozenez jednotlivych bunek pixelu Tyto DMT rastry jsou pouzity jako vstupypro ruzne charakteristiky povrchu DMT rastr je souvisly povrch obvykleodkazujıcı na povrch Zeme Presnost dat je dana rozlisenım rastru taktezvzdalenostı mezi body rastru Informace o tvaru zemskeho povrchu je uzitecnapro mnoho oboru jako je napr zemedelstvı lesnictvı zivotnı prostredı neboregionalnı planovanı Tyto obory vyzadujı pochopenı jak voda tece v ramciuzemı a jak zmeny na tomto uzemı nasledne ovlivnı jejı tok

Cılem projektu bylo naprogramovat algoritmus ktery v roce 2007 publiko-vali Jan Seibert a Brian L McGlynn s nazvem MDinfin [1] Tento algoritmusje vylepsenım stavajıcıch algoritmu pro resenı urcenı smeru odtoku na ras-tru viz kapitola 2 Pro overenı spravnosti vysledku byla pouzita realnadata dvou pozemku u obcı Bykovice a Nucice Testovanı probıhalo na ras-trech o rozlisenı 5 metru Algoritmus byl naprogramovan v jazyce Pythonv prostredı NetBeans IDE 69 Pro spustenı v ArcGISu je potreba pridatdo prostredı vytvoreny toolbox upravit aktualnı cestu ke skriptu mainpya tento model nasledne spustit Vstupem modelu je rastr DMT a vystupnıadresar do ktereho se po dobehnutı modelu ulozı vysledny rastr s hodnotamismeru odtoku 1255 Algoritmus MDinfin je testovan na verzi ArcGIS 100Na nejnovejsı verzi ArcGIS 101 ktera vysla v cervnu 2012 nenı overenakompatibilita algoritmu v dusledku nefunkcnosti vıce nez jedne verze tohotoprogramu na jednom pocıtaci

2

2 Nejbeznejsı existujıcı algoritmy

Existujı tri nejbeznejsı algoritmy kazdy odlisne resıcı problematiku odtokuvody z rastru do sousednıch bunek Prvnım z nich je algoritmus D8 z roku1984 Algoritmus je podrobne popsan v nasledujıcı kapitole 3 Jelikoz odtoknastava vzdy jen do jedne sousednı bunky dochazı casto ke koncentracivodnıch sıtı a sıtrsquo odtoku pak neodpovıda skutecnosti Na druhou stranuje jeho vyhodou jeho jednoduchost a fakt ze nedochazı k nechtene disperzijako je tomu u druheho algoritmu

Druhym algoritmem je MD8 neboli multiple flow direction algorithm MD8algoritmem je voda odvadena do vsech nıze polozenych sousednıch buneka pomer vody je rozdelen procentualne podle sklonu Ve vysledku ma algo-ritmus tendenci vytvaret vıce realisticke prostorove sıte toku nez D8 tımze nedochazı k takove koncentraci vody v sıti U D8 ma mnohem vetsıvliv maly rozdıl vysek mezi sousednımi bunkami na to ktera bunka prijmeveskerou vodu Pouzitım MD8 tyto male vyskove rozdıly nemajı zdalekatakovy vliv jelikoz je mnozstvı vody rozdeleno pomerem mezi tyto bunkyNejvetsı nevyhodou tohoto algoritmu je jeho prılisna disperze na konver-gentnıch svazıch v dusledku odtoku do vsech nıze polozenych bunek

V roce 1997 byl navrzen algoritmus pojmenovany Dinfin Davidem G Tar-botonem z americke univerzity v Utahu Byl navrzen prıstup ktery je zalozenna osmi trojuhelnıkovych ploskach viz obrazek 3 Dıky tomuto postupu jsouodstraneny limitace v podobe moznosti pouze osmi smeru odtoku z bunkyProto je algoritmus pojmenovan Dinfin jelikoz muze nastat nekonecne moznostıvysledneho smeru odtoku Tento prıstup umoznuje pouze jeden smer odtokurozdeleny mezi jednu nebo dve bunky v zavislosti na smeru odtoku

Poslednı dva zmınene algoritmy MD8 a Dinfinmajı oproti D8 nevyhodu ve vetsıcasove narocnosti vypoctu V kapitole 4 je popsan algoritmus MDinfin kteryvyuzıva vyhody MD8 algoritmu za pouzitı trojuhelnıkovych plosek obdobnejako Dinfin algoritmus

3

3 Flow Direction D8

Pro pochopenı problematiky a zjevnost rozdılu mezi algoritmy je vhodneuvest jak funguje nastroj ktery pouzıva ArcGIS Zaklad algoritmu MDinfino nemz pojednava tato dokumentace je zalozen na podobnych postupech

31 Obecny princip D8

Princip nastroje urcenı smeru odtoku (Flow Direction) ktery pouzıva prostredıArcGIS je nasledujıcı Tento nastroj (tool) vezme vstupnı rastr digitalnıhomodelu terenu neboli vyskovy rastr Provede vypocet jehoz vystupem jerastr ktery v kazde bunce rastru obsahuje hodnotu urcujıcı smer odtokuz teto bunky Hodnot je osm podle osmi sousednıch bunek do kterych muzeodtekat voda viz obrazek 1 Prave podle osmi smeru odtoku se tento prıstupnazyva D8 (eight-direction approach)

Obrazek 1 Flow Direction D8 [3]

4

32 Popis algoritmu D8

Samotny vypocet algoritmu je v zasade primitivnı Pro vsechny sousednıbunky se vypocte maximalnı sklon [3]

maximalnı sklon = rozdıl vysek vzdalenost 100

Rozdıl vysek je rozdıl vysky v aktualnım bode a konkretnı sousednı bunkyVzdalenost je vypoctena mezi stredy bunek a lisı se v zavislosti na polozesousednı bunky Pro bunky sousedıcı vrcholem je hodnota velikosti pixeluprenasobena o odmocninu ze dvou Pro zbyle bunky sousedıcı hranou jevelikost vzdalenosti rovna velikosti pixelu Po nalezenı nejstrmejsıho smeruodtoku je hodnota ulozena v podobe bitove hodnoty reprezentujıcı danysmer Pred pouzitım nastroje Flow Direction se obvykle zpracuje vstupnırastr pomocı nastroje Sink Tento algoritmus zaplnı bezodtoke oblasti rastrunejnizsı hodnotou z okolı a do teto nejnizsı sousednı bunky pak posle voduPote jiz nemuze dojıt k situaci kdy vsechny sousednı bunky k dane buncemajı vyssı hodnoty vysek a nedochazelo by tedy k odtokuVysledny rastr nemusı obsahovat pouze bunky s hodnotami 202127 [4]Jestlize nastane situace kdy ma vıce sousednıch bunek nejnizsı hodnotuvysek pak je vysledna hodnota souctem vsech smeru Napr hodnota maximalnıhosklonu bude stejna pro sousednı bunku vlevo a nahore odtok tedy budesmerem na zapad (hodnota = 16) a na sever (hodnota = 64) vysledna hod-nota bude souctem 16 a 64 tedy 84

5

4 Popis algoritmu MDinfin

41 Obecny princip MDinfinObecny postup je prevzat z [1] Stejne jako v prıpade algoritmu Dinfin bylyzavedeny trojuhelnıkove plosky pro vypocet lokalnıho sklonu a smeru pro kazdoutrojuhelnıkovou plosku Okolo stredoveho boduM bylo vytvoreno osm trojuhelnıkuviz obrazek 3 Kazdy se zbyvajıcımi dvema vrcholy P1 P2 ve dvou sousedıcıchbunkach Pro kazdy z techto trojuhelnıku je vypocten smer nejvetsıho sklonuPokud oznacıme vysky bodu M P1 P2 jako hM hP1 hP2 rozdıly vysek sevypoctou takto

z1 = hP1 minus hM z2 = hP2 minus hM (1)

Obdobne se vypoctou rozdıly v x-ovych a y-ovych souradnicıch Po vypocturozdılu jednotlivych souradnic je vypocten normalovy vektor

n =

nx

ny

nz

=

z1y2 minus z2y1z1x2 minus z2x1y1x2 minus y2x1

(2)

Smer odtoku d a sklon s na trojuhelnıkove plose se vypocte pomocı rovnice3 Hodnota nula pro d oznacuje smer osy y a hodnota 3π2 oznacuje smerosy x

d =

0 nx = 0 ny ge 0

π nx = 0 ny lt 0

π2minus arctan(

ny

nx

) nx gt 0

3π2minus arctan(

ny

nx

) nx lt 0

(3)

s = minus tan

(arccos

(nzradic

n2x + n2

y + n2z

))(4)

Jestlize nejvetsı sklon od bodu M je mimo rozpetı 0-45 (π4 radian) jepouzit sklon strmejsı k jednomu z bodu P1 P2 a zaroven i sklon je spoctenk tomuto bodu V prıpade ze oba sousednı body jsou vyse polozeny nez bodM smer nenı pro tento trojuhelnık uvazovan Po spoctenı vsech osmi smerua sklonu pro jednotlive plosky jsou tyto smery povazovany za lokalne ne-jstrmejsı pro kazdy trojuhelnık v rozsahu 45 Smery vedoucı prımo do bodu

6

P1 nebo P2 tedy ty kde d = 0 nebo d = π4 jsou uvazovany pouze vprıpade kdy obe vedlejsı sousednı bunky majı smer k bodu P1 nebo P2Tato situace je znazornena na obrazku 2

Obrazek 2 Ukazka urcenı smeru odtoku z bunky [1]

Prvnı prıpad je smer mırıcı mezi bunky 5 a 6 Druhy prıpad je smer kteryvede prımo do bunky 3 Tato situace nastane jestlize pro trojuhelnık M43vyjde lokalnı smer d = π4 a pro trojuhelnık M32 smer vyjde d = 0Pote co je smer odtoku pro bunku vypocten je celkovy odtok rozdelendo vsech vyslednych smeru na zaklade sklonu Resenı teto problematiky jevıce popsano v sekci 42 Pro smery mırıcı mezi body P1 a P2 je odtokrozdelen do dvou bunek na zaklade nevejtsıho sklonu Pomer odtoku do buneks body P1 a P2 bude v tomto poradı α245 a α145

Obrazek 3 Trojuhelnıkove plosky [1]

7

42 Technicke resenı MDinfinVyse jiz bylo zmıneno ze algoritmus je napsan v jazyce Python Algoritmusje rozdelen do dvou skriptu Prvnı z nich obsahuje funkce a druhy je hlavnıVstupem do modelu je rastr digitalnıho modelu terenu a vystupnı adresardo ktereho se ulozı finalnı rastr smeru odtoku viz obr 4 Po nactenı rastruze vstupnıch parametru je tento rastr preveden na matici NumPy pomocıfunkce

arcpy RasterToNumPyArray ( InputRaster )

NumPy [5] je rozsırenı programovacıho jazyka Python je to balıcek uzıvanypro vedecke vypocty Umoznuje podporu velkych multi-dimenzionalnıch polıa matic spolu s velkou knihovnou matematickych funkcı pro praci s temitopoli

Algoritmus cyklem projızdı vsechny prvky matice a u tech ktere majı hod-notu ruznou od NoData nalezne okolı Hledanı okolı bunky provadı funkceneighbors ta je definovana takto

def ne ighbors ( i j array x y ) return nb1 nb2 nb3 nb4 nb5 nb6 nb7 nb8

Vstupem funkce je pozice v matici dale cela matice a jejı rozmery Funkceneighbors vypocıta hodnoty vysek sousednıch osmi bunek a vratı je na vystup

Obrazek 4 Dialogove okno nastroje MDinfin

Vystup z funkce neighbors slouzı jako jeden z vstupnıch parametru pro dalsıfunkci

8

Funkce byla pojmenovana dir slope jelikoz jejım vystupem je smer odtokua sklon tohoto smeru

def d i r s l o p e ( pointM nbrs vpix sp ix ) return d i r e c t i o n s l ope

Pro kazdy trojuhelnık byla spoctena hodnota d viz vzorec 3 Hodnota s bylapo spatnych a nelogickych vysledcıch pocıtana podle jineho vzorce ktery jizdaval spravne vysledky

s0 =

radicz212y21

+z22y22

(5)

Vzorec se lisı pro kazdy trojuhelnıcek uvedeny je pro vypocet sklonu kdy sousednıbunka je severozapadnı a severnı Tımto postupem bylo zbytecne pocıtatz-tovou slozku vekotoru n vzorec 2 Byly osetreny prıpady kdy sousednıbunky aktualnıho pocıtaneho trojuhelnıku jsou obe vyse polozene nebo obemimo rastr (NoData) Dalsı prıpad nastane jestlize je jeden bod vne rastra druhy v rastru lezı Smer je potom urcen prımo do toho bodu ktery nalezırastru Taktez i sklon je pocıtan pouze mezi tımto bodem a bodem M Lokalnı smer d v kazde plosce po vypoctenı nesmı prekrocit 45 V situacize tuto hodnotu prekrocı je smeru prirazena hodnota 0 nebo 45 v zavislostina vzajemnem porovnanı vysek bodu v trojuhelnıku Takto jsou zpracovanyvsechny plosky a je zjisteno zda-li do kazdeho trojuhelnıku nastava smerodtoku nebo ne Na konci funkce dir slope se kontroluje prıpad kdy smersousednıch trojuhelnıku odkazuje presne do stejneho bodu tedy hodnotysmeru musı byt pro prvnı trojuhelnık d = 45 a pro nasledujıcı sousednıtrojuhelnık d = 0 Vystupem funkce jsou dva vektory o osmi prvcıch smera sklon pro kazdou plosku

Dalsı fazı vypoctu je zjistenı pomeru vody ktera potece do jednotlivychsmeru K vypoctu pomeru byl pouzit tento vzorec [2]

fi =sxi8sum

j=1

sxj

(6)

kde s vyznacuje sklon vypocteneho smeru konkretnı trojuhelnıkove ploskya x je promenny exponent Pokud by byl exponent zvolen 1 bude vyslednasıtrsquo obdobna jako pri pouzitı MD8 algoritmu Pri zvetsovanı exponentu xk nekonecnu bude sıtrsquo stejna jako pri pouzitı D8 metody Vychozı hodnotaexponentu byla zvolena x = 4 coz je kompromis mezi obema variantami

9

Zmena exponentu se v soucasne podobe neprojevı na vyslednem rastru je-likoz vysledek prezentuje pouze smer odtoku a ne procentualnı cast Tohotopomeru bude vyuzito az pri spojenı skriptu s 2D modelem SMODERP

V dalsı casti vypoctu je rozdelen jiz zjisteny pomer z celkoveho odtokudo dvou prıpadne pouze do jedne bunky v zavislosti na smeru odtoku dVe vysledku je vypocten vektor osmi cısel kde kazda hodnota od 0 do 1prestavuje jiz procentualnı pomer z celkoveho odtoku do kazde sousednıbunky

Pro vyslednou reprezentaci smeru odtoku na vystup byl pro kazdou bunkuvytvoren vektor obsahujıcı 1 a 0 rıkajıcı zda nastava ci nenastava odtokdo sousednı bunky Tento vektor byl preveden na celocıselnou hodnotu po-mocı funkce bool2int

def boo l 2 i n t ( x ) y = 0for i j in enumerate ( x )

i f j y += 1ltlt ireturn y

Funkce ma na vstupu vektor jedicek a nul Naprıklad pro vektor 00000111kdy voda tece na severozapad sever a severovychod se funkce chova taktoJe testovano jestli platı j = 1 tedy prvnıch pet nul vektoru funkce preskocıa pro prvnı jednicku se pricte k promenne y 20 v dalsım kroku 21 a v poslednım22 Operator vyjadruje totiz bitovy posun smerem doleva Vysledkem jena vystupu cıslo y = 1 + 2 + 4 = 7

Pro vsechny bunky byla vypoctena hodnota reprezentujıcı smer odtoku Tatohodnota se ulozı do matice a ta se nasledne prevede na vysledny rastr

f l o w d i r = arcpy NumPyArrayToRaster ( value LLcorner spix vpix rdquordquo )

value hodnota reprezentujıcı smer odtokuLLcorner souradnice leveho dolnıho rohuspix sırka pixeluvpix vyska pixelu

10

5 Vysledky

Algoritmus MDinfin byl testovan na skutecnych datech dvou pozemku u obcıNucice ve Stredoceskem kraji a Bykovice v kraji Jihomoravskem rastry jsouv prıloze 71 Oba dva rastry jsou o rozlisenı 5 metru Finalnı rastry jsouporovnavany s rastry vytvorenymi v prostredı ArcGIS nastrojem Flow Di-rection metodou D8

51 Realna data - Bykovice

Vysledne rastry Flow Direction pro uzemı Bykovice jsou uvedeny v prıloze72 Oba rastry byly pro hodnoty 202127 obarveny shodnou barvou kvulilepsı nazornosti a porovnatelnosti vysledku Rastr ktery obsahuje z celkovehopoctu 44807 bunek celkem 23655 bunek s hodnotami vysek po probehnutıalgoritmy dal nasledujıcı vysledky

FD D8 MDinfin1 3650 7372 666 9174 207 188 21 716 94 3732 791 8564 8818 1045128 9408 14983sum

23655 14983

Tabulka 1 Tabulka porovnanı obou algoritmu pro rastr Bykovic

FD je zkratka pro Flow Direction cili smer odtoku reprezentovany celocıselnouhodnotou Ostatnı hodnoty u vysledneho rastru na ktery byl pouzit algorit-mus MDinfin jsou v rozpetı 0246 V rozmezı hodnot smeru odtoku 246255se nevyskytujı zadne bunky Cas potrebny pro vykonanı skriptu byl v prıpadeD8 4 vteriny Pro algoritmus MDinfin byl cas 15 vterin

11

52 Realna data - Nucice

Vysledne rastry jsou uvedeny v prıloze 73 Opet bylo pouzito shodne obar-venı pro zakladnı smery u obou rastru Rastr Nucice obsahoval data na 82732bunkach z celkove poctu 125449 bunek Vysledky jsou pro prehlednost uve-deny v tabulce

FD D8 MDinfin1 12186 12332 12441 87034 16907 10278 9826 1642316 2516 28832 5010 241764 7788 366128 16058 25475sum

82732 55932

Tabulka 2 Tabulka porovnanı obou algoritmu pro rastr Nucic

Ostatnı hodnoty u vysledneho rastru na ktery byl pouzit algoritmusMDinfin jsou v rozpetı 0255 Cas potrebny pro vykonanı skriptu byl v prıpadeD8 6 vterin Pro algoritmus MDinfin byl cas 50 vterin

12

6 Zaver

Cılem projektu bylo vytvorit funkcnı skript obsahujıcı algoritmus pojmen-ovany MDinfin [1] ktery resı odtok do sousednıch bunek rastru Algoritmusbyl napsan v programovacım jazyce Python a testovan na realnych datechVysledky byly mırnym prekvapenım kdy zejmena hodnoty smeru 128 tedyseverovychodnıho se vyskytovaly ve vysledku velmi casto viz tabulky 1 a 2Predpokladem bylo ze se odtok rozlozı do vıce smeru a pocet bunek s hod-notami zakladnıch smeru 1248163264 a 128 bude mene nez v prıpade al-goritmu D8 K rozkladu do vıce smeru sice doslo ale pocet nekterych bunekse zakladnımi smery byl vetsı u algoritmu MDinfin

Co se tyce delky doby behu algoritmu je algoritmus MDinfin pomalejsı viz casyv kapitole 5 nez D8 z nekolika zrejmych duvodu Predevsım algoritmus D8provadı mnohem mene pocetnıch operacı z duvodu jeho mensı slozitostiviz 3 Dalsım duvodem je take rozdıl v jazyce ve kterem jsou oba algo-ritmy napsany D8 je napsan v programovacım jazyce C++ ktery na vetsıchdatech je mnohonasobne rychlejsı nez Python Prepsanım algoritmu MDinfindo jazyka C++ by mohla byt cesta k budoucımu zvysenı rychlosti pracealgoritmu

13

Reference

[1] SEIBERT Jan McGlynn BL A new triangular multiple flow di-rection algortihm for computing upslope areas from gridded digi-tal elevation models [online] [cit 13 5 2013] Dostupne ke stazenız URL lthttpciteseerxistpsueduviewdocdownloaddoi=101179977amprep=rep1amptype=pdfgt

[2] HOLMGREN Peter Multiple direction algortihms for runoff modellingin grid based elevation models An empirical evaluation [online] [cit13 5 2013] Dostupny z URL ltftpwwwlwrkthseCommonUllaMFor_Imran[1994]20holmgren20-20multiple20flow

20direction20algorithms20for20runoff20modelling20in

20grid20based20elevation20modelspdf gt

[3] ESRI ESRI WebHelp - How Flow Direction works [online] [cit13 5 2013] Dostupne z URL lthttphelparcgiscomenarcgisdesktop100helpindexhtml009z00000063000000

htmgt

[4] ESRI ESRI Webhelp - Flow Direction (Spatial Analyst) [online][cit 13 5 2013] Dostupne z URL lthttphelparcgiscomenarcgisdesktop100helpindexhtml009z00000052000000

htmgt

[5] WIKIPEDIA NumPy [online] [cit 13 5 2013] Dostupne z URLlthttpenwikipediaorgwikiNumPygt

[6] INFORMIT Working with operators [online] [cit 13 5 2013] Dos-tupne z URL lthttpwwwinformitcomarticlesarticleaspxp=2002831ampseqNum=6gt

14

7 Prılohy

71 Bykovice a Nucice vstupnı DMT rastry

Obrazek 5 DMT Bykovice

Obrazek 6 DMT Nucice

15

72 Bykovice vysledky

Obrazek 7 Flow Direction D8

Obrazek 8 Flow Direction MDinfin

16

73 Nucice vysledky

Obrazek 9 Flow Direction D8

Obrazek 10 Flow Direction MDinfin

17

Page 6: pro zac ate cn kygeo.fsv.cvut.cz/gdata/2013/pin2/e/dokumentace/... · 2013-06-05 · CESK E VYSOK E U CEN I TECHNICKE V PRAZE FAKULTA STAVEBN I OBOR GEODEZIE A KARTOGRAFIE Dokumentace

Obrazek 3 Pridanı skriptu

3 Editace vstupnıch a vystupnıch parametru Pro editaci parametruklikneme pravym na skript v ArcCatalogu a zvolıme Properties Zdemuzeme mimo jine editovat i cestu k souboru py V zalozce Parametersje seznam parametru Po kliknutı na parametr se ve spodnım okne ob-jevı jejich atributy z nichz nejdulezitejsı je Direction tj zda-li se jedna ovstupnı nebo vystupnı parametr Vyznam dalsıch atributu je jasny z je-jich nazvu a nabıdky jejich hodnot Pri definovanı parametru je potrebazvolit spravny datovy typ parametru z preddefinovane nabıdky

5

Obrazek 4 Editace parametru

22 Obecne poznatky pro psanı skriptu

Pred psanım skriptu je samozrejme zadoucı si nejprve osvojit zakladnı syntaxiPythonu Pote muzeme psat skript pro ArcGIS Protoze uvod do Pythonuje perfektne zpracovan v mnoha dokumentech zde jen strucne uvedeme parzasad

221 Vybrane syntakticke zasady Pythonu

Python rozeznava bıle znaky Napr telo cyklu je oznaceno pouze odsa-zenım tabulatorem V C++ by funkce bılych znaku byla nahrazena slozenymizavorkami Python rozlisuje velka a mala pısmena Komentare se znacı oznacujecely radek Vıceradkovy komentar nenı moznyPole je nejprve nutne inicializovat pak je mozne plnit jej pomocı indexuDalsı informace jsou pekne sepsany napr zde httpwwwsallyxorgsallypythonindexphp

222 Help

Pro uvod do skriptovanı v ArcGIS je nejvyznamnejsım pomocnıkem Helpprımo od spolecnosti ESRI

6

httphelparcgiscomenarcgisdesktop100helpHelp je v anglictine a je zde prehledne popsana hledana funkce a jejı pouzitı jedemonstrovano na ukazce kodu coz je obrovskou vyhodou pro porozumenıjak dana funkce pracuje a funguje

223 Nactenı vstupnıch parametru

arcpyGetParameterAsText(index)

Indexy v Pythonu zacınajı od 0 a zde oznacujı poradı parametru jak byldefinovan v ArcCataloguVzdy je potreba parametr ulozit do nejake promenne tedy spravna syntaxebude

NazevPromenne = arcpyGetParameterAsText(0)

Stejne tak vytvorıme promennou ktera bude reprezentovat vystupnı para-metr Do teto promenne pak ukladame vysledek

PRIKLADSkript ktery zkopıruje shapefile a ulozı jej pod uzivatelem zvolenym nazvemdo zvoleneho adresare

import arcpy

inShapefile = arcpyGetParameterAsText(0)

outShapefile = arcpyGetParameterAsText(1)

arcpyCopy_management (inShapefile outShapefile)

224 Vypisy zprav a atributovych typu

Pro jakykoliv textovy vystup do vysledneho dialogu se pouzıva funkce Ad-dMessage() Pokud chceme touto funkcı vypsat hodnotu atributu nebo jinepromenne ktera nenı datoveho typu string pouzijeme pretypovanı str(promenna)Pro zjistenı atributu objektu se casto vyuzıva funkce Describe ktera umoznıpraci s mnozstvım atributovych typu PRIKLAD

import arcpy

inShapefile = arcpyGetParameterAsText(0)

ShpShapeType = arcpyDescribe(inShapefile)shapeType

7

arcpyAddMessage(Shape Type + str(ShpShapeType))

Na prıkladu je demonstrovano jak vypsat typ vstupnıho rastruVedle vypisu zpravy AddMessage existujı jeste vypis varovanı AddWarning(text je zvyrazneny) a vypis chybove hlasky AddError (beh programu seukoncı ve vyslednem dialogu v ArcGIS se vypıse dana hlaska a vypocet jevyhodnocen jako neuspesny)

225 Prıstup k prvkum atributove tabulky

K prvkum atributove tabulky se dostaneme pomocı funkce SearchCursor Tanam vytvorı pole ntit (jednotlivych radku) tabulky Ty se pak dajı kromeindexovanı prochazet napr cyklem for V tomto cyklu muzeme porovnavathodnoty atributu s hledanou hodnotou atributu Tu nalezneme jako ntitanazev atributuV prıkladu je to formule rowPOINT XHodnota FID je hodnota zadana uzivatelem ntity jsou body z shapefilu Kodv prıkladu ulozı souradnice bodu do polı X Y

PRIKLAD

import arcpy

inShapefile = arcpyGetParameterAsText(0) typu shapefile

FID_P1 = arcpyGetParameterAsText(1) typu long

FID_P2 = arcpyGetParameterAsText(2) typu long

inicializace dvouprvkovych polı a pomocne promenne

X = [00]

Y = [00]

a=0

for row in rows

if i==int(FID_P1) or i==int(FID_P2)

X[a] = mathradians(rowPOINT_X)

Y[a] = mathradians(rowPOINT_Y)

a = a+1

i = i+1

Pokud bychom nehledali ntitu podle FID ktere tvorı vzdy posloupnost prirozenychcısel muzeme promenne i priradit mısto cısla naprıklad jmeno mesta i =

8

rowName Pak by ovsem vstupnı parametr musel byt typu String byl bypovinny a neobsahoval by prednastavene hodnoty

226 Nastavenı pracovnıho adresare a prace s pozicemi na disku

Pokud nenı nastaven pracovnı adresar (tzv workspace) ArcGIS automa-ticky nabızı cestu k vystupnım parametrum podle parametru vstupnıch De-faultne je nastavena cesta k systemove geodatabazi ArcGISu DefaultgdbPokud chceme toto zmenit muzeme pracovnı adresar nastavit prıkazem

arcpyenvworkspace = cesta

Pracovnı adresar muze byt slozka i geodatabaze

227 Prace s Feature Class a Feature Layer

Nektere funkce pracujı s Feature Class a nektere s Feature Layer Nekterefunkce umı pracovat s obema typy dat Musıme se tedy rozhodnout kteradata pouzıt a popr je vytvoritRozdıl mezi temito typy je v tom ze Feature Class jsou data ulozena pevnena disku Tedy naprıklad shapefile nebo vrstva geodatabaze Typ FeatureLayer je uchovavan v pameti pocıtace a obsahuje aktualnı situaci vrstvyPredevsım tedy pouze selektovane prvkyChceme-li mıt prıstup k selektovanym prvkum musıme vzdy pouzıt typ Fe-ature Layer PRIKLAD

Chceme-li naplnit zasobnık identifikatory vsech prvku vrstvy nezavisle natom jestli jsou nektere oznaceny pouzijeme Feature Class Chceme-li na-plnit zasobnık identifikatory aktualne oznacenych prvku pouzijeme FeatureLayerVytvorenı Feature Layer z Feature Class

path = arcpyGetParameterAsText(0)

arcpyMakeFeatureLayer_management(path layer)

228 Seznam parametru

Nektere funkce jako napr Merge management pouzıvajı jako vstupnı para-metr seznam parametru (vrstev) Ten se vytvarı jako bezny seznam kteryovsem obsahuje textove retezce urcujıcı cestu k danym vrstvam

9

merge_list = []

while pathToFeatureClass

merge_listappend(rsquopathToFeatureClassrsquo)

arcpyMerge_management(merge_list outFeatureClass)

229 Testovanı existence atributoveho sloupce

Pokud chceme pridat atributovy sloupec funkcı AddField management jevhodne nejprve otestovat zda-li jiz neexistuje To se provede pomocı seznamusloupcu

fieldList = arcpyListFields(inFeatureClass rsquosectionrsquo)

fieldCount = len(fieldList)

if (fieldCount = 1)

arcpyAddField_management(inFeatureClass rsquosectionrsquo rsquoSHORTrsquo)

2210 Balıcek NumPy a jeho pouzitı

Balıcek NumPy ma obrovsky vyznam pri praci s poli a maticemi Pokudmame na vstupu rastr je treba ho prevest do podoby ve ktere budou hodnotyv jednotlivych bunkach snadno dostupne a mozne matematicke operace snimi K tomuto vyuzijeme funkce RasterToNumPyArray()

arcpyRasterToNumPyArray(InputRaster)

Tato funkce prevede na rastr na matici a jı uz muzeme bez problemu indexo-vat a provadet s nı pocetnı operace Jestlize potrebujeme dostat jako vysledekopet rastr prevedeme vyslednou matici opacnym postupem na rastr

NumPyArrayToRaster (maticelevy_dolnı_rohvelikost_pixelu_x

velikost_pixelu_y hodnota_pro_NoData)

10

3 Zaver

V tomto dokumentu byly demonstrovany ukazky a prıpady pro uplne zacatkypri programovanı skriptu spustitelneho v prostredı ESRI ArcGIS 100 Kom-pletnı zdrojove kody ze kterych se cerpaly ukazky jsou ke stazenı na strankachpredmetu PIN2

11

CESKE VYSOKE UCENI TECHNICKE V PRAZE

FAKULTA STAVEBNI

OBOR GEODEZIE A KARTOGRAFIE

Dokumentace k projektu informatika 2

Automatizace sestavenı Atlasueroznıho smyvu a transportu

splavenin ve velkych povodıch

MICHAL BECICKA

15 kvetna 2013

Obsah

1 Uvod 211 O tematu 212 Strucny souhrn 2

2 Popis pracı 321 Nastroj pro tvorbu gridu 3

211 Uvodnı dialog 4212 Vysledny log 5213 Vysledne vrstvy 5214 Cinnost nastroje podrobne 6

22 Generalizace 9221 Uvodnı dialog 9222 Vysledny log 10

23 Finalnı upravy a export 10

3 Problemy a moznosti rozsırenı 1031 Pripojovanı externıch tabulek 1032 Doba behu tvorby gridu 1133 Moznosti rozsırenı 11

4 Zaver 12

5 Prılohy 1351 Vysledny log tvorby gridu 1352 Vysledny log generalizace 14

1

1 Uvod

11 O tematu

Tema bylo urceno doc Krasou z katedry Hydromelioracı a krajinneho inzenyrstvıpro prezentovanı vysledku vypoctu eroznıho smyvu a transportu splaveninPresto ze je nastroj primarne urcen pro toto pouzitı byla snaha jej napsatco nejuniverzalnejiCılem projektu je vytvorit atlas sestaveny z jednotlivych tematickych mapTyto mapy jsou vytvoreny pro cca tretinu uzemı Ceske Republiky V potrebnemmerıtku (cca 150 000) je nemozne vytvaret spojene tematicke mapy Bylotedy nutne nejprve vyhodnotit jak nejlepe vysledky prezentovat pote vy-tvorit nastroj ktery mapy podle pozadavku upravı (generalizuje vizualizo-vane prvky) vygeneruje jednotlive mapove listy a jejich prehledku Dalevygeneruje seznam mapovych listu pro jednotliva povodı a dalsı potrebneudajeNastroj je psan v jazyce Python pro ArcGIS 100

12 Strucny souhrn

Prace se sklada z nekolika castı

1 Vytvorenı gridu - Tato cast je nejrozsahlejsı Jedna se o skript kterypro dana povodı vytvorı rozsah mapovych listu (tzv index grid layer)a do atributovych tabulek ulozı potrebne hodnoty viz dale

2 Generalizace obsahu mapy - Generalizace nakonec probehla velmijednoduse a to kategorizacı hodnot kumulovaneho smyvu

3 Uprava vzhledu a export - Tato cast byla provadena manualne varcgis layout view Po vytvorenı kyzeneho vzhledu pote probehlo ge-nerovanı jednotlivych mapovych listu pomocı toolbaru Data DrivenPages

2

2 Popis pracı

21 Nastroj pro tvorbu gridu

Tento nastroj vytvorı polygonovou vrstvu obsahujıcı grid a to podle zadanehomerıtka a velikosti mapoveho pole Do atributove tabulky gridu vlozı sloupecs nazvy mapovych listu a sloupec s cısly sekcı (bude vysvetleno dale) Zarovenprida do vstupnı polygonove vrstvy sloupec s cısly sekcı a sloupec s nazvymapovych listu na kterych se dany polygon (povodı) nachazı Dale vytvorıvrstvu nazev gridu dissolve pro prehledku sekcı

Pojem sekce Sekce je tvorena vsemi dotykajıcımi se polygony Mapovelisty jsou ke kazde sekci tvoreny zvlastrsquo a jejich nazvy jsou pote rozsıreny ocıslo sekce Prıklad cıslovanı mapovych listu 1-A1 1-A2 2-A1 2-A2

Obrazek 1 Vstupnı polygonova vrstva

3

Obrazek 2 Ocıslovane sekce polygonove vrstvy

211 Uvodnı dialog

Uvodnı dialog nastroje obsahuje pole pro 5 parametru

bull In - vstupnı parametr datovy typ Feature classVstupnı vrstva polygonu

bull Scale - vstupnı parametr datovy typ LongPozadovane merıtko

bull Map field width - vstupnı parametr s nastavenou defaultnı hodnotou25 datovy typ DoubleSırka vysledneho mapoveho ramce v cm

bull Map field height - vstupnı parametr s nastavenou defaultnı hodnotou30 datovy typ DoubleVyska vysledneho mapoveho ramce v cm

bull Out - vystupnı parametr datovy typ Feature classVystupnı vrstva gridu

4

Obrazek 3 Grid - Uvodnı dialog

212 Vysledny log

Kompletnı prıklad vysledneho logu je k nalezenı v prıloze 51Obsahuje tyto informace

bull Umıstenı pouzıvane databaze na disku

bull Dale v kazdem cyklu

ndash Poradove cıslo cyklu

ndash Aktualnı pocet nezpracovanych polygonu

ndash Cıslo vytvarene sekce

ndash Identifikatory polygonu tvorıcıch danou sekci

bull Pocet sekcı

bull Pocet mapovych listu v kazde sekci

213 Vysledne vrstvy

Vysledny grid pro merıtko 1 80 000 a defaultnı velikost mapoveho pole (25x 30 cm) vypada nasledovne

5

Obrazek 4 Grid - Vysledna vrstva

214 Cinnost nastroje podrobne

1 Prıpravne cinnostiV prvnıch radcıch kodu jsou vytvoreny pomocne promenne a pole znichz pro dalsı cinnost je potreba zmınit zasobnık IDs Ten je naplnenidentifikatory povodıPokud jiz neexistujı jsou ve vstupnı polygonove vrstve vytvoreny atri-butove sloupce hard ID section MapSheets

bull hard ID - Do tohoto sloupce byly zkopırovany identifikatory abyi po rozdelenı do nekolika vrstev mely polygony jednoznacny iden-tifikator

bull section - Po vypoctu sekcı sem bude pro kazdy polygon zapsanocıslo sekce ve ktere se nachazı

bull MapSheets - Atribut se seznamem mapovych listu na kterych sedane povodı nachazı

Ukazka tvorby atributoveho sloupce

fieldList = arcpyListFields(inFeatureClass rsquoMapSheetsrsquo)

6

fieldCount = len(fieldList)

if (fieldCount = 1)

arcpyAddField_management(inFeatureClass rsquoMapSheetsrsquo rsquoTEXTrsquo)

2 Hlavnı vypocetnı cast

Hlavnı cast je cela v cyklu while (len(IDs) gt 0) tj cyklus probıhadokud jsou v zasobnıku IDs hodnoty Na konci cyklu jsou vzdy identi-fikatory zpracovanych povodı ze zasobnıku mazany V kazdem prubehucyklu jsou selektovany povodı tvorıcı 1 sekci k takove sekci je potevytvoren grid a jsou plneny nove atributove sloupce

Ukazka hlavnıho cyklu

while len(IDs) gt 0

oznacenı povodı i-te sekce

rows_sel = arcpySearchCursor(rsquopovodi_classrsquo)

for row_sel in rows_sel

IDsremove(row_selOBJECTID)

V kazdem prubehu cyklu je zpracovana 1 sekce - tj shluk povodı kteremajı spolecnou cast hranice Sekce je tvorena na zaklade dotazu Se-lectByLocation s definicı BOUNDARY TOUCHES Dotaz se opakujev cyklu dokud se pocet oznacenych povodı zvetsuje K tomu slouzıpromenne matchcount1 matchcount2 ktere obsahujı pocet oznacenychpolygonu

Vytvorenı sekce

bull Oznacenı prvnıho nezpracovaneho polygonu

first_ID = str(IDs[0])

fieldName = OBJECTID

Query = + fieldName + = + first_ID

arcpySelectLayerByAttribute_management(rsquopovodi_classrsquo rsquoNEW_SELECTIONrsquo Query)

matchcount1 = int(arcpyGetCount_management(rsquopovodi_classrsquo)getOutput(0))

bull Prvnı prubeh SelectByLocation

7

arcpySelectLayerByLocation_management(rsquopovodi_classrsquo rsquoBOUNDARY_TOUCHESrsquo

rsquopovodi_classrsquo)

matchcount2 = int(arcpyGetCount_management(rsquopovodi_classrsquo)getOutput(0))

bull Dalsı prubehy SelectByLocation

while matchcount1 lt matchcount2

matchcount1 = matchcount2

arcpySelectLayerByLocation_management(rsquopovodi_classrsquo rsquoBOUNDARY_TOUCHESrsquo

rsquopovodi_classrsquo)

matchcount2 = int(arcpyGetCount_management(rsquopovodi_classrsquo)getOutput(0))

Oznacene polygony jsou ulozeny jako polygonova vrstva do vstupnı ge-odatabaze Tato vrstva je dale pouzita pro tvorbu gridu

Vytvorenı gridu

Pred samotnou tvorbou bylo potreba zjistit rozsah sekce Pokud bylasekce mensı nez 1 mapovy list bylo treba definovat souradnice polohylistu tak aby povodı lezelo na stredu listu Do zasobnıku byly nactenysouradnice lomovych bodu povodı a byly z nich vybrany maximalnı aminimalnı hodnoty Jejich rozdıl pak urcil rozsah sekce

Prıklad plnenı zasobnıku souradnicema

desc = arcpyDescribe(outputFeatureClassPath+rsquorsquo+output_name)

shape_field_name = descShapeFieldName

rows3 = arcpySearchCursor(outputFeatureClassPath+rsquorsquo+output_name)

mbr_X=[]

mbr_Y=[]

for row3 in rows3

Create the geometry object

feat = row3getValue(shape_field_name)

partnum = 0

for pnt in featgetPart(partnum)

mbr_Xappend(pntX)

mbr_Yappend(pntY)

partnum += 1

8

Vytvorenı gridu pote probıha budrsquo s definovanou nebo s nedefinovanoupolohou pocatecnıho mapoveho listu Pro vytvorenı gridu je pouzitafunkce GridIndexFeatures cartography

Ukazka

arcpyGridIndexFeatures_cartography(outputFeatureClassPath+rsquorsquo+grid_name

outputFeatureClassPath+rsquorsquo+output_name USEPAGEUNIT scale_str

sheet_width_str sheet_high_str str(grid_start_pnt_X)+rsquo rsquo+str(grid_start_pnt_Y))

Grid je tedy vytvoren pro jednu sekci Po vsech prubezıch cyklu jsoutakto vytvorene vrstvy gridu spojeny do jedne finalnı vrstvy V cyklujsou dale plneny nove atributove sloupce - cısla sekcı a nazvy mapovychlistu a to jak do nove (vystupnı) vrstvy gridu tak do vstupnı vrstvypovodı

3 Vytvorenı finalnıch vrstev tisk vysledku Jak bylo receno na zaverjsou spojeny jednotlive vrstvy gridu Vedle toho je vytvorena vrstvaspojenych mapovych listu po sekcıch - funkcı Dissolve - pro tvorbuprehledky Jsou vytisknuty vysledne hodnoty viz 212

22 Generalizace

Pro generalizaci byl napsan skript ktery nacıta liniovou vrstvu toku Tentoskript byl jiz psan na mıru podkladovym datum a pri nacıtanı je v nemvyuzito znalosti struktury danych podkladovych dat Skript k vrstve pripojıexternı tabulku a vytvorı atributovy sloupec kategorie Podle dat z externıtabulky pak plnı novy sloupec hodnotami 1 - 5 podle mnozstvı unasenehosedimentu Tato hodnota je pak pouzita pri vizualizaci datZajımavostı je ze pro nacıtanı musela byt tabulka indexovana viz 31

221 Uvodnı dialog

Uvodnı dialog obsahuje dva parametry

bull Input Feature Class Vstupnı liniova vrstva rıcnıch useku

bull Table Vstupnı tabulka obsahujıcı hodnoty rıcnıch splavnenin

9

222 Vysledny log

Vysledny log je k nahlednutı v prıloze 52 Obsahuje tyto informace

bull Pocet vsech rıcnıch useku

bull Pocet useku v jednotlivych kategoriıch

23 Finalnı upravy a export

Jak jiz bylo zmıneno finalnı vzhled mapoveho listu byl vytvoren manualne vLayout view a pomocı toolbaru Data Driven Pages Tento postup je casoveekonomictejsı a je jım dosazeno lepsıch vysledku dıky prehlednosti ToolbarData Driven Pages pak umoznuje vkladat dynamicke textove pole ktere seautomaticky menı s menıcım se mapovym listem Takovym polem je naprnazev mapoveho listu Stacı tedy definovat vzhled jednoho mapoveho listuv toolbaru Data Driven Pages navolit prıslusne pole - ty byly vytvorenynastrojem Grid viz 21 Dynamicky bylo potreba propojit s mapovym oknemi prehledku ktera byla vytvorena jako druhy Data Frame To se provedlo defi-novanım rozsahu podle hlavnıho mapoveho okna v Properties -iquest Data Frame-iquest Extant a definovanım Definition Query ve vlastnostech vrstvy Dalsım dy-namickym prvkem jsou oznacenı sousednıch mapovych listu a cıslo strankyNa takto sestavenou stranku s dynamickymi prvky bylo mozne pouzıt exportmapy do pdf a Atlas byl vygenerovanPrıklad dynamickeho textu pro nazev mapoveho listultdyn type=page property=PageNamegt

3 Problemy a moznosti rozsırenı

31 Pripojovanı externıch tabulek

Pri pripjovanı externıch tabulek musely byt indexovany hodnoty atribu-toveho sloupce pouziteho k parovanı To probehlo prıkazemarcpyAddIndex management (layer HydroID)Pripojenı tabulky musı probıhat k Feature layer Proto bylo nutne nejprve zFeature Class vytvorit Feature Layer1 Pote mohla byt tabulka pripojena

arcpyAddIndex_management (layer HydroID)

arcpyAddJoin_management(layer HydroID table Riverid)

1Rozdıl mezi Feature Layer a Feature Class je vysvetlen v prilozenem Tutorialu pro-gramovanı v Pythonu pro ArcGIS

10

Zde nastal problem s prıstupem k atributum Obecne nesmı nazvy atri-butovych sloupcu obsahovat mezery K hodnotam je pristupovano pres jed-notlive radky s parametrem nazev sloupce

rows= arcpySearchCursor(layer)

for row in rows

value=rownazev_sloupce

Pripojena tabulka ovsem mela v nazvech sloupcu mezeru K takto pojmeno-vanemu sloupci muselo byt pristupovano prıkazem getValue

rows= arcpySearchCursor(layer)

for row in rows

value=rowgetValue(rsquonazev tabulky$nazev sloupcersquo)

32 Doba behu tvorby gridu

Doba behu nastroje pro tvorbu gridu je znepokolive dlouha Bylo prove-deno merenı casu behu jednotlivych castı kodu funkcı time z modulu timeVysledky ukazaly ze nejdele trva vytvarenı novych vrstev Vrstva se muzevytvaret az 20 sekund Snaha o optimalizaci donutila nahradit vytvarenı vrs-tev s minimalnım ohranicujıcım obdelnıkem sekvencnım ukladanım souradniclomovych bodu polygonu z nichz pak funkcemi min a max byly tyto hodnotyzıskany Prubeh se tak urychlil o desıtky sekund (v jednom prubehu cyklupriblizne o 15 sekund) Dalsı moznostı bylo vyuzıt prostoroveho indexu datTato moznost nebyla vyuzita protoze ArcGIS pouzıva k prostorovemu in-dexovanı pravidelny grid Zıskanı MBR2 nebylo nalezeno Vyuzitı indexu byovsem problem neresilo Jak jiz bylo zmıneno nejdele trva vytvarenı novychvrstev Bohuzel funkce GridIndexFeatures cartography pro vytvorenı griduneumı pracovat se selektovanymi daty Tedy v kazdem cyklu musı byt ulozenapolygonova vrstva tvorıcı 1 sekci Pote mohla byt vytvorena vrstva tvorıcıgrid Tedy v kazdem prubehu cyklu jsou vytvareny 2 nove vrstvy Jelikozautor neprisel na zpusob jine optimalizace je nastroj pomaly Pro zadanydataset s 58mi povodımi jeho cinnost probıha desıtky minut

33 Moznosti rozsırenı

Do skriptu by se dal zakomponovat export seznamu mapovych listu pro kazdepovodı V soucasne verzi je tvoren exportem atributove tabulky

2minimum bounding rectangle - minimalnı ohranicujıcı obdelnık

11

4 Zaver

Byly vytvoreny nastroje pro automatizaci tvorby Atlasu pro mapy eroznıhosmyvu a transportu splavenin Tvorba Atlasu probıha v nekolika krocıchVizualizovane prvku jsou generalizovany Dale je vytvoren Grid ktery jepouzit jako indexova vrstva pro funkci Data Driven Pages Tou jsou vy-tvoreny jednotlive mapove listy Pomocı dynamickych prvku je pak vytvorenvzhled ktery se menı se zmenou mapoveho listu Nedostatkem je rychlostnastroje pro tvorbu gridu Presto ze je nastroj pomaly je zcela funkcnı Vprıpade potreby dalsıho rozsırenı bude ale vhodne vysledky nacıtat do novehonastroje Vzorovy vytisk vysledneho atlasu je prilozen Vzhledem k tomu zezpracovavana data jsou rozsahla a podlehajı autorskemu zakonu je vytvorenjen vzorovy vytisk z 6ti povodı Nastroje jsou psany v jazyce Python 26 proArcGIS 100 Pri praci byla vyuzıvana predevsım online napoveda ArcGISa diskuznı programatorska fora Kompletnı zdrojovy kod je ke stazenı nastrankach predmetu PIN2

12

5 Prılohy

51 Vysledny log tvorby gridu

Executing Grid

JAtlasvzorektemp_selectpovodi_vzorekgdbpokusne_povodi

70000 25 30 JAtlasvzorektemp_selectpovodi_vzorekgdbgrid70

Start Time Wed May 15 020551 2013

Running script Script2

Output folder JAtlasvzorektemp_selectpovodi_vzorekgdb

_____________________________________________________________________

count of basin polygon to process 6

_____________________________________________________________________

RUN 1

count of basins in 1 section 3

Their ID

ID 1

ID 3

ID 6

_____________________________________________________________________

count of basin polygon to process 3

_____________________________________________________________________

RUN 2

count of basins in 2 section 1

Their ID

ID 2

_____________________________________________________________________

count of basin polygon to process 2

_____________________________________________________________________

RUN 3

count of basins in 3 section 2

Their ID

ID 4

ID 5

----- RESULT -----

Number of sections 3

Number of map sheets

in section 1 13

in section 2 1

in section 3 2

Completed script Grid

Succeeded at Wed May 15 021359 2013 (Elapsed Time 8 minutes 8 seconds

13

52 Vysledny log generalizace

Executing generalization JAtlasvzorek2011_NAZV_nadrze2011_watemsedem

NAZV_tokyVT28_finshp

JAtlasvzorek2011_NAZV_nadrze2011_watemsedem28_vypocet

projectriversedimentxlsxprojectriversediment$

Start Time Wed May 15 075624 2013

Running script generalization

Category created

Total count of river parts 2879

Count of category 1 2428

Count of category 2 118

Count of category 3 68

Count of category 4 20

Count of category 5 245

Completed script generalization

Succeeded at Wed May 15 075638 2013 (Elapsed Time 1400 seconds)

14

CESKE VYSOKE UCENI TECHNICKE V PRAZE

FAKULTA STAVEBNI

OBOR GEODEZIE A KARTOGRAFIE

Dokumentace k projektu informatika 2

Stanovenı smeru odtokuna rastrovem digitalnım modelu

a implementace algoritmudo prostredı ArcGIS

BC JAN ZAJICEK

5 cervna 2013

Obsah

Obsah 1

1 Uvod 2

2 Nejbeznejsı existujıcı algoritmy 3

3 Flow Direction D8 431 Obecny princip D8 432 Popis algoritmu D8 5

4 Popis algoritmu MDinfin 641 Obecny princip MDinfin 642 Technicke resenı MDinfin 8

5 Vysledky 1151 Realna data - Bykovice 1152 Realna data - Nucice 12

6 Zaver 13

Reference 14

7 Prılohy 1571 Bykovice a Nucice vstupnı DMT rastry 1572 Bykovice vysledky 1673 Nucice vysledky 17

1

1 Uvod

Tato dokumentace byla zpracovana v ramci predmetu Projekt Informatika 2Semestralnı prace bude pouzita jako z jedna castı autorovi diplomove praces nazvem SMODERP 2D rozsırenı resıcı vztahy soustredeneho a plosnehoodtoku na danem uzemı Duvodem zpracovanı tohoto tematu byla potrebapouzitı v diplomove praci vıce nez jednoho algoritmu pro urcenı smeruodtoku v prostredı ArcGIS V soucasne dobe ArcGIS vyuzıva algoritmusD8 viz kapitola 3 jako jediny algoritmus pro vypocet smeru odtoku Tentoalgoritmus je soucastı Hydrology tools Nastroje ze skupiny Hydrology sepouzıvajı k modelovanı chovanı toku vody na povrchu Nejbeznejsı pouzıvanadigitalnı data povrchu Zeme jsou rastry digitalnı modelu terenu DMT slozenez jednotlivych bunek pixelu Tyto DMT rastry jsou pouzity jako vstupypro ruzne charakteristiky povrchu DMT rastr je souvisly povrch obvykleodkazujıcı na povrch Zeme Presnost dat je dana rozlisenım rastru taktezvzdalenostı mezi body rastru Informace o tvaru zemskeho povrchu je uzitecnapro mnoho oboru jako je napr zemedelstvı lesnictvı zivotnı prostredı neboregionalnı planovanı Tyto obory vyzadujı pochopenı jak voda tece v ramciuzemı a jak zmeny na tomto uzemı nasledne ovlivnı jejı tok

Cılem projektu bylo naprogramovat algoritmus ktery v roce 2007 publiko-vali Jan Seibert a Brian L McGlynn s nazvem MDinfin [1] Tento algoritmusje vylepsenım stavajıcıch algoritmu pro resenı urcenı smeru odtoku na ras-tru viz kapitola 2 Pro overenı spravnosti vysledku byla pouzita realnadata dvou pozemku u obcı Bykovice a Nucice Testovanı probıhalo na ras-trech o rozlisenı 5 metru Algoritmus byl naprogramovan v jazyce Pythonv prostredı NetBeans IDE 69 Pro spustenı v ArcGISu je potreba pridatdo prostredı vytvoreny toolbox upravit aktualnı cestu ke skriptu mainpya tento model nasledne spustit Vstupem modelu je rastr DMT a vystupnıadresar do ktereho se po dobehnutı modelu ulozı vysledny rastr s hodnotamismeru odtoku 1255 Algoritmus MDinfin je testovan na verzi ArcGIS 100Na nejnovejsı verzi ArcGIS 101 ktera vysla v cervnu 2012 nenı overenakompatibilita algoritmu v dusledku nefunkcnosti vıce nez jedne verze tohotoprogramu na jednom pocıtaci

2

2 Nejbeznejsı existujıcı algoritmy

Existujı tri nejbeznejsı algoritmy kazdy odlisne resıcı problematiku odtokuvody z rastru do sousednıch bunek Prvnım z nich je algoritmus D8 z roku1984 Algoritmus je podrobne popsan v nasledujıcı kapitole 3 Jelikoz odtoknastava vzdy jen do jedne sousednı bunky dochazı casto ke koncentracivodnıch sıtı a sıtrsquo odtoku pak neodpovıda skutecnosti Na druhou stranuje jeho vyhodou jeho jednoduchost a fakt ze nedochazı k nechtene disperzijako je tomu u druheho algoritmu

Druhym algoritmem je MD8 neboli multiple flow direction algorithm MD8algoritmem je voda odvadena do vsech nıze polozenych sousednıch buneka pomer vody je rozdelen procentualne podle sklonu Ve vysledku ma algo-ritmus tendenci vytvaret vıce realisticke prostorove sıte toku nez D8 tımze nedochazı k takove koncentraci vody v sıti U D8 ma mnohem vetsıvliv maly rozdıl vysek mezi sousednımi bunkami na to ktera bunka prijmeveskerou vodu Pouzitım MD8 tyto male vyskove rozdıly nemajı zdalekatakovy vliv jelikoz je mnozstvı vody rozdeleno pomerem mezi tyto bunkyNejvetsı nevyhodou tohoto algoritmu je jeho prılisna disperze na konver-gentnıch svazıch v dusledku odtoku do vsech nıze polozenych bunek

V roce 1997 byl navrzen algoritmus pojmenovany Dinfin Davidem G Tar-botonem z americke univerzity v Utahu Byl navrzen prıstup ktery je zalozenna osmi trojuhelnıkovych ploskach viz obrazek 3 Dıky tomuto postupu jsouodstraneny limitace v podobe moznosti pouze osmi smeru odtoku z bunkyProto je algoritmus pojmenovan Dinfin jelikoz muze nastat nekonecne moznostıvysledneho smeru odtoku Tento prıstup umoznuje pouze jeden smer odtokurozdeleny mezi jednu nebo dve bunky v zavislosti na smeru odtoku

Poslednı dva zmınene algoritmy MD8 a Dinfinmajı oproti D8 nevyhodu ve vetsıcasove narocnosti vypoctu V kapitole 4 je popsan algoritmus MDinfin kteryvyuzıva vyhody MD8 algoritmu za pouzitı trojuhelnıkovych plosek obdobnejako Dinfin algoritmus

3

3 Flow Direction D8

Pro pochopenı problematiky a zjevnost rozdılu mezi algoritmy je vhodneuvest jak funguje nastroj ktery pouzıva ArcGIS Zaklad algoritmu MDinfino nemz pojednava tato dokumentace je zalozen na podobnych postupech

31 Obecny princip D8

Princip nastroje urcenı smeru odtoku (Flow Direction) ktery pouzıva prostredıArcGIS je nasledujıcı Tento nastroj (tool) vezme vstupnı rastr digitalnıhomodelu terenu neboli vyskovy rastr Provede vypocet jehoz vystupem jerastr ktery v kazde bunce rastru obsahuje hodnotu urcujıcı smer odtokuz teto bunky Hodnot je osm podle osmi sousednıch bunek do kterych muzeodtekat voda viz obrazek 1 Prave podle osmi smeru odtoku se tento prıstupnazyva D8 (eight-direction approach)

Obrazek 1 Flow Direction D8 [3]

4

32 Popis algoritmu D8

Samotny vypocet algoritmu je v zasade primitivnı Pro vsechny sousednıbunky se vypocte maximalnı sklon [3]

maximalnı sklon = rozdıl vysek vzdalenost 100

Rozdıl vysek je rozdıl vysky v aktualnım bode a konkretnı sousednı bunkyVzdalenost je vypoctena mezi stredy bunek a lisı se v zavislosti na polozesousednı bunky Pro bunky sousedıcı vrcholem je hodnota velikosti pixeluprenasobena o odmocninu ze dvou Pro zbyle bunky sousedıcı hranou jevelikost vzdalenosti rovna velikosti pixelu Po nalezenı nejstrmejsıho smeruodtoku je hodnota ulozena v podobe bitove hodnoty reprezentujıcı danysmer Pred pouzitım nastroje Flow Direction se obvykle zpracuje vstupnırastr pomocı nastroje Sink Tento algoritmus zaplnı bezodtoke oblasti rastrunejnizsı hodnotou z okolı a do teto nejnizsı sousednı bunky pak posle voduPote jiz nemuze dojıt k situaci kdy vsechny sousednı bunky k dane buncemajı vyssı hodnoty vysek a nedochazelo by tedy k odtokuVysledny rastr nemusı obsahovat pouze bunky s hodnotami 202127 [4]Jestlize nastane situace kdy ma vıce sousednıch bunek nejnizsı hodnotuvysek pak je vysledna hodnota souctem vsech smeru Napr hodnota maximalnıhosklonu bude stejna pro sousednı bunku vlevo a nahore odtok tedy budesmerem na zapad (hodnota = 16) a na sever (hodnota = 64) vysledna hod-nota bude souctem 16 a 64 tedy 84

5

4 Popis algoritmu MDinfin

41 Obecny princip MDinfinObecny postup je prevzat z [1] Stejne jako v prıpade algoritmu Dinfin bylyzavedeny trojuhelnıkove plosky pro vypocet lokalnıho sklonu a smeru pro kazdoutrojuhelnıkovou plosku Okolo stredoveho boduM bylo vytvoreno osm trojuhelnıkuviz obrazek 3 Kazdy se zbyvajıcımi dvema vrcholy P1 P2 ve dvou sousedıcıchbunkach Pro kazdy z techto trojuhelnıku je vypocten smer nejvetsıho sklonuPokud oznacıme vysky bodu M P1 P2 jako hM hP1 hP2 rozdıly vysek sevypoctou takto

z1 = hP1 minus hM z2 = hP2 minus hM (1)

Obdobne se vypoctou rozdıly v x-ovych a y-ovych souradnicıch Po vypocturozdılu jednotlivych souradnic je vypocten normalovy vektor

n =

nx

ny

nz

=

z1y2 minus z2y1z1x2 minus z2x1y1x2 minus y2x1

(2)

Smer odtoku d a sklon s na trojuhelnıkove plose se vypocte pomocı rovnice3 Hodnota nula pro d oznacuje smer osy y a hodnota 3π2 oznacuje smerosy x

d =

0 nx = 0 ny ge 0

π nx = 0 ny lt 0

π2minus arctan(

ny

nx

) nx gt 0

3π2minus arctan(

ny

nx

) nx lt 0

(3)

s = minus tan

(arccos

(nzradic

n2x + n2

y + n2z

))(4)

Jestlize nejvetsı sklon od bodu M je mimo rozpetı 0-45 (π4 radian) jepouzit sklon strmejsı k jednomu z bodu P1 P2 a zaroven i sklon je spoctenk tomuto bodu V prıpade ze oba sousednı body jsou vyse polozeny nez bodM smer nenı pro tento trojuhelnık uvazovan Po spoctenı vsech osmi smerua sklonu pro jednotlive plosky jsou tyto smery povazovany za lokalne ne-jstrmejsı pro kazdy trojuhelnık v rozsahu 45 Smery vedoucı prımo do bodu

6

P1 nebo P2 tedy ty kde d = 0 nebo d = π4 jsou uvazovany pouze vprıpade kdy obe vedlejsı sousednı bunky majı smer k bodu P1 nebo P2Tato situace je znazornena na obrazku 2

Obrazek 2 Ukazka urcenı smeru odtoku z bunky [1]

Prvnı prıpad je smer mırıcı mezi bunky 5 a 6 Druhy prıpad je smer kteryvede prımo do bunky 3 Tato situace nastane jestlize pro trojuhelnık M43vyjde lokalnı smer d = π4 a pro trojuhelnık M32 smer vyjde d = 0Pote co je smer odtoku pro bunku vypocten je celkovy odtok rozdelendo vsech vyslednych smeru na zaklade sklonu Resenı teto problematiky jevıce popsano v sekci 42 Pro smery mırıcı mezi body P1 a P2 je odtokrozdelen do dvou bunek na zaklade nevejtsıho sklonu Pomer odtoku do buneks body P1 a P2 bude v tomto poradı α245 a α145

Obrazek 3 Trojuhelnıkove plosky [1]

7

42 Technicke resenı MDinfinVyse jiz bylo zmıneno ze algoritmus je napsan v jazyce Python Algoritmusje rozdelen do dvou skriptu Prvnı z nich obsahuje funkce a druhy je hlavnıVstupem do modelu je rastr digitalnıho modelu terenu a vystupnı adresardo ktereho se ulozı finalnı rastr smeru odtoku viz obr 4 Po nactenı rastruze vstupnıch parametru je tento rastr preveden na matici NumPy pomocıfunkce

arcpy RasterToNumPyArray ( InputRaster )

NumPy [5] je rozsırenı programovacıho jazyka Python je to balıcek uzıvanypro vedecke vypocty Umoznuje podporu velkych multi-dimenzionalnıch polıa matic spolu s velkou knihovnou matematickych funkcı pro praci s temitopoli

Algoritmus cyklem projızdı vsechny prvky matice a u tech ktere majı hod-notu ruznou od NoData nalezne okolı Hledanı okolı bunky provadı funkceneighbors ta je definovana takto

def ne ighbors ( i j array x y ) return nb1 nb2 nb3 nb4 nb5 nb6 nb7 nb8

Vstupem funkce je pozice v matici dale cela matice a jejı rozmery Funkceneighbors vypocıta hodnoty vysek sousednıch osmi bunek a vratı je na vystup

Obrazek 4 Dialogove okno nastroje MDinfin

Vystup z funkce neighbors slouzı jako jeden z vstupnıch parametru pro dalsıfunkci

8

Funkce byla pojmenovana dir slope jelikoz jejım vystupem je smer odtokua sklon tohoto smeru

def d i r s l o p e ( pointM nbrs vpix sp ix ) return d i r e c t i o n s l ope

Pro kazdy trojuhelnık byla spoctena hodnota d viz vzorec 3 Hodnota s bylapo spatnych a nelogickych vysledcıch pocıtana podle jineho vzorce ktery jizdaval spravne vysledky

s0 =

radicz212y21

+z22y22

(5)

Vzorec se lisı pro kazdy trojuhelnıcek uvedeny je pro vypocet sklonu kdy sousednıbunka je severozapadnı a severnı Tımto postupem bylo zbytecne pocıtatz-tovou slozku vekotoru n vzorec 2 Byly osetreny prıpady kdy sousednıbunky aktualnıho pocıtaneho trojuhelnıku jsou obe vyse polozene nebo obemimo rastr (NoData) Dalsı prıpad nastane jestlize je jeden bod vne rastra druhy v rastru lezı Smer je potom urcen prımo do toho bodu ktery nalezırastru Taktez i sklon je pocıtan pouze mezi tımto bodem a bodem M Lokalnı smer d v kazde plosce po vypoctenı nesmı prekrocit 45 V situacize tuto hodnotu prekrocı je smeru prirazena hodnota 0 nebo 45 v zavislostina vzajemnem porovnanı vysek bodu v trojuhelnıku Takto jsou zpracovanyvsechny plosky a je zjisteno zda-li do kazdeho trojuhelnıku nastava smerodtoku nebo ne Na konci funkce dir slope se kontroluje prıpad kdy smersousednıch trojuhelnıku odkazuje presne do stejneho bodu tedy hodnotysmeru musı byt pro prvnı trojuhelnık d = 45 a pro nasledujıcı sousednıtrojuhelnık d = 0 Vystupem funkce jsou dva vektory o osmi prvcıch smera sklon pro kazdou plosku

Dalsı fazı vypoctu je zjistenı pomeru vody ktera potece do jednotlivychsmeru K vypoctu pomeru byl pouzit tento vzorec [2]

fi =sxi8sum

j=1

sxj

(6)

kde s vyznacuje sklon vypocteneho smeru konkretnı trojuhelnıkove ploskya x je promenny exponent Pokud by byl exponent zvolen 1 bude vyslednasıtrsquo obdobna jako pri pouzitı MD8 algoritmu Pri zvetsovanı exponentu xk nekonecnu bude sıtrsquo stejna jako pri pouzitı D8 metody Vychozı hodnotaexponentu byla zvolena x = 4 coz je kompromis mezi obema variantami

9

Zmena exponentu se v soucasne podobe neprojevı na vyslednem rastru je-likoz vysledek prezentuje pouze smer odtoku a ne procentualnı cast Tohotopomeru bude vyuzito az pri spojenı skriptu s 2D modelem SMODERP

V dalsı casti vypoctu je rozdelen jiz zjisteny pomer z celkoveho odtokudo dvou prıpadne pouze do jedne bunky v zavislosti na smeru odtoku dVe vysledku je vypocten vektor osmi cısel kde kazda hodnota od 0 do 1prestavuje jiz procentualnı pomer z celkoveho odtoku do kazde sousednıbunky

Pro vyslednou reprezentaci smeru odtoku na vystup byl pro kazdou bunkuvytvoren vektor obsahujıcı 1 a 0 rıkajıcı zda nastava ci nenastava odtokdo sousednı bunky Tento vektor byl preveden na celocıselnou hodnotu po-mocı funkce bool2int

def boo l 2 i n t ( x ) y = 0for i j in enumerate ( x )

i f j y += 1ltlt ireturn y

Funkce ma na vstupu vektor jedicek a nul Naprıklad pro vektor 00000111kdy voda tece na severozapad sever a severovychod se funkce chova taktoJe testovano jestli platı j = 1 tedy prvnıch pet nul vektoru funkce preskocıa pro prvnı jednicku se pricte k promenne y 20 v dalsım kroku 21 a v poslednım22 Operator vyjadruje totiz bitovy posun smerem doleva Vysledkem jena vystupu cıslo y = 1 + 2 + 4 = 7

Pro vsechny bunky byla vypoctena hodnota reprezentujıcı smer odtoku Tatohodnota se ulozı do matice a ta se nasledne prevede na vysledny rastr

f l o w d i r = arcpy NumPyArrayToRaster ( value LLcorner spix vpix rdquordquo )

value hodnota reprezentujıcı smer odtokuLLcorner souradnice leveho dolnıho rohuspix sırka pixeluvpix vyska pixelu

10

5 Vysledky

Algoritmus MDinfin byl testovan na skutecnych datech dvou pozemku u obcıNucice ve Stredoceskem kraji a Bykovice v kraji Jihomoravskem rastry jsouv prıloze 71 Oba dva rastry jsou o rozlisenı 5 metru Finalnı rastry jsouporovnavany s rastry vytvorenymi v prostredı ArcGIS nastrojem Flow Di-rection metodou D8

51 Realna data - Bykovice

Vysledne rastry Flow Direction pro uzemı Bykovice jsou uvedeny v prıloze72 Oba rastry byly pro hodnoty 202127 obarveny shodnou barvou kvulilepsı nazornosti a porovnatelnosti vysledku Rastr ktery obsahuje z celkovehopoctu 44807 bunek celkem 23655 bunek s hodnotami vysek po probehnutıalgoritmy dal nasledujıcı vysledky

FD D8 MDinfin1 3650 7372 666 9174 207 188 21 716 94 3732 791 8564 8818 1045128 9408 14983sum

23655 14983

Tabulka 1 Tabulka porovnanı obou algoritmu pro rastr Bykovic

FD je zkratka pro Flow Direction cili smer odtoku reprezentovany celocıselnouhodnotou Ostatnı hodnoty u vysledneho rastru na ktery byl pouzit algorit-mus MDinfin jsou v rozpetı 0246 V rozmezı hodnot smeru odtoku 246255se nevyskytujı zadne bunky Cas potrebny pro vykonanı skriptu byl v prıpadeD8 4 vteriny Pro algoritmus MDinfin byl cas 15 vterin

11

52 Realna data - Nucice

Vysledne rastry jsou uvedeny v prıloze 73 Opet bylo pouzito shodne obar-venı pro zakladnı smery u obou rastru Rastr Nucice obsahoval data na 82732bunkach z celkove poctu 125449 bunek Vysledky jsou pro prehlednost uve-deny v tabulce

FD D8 MDinfin1 12186 12332 12441 87034 16907 10278 9826 1642316 2516 28832 5010 241764 7788 366128 16058 25475sum

82732 55932

Tabulka 2 Tabulka porovnanı obou algoritmu pro rastr Nucic

Ostatnı hodnoty u vysledneho rastru na ktery byl pouzit algoritmusMDinfin jsou v rozpetı 0255 Cas potrebny pro vykonanı skriptu byl v prıpadeD8 6 vterin Pro algoritmus MDinfin byl cas 50 vterin

12

6 Zaver

Cılem projektu bylo vytvorit funkcnı skript obsahujıcı algoritmus pojmen-ovany MDinfin [1] ktery resı odtok do sousednıch bunek rastru Algoritmusbyl napsan v programovacım jazyce Python a testovan na realnych datechVysledky byly mırnym prekvapenım kdy zejmena hodnoty smeru 128 tedyseverovychodnıho se vyskytovaly ve vysledku velmi casto viz tabulky 1 a 2Predpokladem bylo ze se odtok rozlozı do vıce smeru a pocet bunek s hod-notami zakladnıch smeru 1248163264 a 128 bude mene nez v prıpade al-goritmu D8 K rozkladu do vıce smeru sice doslo ale pocet nekterych bunekse zakladnımi smery byl vetsı u algoritmu MDinfin

Co se tyce delky doby behu algoritmu je algoritmus MDinfin pomalejsı viz casyv kapitole 5 nez D8 z nekolika zrejmych duvodu Predevsım algoritmus D8provadı mnohem mene pocetnıch operacı z duvodu jeho mensı slozitostiviz 3 Dalsım duvodem je take rozdıl v jazyce ve kterem jsou oba algo-ritmy napsany D8 je napsan v programovacım jazyce C++ ktery na vetsıchdatech je mnohonasobne rychlejsı nez Python Prepsanım algoritmu MDinfindo jazyka C++ by mohla byt cesta k budoucımu zvysenı rychlosti pracealgoritmu

13

Reference

[1] SEIBERT Jan McGlynn BL A new triangular multiple flow di-rection algortihm for computing upslope areas from gridded digi-tal elevation models [online] [cit 13 5 2013] Dostupne ke stazenız URL lthttpciteseerxistpsueduviewdocdownloaddoi=101179977amprep=rep1amptype=pdfgt

[2] HOLMGREN Peter Multiple direction algortihms for runoff modellingin grid based elevation models An empirical evaluation [online] [cit13 5 2013] Dostupny z URL ltftpwwwlwrkthseCommonUllaMFor_Imran[1994]20holmgren20-20multiple20flow

20direction20algorithms20for20runoff20modelling20in

20grid20based20elevation20modelspdf gt

[3] ESRI ESRI WebHelp - How Flow Direction works [online] [cit13 5 2013] Dostupne z URL lthttphelparcgiscomenarcgisdesktop100helpindexhtml009z00000063000000

htmgt

[4] ESRI ESRI Webhelp - Flow Direction (Spatial Analyst) [online][cit 13 5 2013] Dostupne z URL lthttphelparcgiscomenarcgisdesktop100helpindexhtml009z00000052000000

htmgt

[5] WIKIPEDIA NumPy [online] [cit 13 5 2013] Dostupne z URLlthttpenwikipediaorgwikiNumPygt

[6] INFORMIT Working with operators [online] [cit 13 5 2013] Dos-tupne z URL lthttpwwwinformitcomarticlesarticleaspxp=2002831ampseqNum=6gt

14

7 Prılohy

71 Bykovice a Nucice vstupnı DMT rastry

Obrazek 5 DMT Bykovice

Obrazek 6 DMT Nucice

15

72 Bykovice vysledky

Obrazek 7 Flow Direction D8

Obrazek 8 Flow Direction MDinfin

16

73 Nucice vysledky

Obrazek 9 Flow Direction D8

Obrazek 10 Flow Direction MDinfin

17

Page 7: pro zac ate cn kygeo.fsv.cvut.cz/gdata/2013/pin2/e/dokumentace/... · 2013-06-05 · CESK E VYSOK E U CEN I TECHNICKE V PRAZE FAKULTA STAVEBN I OBOR GEODEZIE A KARTOGRAFIE Dokumentace

Obrazek 4 Editace parametru

22 Obecne poznatky pro psanı skriptu

Pred psanım skriptu je samozrejme zadoucı si nejprve osvojit zakladnı syntaxiPythonu Pote muzeme psat skript pro ArcGIS Protoze uvod do Pythonuje perfektne zpracovan v mnoha dokumentech zde jen strucne uvedeme parzasad

221 Vybrane syntakticke zasady Pythonu

Python rozeznava bıle znaky Napr telo cyklu je oznaceno pouze odsa-zenım tabulatorem V C++ by funkce bılych znaku byla nahrazena slozenymizavorkami Python rozlisuje velka a mala pısmena Komentare se znacı oznacujecely radek Vıceradkovy komentar nenı moznyPole je nejprve nutne inicializovat pak je mozne plnit jej pomocı indexuDalsı informace jsou pekne sepsany napr zde httpwwwsallyxorgsallypythonindexphp

222 Help

Pro uvod do skriptovanı v ArcGIS je nejvyznamnejsım pomocnıkem Helpprımo od spolecnosti ESRI

6

httphelparcgiscomenarcgisdesktop100helpHelp je v anglictine a je zde prehledne popsana hledana funkce a jejı pouzitı jedemonstrovano na ukazce kodu coz je obrovskou vyhodou pro porozumenıjak dana funkce pracuje a funguje

223 Nactenı vstupnıch parametru

arcpyGetParameterAsText(index)

Indexy v Pythonu zacınajı od 0 a zde oznacujı poradı parametru jak byldefinovan v ArcCataloguVzdy je potreba parametr ulozit do nejake promenne tedy spravna syntaxebude

NazevPromenne = arcpyGetParameterAsText(0)

Stejne tak vytvorıme promennou ktera bude reprezentovat vystupnı para-metr Do teto promenne pak ukladame vysledek

PRIKLADSkript ktery zkopıruje shapefile a ulozı jej pod uzivatelem zvolenym nazvemdo zvoleneho adresare

import arcpy

inShapefile = arcpyGetParameterAsText(0)

outShapefile = arcpyGetParameterAsText(1)

arcpyCopy_management (inShapefile outShapefile)

224 Vypisy zprav a atributovych typu

Pro jakykoliv textovy vystup do vysledneho dialogu se pouzıva funkce Ad-dMessage() Pokud chceme touto funkcı vypsat hodnotu atributu nebo jinepromenne ktera nenı datoveho typu string pouzijeme pretypovanı str(promenna)Pro zjistenı atributu objektu se casto vyuzıva funkce Describe ktera umoznıpraci s mnozstvım atributovych typu PRIKLAD

import arcpy

inShapefile = arcpyGetParameterAsText(0)

ShpShapeType = arcpyDescribe(inShapefile)shapeType

7

arcpyAddMessage(Shape Type + str(ShpShapeType))

Na prıkladu je demonstrovano jak vypsat typ vstupnıho rastruVedle vypisu zpravy AddMessage existujı jeste vypis varovanı AddWarning(text je zvyrazneny) a vypis chybove hlasky AddError (beh programu seukoncı ve vyslednem dialogu v ArcGIS se vypıse dana hlaska a vypocet jevyhodnocen jako neuspesny)

225 Prıstup k prvkum atributove tabulky

K prvkum atributove tabulky se dostaneme pomocı funkce SearchCursor Tanam vytvorı pole ntit (jednotlivych radku) tabulky Ty se pak dajı kromeindexovanı prochazet napr cyklem for V tomto cyklu muzeme porovnavathodnoty atributu s hledanou hodnotou atributu Tu nalezneme jako ntitanazev atributuV prıkladu je to formule rowPOINT XHodnota FID je hodnota zadana uzivatelem ntity jsou body z shapefilu Kodv prıkladu ulozı souradnice bodu do polı X Y

PRIKLAD

import arcpy

inShapefile = arcpyGetParameterAsText(0) typu shapefile

FID_P1 = arcpyGetParameterAsText(1) typu long

FID_P2 = arcpyGetParameterAsText(2) typu long

inicializace dvouprvkovych polı a pomocne promenne

X = [00]

Y = [00]

a=0

for row in rows

if i==int(FID_P1) or i==int(FID_P2)

X[a] = mathradians(rowPOINT_X)

Y[a] = mathradians(rowPOINT_Y)

a = a+1

i = i+1

Pokud bychom nehledali ntitu podle FID ktere tvorı vzdy posloupnost prirozenychcısel muzeme promenne i priradit mısto cısla naprıklad jmeno mesta i =

8

rowName Pak by ovsem vstupnı parametr musel byt typu String byl bypovinny a neobsahoval by prednastavene hodnoty

226 Nastavenı pracovnıho adresare a prace s pozicemi na disku

Pokud nenı nastaven pracovnı adresar (tzv workspace) ArcGIS automa-ticky nabızı cestu k vystupnım parametrum podle parametru vstupnıch De-faultne je nastavena cesta k systemove geodatabazi ArcGISu DefaultgdbPokud chceme toto zmenit muzeme pracovnı adresar nastavit prıkazem

arcpyenvworkspace = cesta

Pracovnı adresar muze byt slozka i geodatabaze

227 Prace s Feature Class a Feature Layer

Nektere funkce pracujı s Feature Class a nektere s Feature Layer Nekterefunkce umı pracovat s obema typy dat Musıme se tedy rozhodnout kteradata pouzıt a popr je vytvoritRozdıl mezi temito typy je v tom ze Feature Class jsou data ulozena pevnena disku Tedy naprıklad shapefile nebo vrstva geodatabaze Typ FeatureLayer je uchovavan v pameti pocıtace a obsahuje aktualnı situaci vrstvyPredevsım tedy pouze selektovane prvkyChceme-li mıt prıstup k selektovanym prvkum musıme vzdy pouzıt typ Fe-ature Layer PRIKLAD

Chceme-li naplnit zasobnık identifikatory vsech prvku vrstvy nezavisle natom jestli jsou nektere oznaceny pouzijeme Feature Class Chceme-li na-plnit zasobnık identifikatory aktualne oznacenych prvku pouzijeme FeatureLayerVytvorenı Feature Layer z Feature Class

path = arcpyGetParameterAsText(0)

arcpyMakeFeatureLayer_management(path layer)

228 Seznam parametru

Nektere funkce jako napr Merge management pouzıvajı jako vstupnı para-metr seznam parametru (vrstev) Ten se vytvarı jako bezny seznam kteryovsem obsahuje textove retezce urcujıcı cestu k danym vrstvam

9

merge_list = []

while pathToFeatureClass

merge_listappend(rsquopathToFeatureClassrsquo)

arcpyMerge_management(merge_list outFeatureClass)

229 Testovanı existence atributoveho sloupce

Pokud chceme pridat atributovy sloupec funkcı AddField management jevhodne nejprve otestovat zda-li jiz neexistuje To se provede pomocı seznamusloupcu

fieldList = arcpyListFields(inFeatureClass rsquosectionrsquo)

fieldCount = len(fieldList)

if (fieldCount = 1)

arcpyAddField_management(inFeatureClass rsquosectionrsquo rsquoSHORTrsquo)

2210 Balıcek NumPy a jeho pouzitı

Balıcek NumPy ma obrovsky vyznam pri praci s poli a maticemi Pokudmame na vstupu rastr je treba ho prevest do podoby ve ktere budou hodnotyv jednotlivych bunkach snadno dostupne a mozne matematicke operace snimi K tomuto vyuzijeme funkce RasterToNumPyArray()

arcpyRasterToNumPyArray(InputRaster)

Tato funkce prevede na rastr na matici a jı uz muzeme bez problemu indexo-vat a provadet s nı pocetnı operace Jestlize potrebujeme dostat jako vysledekopet rastr prevedeme vyslednou matici opacnym postupem na rastr

NumPyArrayToRaster (maticelevy_dolnı_rohvelikost_pixelu_x

velikost_pixelu_y hodnota_pro_NoData)

10

3 Zaver

V tomto dokumentu byly demonstrovany ukazky a prıpady pro uplne zacatkypri programovanı skriptu spustitelneho v prostredı ESRI ArcGIS 100 Kom-pletnı zdrojove kody ze kterych se cerpaly ukazky jsou ke stazenı na strankachpredmetu PIN2

11

CESKE VYSOKE UCENI TECHNICKE V PRAZE

FAKULTA STAVEBNI

OBOR GEODEZIE A KARTOGRAFIE

Dokumentace k projektu informatika 2

Automatizace sestavenı Atlasueroznıho smyvu a transportu

splavenin ve velkych povodıch

MICHAL BECICKA

15 kvetna 2013

Obsah

1 Uvod 211 O tematu 212 Strucny souhrn 2

2 Popis pracı 321 Nastroj pro tvorbu gridu 3

211 Uvodnı dialog 4212 Vysledny log 5213 Vysledne vrstvy 5214 Cinnost nastroje podrobne 6

22 Generalizace 9221 Uvodnı dialog 9222 Vysledny log 10

23 Finalnı upravy a export 10

3 Problemy a moznosti rozsırenı 1031 Pripojovanı externıch tabulek 1032 Doba behu tvorby gridu 1133 Moznosti rozsırenı 11

4 Zaver 12

5 Prılohy 1351 Vysledny log tvorby gridu 1352 Vysledny log generalizace 14

1

1 Uvod

11 O tematu

Tema bylo urceno doc Krasou z katedry Hydromelioracı a krajinneho inzenyrstvıpro prezentovanı vysledku vypoctu eroznıho smyvu a transportu splaveninPresto ze je nastroj primarne urcen pro toto pouzitı byla snaha jej napsatco nejuniverzalnejiCılem projektu je vytvorit atlas sestaveny z jednotlivych tematickych mapTyto mapy jsou vytvoreny pro cca tretinu uzemı Ceske Republiky V potrebnemmerıtku (cca 150 000) je nemozne vytvaret spojene tematicke mapy Bylotedy nutne nejprve vyhodnotit jak nejlepe vysledky prezentovat pote vy-tvorit nastroj ktery mapy podle pozadavku upravı (generalizuje vizualizo-vane prvky) vygeneruje jednotlive mapove listy a jejich prehledku Dalevygeneruje seznam mapovych listu pro jednotliva povodı a dalsı potrebneudajeNastroj je psan v jazyce Python pro ArcGIS 100

12 Strucny souhrn

Prace se sklada z nekolika castı

1 Vytvorenı gridu - Tato cast je nejrozsahlejsı Jedna se o skript kterypro dana povodı vytvorı rozsah mapovych listu (tzv index grid layer)a do atributovych tabulek ulozı potrebne hodnoty viz dale

2 Generalizace obsahu mapy - Generalizace nakonec probehla velmijednoduse a to kategorizacı hodnot kumulovaneho smyvu

3 Uprava vzhledu a export - Tato cast byla provadena manualne varcgis layout view Po vytvorenı kyzeneho vzhledu pote probehlo ge-nerovanı jednotlivych mapovych listu pomocı toolbaru Data DrivenPages

2

2 Popis pracı

21 Nastroj pro tvorbu gridu

Tento nastroj vytvorı polygonovou vrstvu obsahujıcı grid a to podle zadanehomerıtka a velikosti mapoveho pole Do atributove tabulky gridu vlozı sloupecs nazvy mapovych listu a sloupec s cısly sekcı (bude vysvetleno dale) Zarovenprida do vstupnı polygonove vrstvy sloupec s cısly sekcı a sloupec s nazvymapovych listu na kterych se dany polygon (povodı) nachazı Dale vytvorıvrstvu nazev gridu dissolve pro prehledku sekcı

Pojem sekce Sekce je tvorena vsemi dotykajıcımi se polygony Mapovelisty jsou ke kazde sekci tvoreny zvlastrsquo a jejich nazvy jsou pote rozsıreny ocıslo sekce Prıklad cıslovanı mapovych listu 1-A1 1-A2 2-A1 2-A2

Obrazek 1 Vstupnı polygonova vrstva

3

Obrazek 2 Ocıslovane sekce polygonove vrstvy

211 Uvodnı dialog

Uvodnı dialog nastroje obsahuje pole pro 5 parametru

bull In - vstupnı parametr datovy typ Feature classVstupnı vrstva polygonu

bull Scale - vstupnı parametr datovy typ LongPozadovane merıtko

bull Map field width - vstupnı parametr s nastavenou defaultnı hodnotou25 datovy typ DoubleSırka vysledneho mapoveho ramce v cm

bull Map field height - vstupnı parametr s nastavenou defaultnı hodnotou30 datovy typ DoubleVyska vysledneho mapoveho ramce v cm

bull Out - vystupnı parametr datovy typ Feature classVystupnı vrstva gridu

4

Obrazek 3 Grid - Uvodnı dialog

212 Vysledny log

Kompletnı prıklad vysledneho logu je k nalezenı v prıloze 51Obsahuje tyto informace

bull Umıstenı pouzıvane databaze na disku

bull Dale v kazdem cyklu

ndash Poradove cıslo cyklu

ndash Aktualnı pocet nezpracovanych polygonu

ndash Cıslo vytvarene sekce

ndash Identifikatory polygonu tvorıcıch danou sekci

bull Pocet sekcı

bull Pocet mapovych listu v kazde sekci

213 Vysledne vrstvy

Vysledny grid pro merıtko 1 80 000 a defaultnı velikost mapoveho pole (25x 30 cm) vypada nasledovne

5

Obrazek 4 Grid - Vysledna vrstva

214 Cinnost nastroje podrobne

1 Prıpravne cinnostiV prvnıch radcıch kodu jsou vytvoreny pomocne promenne a pole znichz pro dalsı cinnost je potreba zmınit zasobnık IDs Ten je naplnenidentifikatory povodıPokud jiz neexistujı jsou ve vstupnı polygonove vrstve vytvoreny atri-butove sloupce hard ID section MapSheets

bull hard ID - Do tohoto sloupce byly zkopırovany identifikatory abyi po rozdelenı do nekolika vrstev mely polygony jednoznacny iden-tifikator

bull section - Po vypoctu sekcı sem bude pro kazdy polygon zapsanocıslo sekce ve ktere se nachazı

bull MapSheets - Atribut se seznamem mapovych listu na kterych sedane povodı nachazı

Ukazka tvorby atributoveho sloupce

fieldList = arcpyListFields(inFeatureClass rsquoMapSheetsrsquo)

6

fieldCount = len(fieldList)

if (fieldCount = 1)

arcpyAddField_management(inFeatureClass rsquoMapSheetsrsquo rsquoTEXTrsquo)

2 Hlavnı vypocetnı cast

Hlavnı cast je cela v cyklu while (len(IDs) gt 0) tj cyklus probıhadokud jsou v zasobnıku IDs hodnoty Na konci cyklu jsou vzdy identi-fikatory zpracovanych povodı ze zasobnıku mazany V kazdem prubehucyklu jsou selektovany povodı tvorıcı 1 sekci k takove sekci je potevytvoren grid a jsou plneny nove atributove sloupce

Ukazka hlavnıho cyklu

while len(IDs) gt 0

oznacenı povodı i-te sekce

rows_sel = arcpySearchCursor(rsquopovodi_classrsquo)

for row_sel in rows_sel

IDsremove(row_selOBJECTID)

V kazdem prubehu cyklu je zpracovana 1 sekce - tj shluk povodı kteremajı spolecnou cast hranice Sekce je tvorena na zaklade dotazu Se-lectByLocation s definicı BOUNDARY TOUCHES Dotaz se opakujev cyklu dokud se pocet oznacenych povodı zvetsuje K tomu slouzıpromenne matchcount1 matchcount2 ktere obsahujı pocet oznacenychpolygonu

Vytvorenı sekce

bull Oznacenı prvnıho nezpracovaneho polygonu

first_ID = str(IDs[0])

fieldName = OBJECTID

Query = + fieldName + = + first_ID

arcpySelectLayerByAttribute_management(rsquopovodi_classrsquo rsquoNEW_SELECTIONrsquo Query)

matchcount1 = int(arcpyGetCount_management(rsquopovodi_classrsquo)getOutput(0))

bull Prvnı prubeh SelectByLocation

7

arcpySelectLayerByLocation_management(rsquopovodi_classrsquo rsquoBOUNDARY_TOUCHESrsquo

rsquopovodi_classrsquo)

matchcount2 = int(arcpyGetCount_management(rsquopovodi_classrsquo)getOutput(0))

bull Dalsı prubehy SelectByLocation

while matchcount1 lt matchcount2

matchcount1 = matchcount2

arcpySelectLayerByLocation_management(rsquopovodi_classrsquo rsquoBOUNDARY_TOUCHESrsquo

rsquopovodi_classrsquo)

matchcount2 = int(arcpyGetCount_management(rsquopovodi_classrsquo)getOutput(0))

Oznacene polygony jsou ulozeny jako polygonova vrstva do vstupnı ge-odatabaze Tato vrstva je dale pouzita pro tvorbu gridu

Vytvorenı gridu

Pred samotnou tvorbou bylo potreba zjistit rozsah sekce Pokud bylasekce mensı nez 1 mapovy list bylo treba definovat souradnice polohylistu tak aby povodı lezelo na stredu listu Do zasobnıku byly nactenysouradnice lomovych bodu povodı a byly z nich vybrany maximalnı aminimalnı hodnoty Jejich rozdıl pak urcil rozsah sekce

Prıklad plnenı zasobnıku souradnicema

desc = arcpyDescribe(outputFeatureClassPath+rsquorsquo+output_name)

shape_field_name = descShapeFieldName

rows3 = arcpySearchCursor(outputFeatureClassPath+rsquorsquo+output_name)

mbr_X=[]

mbr_Y=[]

for row3 in rows3

Create the geometry object

feat = row3getValue(shape_field_name)

partnum = 0

for pnt in featgetPart(partnum)

mbr_Xappend(pntX)

mbr_Yappend(pntY)

partnum += 1

8

Vytvorenı gridu pote probıha budrsquo s definovanou nebo s nedefinovanoupolohou pocatecnıho mapoveho listu Pro vytvorenı gridu je pouzitafunkce GridIndexFeatures cartography

Ukazka

arcpyGridIndexFeatures_cartography(outputFeatureClassPath+rsquorsquo+grid_name

outputFeatureClassPath+rsquorsquo+output_name USEPAGEUNIT scale_str

sheet_width_str sheet_high_str str(grid_start_pnt_X)+rsquo rsquo+str(grid_start_pnt_Y))

Grid je tedy vytvoren pro jednu sekci Po vsech prubezıch cyklu jsoutakto vytvorene vrstvy gridu spojeny do jedne finalnı vrstvy V cyklujsou dale plneny nove atributove sloupce - cısla sekcı a nazvy mapovychlistu a to jak do nove (vystupnı) vrstvy gridu tak do vstupnı vrstvypovodı

3 Vytvorenı finalnıch vrstev tisk vysledku Jak bylo receno na zaverjsou spojeny jednotlive vrstvy gridu Vedle toho je vytvorena vrstvaspojenych mapovych listu po sekcıch - funkcı Dissolve - pro tvorbuprehledky Jsou vytisknuty vysledne hodnoty viz 212

22 Generalizace

Pro generalizaci byl napsan skript ktery nacıta liniovou vrstvu toku Tentoskript byl jiz psan na mıru podkladovym datum a pri nacıtanı je v nemvyuzito znalosti struktury danych podkladovych dat Skript k vrstve pripojıexternı tabulku a vytvorı atributovy sloupec kategorie Podle dat z externıtabulky pak plnı novy sloupec hodnotami 1 - 5 podle mnozstvı unasenehosedimentu Tato hodnota je pak pouzita pri vizualizaci datZajımavostı je ze pro nacıtanı musela byt tabulka indexovana viz 31

221 Uvodnı dialog

Uvodnı dialog obsahuje dva parametry

bull Input Feature Class Vstupnı liniova vrstva rıcnıch useku

bull Table Vstupnı tabulka obsahujıcı hodnoty rıcnıch splavnenin

9

222 Vysledny log

Vysledny log je k nahlednutı v prıloze 52 Obsahuje tyto informace

bull Pocet vsech rıcnıch useku

bull Pocet useku v jednotlivych kategoriıch

23 Finalnı upravy a export

Jak jiz bylo zmıneno finalnı vzhled mapoveho listu byl vytvoren manualne vLayout view a pomocı toolbaru Data Driven Pages Tento postup je casoveekonomictejsı a je jım dosazeno lepsıch vysledku dıky prehlednosti ToolbarData Driven Pages pak umoznuje vkladat dynamicke textove pole ktere seautomaticky menı s menıcım se mapovym listem Takovym polem je naprnazev mapoveho listu Stacı tedy definovat vzhled jednoho mapoveho listuv toolbaru Data Driven Pages navolit prıslusne pole - ty byly vytvorenynastrojem Grid viz 21 Dynamicky bylo potreba propojit s mapovym oknemi prehledku ktera byla vytvorena jako druhy Data Frame To se provedlo defi-novanım rozsahu podle hlavnıho mapoveho okna v Properties -iquest Data Frame-iquest Extant a definovanım Definition Query ve vlastnostech vrstvy Dalsım dy-namickym prvkem jsou oznacenı sousednıch mapovych listu a cıslo strankyNa takto sestavenou stranku s dynamickymi prvky bylo mozne pouzıt exportmapy do pdf a Atlas byl vygenerovanPrıklad dynamickeho textu pro nazev mapoveho listultdyn type=page property=PageNamegt

3 Problemy a moznosti rozsırenı

31 Pripojovanı externıch tabulek

Pri pripjovanı externıch tabulek musely byt indexovany hodnoty atribu-toveho sloupce pouziteho k parovanı To probehlo prıkazemarcpyAddIndex management (layer HydroID)Pripojenı tabulky musı probıhat k Feature layer Proto bylo nutne nejprve zFeature Class vytvorit Feature Layer1 Pote mohla byt tabulka pripojena

arcpyAddIndex_management (layer HydroID)

arcpyAddJoin_management(layer HydroID table Riverid)

1Rozdıl mezi Feature Layer a Feature Class je vysvetlen v prilozenem Tutorialu pro-gramovanı v Pythonu pro ArcGIS

10

Zde nastal problem s prıstupem k atributum Obecne nesmı nazvy atri-butovych sloupcu obsahovat mezery K hodnotam je pristupovano pres jed-notlive radky s parametrem nazev sloupce

rows= arcpySearchCursor(layer)

for row in rows

value=rownazev_sloupce

Pripojena tabulka ovsem mela v nazvech sloupcu mezeru K takto pojmeno-vanemu sloupci muselo byt pristupovano prıkazem getValue

rows= arcpySearchCursor(layer)

for row in rows

value=rowgetValue(rsquonazev tabulky$nazev sloupcersquo)

32 Doba behu tvorby gridu

Doba behu nastroje pro tvorbu gridu je znepokolive dlouha Bylo prove-deno merenı casu behu jednotlivych castı kodu funkcı time z modulu timeVysledky ukazaly ze nejdele trva vytvarenı novych vrstev Vrstva se muzevytvaret az 20 sekund Snaha o optimalizaci donutila nahradit vytvarenı vrs-tev s minimalnım ohranicujıcım obdelnıkem sekvencnım ukladanım souradniclomovych bodu polygonu z nichz pak funkcemi min a max byly tyto hodnotyzıskany Prubeh se tak urychlil o desıtky sekund (v jednom prubehu cyklupriblizne o 15 sekund) Dalsı moznostı bylo vyuzıt prostoroveho indexu datTato moznost nebyla vyuzita protoze ArcGIS pouzıva k prostorovemu in-dexovanı pravidelny grid Zıskanı MBR2 nebylo nalezeno Vyuzitı indexu byovsem problem neresilo Jak jiz bylo zmıneno nejdele trva vytvarenı novychvrstev Bohuzel funkce GridIndexFeatures cartography pro vytvorenı griduneumı pracovat se selektovanymi daty Tedy v kazdem cyklu musı byt ulozenapolygonova vrstva tvorıcı 1 sekci Pote mohla byt vytvorena vrstva tvorıcıgrid Tedy v kazdem prubehu cyklu jsou vytvareny 2 nove vrstvy Jelikozautor neprisel na zpusob jine optimalizace je nastroj pomaly Pro zadanydataset s 58mi povodımi jeho cinnost probıha desıtky minut

33 Moznosti rozsırenı

Do skriptu by se dal zakomponovat export seznamu mapovych listu pro kazdepovodı V soucasne verzi je tvoren exportem atributove tabulky

2minimum bounding rectangle - minimalnı ohranicujıcı obdelnık

11

4 Zaver

Byly vytvoreny nastroje pro automatizaci tvorby Atlasu pro mapy eroznıhosmyvu a transportu splavenin Tvorba Atlasu probıha v nekolika krocıchVizualizovane prvku jsou generalizovany Dale je vytvoren Grid ktery jepouzit jako indexova vrstva pro funkci Data Driven Pages Tou jsou vy-tvoreny jednotlive mapove listy Pomocı dynamickych prvku je pak vytvorenvzhled ktery se menı se zmenou mapoveho listu Nedostatkem je rychlostnastroje pro tvorbu gridu Presto ze je nastroj pomaly je zcela funkcnı Vprıpade potreby dalsıho rozsırenı bude ale vhodne vysledky nacıtat do novehonastroje Vzorovy vytisk vysledneho atlasu je prilozen Vzhledem k tomu zezpracovavana data jsou rozsahla a podlehajı autorskemu zakonu je vytvorenjen vzorovy vytisk z 6ti povodı Nastroje jsou psany v jazyce Python 26 proArcGIS 100 Pri praci byla vyuzıvana predevsım online napoveda ArcGISa diskuznı programatorska fora Kompletnı zdrojovy kod je ke stazenı nastrankach predmetu PIN2

12

5 Prılohy

51 Vysledny log tvorby gridu

Executing Grid

JAtlasvzorektemp_selectpovodi_vzorekgdbpokusne_povodi

70000 25 30 JAtlasvzorektemp_selectpovodi_vzorekgdbgrid70

Start Time Wed May 15 020551 2013

Running script Script2

Output folder JAtlasvzorektemp_selectpovodi_vzorekgdb

_____________________________________________________________________

count of basin polygon to process 6

_____________________________________________________________________

RUN 1

count of basins in 1 section 3

Their ID

ID 1

ID 3

ID 6

_____________________________________________________________________

count of basin polygon to process 3

_____________________________________________________________________

RUN 2

count of basins in 2 section 1

Their ID

ID 2

_____________________________________________________________________

count of basin polygon to process 2

_____________________________________________________________________

RUN 3

count of basins in 3 section 2

Their ID

ID 4

ID 5

----- RESULT -----

Number of sections 3

Number of map sheets

in section 1 13

in section 2 1

in section 3 2

Completed script Grid

Succeeded at Wed May 15 021359 2013 (Elapsed Time 8 minutes 8 seconds

13

52 Vysledny log generalizace

Executing generalization JAtlasvzorek2011_NAZV_nadrze2011_watemsedem

NAZV_tokyVT28_finshp

JAtlasvzorek2011_NAZV_nadrze2011_watemsedem28_vypocet

projectriversedimentxlsxprojectriversediment$

Start Time Wed May 15 075624 2013

Running script generalization

Category created

Total count of river parts 2879

Count of category 1 2428

Count of category 2 118

Count of category 3 68

Count of category 4 20

Count of category 5 245

Completed script generalization

Succeeded at Wed May 15 075638 2013 (Elapsed Time 1400 seconds)

14

CESKE VYSOKE UCENI TECHNICKE V PRAZE

FAKULTA STAVEBNI

OBOR GEODEZIE A KARTOGRAFIE

Dokumentace k projektu informatika 2

Stanovenı smeru odtokuna rastrovem digitalnım modelu

a implementace algoritmudo prostredı ArcGIS

BC JAN ZAJICEK

5 cervna 2013

Obsah

Obsah 1

1 Uvod 2

2 Nejbeznejsı existujıcı algoritmy 3

3 Flow Direction D8 431 Obecny princip D8 432 Popis algoritmu D8 5

4 Popis algoritmu MDinfin 641 Obecny princip MDinfin 642 Technicke resenı MDinfin 8

5 Vysledky 1151 Realna data - Bykovice 1152 Realna data - Nucice 12

6 Zaver 13

Reference 14

7 Prılohy 1571 Bykovice a Nucice vstupnı DMT rastry 1572 Bykovice vysledky 1673 Nucice vysledky 17

1

1 Uvod

Tato dokumentace byla zpracovana v ramci predmetu Projekt Informatika 2Semestralnı prace bude pouzita jako z jedna castı autorovi diplomove praces nazvem SMODERP 2D rozsırenı resıcı vztahy soustredeneho a plosnehoodtoku na danem uzemı Duvodem zpracovanı tohoto tematu byla potrebapouzitı v diplomove praci vıce nez jednoho algoritmu pro urcenı smeruodtoku v prostredı ArcGIS V soucasne dobe ArcGIS vyuzıva algoritmusD8 viz kapitola 3 jako jediny algoritmus pro vypocet smeru odtoku Tentoalgoritmus je soucastı Hydrology tools Nastroje ze skupiny Hydrology sepouzıvajı k modelovanı chovanı toku vody na povrchu Nejbeznejsı pouzıvanadigitalnı data povrchu Zeme jsou rastry digitalnı modelu terenu DMT slozenez jednotlivych bunek pixelu Tyto DMT rastry jsou pouzity jako vstupypro ruzne charakteristiky povrchu DMT rastr je souvisly povrch obvykleodkazujıcı na povrch Zeme Presnost dat je dana rozlisenım rastru taktezvzdalenostı mezi body rastru Informace o tvaru zemskeho povrchu je uzitecnapro mnoho oboru jako je napr zemedelstvı lesnictvı zivotnı prostredı neboregionalnı planovanı Tyto obory vyzadujı pochopenı jak voda tece v ramciuzemı a jak zmeny na tomto uzemı nasledne ovlivnı jejı tok

Cılem projektu bylo naprogramovat algoritmus ktery v roce 2007 publiko-vali Jan Seibert a Brian L McGlynn s nazvem MDinfin [1] Tento algoritmusje vylepsenım stavajıcıch algoritmu pro resenı urcenı smeru odtoku na ras-tru viz kapitola 2 Pro overenı spravnosti vysledku byla pouzita realnadata dvou pozemku u obcı Bykovice a Nucice Testovanı probıhalo na ras-trech o rozlisenı 5 metru Algoritmus byl naprogramovan v jazyce Pythonv prostredı NetBeans IDE 69 Pro spustenı v ArcGISu je potreba pridatdo prostredı vytvoreny toolbox upravit aktualnı cestu ke skriptu mainpya tento model nasledne spustit Vstupem modelu je rastr DMT a vystupnıadresar do ktereho se po dobehnutı modelu ulozı vysledny rastr s hodnotamismeru odtoku 1255 Algoritmus MDinfin je testovan na verzi ArcGIS 100Na nejnovejsı verzi ArcGIS 101 ktera vysla v cervnu 2012 nenı overenakompatibilita algoritmu v dusledku nefunkcnosti vıce nez jedne verze tohotoprogramu na jednom pocıtaci

2

2 Nejbeznejsı existujıcı algoritmy

Existujı tri nejbeznejsı algoritmy kazdy odlisne resıcı problematiku odtokuvody z rastru do sousednıch bunek Prvnım z nich je algoritmus D8 z roku1984 Algoritmus je podrobne popsan v nasledujıcı kapitole 3 Jelikoz odtoknastava vzdy jen do jedne sousednı bunky dochazı casto ke koncentracivodnıch sıtı a sıtrsquo odtoku pak neodpovıda skutecnosti Na druhou stranuje jeho vyhodou jeho jednoduchost a fakt ze nedochazı k nechtene disperzijako je tomu u druheho algoritmu

Druhym algoritmem je MD8 neboli multiple flow direction algorithm MD8algoritmem je voda odvadena do vsech nıze polozenych sousednıch buneka pomer vody je rozdelen procentualne podle sklonu Ve vysledku ma algo-ritmus tendenci vytvaret vıce realisticke prostorove sıte toku nez D8 tımze nedochazı k takove koncentraci vody v sıti U D8 ma mnohem vetsıvliv maly rozdıl vysek mezi sousednımi bunkami na to ktera bunka prijmeveskerou vodu Pouzitım MD8 tyto male vyskove rozdıly nemajı zdalekatakovy vliv jelikoz je mnozstvı vody rozdeleno pomerem mezi tyto bunkyNejvetsı nevyhodou tohoto algoritmu je jeho prılisna disperze na konver-gentnıch svazıch v dusledku odtoku do vsech nıze polozenych bunek

V roce 1997 byl navrzen algoritmus pojmenovany Dinfin Davidem G Tar-botonem z americke univerzity v Utahu Byl navrzen prıstup ktery je zalozenna osmi trojuhelnıkovych ploskach viz obrazek 3 Dıky tomuto postupu jsouodstraneny limitace v podobe moznosti pouze osmi smeru odtoku z bunkyProto je algoritmus pojmenovan Dinfin jelikoz muze nastat nekonecne moznostıvysledneho smeru odtoku Tento prıstup umoznuje pouze jeden smer odtokurozdeleny mezi jednu nebo dve bunky v zavislosti na smeru odtoku

Poslednı dva zmınene algoritmy MD8 a Dinfinmajı oproti D8 nevyhodu ve vetsıcasove narocnosti vypoctu V kapitole 4 je popsan algoritmus MDinfin kteryvyuzıva vyhody MD8 algoritmu za pouzitı trojuhelnıkovych plosek obdobnejako Dinfin algoritmus

3

3 Flow Direction D8

Pro pochopenı problematiky a zjevnost rozdılu mezi algoritmy je vhodneuvest jak funguje nastroj ktery pouzıva ArcGIS Zaklad algoritmu MDinfino nemz pojednava tato dokumentace je zalozen na podobnych postupech

31 Obecny princip D8

Princip nastroje urcenı smeru odtoku (Flow Direction) ktery pouzıva prostredıArcGIS je nasledujıcı Tento nastroj (tool) vezme vstupnı rastr digitalnıhomodelu terenu neboli vyskovy rastr Provede vypocet jehoz vystupem jerastr ktery v kazde bunce rastru obsahuje hodnotu urcujıcı smer odtokuz teto bunky Hodnot je osm podle osmi sousednıch bunek do kterych muzeodtekat voda viz obrazek 1 Prave podle osmi smeru odtoku se tento prıstupnazyva D8 (eight-direction approach)

Obrazek 1 Flow Direction D8 [3]

4

32 Popis algoritmu D8

Samotny vypocet algoritmu je v zasade primitivnı Pro vsechny sousednıbunky se vypocte maximalnı sklon [3]

maximalnı sklon = rozdıl vysek vzdalenost 100

Rozdıl vysek je rozdıl vysky v aktualnım bode a konkretnı sousednı bunkyVzdalenost je vypoctena mezi stredy bunek a lisı se v zavislosti na polozesousednı bunky Pro bunky sousedıcı vrcholem je hodnota velikosti pixeluprenasobena o odmocninu ze dvou Pro zbyle bunky sousedıcı hranou jevelikost vzdalenosti rovna velikosti pixelu Po nalezenı nejstrmejsıho smeruodtoku je hodnota ulozena v podobe bitove hodnoty reprezentujıcı danysmer Pred pouzitım nastroje Flow Direction se obvykle zpracuje vstupnırastr pomocı nastroje Sink Tento algoritmus zaplnı bezodtoke oblasti rastrunejnizsı hodnotou z okolı a do teto nejnizsı sousednı bunky pak posle voduPote jiz nemuze dojıt k situaci kdy vsechny sousednı bunky k dane buncemajı vyssı hodnoty vysek a nedochazelo by tedy k odtokuVysledny rastr nemusı obsahovat pouze bunky s hodnotami 202127 [4]Jestlize nastane situace kdy ma vıce sousednıch bunek nejnizsı hodnotuvysek pak je vysledna hodnota souctem vsech smeru Napr hodnota maximalnıhosklonu bude stejna pro sousednı bunku vlevo a nahore odtok tedy budesmerem na zapad (hodnota = 16) a na sever (hodnota = 64) vysledna hod-nota bude souctem 16 a 64 tedy 84

5

4 Popis algoritmu MDinfin

41 Obecny princip MDinfinObecny postup je prevzat z [1] Stejne jako v prıpade algoritmu Dinfin bylyzavedeny trojuhelnıkove plosky pro vypocet lokalnıho sklonu a smeru pro kazdoutrojuhelnıkovou plosku Okolo stredoveho boduM bylo vytvoreno osm trojuhelnıkuviz obrazek 3 Kazdy se zbyvajıcımi dvema vrcholy P1 P2 ve dvou sousedıcıchbunkach Pro kazdy z techto trojuhelnıku je vypocten smer nejvetsıho sklonuPokud oznacıme vysky bodu M P1 P2 jako hM hP1 hP2 rozdıly vysek sevypoctou takto

z1 = hP1 minus hM z2 = hP2 minus hM (1)

Obdobne se vypoctou rozdıly v x-ovych a y-ovych souradnicıch Po vypocturozdılu jednotlivych souradnic je vypocten normalovy vektor

n =

nx

ny

nz

=

z1y2 minus z2y1z1x2 minus z2x1y1x2 minus y2x1

(2)

Smer odtoku d a sklon s na trojuhelnıkove plose se vypocte pomocı rovnice3 Hodnota nula pro d oznacuje smer osy y a hodnota 3π2 oznacuje smerosy x

d =

0 nx = 0 ny ge 0

π nx = 0 ny lt 0

π2minus arctan(

ny

nx

) nx gt 0

3π2minus arctan(

ny

nx

) nx lt 0

(3)

s = minus tan

(arccos

(nzradic

n2x + n2

y + n2z

))(4)

Jestlize nejvetsı sklon od bodu M je mimo rozpetı 0-45 (π4 radian) jepouzit sklon strmejsı k jednomu z bodu P1 P2 a zaroven i sklon je spoctenk tomuto bodu V prıpade ze oba sousednı body jsou vyse polozeny nez bodM smer nenı pro tento trojuhelnık uvazovan Po spoctenı vsech osmi smerua sklonu pro jednotlive plosky jsou tyto smery povazovany za lokalne ne-jstrmejsı pro kazdy trojuhelnık v rozsahu 45 Smery vedoucı prımo do bodu

6

P1 nebo P2 tedy ty kde d = 0 nebo d = π4 jsou uvazovany pouze vprıpade kdy obe vedlejsı sousednı bunky majı smer k bodu P1 nebo P2Tato situace je znazornena na obrazku 2

Obrazek 2 Ukazka urcenı smeru odtoku z bunky [1]

Prvnı prıpad je smer mırıcı mezi bunky 5 a 6 Druhy prıpad je smer kteryvede prımo do bunky 3 Tato situace nastane jestlize pro trojuhelnık M43vyjde lokalnı smer d = π4 a pro trojuhelnık M32 smer vyjde d = 0Pote co je smer odtoku pro bunku vypocten je celkovy odtok rozdelendo vsech vyslednych smeru na zaklade sklonu Resenı teto problematiky jevıce popsano v sekci 42 Pro smery mırıcı mezi body P1 a P2 je odtokrozdelen do dvou bunek na zaklade nevejtsıho sklonu Pomer odtoku do buneks body P1 a P2 bude v tomto poradı α245 a α145

Obrazek 3 Trojuhelnıkove plosky [1]

7

42 Technicke resenı MDinfinVyse jiz bylo zmıneno ze algoritmus je napsan v jazyce Python Algoritmusje rozdelen do dvou skriptu Prvnı z nich obsahuje funkce a druhy je hlavnıVstupem do modelu je rastr digitalnıho modelu terenu a vystupnı adresardo ktereho se ulozı finalnı rastr smeru odtoku viz obr 4 Po nactenı rastruze vstupnıch parametru je tento rastr preveden na matici NumPy pomocıfunkce

arcpy RasterToNumPyArray ( InputRaster )

NumPy [5] je rozsırenı programovacıho jazyka Python je to balıcek uzıvanypro vedecke vypocty Umoznuje podporu velkych multi-dimenzionalnıch polıa matic spolu s velkou knihovnou matematickych funkcı pro praci s temitopoli

Algoritmus cyklem projızdı vsechny prvky matice a u tech ktere majı hod-notu ruznou od NoData nalezne okolı Hledanı okolı bunky provadı funkceneighbors ta je definovana takto

def ne ighbors ( i j array x y ) return nb1 nb2 nb3 nb4 nb5 nb6 nb7 nb8

Vstupem funkce je pozice v matici dale cela matice a jejı rozmery Funkceneighbors vypocıta hodnoty vysek sousednıch osmi bunek a vratı je na vystup

Obrazek 4 Dialogove okno nastroje MDinfin

Vystup z funkce neighbors slouzı jako jeden z vstupnıch parametru pro dalsıfunkci

8

Funkce byla pojmenovana dir slope jelikoz jejım vystupem je smer odtokua sklon tohoto smeru

def d i r s l o p e ( pointM nbrs vpix sp ix ) return d i r e c t i o n s l ope

Pro kazdy trojuhelnık byla spoctena hodnota d viz vzorec 3 Hodnota s bylapo spatnych a nelogickych vysledcıch pocıtana podle jineho vzorce ktery jizdaval spravne vysledky

s0 =

radicz212y21

+z22y22

(5)

Vzorec se lisı pro kazdy trojuhelnıcek uvedeny je pro vypocet sklonu kdy sousednıbunka je severozapadnı a severnı Tımto postupem bylo zbytecne pocıtatz-tovou slozku vekotoru n vzorec 2 Byly osetreny prıpady kdy sousednıbunky aktualnıho pocıtaneho trojuhelnıku jsou obe vyse polozene nebo obemimo rastr (NoData) Dalsı prıpad nastane jestlize je jeden bod vne rastra druhy v rastru lezı Smer je potom urcen prımo do toho bodu ktery nalezırastru Taktez i sklon je pocıtan pouze mezi tımto bodem a bodem M Lokalnı smer d v kazde plosce po vypoctenı nesmı prekrocit 45 V situacize tuto hodnotu prekrocı je smeru prirazena hodnota 0 nebo 45 v zavislostina vzajemnem porovnanı vysek bodu v trojuhelnıku Takto jsou zpracovanyvsechny plosky a je zjisteno zda-li do kazdeho trojuhelnıku nastava smerodtoku nebo ne Na konci funkce dir slope se kontroluje prıpad kdy smersousednıch trojuhelnıku odkazuje presne do stejneho bodu tedy hodnotysmeru musı byt pro prvnı trojuhelnık d = 45 a pro nasledujıcı sousednıtrojuhelnık d = 0 Vystupem funkce jsou dva vektory o osmi prvcıch smera sklon pro kazdou plosku

Dalsı fazı vypoctu je zjistenı pomeru vody ktera potece do jednotlivychsmeru K vypoctu pomeru byl pouzit tento vzorec [2]

fi =sxi8sum

j=1

sxj

(6)

kde s vyznacuje sklon vypocteneho smeru konkretnı trojuhelnıkove ploskya x je promenny exponent Pokud by byl exponent zvolen 1 bude vyslednasıtrsquo obdobna jako pri pouzitı MD8 algoritmu Pri zvetsovanı exponentu xk nekonecnu bude sıtrsquo stejna jako pri pouzitı D8 metody Vychozı hodnotaexponentu byla zvolena x = 4 coz je kompromis mezi obema variantami

9

Zmena exponentu se v soucasne podobe neprojevı na vyslednem rastru je-likoz vysledek prezentuje pouze smer odtoku a ne procentualnı cast Tohotopomeru bude vyuzito az pri spojenı skriptu s 2D modelem SMODERP

V dalsı casti vypoctu je rozdelen jiz zjisteny pomer z celkoveho odtokudo dvou prıpadne pouze do jedne bunky v zavislosti na smeru odtoku dVe vysledku je vypocten vektor osmi cısel kde kazda hodnota od 0 do 1prestavuje jiz procentualnı pomer z celkoveho odtoku do kazde sousednıbunky

Pro vyslednou reprezentaci smeru odtoku na vystup byl pro kazdou bunkuvytvoren vektor obsahujıcı 1 a 0 rıkajıcı zda nastava ci nenastava odtokdo sousednı bunky Tento vektor byl preveden na celocıselnou hodnotu po-mocı funkce bool2int

def boo l 2 i n t ( x ) y = 0for i j in enumerate ( x )

i f j y += 1ltlt ireturn y

Funkce ma na vstupu vektor jedicek a nul Naprıklad pro vektor 00000111kdy voda tece na severozapad sever a severovychod se funkce chova taktoJe testovano jestli platı j = 1 tedy prvnıch pet nul vektoru funkce preskocıa pro prvnı jednicku se pricte k promenne y 20 v dalsım kroku 21 a v poslednım22 Operator vyjadruje totiz bitovy posun smerem doleva Vysledkem jena vystupu cıslo y = 1 + 2 + 4 = 7

Pro vsechny bunky byla vypoctena hodnota reprezentujıcı smer odtoku Tatohodnota se ulozı do matice a ta se nasledne prevede na vysledny rastr

f l o w d i r = arcpy NumPyArrayToRaster ( value LLcorner spix vpix rdquordquo )

value hodnota reprezentujıcı smer odtokuLLcorner souradnice leveho dolnıho rohuspix sırka pixeluvpix vyska pixelu

10

5 Vysledky

Algoritmus MDinfin byl testovan na skutecnych datech dvou pozemku u obcıNucice ve Stredoceskem kraji a Bykovice v kraji Jihomoravskem rastry jsouv prıloze 71 Oba dva rastry jsou o rozlisenı 5 metru Finalnı rastry jsouporovnavany s rastry vytvorenymi v prostredı ArcGIS nastrojem Flow Di-rection metodou D8

51 Realna data - Bykovice

Vysledne rastry Flow Direction pro uzemı Bykovice jsou uvedeny v prıloze72 Oba rastry byly pro hodnoty 202127 obarveny shodnou barvou kvulilepsı nazornosti a porovnatelnosti vysledku Rastr ktery obsahuje z celkovehopoctu 44807 bunek celkem 23655 bunek s hodnotami vysek po probehnutıalgoritmy dal nasledujıcı vysledky

FD D8 MDinfin1 3650 7372 666 9174 207 188 21 716 94 3732 791 8564 8818 1045128 9408 14983sum

23655 14983

Tabulka 1 Tabulka porovnanı obou algoritmu pro rastr Bykovic

FD je zkratka pro Flow Direction cili smer odtoku reprezentovany celocıselnouhodnotou Ostatnı hodnoty u vysledneho rastru na ktery byl pouzit algorit-mus MDinfin jsou v rozpetı 0246 V rozmezı hodnot smeru odtoku 246255se nevyskytujı zadne bunky Cas potrebny pro vykonanı skriptu byl v prıpadeD8 4 vteriny Pro algoritmus MDinfin byl cas 15 vterin

11

52 Realna data - Nucice

Vysledne rastry jsou uvedeny v prıloze 73 Opet bylo pouzito shodne obar-venı pro zakladnı smery u obou rastru Rastr Nucice obsahoval data na 82732bunkach z celkove poctu 125449 bunek Vysledky jsou pro prehlednost uve-deny v tabulce

FD D8 MDinfin1 12186 12332 12441 87034 16907 10278 9826 1642316 2516 28832 5010 241764 7788 366128 16058 25475sum

82732 55932

Tabulka 2 Tabulka porovnanı obou algoritmu pro rastr Nucic

Ostatnı hodnoty u vysledneho rastru na ktery byl pouzit algoritmusMDinfin jsou v rozpetı 0255 Cas potrebny pro vykonanı skriptu byl v prıpadeD8 6 vterin Pro algoritmus MDinfin byl cas 50 vterin

12

6 Zaver

Cılem projektu bylo vytvorit funkcnı skript obsahujıcı algoritmus pojmen-ovany MDinfin [1] ktery resı odtok do sousednıch bunek rastru Algoritmusbyl napsan v programovacım jazyce Python a testovan na realnych datechVysledky byly mırnym prekvapenım kdy zejmena hodnoty smeru 128 tedyseverovychodnıho se vyskytovaly ve vysledku velmi casto viz tabulky 1 a 2Predpokladem bylo ze se odtok rozlozı do vıce smeru a pocet bunek s hod-notami zakladnıch smeru 1248163264 a 128 bude mene nez v prıpade al-goritmu D8 K rozkladu do vıce smeru sice doslo ale pocet nekterych bunekse zakladnımi smery byl vetsı u algoritmu MDinfin

Co se tyce delky doby behu algoritmu je algoritmus MDinfin pomalejsı viz casyv kapitole 5 nez D8 z nekolika zrejmych duvodu Predevsım algoritmus D8provadı mnohem mene pocetnıch operacı z duvodu jeho mensı slozitostiviz 3 Dalsım duvodem je take rozdıl v jazyce ve kterem jsou oba algo-ritmy napsany D8 je napsan v programovacım jazyce C++ ktery na vetsıchdatech je mnohonasobne rychlejsı nez Python Prepsanım algoritmu MDinfindo jazyka C++ by mohla byt cesta k budoucımu zvysenı rychlosti pracealgoritmu

13

Reference

[1] SEIBERT Jan McGlynn BL A new triangular multiple flow di-rection algortihm for computing upslope areas from gridded digi-tal elevation models [online] [cit 13 5 2013] Dostupne ke stazenız URL lthttpciteseerxistpsueduviewdocdownloaddoi=101179977amprep=rep1amptype=pdfgt

[2] HOLMGREN Peter Multiple direction algortihms for runoff modellingin grid based elevation models An empirical evaluation [online] [cit13 5 2013] Dostupny z URL ltftpwwwlwrkthseCommonUllaMFor_Imran[1994]20holmgren20-20multiple20flow

20direction20algorithms20for20runoff20modelling20in

20grid20based20elevation20modelspdf gt

[3] ESRI ESRI WebHelp - How Flow Direction works [online] [cit13 5 2013] Dostupne z URL lthttphelparcgiscomenarcgisdesktop100helpindexhtml009z00000063000000

htmgt

[4] ESRI ESRI Webhelp - Flow Direction (Spatial Analyst) [online][cit 13 5 2013] Dostupne z URL lthttphelparcgiscomenarcgisdesktop100helpindexhtml009z00000052000000

htmgt

[5] WIKIPEDIA NumPy [online] [cit 13 5 2013] Dostupne z URLlthttpenwikipediaorgwikiNumPygt

[6] INFORMIT Working with operators [online] [cit 13 5 2013] Dos-tupne z URL lthttpwwwinformitcomarticlesarticleaspxp=2002831ampseqNum=6gt

14

7 Prılohy

71 Bykovice a Nucice vstupnı DMT rastry

Obrazek 5 DMT Bykovice

Obrazek 6 DMT Nucice

15

72 Bykovice vysledky

Obrazek 7 Flow Direction D8

Obrazek 8 Flow Direction MDinfin

16

73 Nucice vysledky

Obrazek 9 Flow Direction D8

Obrazek 10 Flow Direction MDinfin

17

Page 8: pro zac ate cn kygeo.fsv.cvut.cz/gdata/2013/pin2/e/dokumentace/... · 2013-06-05 · CESK E VYSOK E U CEN I TECHNICKE V PRAZE FAKULTA STAVEBN I OBOR GEODEZIE A KARTOGRAFIE Dokumentace

httphelparcgiscomenarcgisdesktop100helpHelp je v anglictine a je zde prehledne popsana hledana funkce a jejı pouzitı jedemonstrovano na ukazce kodu coz je obrovskou vyhodou pro porozumenıjak dana funkce pracuje a funguje

223 Nactenı vstupnıch parametru

arcpyGetParameterAsText(index)

Indexy v Pythonu zacınajı od 0 a zde oznacujı poradı parametru jak byldefinovan v ArcCataloguVzdy je potreba parametr ulozit do nejake promenne tedy spravna syntaxebude

NazevPromenne = arcpyGetParameterAsText(0)

Stejne tak vytvorıme promennou ktera bude reprezentovat vystupnı para-metr Do teto promenne pak ukladame vysledek

PRIKLADSkript ktery zkopıruje shapefile a ulozı jej pod uzivatelem zvolenym nazvemdo zvoleneho adresare

import arcpy

inShapefile = arcpyGetParameterAsText(0)

outShapefile = arcpyGetParameterAsText(1)

arcpyCopy_management (inShapefile outShapefile)

224 Vypisy zprav a atributovych typu

Pro jakykoliv textovy vystup do vysledneho dialogu se pouzıva funkce Ad-dMessage() Pokud chceme touto funkcı vypsat hodnotu atributu nebo jinepromenne ktera nenı datoveho typu string pouzijeme pretypovanı str(promenna)Pro zjistenı atributu objektu se casto vyuzıva funkce Describe ktera umoznıpraci s mnozstvım atributovych typu PRIKLAD

import arcpy

inShapefile = arcpyGetParameterAsText(0)

ShpShapeType = arcpyDescribe(inShapefile)shapeType

7

arcpyAddMessage(Shape Type + str(ShpShapeType))

Na prıkladu je demonstrovano jak vypsat typ vstupnıho rastruVedle vypisu zpravy AddMessage existujı jeste vypis varovanı AddWarning(text je zvyrazneny) a vypis chybove hlasky AddError (beh programu seukoncı ve vyslednem dialogu v ArcGIS se vypıse dana hlaska a vypocet jevyhodnocen jako neuspesny)

225 Prıstup k prvkum atributove tabulky

K prvkum atributove tabulky se dostaneme pomocı funkce SearchCursor Tanam vytvorı pole ntit (jednotlivych radku) tabulky Ty se pak dajı kromeindexovanı prochazet napr cyklem for V tomto cyklu muzeme porovnavathodnoty atributu s hledanou hodnotou atributu Tu nalezneme jako ntitanazev atributuV prıkladu je to formule rowPOINT XHodnota FID je hodnota zadana uzivatelem ntity jsou body z shapefilu Kodv prıkladu ulozı souradnice bodu do polı X Y

PRIKLAD

import arcpy

inShapefile = arcpyGetParameterAsText(0) typu shapefile

FID_P1 = arcpyGetParameterAsText(1) typu long

FID_P2 = arcpyGetParameterAsText(2) typu long

inicializace dvouprvkovych polı a pomocne promenne

X = [00]

Y = [00]

a=0

for row in rows

if i==int(FID_P1) or i==int(FID_P2)

X[a] = mathradians(rowPOINT_X)

Y[a] = mathradians(rowPOINT_Y)

a = a+1

i = i+1

Pokud bychom nehledali ntitu podle FID ktere tvorı vzdy posloupnost prirozenychcısel muzeme promenne i priradit mısto cısla naprıklad jmeno mesta i =

8

rowName Pak by ovsem vstupnı parametr musel byt typu String byl bypovinny a neobsahoval by prednastavene hodnoty

226 Nastavenı pracovnıho adresare a prace s pozicemi na disku

Pokud nenı nastaven pracovnı adresar (tzv workspace) ArcGIS automa-ticky nabızı cestu k vystupnım parametrum podle parametru vstupnıch De-faultne je nastavena cesta k systemove geodatabazi ArcGISu DefaultgdbPokud chceme toto zmenit muzeme pracovnı adresar nastavit prıkazem

arcpyenvworkspace = cesta

Pracovnı adresar muze byt slozka i geodatabaze

227 Prace s Feature Class a Feature Layer

Nektere funkce pracujı s Feature Class a nektere s Feature Layer Nekterefunkce umı pracovat s obema typy dat Musıme se tedy rozhodnout kteradata pouzıt a popr je vytvoritRozdıl mezi temito typy je v tom ze Feature Class jsou data ulozena pevnena disku Tedy naprıklad shapefile nebo vrstva geodatabaze Typ FeatureLayer je uchovavan v pameti pocıtace a obsahuje aktualnı situaci vrstvyPredevsım tedy pouze selektovane prvkyChceme-li mıt prıstup k selektovanym prvkum musıme vzdy pouzıt typ Fe-ature Layer PRIKLAD

Chceme-li naplnit zasobnık identifikatory vsech prvku vrstvy nezavisle natom jestli jsou nektere oznaceny pouzijeme Feature Class Chceme-li na-plnit zasobnık identifikatory aktualne oznacenych prvku pouzijeme FeatureLayerVytvorenı Feature Layer z Feature Class

path = arcpyGetParameterAsText(0)

arcpyMakeFeatureLayer_management(path layer)

228 Seznam parametru

Nektere funkce jako napr Merge management pouzıvajı jako vstupnı para-metr seznam parametru (vrstev) Ten se vytvarı jako bezny seznam kteryovsem obsahuje textove retezce urcujıcı cestu k danym vrstvam

9

merge_list = []

while pathToFeatureClass

merge_listappend(rsquopathToFeatureClassrsquo)

arcpyMerge_management(merge_list outFeatureClass)

229 Testovanı existence atributoveho sloupce

Pokud chceme pridat atributovy sloupec funkcı AddField management jevhodne nejprve otestovat zda-li jiz neexistuje To se provede pomocı seznamusloupcu

fieldList = arcpyListFields(inFeatureClass rsquosectionrsquo)

fieldCount = len(fieldList)

if (fieldCount = 1)

arcpyAddField_management(inFeatureClass rsquosectionrsquo rsquoSHORTrsquo)

2210 Balıcek NumPy a jeho pouzitı

Balıcek NumPy ma obrovsky vyznam pri praci s poli a maticemi Pokudmame na vstupu rastr je treba ho prevest do podoby ve ktere budou hodnotyv jednotlivych bunkach snadno dostupne a mozne matematicke operace snimi K tomuto vyuzijeme funkce RasterToNumPyArray()

arcpyRasterToNumPyArray(InputRaster)

Tato funkce prevede na rastr na matici a jı uz muzeme bez problemu indexo-vat a provadet s nı pocetnı operace Jestlize potrebujeme dostat jako vysledekopet rastr prevedeme vyslednou matici opacnym postupem na rastr

NumPyArrayToRaster (maticelevy_dolnı_rohvelikost_pixelu_x

velikost_pixelu_y hodnota_pro_NoData)

10

3 Zaver

V tomto dokumentu byly demonstrovany ukazky a prıpady pro uplne zacatkypri programovanı skriptu spustitelneho v prostredı ESRI ArcGIS 100 Kom-pletnı zdrojove kody ze kterych se cerpaly ukazky jsou ke stazenı na strankachpredmetu PIN2

11

CESKE VYSOKE UCENI TECHNICKE V PRAZE

FAKULTA STAVEBNI

OBOR GEODEZIE A KARTOGRAFIE

Dokumentace k projektu informatika 2

Automatizace sestavenı Atlasueroznıho smyvu a transportu

splavenin ve velkych povodıch

MICHAL BECICKA

15 kvetna 2013

Obsah

1 Uvod 211 O tematu 212 Strucny souhrn 2

2 Popis pracı 321 Nastroj pro tvorbu gridu 3

211 Uvodnı dialog 4212 Vysledny log 5213 Vysledne vrstvy 5214 Cinnost nastroje podrobne 6

22 Generalizace 9221 Uvodnı dialog 9222 Vysledny log 10

23 Finalnı upravy a export 10

3 Problemy a moznosti rozsırenı 1031 Pripojovanı externıch tabulek 1032 Doba behu tvorby gridu 1133 Moznosti rozsırenı 11

4 Zaver 12

5 Prılohy 1351 Vysledny log tvorby gridu 1352 Vysledny log generalizace 14

1

1 Uvod

11 O tematu

Tema bylo urceno doc Krasou z katedry Hydromelioracı a krajinneho inzenyrstvıpro prezentovanı vysledku vypoctu eroznıho smyvu a transportu splaveninPresto ze je nastroj primarne urcen pro toto pouzitı byla snaha jej napsatco nejuniverzalnejiCılem projektu je vytvorit atlas sestaveny z jednotlivych tematickych mapTyto mapy jsou vytvoreny pro cca tretinu uzemı Ceske Republiky V potrebnemmerıtku (cca 150 000) je nemozne vytvaret spojene tematicke mapy Bylotedy nutne nejprve vyhodnotit jak nejlepe vysledky prezentovat pote vy-tvorit nastroj ktery mapy podle pozadavku upravı (generalizuje vizualizo-vane prvky) vygeneruje jednotlive mapove listy a jejich prehledku Dalevygeneruje seznam mapovych listu pro jednotliva povodı a dalsı potrebneudajeNastroj je psan v jazyce Python pro ArcGIS 100

12 Strucny souhrn

Prace se sklada z nekolika castı

1 Vytvorenı gridu - Tato cast je nejrozsahlejsı Jedna se o skript kterypro dana povodı vytvorı rozsah mapovych listu (tzv index grid layer)a do atributovych tabulek ulozı potrebne hodnoty viz dale

2 Generalizace obsahu mapy - Generalizace nakonec probehla velmijednoduse a to kategorizacı hodnot kumulovaneho smyvu

3 Uprava vzhledu a export - Tato cast byla provadena manualne varcgis layout view Po vytvorenı kyzeneho vzhledu pote probehlo ge-nerovanı jednotlivych mapovych listu pomocı toolbaru Data DrivenPages

2

2 Popis pracı

21 Nastroj pro tvorbu gridu

Tento nastroj vytvorı polygonovou vrstvu obsahujıcı grid a to podle zadanehomerıtka a velikosti mapoveho pole Do atributove tabulky gridu vlozı sloupecs nazvy mapovych listu a sloupec s cısly sekcı (bude vysvetleno dale) Zarovenprida do vstupnı polygonove vrstvy sloupec s cısly sekcı a sloupec s nazvymapovych listu na kterych se dany polygon (povodı) nachazı Dale vytvorıvrstvu nazev gridu dissolve pro prehledku sekcı

Pojem sekce Sekce je tvorena vsemi dotykajıcımi se polygony Mapovelisty jsou ke kazde sekci tvoreny zvlastrsquo a jejich nazvy jsou pote rozsıreny ocıslo sekce Prıklad cıslovanı mapovych listu 1-A1 1-A2 2-A1 2-A2

Obrazek 1 Vstupnı polygonova vrstva

3

Obrazek 2 Ocıslovane sekce polygonove vrstvy

211 Uvodnı dialog

Uvodnı dialog nastroje obsahuje pole pro 5 parametru

bull In - vstupnı parametr datovy typ Feature classVstupnı vrstva polygonu

bull Scale - vstupnı parametr datovy typ LongPozadovane merıtko

bull Map field width - vstupnı parametr s nastavenou defaultnı hodnotou25 datovy typ DoubleSırka vysledneho mapoveho ramce v cm

bull Map field height - vstupnı parametr s nastavenou defaultnı hodnotou30 datovy typ DoubleVyska vysledneho mapoveho ramce v cm

bull Out - vystupnı parametr datovy typ Feature classVystupnı vrstva gridu

4

Obrazek 3 Grid - Uvodnı dialog

212 Vysledny log

Kompletnı prıklad vysledneho logu je k nalezenı v prıloze 51Obsahuje tyto informace

bull Umıstenı pouzıvane databaze na disku

bull Dale v kazdem cyklu

ndash Poradove cıslo cyklu

ndash Aktualnı pocet nezpracovanych polygonu

ndash Cıslo vytvarene sekce

ndash Identifikatory polygonu tvorıcıch danou sekci

bull Pocet sekcı

bull Pocet mapovych listu v kazde sekci

213 Vysledne vrstvy

Vysledny grid pro merıtko 1 80 000 a defaultnı velikost mapoveho pole (25x 30 cm) vypada nasledovne

5

Obrazek 4 Grid - Vysledna vrstva

214 Cinnost nastroje podrobne

1 Prıpravne cinnostiV prvnıch radcıch kodu jsou vytvoreny pomocne promenne a pole znichz pro dalsı cinnost je potreba zmınit zasobnık IDs Ten je naplnenidentifikatory povodıPokud jiz neexistujı jsou ve vstupnı polygonove vrstve vytvoreny atri-butove sloupce hard ID section MapSheets

bull hard ID - Do tohoto sloupce byly zkopırovany identifikatory abyi po rozdelenı do nekolika vrstev mely polygony jednoznacny iden-tifikator

bull section - Po vypoctu sekcı sem bude pro kazdy polygon zapsanocıslo sekce ve ktere se nachazı

bull MapSheets - Atribut se seznamem mapovych listu na kterych sedane povodı nachazı

Ukazka tvorby atributoveho sloupce

fieldList = arcpyListFields(inFeatureClass rsquoMapSheetsrsquo)

6

fieldCount = len(fieldList)

if (fieldCount = 1)

arcpyAddField_management(inFeatureClass rsquoMapSheetsrsquo rsquoTEXTrsquo)

2 Hlavnı vypocetnı cast

Hlavnı cast je cela v cyklu while (len(IDs) gt 0) tj cyklus probıhadokud jsou v zasobnıku IDs hodnoty Na konci cyklu jsou vzdy identi-fikatory zpracovanych povodı ze zasobnıku mazany V kazdem prubehucyklu jsou selektovany povodı tvorıcı 1 sekci k takove sekci je potevytvoren grid a jsou plneny nove atributove sloupce

Ukazka hlavnıho cyklu

while len(IDs) gt 0

oznacenı povodı i-te sekce

rows_sel = arcpySearchCursor(rsquopovodi_classrsquo)

for row_sel in rows_sel

IDsremove(row_selOBJECTID)

V kazdem prubehu cyklu je zpracovana 1 sekce - tj shluk povodı kteremajı spolecnou cast hranice Sekce je tvorena na zaklade dotazu Se-lectByLocation s definicı BOUNDARY TOUCHES Dotaz se opakujev cyklu dokud se pocet oznacenych povodı zvetsuje K tomu slouzıpromenne matchcount1 matchcount2 ktere obsahujı pocet oznacenychpolygonu

Vytvorenı sekce

bull Oznacenı prvnıho nezpracovaneho polygonu

first_ID = str(IDs[0])

fieldName = OBJECTID

Query = + fieldName + = + first_ID

arcpySelectLayerByAttribute_management(rsquopovodi_classrsquo rsquoNEW_SELECTIONrsquo Query)

matchcount1 = int(arcpyGetCount_management(rsquopovodi_classrsquo)getOutput(0))

bull Prvnı prubeh SelectByLocation

7

arcpySelectLayerByLocation_management(rsquopovodi_classrsquo rsquoBOUNDARY_TOUCHESrsquo

rsquopovodi_classrsquo)

matchcount2 = int(arcpyGetCount_management(rsquopovodi_classrsquo)getOutput(0))

bull Dalsı prubehy SelectByLocation

while matchcount1 lt matchcount2

matchcount1 = matchcount2

arcpySelectLayerByLocation_management(rsquopovodi_classrsquo rsquoBOUNDARY_TOUCHESrsquo

rsquopovodi_classrsquo)

matchcount2 = int(arcpyGetCount_management(rsquopovodi_classrsquo)getOutput(0))

Oznacene polygony jsou ulozeny jako polygonova vrstva do vstupnı ge-odatabaze Tato vrstva je dale pouzita pro tvorbu gridu

Vytvorenı gridu

Pred samotnou tvorbou bylo potreba zjistit rozsah sekce Pokud bylasekce mensı nez 1 mapovy list bylo treba definovat souradnice polohylistu tak aby povodı lezelo na stredu listu Do zasobnıku byly nactenysouradnice lomovych bodu povodı a byly z nich vybrany maximalnı aminimalnı hodnoty Jejich rozdıl pak urcil rozsah sekce

Prıklad plnenı zasobnıku souradnicema

desc = arcpyDescribe(outputFeatureClassPath+rsquorsquo+output_name)

shape_field_name = descShapeFieldName

rows3 = arcpySearchCursor(outputFeatureClassPath+rsquorsquo+output_name)

mbr_X=[]

mbr_Y=[]

for row3 in rows3

Create the geometry object

feat = row3getValue(shape_field_name)

partnum = 0

for pnt in featgetPart(partnum)

mbr_Xappend(pntX)

mbr_Yappend(pntY)

partnum += 1

8

Vytvorenı gridu pote probıha budrsquo s definovanou nebo s nedefinovanoupolohou pocatecnıho mapoveho listu Pro vytvorenı gridu je pouzitafunkce GridIndexFeatures cartography

Ukazka

arcpyGridIndexFeatures_cartography(outputFeatureClassPath+rsquorsquo+grid_name

outputFeatureClassPath+rsquorsquo+output_name USEPAGEUNIT scale_str

sheet_width_str sheet_high_str str(grid_start_pnt_X)+rsquo rsquo+str(grid_start_pnt_Y))

Grid je tedy vytvoren pro jednu sekci Po vsech prubezıch cyklu jsoutakto vytvorene vrstvy gridu spojeny do jedne finalnı vrstvy V cyklujsou dale plneny nove atributove sloupce - cısla sekcı a nazvy mapovychlistu a to jak do nove (vystupnı) vrstvy gridu tak do vstupnı vrstvypovodı

3 Vytvorenı finalnıch vrstev tisk vysledku Jak bylo receno na zaverjsou spojeny jednotlive vrstvy gridu Vedle toho je vytvorena vrstvaspojenych mapovych listu po sekcıch - funkcı Dissolve - pro tvorbuprehledky Jsou vytisknuty vysledne hodnoty viz 212

22 Generalizace

Pro generalizaci byl napsan skript ktery nacıta liniovou vrstvu toku Tentoskript byl jiz psan na mıru podkladovym datum a pri nacıtanı je v nemvyuzito znalosti struktury danych podkladovych dat Skript k vrstve pripojıexternı tabulku a vytvorı atributovy sloupec kategorie Podle dat z externıtabulky pak plnı novy sloupec hodnotami 1 - 5 podle mnozstvı unasenehosedimentu Tato hodnota je pak pouzita pri vizualizaci datZajımavostı je ze pro nacıtanı musela byt tabulka indexovana viz 31

221 Uvodnı dialog

Uvodnı dialog obsahuje dva parametry

bull Input Feature Class Vstupnı liniova vrstva rıcnıch useku

bull Table Vstupnı tabulka obsahujıcı hodnoty rıcnıch splavnenin

9

222 Vysledny log

Vysledny log je k nahlednutı v prıloze 52 Obsahuje tyto informace

bull Pocet vsech rıcnıch useku

bull Pocet useku v jednotlivych kategoriıch

23 Finalnı upravy a export

Jak jiz bylo zmıneno finalnı vzhled mapoveho listu byl vytvoren manualne vLayout view a pomocı toolbaru Data Driven Pages Tento postup je casoveekonomictejsı a je jım dosazeno lepsıch vysledku dıky prehlednosti ToolbarData Driven Pages pak umoznuje vkladat dynamicke textove pole ktere seautomaticky menı s menıcım se mapovym listem Takovym polem je naprnazev mapoveho listu Stacı tedy definovat vzhled jednoho mapoveho listuv toolbaru Data Driven Pages navolit prıslusne pole - ty byly vytvorenynastrojem Grid viz 21 Dynamicky bylo potreba propojit s mapovym oknemi prehledku ktera byla vytvorena jako druhy Data Frame To se provedlo defi-novanım rozsahu podle hlavnıho mapoveho okna v Properties -iquest Data Frame-iquest Extant a definovanım Definition Query ve vlastnostech vrstvy Dalsım dy-namickym prvkem jsou oznacenı sousednıch mapovych listu a cıslo strankyNa takto sestavenou stranku s dynamickymi prvky bylo mozne pouzıt exportmapy do pdf a Atlas byl vygenerovanPrıklad dynamickeho textu pro nazev mapoveho listultdyn type=page property=PageNamegt

3 Problemy a moznosti rozsırenı

31 Pripojovanı externıch tabulek

Pri pripjovanı externıch tabulek musely byt indexovany hodnoty atribu-toveho sloupce pouziteho k parovanı To probehlo prıkazemarcpyAddIndex management (layer HydroID)Pripojenı tabulky musı probıhat k Feature layer Proto bylo nutne nejprve zFeature Class vytvorit Feature Layer1 Pote mohla byt tabulka pripojena

arcpyAddIndex_management (layer HydroID)

arcpyAddJoin_management(layer HydroID table Riverid)

1Rozdıl mezi Feature Layer a Feature Class je vysvetlen v prilozenem Tutorialu pro-gramovanı v Pythonu pro ArcGIS

10

Zde nastal problem s prıstupem k atributum Obecne nesmı nazvy atri-butovych sloupcu obsahovat mezery K hodnotam je pristupovano pres jed-notlive radky s parametrem nazev sloupce

rows= arcpySearchCursor(layer)

for row in rows

value=rownazev_sloupce

Pripojena tabulka ovsem mela v nazvech sloupcu mezeru K takto pojmeno-vanemu sloupci muselo byt pristupovano prıkazem getValue

rows= arcpySearchCursor(layer)

for row in rows

value=rowgetValue(rsquonazev tabulky$nazev sloupcersquo)

32 Doba behu tvorby gridu

Doba behu nastroje pro tvorbu gridu je znepokolive dlouha Bylo prove-deno merenı casu behu jednotlivych castı kodu funkcı time z modulu timeVysledky ukazaly ze nejdele trva vytvarenı novych vrstev Vrstva se muzevytvaret az 20 sekund Snaha o optimalizaci donutila nahradit vytvarenı vrs-tev s minimalnım ohranicujıcım obdelnıkem sekvencnım ukladanım souradniclomovych bodu polygonu z nichz pak funkcemi min a max byly tyto hodnotyzıskany Prubeh se tak urychlil o desıtky sekund (v jednom prubehu cyklupriblizne o 15 sekund) Dalsı moznostı bylo vyuzıt prostoroveho indexu datTato moznost nebyla vyuzita protoze ArcGIS pouzıva k prostorovemu in-dexovanı pravidelny grid Zıskanı MBR2 nebylo nalezeno Vyuzitı indexu byovsem problem neresilo Jak jiz bylo zmıneno nejdele trva vytvarenı novychvrstev Bohuzel funkce GridIndexFeatures cartography pro vytvorenı griduneumı pracovat se selektovanymi daty Tedy v kazdem cyklu musı byt ulozenapolygonova vrstva tvorıcı 1 sekci Pote mohla byt vytvorena vrstva tvorıcıgrid Tedy v kazdem prubehu cyklu jsou vytvareny 2 nove vrstvy Jelikozautor neprisel na zpusob jine optimalizace je nastroj pomaly Pro zadanydataset s 58mi povodımi jeho cinnost probıha desıtky minut

33 Moznosti rozsırenı

Do skriptu by se dal zakomponovat export seznamu mapovych listu pro kazdepovodı V soucasne verzi je tvoren exportem atributove tabulky

2minimum bounding rectangle - minimalnı ohranicujıcı obdelnık

11

4 Zaver

Byly vytvoreny nastroje pro automatizaci tvorby Atlasu pro mapy eroznıhosmyvu a transportu splavenin Tvorba Atlasu probıha v nekolika krocıchVizualizovane prvku jsou generalizovany Dale je vytvoren Grid ktery jepouzit jako indexova vrstva pro funkci Data Driven Pages Tou jsou vy-tvoreny jednotlive mapove listy Pomocı dynamickych prvku je pak vytvorenvzhled ktery se menı se zmenou mapoveho listu Nedostatkem je rychlostnastroje pro tvorbu gridu Presto ze je nastroj pomaly je zcela funkcnı Vprıpade potreby dalsıho rozsırenı bude ale vhodne vysledky nacıtat do novehonastroje Vzorovy vytisk vysledneho atlasu je prilozen Vzhledem k tomu zezpracovavana data jsou rozsahla a podlehajı autorskemu zakonu je vytvorenjen vzorovy vytisk z 6ti povodı Nastroje jsou psany v jazyce Python 26 proArcGIS 100 Pri praci byla vyuzıvana predevsım online napoveda ArcGISa diskuznı programatorska fora Kompletnı zdrojovy kod je ke stazenı nastrankach predmetu PIN2

12

5 Prılohy

51 Vysledny log tvorby gridu

Executing Grid

JAtlasvzorektemp_selectpovodi_vzorekgdbpokusne_povodi

70000 25 30 JAtlasvzorektemp_selectpovodi_vzorekgdbgrid70

Start Time Wed May 15 020551 2013

Running script Script2

Output folder JAtlasvzorektemp_selectpovodi_vzorekgdb

_____________________________________________________________________

count of basin polygon to process 6

_____________________________________________________________________

RUN 1

count of basins in 1 section 3

Their ID

ID 1

ID 3

ID 6

_____________________________________________________________________

count of basin polygon to process 3

_____________________________________________________________________

RUN 2

count of basins in 2 section 1

Their ID

ID 2

_____________________________________________________________________

count of basin polygon to process 2

_____________________________________________________________________

RUN 3

count of basins in 3 section 2

Their ID

ID 4

ID 5

----- RESULT -----

Number of sections 3

Number of map sheets

in section 1 13

in section 2 1

in section 3 2

Completed script Grid

Succeeded at Wed May 15 021359 2013 (Elapsed Time 8 minutes 8 seconds

13

52 Vysledny log generalizace

Executing generalization JAtlasvzorek2011_NAZV_nadrze2011_watemsedem

NAZV_tokyVT28_finshp

JAtlasvzorek2011_NAZV_nadrze2011_watemsedem28_vypocet

projectriversedimentxlsxprojectriversediment$

Start Time Wed May 15 075624 2013

Running script generalization

Category created

Total count of river parts 2879

Count of category 1 2428

Count of category 2 118

Count of category 3 68

Count of category 4 20

Count of category 5 245

Completed script generalization

Succeeded at Wed May 15 075638 2013 (Elapsed Time 1400 seconds)

14

CESKE VYSOKE UCENI TECHNICKE V PRAZE

FAKULTA STAVEBNI

OBOR GEODEZIE A KARTOGRAFIE

Dokumentace k projektu informatika 2

Stanovenı smeru odtokuna rastrovem digitalnım modelu

a implementace algoritmudo prostredı ArcGIS

BC JAN ZAJICEK

5 cervna 2013

Obsah

Obsah 1

1 Uvod 2

2 Nejbeznejsı existujıcı algoritmy 3

3 Flow Direction D8 431 Obecny princip D8 432 Popis algoritmu D8 5

4 Popis algoritmu MDinfin 641 Obecny princip MDinfin 642 Technicke resenı MDinfin 8

5 Vysledky 1151 Realna data - Bykovice 1152 Realna data - Nucice 12

6 Zaver 13

Reference 14

7 Prılohy 1571 Bykovice a Nucice vstupnı DMT rastry 1572 Bykovice vysledky 1673 Nucice vysledky 17

1

1 Uvod

Tato dokumentace byla zpracovana v ramci predmetu Projekt Informatika 2Semestralnı prace bude pouzita jako z jedna castı autorovi diplomove praces nazvem SMODERP 2D rozsırenı resıcı vztahy soustredeneho a plosnehoodtoku na danem uzemı Duvodem zpracovanı tohoto tematu byla potrebapouzitı v diplomove praci vıce nez jednoho algoritmu pro urcenı smeruodtoku v prostredı ArcGIS V soucasne dobe ArcGIS vyuzıva algoritmusD8 viz kapitola 3 jako jediny algoritmus pro vypocet smeru odtoku Tentoalgoritmus je soucastı Hydrology tools Nastroje ze skupiny Hydrology sepouzıvajı k modelovanı chovanı toku vody na povrchu Nejbeznejsı pouzıvanadigitalnı data povrchu Zeme jsou rastry digitalnı modelu terenu DMT slozenez jednotlivych bunek pixelu Tyto DMT rastry jsou pouzity jako vstupypro ruzne charakteristiky povrchu DMT rastr je souvisly povrch obvykleodkazujıcı na povrch Zeme Presnost dat je dana rozlisenım rastru taktezvzdalenostı mezi body rastru Informace o tvaru zemskeho povrchu je uzitecnapro mnoho oboru jako je napr zemedelstvı lesnictvı zivotnı prostredı neboregionalnı planovanı Tyto obory vyzadujı pochopenı jak voda tece v ramciuzemı a jak zmeny na tomto uzemı nasledne ovlivnı jejı tok

Cılem projektu bylo naprogramovat algoritmus ktery v roce 2007 publiko-vali Jan Seibert a Brian L McGlynn s nazvem MDinfin [1] Tento algoritmusje vylepsenım stavajıcıch algoritmu pro resenı urcenı smeru odtoku na ras-tru viz kapitola 2 Pro overenı spravnosti vysledku byla pouzita realnadata dvou pozemku u obcı Bykovice a Nucice Testovanı probıhalo na ras-trech o rozlisenı 5 metru Algoritmus byl naprogramovan v jazyce Pythonv prostredı NetBeans IDE 69 Pro spustenı v ArcGISu je potreba pridatdo prostredı vytvoreny toolbox upravit aktualnı cestu ke skriptu mainpya tento model nasledne spustit Vstupem modelu je rastr DMT a vystupnıadresar do ktereho se po dobehnutı modelu ulozı vysledny rastr s hodnotamismeru odtoku 1255 Algoritmus MDinfin je testovan na verzi ArcGIS 100Na nejnovejsı verzi ArcGIS 101 ktera vysla v cervnu 2012 nenı overenakompatibilita algoritmu v dusledku nefunkcnosti vıce nez jedne verze tohotoprogramu na jednom pocıtaci

2

2 Nejbeznejsı existujıcı algoritmy

Existujı tri nejbeznejsı algoritmy kazdy odlisne resıcı problematiku odtokuvody z rastru do sousednıch bunek Prvnım z nich je algoritmus D8 z roku1984 Algoritmus je podrobne popsan v nasledujıcı kapitole 3 Jelikoz odtoknastava vzdy jen do jedne sousednı bunky dochazı casto ke koncentracivodnıch sıtı a sıtrsquo odtoku pak neodpovıda skutecnosti Na druhou stranuje jeho vyhodou jeho jednoduchost a fakt ze nedochazı k nechtene disperzijako je tomu u druheho algoritmu

Druhym algoritmem je MD8 neboli multiple flow direction algorithm MD8algoritmem je voda odvadena do vsech nıze polozenych sousednıch buneka pomer vody je rozdelen procentualne podle sklonu Ve vysledku ma algo-ritmus tendenci vytvaret vıce realisticke prostorove sıte toku nez D8 tımze nedochazı k takove koncentraci vody v sıti U D8 ma mnohem vetsıvliv maly rozdıl vysek mezi sousednımi bunkami na to ktera bunka prijmeveskerou vodu Pouzitım MD8 tyto male vyskove rozdıly nemajı zdalekatakovy vliv jelikoz je mnozstvı vody rozdeleno pomerem mezi tyto bunkyNejvetsı nevyhodou tohoto algoritmu je jeho prılisna disperze na konver-gentnıch svazıch v dusledku odtoku do vsech nıze polozenych bunek

V roce 1997 byl navrzen algoritmus pojmenovany Dinfin Davidem G Tar-botonem z americke univerzity v Utahu Byl navrzen prıstup ktery je zalozenna osmi trojuhelnıkovych ploskach viz obrazek 3 Dıky tomuto postupu jsouodstraneny limitace v podobe moznosti pouze osmi smeru odtoku z bunkyProto je algoritmus pojmenovan Dinfin jelikoz muze nastat nekonecne moznostıvysledneho smeru odtoku Tento prıstup umoznuje pouze jeden smer odtokurozdeleny mezi jednu nebo dve bunky v zavislosti na smeru odtoku

Poslednı dva zmınene algoritmy MD8 a Dinfinmajı oproti D8 nevyhodu ve vetsıcasove narocnosti vypoctu V kapitole 4 je popsan algoritmus MDinfin kteryvyuzıva vyhody MD8 algoritmu za pouzitı trojuhelnıkovych plosek obdobnejako Dinfin algoritmus

3

3 Flow Direction D8

Pro pochopenı problematiky a zjevnost rozdılu mezi algoritmy je vhodneuvest jak funguje nastroj ktery pouzıva ArcGIS Zaklad algoritmu MDinfino nemz pojednava tato dokumentace je zalozen na podobnych postupech

31 Obecny princip D8

Princip nastroje urcenı smeru odtoku (Flow Direction) ktery pouzıva prostredıArcGIS je nasledujıcı Tento nastroj (tool) vezme vstupnı rastr digitalnıhomodelu terenu neboli vyskovy rastr Provede vypocet jehoz vystupem jerastr ktery v kazde bunce rastru obsahuje hodnotu urcujıcı smer odtokuz teto bunky Hodnot je osm podle osmi sousednıch bunek do kterych muzeodtekat voda viz obrazek 1 Prave podle osmi smeru odtoku se tento prıstupnazyva D8 (eight-direction approach)

Obrazek 1 Flow Direction D8 [3]

4

32 Popis algoritmu D8

Samotny vypocet algoritmu je v zasade primitivnı Pro vsechny sousednıbunky se vypocte maximalnı sklon [3]

maximalnı sklon = rozdıl vysek vzdalenost 100

Rozdıl vysek je rozdıl vysky v aktualnım bode a konkretnı sousednı bunkyVzdalenost je vypoctena mezi stredy bunek a lisı se v zavislosti na polozesousednı bunky Pro bunky sousedıcı vrcholem je hodnota velikosti pixeluprenasobena o odmocninu ze dvou Pro zbyle bunky sousedıcı hranou jevelikost vzdalenosti rovna velikosti pixelu Po nalezenı nejstrmejsıho smeruodtoku je hodnota ulozena v podobe bitove hodnoty reprezentujıcı danysmer Pred pouzitım nastroje Flow Direction se obvykle zpracuje vstupnırastr pomocı nastroje Sink Tento algoritmus zaplnı bezodtoke oblasti rastrunejnizsı hodnotou z okolı a do teto nejnizsı sousednı bunky pak posle voduPote jiz nemuze dojıt k situaci kdy vsechny sousednı bunky k dane buncemajı vyssı hodnoty vysek a nedochazelo by tedy k odtokuVysledny rastr nemusı obsahovat pouze bunky s hodnotami 202127 [4]Jestlize nastane situace kdy ma vıce sousednıch bunek nejnizsı hodnotuvysek pak je vysledna hodnota souctem vsech smeru Napr hodnota maximalnıhosklonu bude stejna pro sousednı bunku vlevo a nahore odtok tedy budesmerem na zapad (hodnota = 16) a na sever (hodnota = 64) vysledna hod-nota bude souctem 16 a 64 tedy 84

5

4 Popis algoritmu MDinfin

41 Obecny princip MDinfinObecny postup je prevzat z [1] Stejne jako v prıpade algoritmu Dinfin bylyzavedeny trojuhelnıkove plosky pro vypocet lokalnıho sklonu a smeru pro kazdoutrojuhelnıkovou plosku Okolo stredoveho boduM bylo vytvoreno osm trojuhelnıkuviz obrazek 3 Kazdy se zbyvajıcımi dvema vrcholy P1 P2 ve dvou sousedıcıchbunkach Pro kazdy z techto trojuhelnıku je vypocten smer nejvetsıho sklonuPokud oznacıme vysky bodu M P1 P2 jako hM hP1 hP2 rozdıly vysek sevypoctou takto

z1 = hP1 minus hM z2 = hP2 minus hM (1)

Obdobne se vypoctou rozdıly v x-ovych a y-ovych souradnicıch Po vypocturozdılu jednotlivych souradnic je vypocten normalovy vektor

n =

nx

ny

nz

=

z1y2 minus z2y1z1x2 minus z2x1y1x2 minus y2x1

(2)

Smer odtoku d a sklon s na trojuhelnıkove plose se vypocte pomocı rovnice3 Hodnota nula pro d oznacuje smer osy y a hodnota 3π2 oznacuje smerosy x

d =

0 nx = 0 ny ge 0

π nx = 0 ny lt 0

π2minus arctan(

ny

nx

) nx gt 0

3π2minus arctan(

ny

nx

) nx lt 0

(3)

s = minus tan

(arccos

(nzradic

n2x + n2

y + n2z

))(4)

Jestlize nejvetsı sklon od bodu M je mimo rozpetı 0-45 (π4 radian) jepouzit sklon strmejsı k jednomu z bodu P1 P2 a zaroven i sklon je spoctenk tomuto bodu V prıpade ze oba sousednı body jsou vyse polozeny nez bodM smer nenı pro tento trojuhelnık uvazovan Po spoctenı vsech osmi smerua sklonu pro jednotlive plosky jsou tyto smery povazovany za lokalne ne-jstrmejsı pro kazdy trojuhelnık v rozsahu 45 Smery vedoucı prımo do bodu

6

P1 nebo P2 tedy ty kde d = 0 nebo d = π4 jsou uvazovany pouze vprıpade kdy obe vedlejsı sousednı bunky majı smer k bodu P1 nebo P2Tato situace je znazornena na obrazku 2

Obrazek 2 Ukazka urcenı smeru odtoku z bunky [1]

Prvnı prıpad je smer mırıcı mezi bunky 5 a 6 Druhy prıpad je smer kteryvede prımo do bunky 3 Tato situace nastane jestlize pro trojuhelnık M43vyjde lokalnı smer d = π4 a pro trojuhelnık M32 smer vyjde d = 0Pote co je smer odtoku pro bunku vypocten je celkovy odtok rozdelendo vsech vyslednych smeru na zaklade sklonu Resenı teto problematiky jevıce popsano v sekci 42 Pro smery mırıcı mezi body P1 a P2 je odtokrozdelen do dvou bunek na zaklade nevejtsıho sklonu Pomer odtoku do buneks body P1 a P2 bude v tomto poradı α245 a α145

Obrazek 3 Trojuhelnıkove plosky [1]

7

42 Technicke resenı MDinfinVyse jiz bylo zmıneno ze algoritmus je napsan v jazyce Python Algoritmusje rozdelen do dvou skriptu Prvnı z nich obsahuje funkce a druhy je hlavnıVstupem do modelu je rastr digitalnıho modelu terenu a vystupnı adresardo ktereho se ulozı finalnı rastr smeru odtoku viz obr 4 Po nactenı rastruze vstupnıch parametru je tento rastr preveden na matici NumPy pomocıfunkce

arcpy RasterToNumPyArray ( InputRaster )

NumPy [5] je rozsırenı programovacıho jazyka Python je to balıcek uzıvanypro vedecke vypocty Umoznuje podporu velkych multi-dimenzionalnıch polıa matic spolu s velkou knihovnou matematickych funkcı pro praci s temitopoli

Algoritmus cyklem projızdı vsechny prvky matice a u tech ktere majı hod-notu ruznou od NoData nalezne okolı Hledanı okolı bunky provadı funkceneighbors ta je definovana takto

def ne ighbors ( i j array x y ) return nb1 nb2 nb3 nb4 nb5 nb6 nb7 nb8

Vstupem funkce je pozice v matici dale cela matice a jejı rozmery Funkceneighbors vypocıta hodnoty vysek sousednıch osmi bunek a vratı je na vystup

Obrazek 4 Dialogove okno nastroje MDinfin

Vystup z funkce neighbors slouzı jako jeden z vstupnıch parametru pro dalsıfunkci

8

Funkce byla pojmenovana dir slope jelikoz jejım vystupem je smer odtokua sklon tohoto smeru

def d i r s l o p e ( pointM nbrs vpix sp ix ) return d i r e c t i o n s l ope

Pro kazdy trojuhelnık byla spoctena hodnota d viz vzorec 3 Hodnota s bylapo spatnych a nelogickych vysledcıch pocıtana podle jineho vzorce ktery jizdaval spravne vysledky

s0 =

radicz212y21

+z22y22

(5)

Vzorec se lisı pro kazdy trojuhelnıcek uvedeny je pro vypocet sklonu kdy sousednıbunka je severozapadnı a severnı Tımto postupem bylo zbytecne pocıtatz-tovou slozku vekotoru n vzorec 2 Byly osetreny prıpady kdy sousednıbunky aktualnıho pocıtaneho trojuhelnıku jsou obe vyse polozene nebo obemimo rastr (NoData) Dalsı prıpad nastane jestlize je jeden bod vne rastra druhy v rastru lezı Smer je potom urcen prımo do toho bodu ktery nalezırastru Taktez i sklon je pocıtan pouze mezi tımto bodem a bodem M Lokalnı smer d v kazde plosce po vypoctenı nesmı prekrocit 45 V situacize tuto hodnotu prekrocı je smeru prirazena hodnota 0 nebo 45 v zavislostina vzajemnem porovnanı vysek bodu v trojuhelnıku Takto jsou zpracovanyvsechny plosky a je zjisteno zda-li do kazdeho trojuhelnıku nastava smerodtoku nebo ne Na konci funkce dir slope se kontroluje prıpad kdy smersousednıch trojuhelnıku odkazuje presne do stejneho bodu tedy hodnotysmeru musı byt pro prvnı trojuhelnık d = 45 a pro nasledujıcı sousednıtrojuhelnık d = 0 Vystupem funkce jsou dva vektory o osmi prvcıch smera sklon pro kazdou plosku

Dalsı fazı vypoctu je zjistenı pomeru vody ktera potece do jednotlivychsmeru K vypoctu pomeru byl pouzit tento vzorec [2]

fi =sxi8sum

j=1

sxj

(6)

kde s vyznacuje sklon vypocteneho smeru konkretnı trojuhelnıkove ploskya x je promenny exponent Pokud by byl exponent zvolen 1 bude vyslednasıtrsquo obdobna jako pri pouzitı MD8 algoritmu Pri zvetsovanı exponentu xk nekonecnu bude sıtrsquo stejna jako pri pouzitı D8 metody Vychozı hodnotaexponentu byla zvolena x = 4 coz je kompromis mezi obema variantami

9

Zmena exponentu se v soucasne podobe neprojevı na vyslednem rastru je-likoz vysledek prezentuje pouze smer odtoku a ne procentualnı cast Tohotopomeru bude vyuzito az pri spojenı skriptu s 2D modelem SMODERP

V dalsı casti vypoctu je rozdelen jiz zjisteny pomer z celkoveho odtokudo dvou prıpadne pouze do jedne bunky v zavislosti na smeru odtoku dVe vysledku je vypocten vektor osmi cısel kde kazda hodnota od 0 do 1prestavuje jiz procentualnı pomer z celkoveho odtoku do kazde sousednıbunky

Pro vyslednou reprezentaci smeru odtoku na vystup byl pro kazdou bunkuvytvoren vektor obsahujıcı 1 a 0 rıkajıcı zda nastava ci nenastava odtokdo sousednı bunky Tento vektor byl preveden na celocıselnou hodnotu po-mocı funkce bool2int

def boo l 2 i n t ( x ) y = 0for i j in enumerate ( x )

i f j y += 1ltlt ireturn y

Funkce ma na vstupu vektor jedicek a nul Naprıklad pro vektor 00000111kdy voda tece na severozapad sever a severovychod se funkce chova taktoJe testovano jestli platı j = 1 tedy prvnıch pet nul vektoru funkce preskocıa pro prvnı jednicku se pricte k promenne y 20 v dalsım kroku 21 a v poslednım22 Operator vyjadruje totiz bitovy posun smerem doleva Vysledkem jena vystupu cıslo y = 1 + 2 + 4 = 7

Pro vsechny bunky byla vypoctena hodnota reprezentujıcı smer odtoku Tatohodnota se ulozı do matice a ta se nasledne prevede na vysledny rastr

f l o w d i r = arcpy NumPyArrayToRaster ( value LLcorner spix vpix rdquordquo )

value hodnota reprezentujıcı smer odtokuLLcorner souradnice leveho dolnıho rohuspix sırka pixeluvpix vyska pixelu

10

5 Vysledky

Algoritmus MDinfin byl testovan na skutecnych datech dvou pozemku u obcıNucice ve Stredoceskem kraji a Bykovice v kraji Jihomoravskem rastry jsouv prıloze 71 Oba dva rastry jsou o rozlisenı 5 metru Finalnı rastry jsouporovnavany s rastry vytvorenymi v prostredı ArcGIS nastrojem Flow Di-rection metodou D8

51 Realna data - Bykovice

Vysledne rastry Flow Direction pro uzemı Bykovice jsou uvedeny v prıloze72 Oba rastry byly pro hodnoty 202127 obarveny shodnou barvou kvulilepsı nazornosti a porovnatelnosti vysledku Rastr ktery obsahuje z celkovehopoctu 44807 bunek celkem 23655 bunek s hodnotami vysek po probehnutıalgoritmy dal nasledujıcı vysledky

FD D8 MDinfin1 3650 7372 666 9174 207 188 21 716 94 3732 791 8564 8818 1045128 9408 14983sum

23655 14983

Tabulka 1 Tabulka porovnanı obou algoritmu pro rastr Bykovic

FD je zkratka pro Flow Direction cili smer odtoku reprezentovany celocıselnouhodnotou Ostatnı hodnoty u vysledneho rastru na ktery byl pouzit algorit-mus MDinfin jsou v rozpetı 0246 V rozmezı hodnot smeru odtoku 246255se nevyskytujı zadne bunky Cas potrebny pro vykonanı skriptu byl v prıpadeD8 4 vteriny Pro algoritmus MDinfin byl cas 15 vterin

11

52 Realna data - Nucice

Vysledne rastry jsou uvedeny v prıloze 73 Opet bylo pouzito shodne obar-venı pro zakladnı smery u obou rastru Rastr Nucice obsahoval data na 82732bunkach z celkove poctu 125449 bunek Vysledky jsou pro prehlednost uve-deny v tabulce

FD D8 MDinfin1 12186 12332 12441 87034 16907 10278 9826 1642316 2516 28832 5010 241764 7788 366128 16058 25475sum

82732 55932

Tabulka 2 Tabulka porovnanı obou algoritmu pro rastr Nucic

Ostatnı hodnoty u vysledneho rastru na ktery byl pouzit algoritmusMDinfin jsou v rozpetı 0255 Cas potrebny pro vykonanı skriptu byl v prıpadeD8 6 vterin Pro algoritmus MDinfin byl cas 50 vterin

12

6 Zaver

Cılem projektu bylo vytvorit funkcnı skript obsahujıcı algoritmus pojmen-ovany MDinfin [1] ktery resı odtok do sousednıch bunek rastru Algoritmusbyl napsan v programovacım jazyce Python a testovan na realnych datechVysledky byly mırnym prekvapenım kdy zejmena hodnoty smeru 128 tedyseverovychodnıho se vyskytovaly ve vysledku velmi casto viz tabulky 1 a 2Predpokladem bylo ze se odtok rozlozı do vıce smeru a pocet bunek s hod-notami zakladnıch smeru 1248163264 a 128 bude mene nez v prıpade al-goritmu D8 K rozkladu do vıce smeru sice doslo ale pocet nekterych bunekse zakladnımi smery byl vetsı u algoritmu MDinfin

Co se tyce delky doby behu algoritmu je algoritmus MDinfin pomalejsı viz casyv kapitole 5 nez D8 z nekolika zrejmych duvodu Predevsım algoritmus D8provadı mnohem mene pocetnıch operacı z duvodu jeho mensı slozitostiviz 3 Dalsım duvodem je take rozdıl v jazyce ve kterem jsou oba algo-ritmy napsany D8 je napsan v programovacım jazyce C++ ktery na vetsıchdatech je mnohonasobne rychlejsı nez Python Prepsanım algoritmu MDinfindo jazyka C++ by mohla byt cesta k budoucımu zvysenı rychlosti pracealgoritmu

13

Reference

[1] SEIBERT Jan McGlynn BL A new triangular multiple flow di-rection algortihm for computing upslope areas from gridded digi-tal elevation models [online] [cit 13 5 2013] Dostupne ke stazenız URL lthttpciteseerxistpsueduviewdocdownloaddoi=101179977amprep=rep1amptype=pdfgt

[2] HOLMGREN Peter Multiple direction algortihms for runoff modellingin grid based elevation models An empirical evaluation [online] [cit13 5 2013] Dostupny z URL ltftpwwwlwrkthseCommonUllaMFor_Imran[1994]20holmgren20-20multiple20flow

20direction20algorithms20for20runoff20modelling20in

20grid20based20elevation20modelspdf gt

[3] ESRI ESRI WebHelp - How Flow Direction works [online] [cit13 5 2013] Dostupne z URL lthttphelparcgiscomenarcgisdesktop100helpindexhtml009z00000063000000

htmgt

[4] ESRI ESRI Webhelp - Flow Direction (Spatial Analyst) [online][cit 13 5 2013] Dostupne z URL lthttphelparcgiscomenarcgisdesktop100helpindexhtml009z00000052000000

htmgt

[5] WIKIPEDIA NumPy [online] [cit 13 5 2013] Dostupne z URLlthttpenwikipediaorgwikiNumPygt

[6] INFORMIT Working with operators [online] [cit 13 5 2013] Dos-tupne z URL lthttpwwwinformitcomarticlesarticleaspxp=2002831ampseqNum=6gt

14

7 Prılohy

71 Bykovice a Nucice vstupnı DMT rastry

Obrazek 5 DMT Bykovice

Obrazek 6 DMT Nucice

15

72 Bykovice vysledky

Obrazek 7 Flow Direction D8

Obrazek 8 Flow Direction MDinfin

16

73 Nucice vysledky

Obrazek 9 Flow Direction D8

Obrazek 10 Flow Direction MDinfin

17

Page 9: pro zac ate cn kygeo.fsv.cvut.cz/gdata/2013/pin2/e/dokumentace/... · 2013-06-05 · CESK E VYSOK E U CEN I TECHNICKE V PRAZE FAKULTA STAVEBN I OBOR GEODEZIE A KARTOGRAFIE Dokumentace

arcpyAddMessage(Shape Type + str(ShpShapeType))

Na prıkladu je demonstrovano jak vypsat typ vstupnıho rastruVedle vypisu zpravy AddMessage existujı jeste vypis varovanı AddWarning(text je zvyrazneny) a vypis chybove hlasky AddError (beh programu seukoncı ve vyslednem dialogu v ArcGIS se vypıse dana hlaska a vypocet jevyhodnocen jako neuspesny)

225 Prıstup k prvkum atributove tabulky

K prvkum atributove tabulky se dostaneme pomocı funkce SearchCursor Tanam vytvorı pole ntit (jednotlivych radku) tabulky Ty se pak dajı kromeindexovanı prochazet napr cyklem for V tomto cyklu muzeme porovnavathodnoty atributu s hledanou hodnotou atributu Tu nalezneme jako ntitanazev atributuV prıkladu je to formule rowPOINT XHodnota FID je hodnota zadana uzivatelem ntity jsou body z shapefilu Kodv prıkladu ulozı souradnice bodu do polı X Y

PRIKLAD

import arcpy

inShapefile = arcpyGetParameterAsText(0) typu shapefile

FID_P1 = arcpyGetParameterAsText(1) typu long

FID_P2 = arcpyGetParameterAsText(2) typu long

inicializace dvouprvkovych polı a pomocne promenne

X = [00]

Y = [00]

a=0

for row in rows

if i==int(FID_P1) or i==int(FID_P2)

X[a] = mathradians(rowPOINT_X)

Y[a] = mathradians(rowPOINT_Y)

a = a+1

i = i+1

Pokud bychom nehledali ntitu podle FID ktere tvorı vzdy posloupnost prirozenychcısel muzeme promenne i priradit mısto cısla naprıklad jmeno mesta i =

8

rowName Pak by ovsem vstupnı parametr musel byt typu String byl bypovinny a neobsahoval by prednastavene hodnoty

226 Nastavenı pracovnıho adresare a prace s pozicemi na disku

Pokud nenı nastaven pracovnı adresar (tzv workspace) ArcGIS automa-ticky nabızı cestu k vystupnım parametrum podle parametru vstupnıch De-faultne je nastavena cesta k systemove geodatabazi ArcGISu DefaultgdbPokud chceme toto zmenit muzeme pracovnı adresar nastavit prıkazem

arcpyenvworkspace = cesta

Pracovnı adresar muze byt slozka i geodatabaze

227 Prace s Feature Class a Feature Layer

Nektere funkce pracujı s Feature Class a nektere s Feature Layer Nekterefunkce umı pracovat s obema typy dat Musıme se tedy rozhodnout kteradata pouzıt a popr je vytvoritRozdıl mezi temito typy je v tom ze Feature Class jsou data ulozena pevnena disku Tedy naprıklad shapefile nebo vrstva geodatabaze Typ FeatureLayer je uchovavan v pameti pocıtace a obsahuje aktualnı situaci vrstvyPredevsım tedy pouze selektovane prvkyChceme-li mıt prıstup k selektovanym prvkum musıme vzdy pouzıt typ Fe-ature Layer PRIKLAD

Chceme-li naplnit zasobnık identifikatory vsech prvku vrstvy nezavisle natom jestli jsou nektere oznaceny pouzijeme Feature Class Chceme-li na-plnit zasobnık identifikatory aktualne oznacenych prvku pouzijeme FeatureLayerVytvorenı Feature Layer z Feature Class

path = arcpyGetParameterAsText(0)

arcpyMakeFeatureLayer_management(path layer)

228 Seznam parametru

Nektere funkce jako napr Merge management pouzıvajı jako vstupnı para-metr seznam parametru (vrstev) Ten se vytvarı jako bezny seznam kteryovsem obsahuje textove retezce urcujıcı cestu k danym vrstvam

9

merge_list = []

while pathToFeatureClass

merge_listappend(rsquopathToFeatureClassrsquo)

arcpyMerge_management(merge_list outFeatureClass)

229 Testovanı existence atributoveho sloupce

Pokud chceme pridat atributovy sloupec funkcı AddField management jevhodne nejprve otestovat zda-li jiz neexistuje To se provede pomocı seznamusloupcu

fieldList = arcpyListFields(inFeatureClass rsquosectionrsquo)

fieldCount = len(fieldList)

if (fieldCount = 1)

arcpyAddField_management(inFeatureClass rsquosectionrsquo rsquoSHORTrsquo)

2210 Balıcek NumPy a jeho pouzitı

Balıcek NumPy ma obrovsky vyznam pri praci s poli a maticemi Pokudmame na vstupu rastr je treba ho prevest do podoby ve ktere budou hodnotyv jednotlivych bunkach snadno dostupne a mozne matematicke operace snimi K tomuto vyuzijeme funkce RasterToNumPyArray()

arcpyRasterToNumPyArray(InputRaster)

Tato funkce prevede na rastr na matici a jı uz muzeme bez problemu indexo-vat a provadet s nı pocetnı operace Jestlize potrebujeme dostat jako vysledekopet rastr prevedeme vyslednou matici opacnym postupem na rastr

NumPyArrayToRaster (maticelevy_dolnı_rohvelikost_pixelu_x

velikost_pixelu_y hodnota_pro_NoData)

10

3 Zaver

V tomto dokumentu byly demonstrovany ukazky a prıpady pro uplne zacatkypri programovanı skriptu spustitelneho v prostredı ESRI ArcGIS 100 Kom-pletnı zdrojove kody ze kterych se cerpaly ukazky jsou ke stazenı na strankachpredmetu PIN2

11

CESKE VYSOKE UCENI TECHNICKE V PRAZE

FAKULTA STAVEBNI

OBOR GEODEZIE A KARTOGRAFIE

Dokumentace k projektu informatika 2

Automatizace sestavenı Atlasueroznıho smyvu a transportu

splavenin ve velkych povodıch

MICHAL BECICKA

15 kvetna 2013

Obsah

1 Uvod 211 O tematu 212 Strucny souhrn 2

2 Popis pracı 321 Nastroj pro tvorbu gridu 3

211 Uvodnı dialog 4212 Vysledny log 5213 Vysledne vrstvy 5214 Cinnost nastroje podrobne 6

22 Generalizace 9221 Uvodnı dialog 9222 Vysledny log 10

23 Finalnı upravy a export 10

3 Problemy a moznosti rozsırenı 1031 Pripojovanı externıch tabulek 1032 Doba behu tvorby gridu 1133 Moznosti rozsırenı 11

4 Zaver 12

5 Prılohy 1351 Vysledny log tvorby gridu 1352 Vysledny log generalizace 14

1

1 Uvod

11 O tematu

Tema bylo urceno doc Krasou z katedry Hydromelioracı a krajinneho inzenyrstvıpro prezentovanı vysledku vypoctu eroznıho smyvu a transportu splaveninPresto ze je nastroj primarne urcen pro toto pouzitı byla snaha jej napsatco nejuniverzalnejiCılem projektu je vytvorit atlas sestaveny z jednotlivych tematickych mapTyto mapy jsou vytvoreny pro cca tretinu uzemı Ceske Republiky V potrebnemmerıtku (cca 150 000) je nemozne vytvaret spojene tematicke mapy Bylotedy nutne nejprve vyhodnotit jak nejlepe vysledky prezentovat pote vy-tvorit nastroj ktery mapy podle pozadavku upravı (generalizuje vizualizo-vane prvky) vygeneruje jednotlive mapove listy a jejich prehledku Dalevygeneruje seznam mapovych listu pro jednotliva povodı a dalsı potrebneudajeNastroj je psan v jazyce Python pro ArcGIS 100

12 Strucny souhrn

Prace se sklada z nekolika castı

1 Vytvorenı gridu - Tato cast je nejrozsahlejsı Jedna se o skript kterypro dana povodı vytvorı rozsah mapovych listu (tzv index grid layer)a do atributovych tabulek ulozı potrebne hodnoty viz dale

2 Generalizace obsahu mapy - Generalizace nakonec probehla velmijednoduse a to kategorizacı hodnot kumulovaneho smyvu

3 Uprava vzhledu a export - Tato cast byla provadena manualne varcgis layout view Po vytvorenı kyzeneho vzhledu pote probehlo ge-nerovanı jednotlivych mapovych listu pomocı toolbaru Data DrivenPages

2

2 Popis pracı

21 Nastroj pro tvorbu gridu

Tento nastroj vytvorı polygonovou vrstvu obsahujıcı grid a to podle zadanehomerıtka a velikosti mapoveho pole Do atributove tabulky gridu vlozı sloupecs nazvy mapovych listu a sloupec s cısly sekcı (bude vysvetleno dale) Zarovenprida do vstupnı polygonove vrstvy sloupec s cısly sekcı a sloupec s nazvymapovych listu na kterych se dany polygon (povodı) nachazı Dale vytvorıvrstvu nazev gridu dissolve pro prehledku sekcı

Pojem sekce Sekce je tvorena vsemi dotykajıcımi se polygony Mapovelisty jsou ke kazde sekci tvoreny zvlastrsquo a jejich nazvy jsou pote rozsıreny ocıslo sekce Prıklad cıslovanı mapovych listu 1-A1 1-A2 2-A1 2-A2

Obrazek 1 Vstupnı polygonova vrstva

3

Obrazek 2 Ocıslovane sekce polygonove vrstvy

211 Uvodnı dialog

Uvodnı dialog nastroje obsahuje pole pro 5 parametru

bull In - vstupnı parametr datovy typ Feature classVstupnı vrstva polygonu

bull Scale - vstupnı parametr datovy typ LongPozadovane merıtko

bull Map field width - vstupnı parametr s nastavenou defaultnı hodnotou25 datovy typ DoubleSırka vysledneho mapoveho ramce v cm

bull Map field height - vstupnı parametr s nastavenou defaultnı hodnotou30 datovy typ DoubleVyska vysledneho mapoveho ramce v cm

bull Out - vystupnı parametr datovy typ Feature classVystupnı vrstva gridu

4

Obrazek 3 Grid - Uvodnı dialog

212 Vysledny log

Kompletnı prıklad vysledneho logu je k nalezenı v prıloze 51Obsahuje tyto informace

bull Umıstenı pouzıvane databaze na disku

bull Dale v kazdem cyklu

ndash Poradove cıslo cyklu

ndash Aktualnı pocet nezpracovanych polygonu

ndash Cıslo vytvarene sekce

ndash Identifikatory polygonu tvorıcıch danou sekci

bull Pocet sekcı

bull Pocet mapovych listu v kazde sekci

213 Vysledne vrstvy

Vysledny grid pro merıtko 1 80 000 a defaultnı velikost mapoveho pole (25x 30 cm) vypada nasledovne

5

Obrazek 4 Grid - Vysledna vrstva

214 Cinnost nastroje podrobne

1 Prıpravne cinnostiV prvnıch radcıch kodu jsou vytvoreny pomocne promenne a pole znichz pro dalsı cinnost je potreba zmınit zasobnık IDs Ten je naplnenidentifikatory povodıPokud jiz neexistujı jsou ve vstupnı polygonove vrstve vytvoreny atri-butove sloupce hard ID section MapSheets

bull hard ID - Do tohoto sloupce byly zkopırovany identifikatory abyi po rozdelenı do nekolika vrstev mely polygony jednoznacny iden-tifikator

bull section - Po vypoctu sekcı sem bude pro kazdy polygon zapsanocıslo sekce ve ktere se nachazı

bull MapSheets - Atribut se seznamem mapovych listu na kterych sedane povodı nachazı

Ukazka tvorby atributoveho sloupce

fieldList = arcpyListFields(inFeatureClass rsquoMapSheetsrsquo)

6

fieldCount = len(fieldList)

if (fieldCount = 1)

arcpyAddField_management(inFeatureClass rsquoMapSheetsrsquo rsquoTEXTrsquo)

2 Hlavnı vypocetnı cast

Hlavnı cast je cela v cyklu while (len(IDs) gt 0) tj cyklus probıhadokud jsou v zasobnıku IDs hodnoty Na konci cyklu jsou vzdy identi-fikatory zpracovanych povodı ze zasobnıku mazany V kazdem prubehucyklu jsou selektovany povodı tvorıcı 1 sekci k takove sekci je potevytvoren grid a jsou plneny nove atributove sloupce

Ukazka hlavnıho cyklu

while len(IDs) gt 0

oznacenı povodı i-te sekce

rows_sel = arcpySearchCursor(rsquopovodi_classrsquo)

for row_sel in rows_sel

IDsremove(row_selOBJECTID)

V kazdem prubehu cyklu je zpracovana 1 sekce - tj shluk povodı kteremajı spolecnou cast hranice Sekce je tvorena na zaklade dotazu Se-lectByLocation s definicı BOUNDARY TOUCHES Dotaz se opakujev cyklu dokud se pocet oznacenych povodı zvetsuje K tomu slouzıpromenne matchcount1 matchcount2 ktere obsahujı pocet oznacenychpolygonu

Vytvorenı sekce

bull Oznacenı prvnıho nezpracovaneho polygonu

first_ID = str(IDs[0])

fieldName = OBJECTID

Query = + fieldName + = + first_ID

arcpySelectLayerByAttribute_management(rsquopovodi_classrsquo rsquoNEW_SELECTIONrsquo Query)

matchcount1 = int(arcpyGetCount_management(rsquopovodi_classrsquo)getOutput(0))

bull Prvnı prubeh SelectByLocation

7

arcpySelectLayerByLocation_management(rsquopovodi_classrsquo rsquoBOUNDARY_TOUCHESrsquo

rsquopovodi_classrsquo)

matchcount2 = int(arcpyGetCount_management(rsquopovodi_classrsquo)getOutput(0))

bull Dalsı prubehy SelectByLocation

while matchcount1 lt matchcount2

matchcount1 = matchcount2

arcpySelectLayerByLocation_management(rsquopovodi_classrsquo rsquoBOUNDARY_TOUCHESrsquo

rsquopovodi_classrsquo)

matchcount2 = int(arcpyGetCount_management(rsquopovodi_classrsquo)getOutput(0))

Oznacene polygony jsou ulozeny jako polygonova vrstva do vstupnı ge-odatabaze Tato vrstva je dale pouzita pro tvorbu gridu

Vytvorenı gridu

Pred samotnou tvorbou bylo potreba zjistit rozsah sekce Pokud bylasekce mensı nez 1 mapovy list bylo treba definovat souradnice polohylistu tak aby povodı lezelo na stredu listu Do zasobnıku byly nactenysouradnice lomovych bodu povodı a byly z nich vybrany maximalnı aminimalnı hodnoty Jejich rozdıl pak urcil rozsah sekce

Prıklad plnenı zasobnıku souradnicema

desc = arcpyDescribe(outputFeatureClassPath+rsquorsquo+output_name)

shape_field_name = descShapeFieldName

rows3 = arcpySearchCursor(outputFeatureClassPath+rsquorsquo+output_name)

mbr_X=[]

mbr_Y=[]

for row3 in rows3

Create the geometry object

feat = row3getValue(shape_field_name)

partnum = 0

for pnt in featgetPart(partnum)

mbr_Xappend(pntX)

mbr_Yappend(pntY)

partnum += 1

8

Vytvorenı gridu pote probıha budrsquo s definovanou nebo s nedefinovanoupolohou pocatecnıho mapoveho listu Pro vytvorenı gridu je pouzitafunkce GridIndexFeatures cartography

Ukazka

arcpyGridIndexFeatures_cartography(outputFeatureClassPath+rsquorsquo+grid_name

outputFeatureClassPath+rsquorsquo+output_name USEPAGEUNIT scale_str

sheet_width_str sheet_high_str str(grid_start_pnt_X)+rsquo rsquo+str(grid_start_pnt_Y))

Grid je tedy vytvoren pro jednu sekci Po vsech prubezıch cyklu jsoutakto vytvorene vrstvy gridu spojeny do jedne finalnı vrstvy V cyklujsou dale plneny nove atributove sloupce - cısla sekcı a nazvy mapovychlistu a to jak do nove (vystupnı) vrstvy gridu tak do vstupnı vrstvypovodı

3 Vytvorenı finalnıch vrstev tisk vysledku Jak bylo receno na zaverjsou spojeny jednotlive vrstvy gridu Vedle toho je vytvorena vrstvaspojenych mapovych listu po sekcıch - funkcı Dissolve - pro tvorbuprehledky Jsou vytisknuty vysledne hodnoty viz 212

22 Generalizace

Pro generalizaci byl napsan skript ktery nacıta liniovou vrstvu toku Tentoskript byl jiz psan na mıru podkladovym datum a pri nacıtanı je v nemvyuzito znalosti struktury danych podkladovych dat Skript k vrstve pripojıexternı tabulku a vytvorı atributovy sloupec kategorie Podle dat z externıtabulky pak plnı novy sloupec hodnotami 1 - 5 podle mnozstvı unasenehosedimentu Tato hodnota je pak pouzita pri vizualizaci datZajımavostı je ze pro nacıtanı musela byt tabulka indexovana viz 31

221 Uvodnı dialog

Uvodnı dialog obsahuje dva parametry

bull Input Feature Class Vstupnı liniova vrstva rıcnıch useku

bull Table Vstupnı tabulka obsahujıcı hodnoty rıcnıch splavnenin

9

222 Vysledny log

Vysledny log je k nahlednutı v prıloze 52 Obsahuje tyto informace

bull Pocet vsech rıcnıch useku

bull Pocet useku v jednotlivych kategoriıch

23 Finalnı upravy a export

Jak jiz bylo zmıneno finalnı vzhled mapoveho listu byl vytvoren manualne vLayout view a pomocı toolbaru Data Driven Pages Tento postup je casoveekonomictejsı a je jım dosazeno lepsıch vysledku dıky prehlednosti ToolbarData Driven Pages pak umoznuje vkladat dynamicke textove pole ktere seautomaticky menı s menıcım se mapovym listem Takovym polem je naprnazev mapoveho listu Stacı tedy definovat vzhled jednoho mapoveho listuv toolbaru Data Driven Pages navolit prıslusne pole - ty byly vytvorenynastrojem Grid viz 21 Dynamicky bylo potreba propojit s mapovym oknemi prehledku ktera byla vytvorena jako druhy Data Frame To se provedlo defi-novanım rozsahu podle hlavnıho mapoveho okna v Properties -iquest Data Frame-iquest Extant a definovanım Definition Query ve vlastnostech vrstvy Dalsım dy-namickym prvkem jsou oznacenı sousednıch mapovych listu a cıslo strankyNa takto sestavenou stranku s dynamickymi prvky bylo mozne pouzıt exportmapy do pdf a Atlas byl vygenerovanPrıklad dynamickeho textu pro nazev mapoveho listultdyn type=page property=PageNamegt

3 Problemy a moznosti rozsırenı

31 Pripojovanı externıch tabulek

Pri pripjovanı externıch tabulek musely byt indexovany hodnoty atribu-toveho sloupce pouziteho k parovanı To probehlo prıkazemarcpyAddIndex management (layer HydroID)Pripojenı tabulky musı probıhat k Feature layer Proto bylo nutne nejprve zFeature Class vytvorit Feature Layer1 Pote mohla byt tabulka pripojena

arcpyAddIndex_management (layer HydroID)

arcpyAddJoin_management(layer HydroID table Riverid)

1Rozdıl mezi Feature Layer a Feature Class je vysvetlen v prilozenem Tutorialu pro-gramovanı v Pythonu pro ArcGIS

10

Zde nastal problem s prıstupem k atributum Obecne nesmı nazvy atri-butovych sloupcu obsahovat mezery K hodnotam je pristupovano pres jed-notlive radky s parametrem nazev sloupce

rows= arcpySearchCursor(layer)

for row in rows

value=rownazev_sloupce

Pripojena tabulka ovsem mela v nazvech sloupcu mezeru K takto pojmeno-vanemu sloupci muselo byt pristupovano prıkazem getValue

rows= arcpySearchCursor(layer)

for row in rows

value=rowgetValue(rsquonazev tabulky$nazev sloupcersquo)

32 Doba behu tvorby gridu

Doba behu nastroje pro tvorbu gridu je znepokolive dlouha Bylo prove-deno merenı casu behu jednotlivych castı kodu funkcı time z modulu timeVysledky ukazaly ze nejdele trva vytvarenı novych vrstev Vrstva se muzevytvaret az 20 sekund Snaha o optimalizaci donutila nahradit vytvarenı vrs-tev s minimalnım ohranicujıcım obdelnıkem sekvencnım ukladanım souradniclomovych bodu polygonu z nichz pak funkcemi min a max byly tyto hodnotyzıskany Prubeh se tak urychlil o desıtky sekund (v jednom prubehu cyklupriblizne o 15 sekund) Dalsı moznostı bylo vyuzıt prostoroveho indexu datTato moznost nebyla vyuzita protoze ArcGIS pouzıva k prostorovemu in-dexovanı pravidelny grid Zıskanı MBR2 nebylo nalezeno Vyuzitı indexu byovsem problem neresilo Jak jiz bylo zmıneno nejdele trva vytvarenı novychvrstev Bohuzel funkce GridIndexFeatures cartography pro vytvorenı griduneumı pracovat se selektovanymi daty Tedy v kazdem cyklu musı byt ulozenapolygonova vrstva tvorıcı 1 sekci Pote mohla byt vytvorena vrstva tvorıcıgrid Tedy v kazdem prubehu cyklu jsou vytvareny 2 nove vrstvy Jelikozautor neprisel na zpusob jine optimalizace je nastroj pomaly Pro zadanydataset s 58mi povodımi jeho cinnost probıha desıtky minut

33 Moznosti rozsırenı

Do skriptu by se dal zakomponovat export seznamu mapovych listu pro kazdepovodı V soucasne verzi je tvoren exportem atributove tabulky

2minimum bounding rectangle - minimalnı ohranicujıcı obdelnık

11

4 Zaver

Byly vytvoreny nastroje pro automatizaci tvorby Atlasu pro mapy eroznıhosmyvu a transportu splavenin Tvorba Atlasu probıha v nekolika krocıchVizualizovane prvku jsou generalizovany Dale je vytvoren Grid ktery jepouzit jako indexova vrstva pro funkci Data Driven Pages Tou jsou vy-tvoreny jednotlive mapove listy Pomocı dynamickych prvku je pak vytvorenvzhled ktery se menı se zmenou mapoveho listu Nedostatkem je rychlostnastroje pro tvorbu gridu Presto ze je nastroj pomaly je zcela funkcnı Vprıpade potreby dalsıho rozsırenı bude ale vhodne vysledky nacıtat do novehonastroje Vzorovy vytisk vysledneho atlasu je prilozen Vzhledem k tomu zezpracovavana data jsou rozsahla a podlehajı autorskemu zakonu je vytvorenjen vzorovy vytisk z 6ti povodı Nastroje jsou psany v jazyce Python 26 proArcGIS 100 Pri praci byla vyuzıvana predevsım online napoveda ArcGISa diskuznı programatorska fora Kompletnı zdrojovy kod je ke stazenı nastrankach predmetu PIN2

12

5 Prılohy

51 Vysledny log tvorby gridu

Executing Grid

JAtlasvzorektemp_selectpovodi_vzorekgdbpokusne_povodi

70000 25 30 JAtlasvzorektemp_selectpovodi_vzorekgdbgrid70

Start Time Wed May 15 020551 2013

Running script Script2

Output folder JAtlasvzorektemp_selectpovodi_vzorekgdb

_____________________________________________________________________

count of basin polygon to process 6

_____________________________________________________________________

RUN 1

count of basins in 1 section 3

Their ID

ID 1

ID 3

ID 6

_____________________________________________________________________

count of basin polygon to process 3

_____________________________________________________________________

RUN 2

count of basins in 2 section 1

Their ID

ID 2

_____________________________________________________________________

count of basin polygon to process 2

_____________________________________________________________________

RUN 3

count of basins in 3 section 2

Their ID

ID 4

ID 5

----- RESULT -----

Number of sections 3

Number of map sheets

in section 1 13

in section 2 1

in section 3 2

Completed script Grid

Succeeded at Wed May 15 021359 2013 (Elapsed Time 8 minutes 8 seconds

13

52 Vysledny log generalizace

Executing generalization JAtlasvzorek2011_NAZV_nadrze2011_watemsedem

NAZV_tokyVT28_finshp

JAtlasvzorek2011_NAZV_nadrze2011_watemsedem28_vypocet

projectriversedimentxlsxprojectriversediment$

Start Time Wed May 15 075624 2013

Running script generalization

Category created

Total count of river parts 2879

Count of category 1 2428

Count of category 2 118

Count of category 3 68

Count of category 4 20

Count of category 5 245

Completed script generalization

Succeeded at Wed May 15 075638 2013 (Elapsed Time 1400 seconds)

14

CESKE VYSOKE UCENI TECHNICKE V PRAZE

FAKULTA STAVEBNI

OBOR GEODEZIE A KARTOGRAFIE

Dokumentace k projektu informatika 2

Stanovenı smeru odtokuna rastrovem digitalnım modelu

a implementace algoritmudo prostredı ArcGIS

BC JAN ZAJICEK

5 cervna 2013

Obsah

Obsah 1

1 Uvod 2

2 Nejbeznejsı existujıcı algoritmy 3

3 Flow Direction D8 431 Obecny princip D8 432 Popis algoritmu D8 5

4 Popis algoritmu MDinfin 641 Obecny princip MDinfin 642 Technicke resenı MDinfin 8

5 Vysledky 1151 Realna data - Bykovice 1152 Realna data - Nucice 12

6 Zaver 13

Reference 14

7 Prılohy 1571 Bykovice a Nucice vstupnı DMT rastry 1572 Bykovice vysledky 1673 Nucice vysledky 17

1

1 Uvod

Tato dokumentace byla zpracovana v ramci predmetu Projekt Informatika 2Semestralnı prace bude pouzita jako z jedna castı autorovi diplomove praces nazvem SMODERP 2D rozsırenı resıcı vztahy soustredeneho a plosnehoodtoku na danem uzemı Duvodem zpracovanı tohoto tematu byla potrebapouzitı v diplomove praci vıce nez jednoho algoritmu pro urcenı smeruodtoku v prostredı ArcGIS V soucasne dobe ArcGIS vyuzıva algoritmusD8 viz kapitola 3 jako jediny algoritmus pro vypocet smeru odtoku Tentoalgoritmus je soucastı Hydrology tools Nastroje ze skupiny Hydrology sepouzıvajı k modelovanı chovanı toku vody na povrchu Nejbeznejsı pouzıvanadigitalnı data povrchu Zeme jsou rastry digitalnı modelu terenu DMT slozenez jednotlivych bunek pixelu Tyto DMT rastry jsou pouzity jako vstupypro ruzne charakteristiky povrchu DMT rastr je souvisly povrch obvykleodkazujıcı na povrch Zeme Presnost dat je dana rozlisenım rastru taktezvzdalenostı mezi body rastru Informace o tvaru zemskeho povrchu je uzitecnapro mnoho oboru jako je napr zemedelstvı lesnictvı zivotnı prostredı neboregionalnı planovanı Tyto obory vyzadujı pochopenı jak voda tece v ramciuzemı a jak zmeny na tomto uzemı nasledne ovlivnı jejı tok

Cılem projektu bylo naprogramovat algoritmus ktery v roce 2007 publiko-vali Jan Seibert a Brian L McGlynn s nazvem MDinfin [1] Tento algoritmusje vylepsenım stavajıcıch algoritmu pro resenı urcenı smeru odtoku na ras-tru viz kapitola 2 Pro overenı spravnosti vysledku byla pouzita realnadata dvou pozemku u obcı Bykovice a Nucice Testovanı probıhalo na ras-trech o rozlisenı 5 metru Algoritmus byl naprogramovan v jazyce Pythonv prostredı NetBeans IDE 69 Pro spustenı v ArcGISu je potreba pridatdo prostredı vytvoreny toolbox upravit aktualnı cestu ke skriptu mainpya tento model nasledne spustit Vstupem modelu je rastr DMT a vystupnıadresar do ktereho se po dobehnutı modelu ulozı vysledny rastr s hodnotamismeru odtoku 1255 Algoritmus MDinfin je testovan na verzi ArcGIS 100Na nejnovejsı verzi ArcGIS 101 ktera vysla v cervnu 2012 nenı overenakompatibilita algoritmu v dusledku nefunkcnosti vıce nez jedne verze tohotoprogramu na jednom pocıtaci

2

2 Nejbeznejsı existujıcı algoritmy

Existujı tri nejbeznejsı algoritmy kazdy odlisne resıcı problematiku odtokuvody z rastru do sousednıch bunek Prvnım z nich je algoritmus D8 z roku1984 Algoritmus je podrobne popsan v nasledujıcı kapitole 3 Jelikoz odtoknastava vzdy jen do jedne sousednı bunky dochazı casto ke koncentracivodnıch sıtı a sıtrsquo odtoku pak neodpovıda skutecnosti Na druhou stranuje jeho vyhodou jeho jednoduchost a fakt ze nedochazı k nechtene disperzijako je tomu u druheho algoritmu

Druhym algoritmem je MD8 neboli multiple flow direction algorithm MD8algoritmem je voda odvadena do vsech nıze polozenych sousednıch buneka pomer vody je rozdelen procentualne podle sklonu Ve vysledku ma algo-ritmus tendenci vytvaret vıce realisticke prostorove sıte toku nez D8 tımze nedochazı k takove koncentraci vody v sıti U D8 ma mnohem vetsıvliv maly rozdıl vysek mezi sousednımi bunkami na to ktera bunka prijmeveskerou vodu Pouzitım MD8 tyto male vyskove rozdıly nemajı zdalekatakovy vliv jelikoz je mnozstvı vody rozdeleno pomerem mezi tyto bunkyNejvetsı nevyhodou tohoto algoritmu je jeho prılisna disperze na konver-gentnıch svazıch v dusledku odtoku do vsech nıze polozenych bunek

V roce 1997 byl navrzen algoritmus pojmenovany Dinfin Davidem G Tar-botonem z americke univerzity v Utahu Byl navrzen prıstup ktery je zalozenna osmi trojuhelnıkovych ploskach viz obrazek 3 Dıky tomuto postupu jsouodstraneny limitace v podobe moznosti pouze osmi smeru odtoku z bunkyProto je algoritmus pojmenovan Dinfin jelikoz muze nastat nekonecne moznostıvysledneho smeru odtoku Tento prıstup umoznuje pouze jeden smer odtokurozdeleny mezi jednu nebo dve bunky v zavislosti na smeru odtoku

Poslednı dva zmınene algoritmy MD8 a Dinfinmajı oproti D8 nevyhodu ve vetsıcasove narocnosti vypoctu V kapitole 4 je popsan algoritmus MDinfin kteryvyuzıva vyhody MD8 algoritmu za pouzitı trojuhelnıkovych plosek obdobnejako Dinfin algoritmus

3

3 Flow Direction D8

Pro pochopenı problematiky a zjevnost rozdılu mezi algoritmy je vhodneuvest jak funguje nastroj ktery pouzıva ArcGIS Zaklad algoritmu MDinfino nemz pojednava tato dokumentace je zalozen na podobnych postupech

31 Obecny princip D8

Princip nastroje urcenı smeru odtoku (Flow Direction) ktery pouzıva prostredıArcGIS je nasledujıcı Tento nastroj (tool) vezme vstupnı rastr digitalnıhomodelu terenu neboli vyskovy rastr Provede vypocet jehoz vystupem jerastr ktery v kazde bunce rastru obsahuje hodnotu urcujıcı smer odtokuz teto bunky Hodnot je osm podle osmi sousednıch bunek do kterych muzeodtekat voda viz obrazek 1 Prave podle osmi smeru odtoku se tento prıstupnazyva D8 (eight-direction approach)

Obrazek 1 Flow Direction D8 [3]

4

32 Popis algoritmu D8

Samotny vypocet algoritmu je v zasade primitivnı Pro vsechny sousednıbunky se vypocte maximalnı sklon [3]

maximalnı sklon = rozdıl vysek vzdalenost 100

Rozdıl vysek je rozdıl vysky v aktualnım bode a konkretnı sousednı bunkyVzdalenost je vypoctena mezi stredy bunek a lisı se v zavislosti na polozesousednı bunky Pro bunky sousedıcı vrcholem je hodnota velikosti pixeluprenasobena o odmocninu ze dvou Pro zbyle bunky sousedıcı hranou jevelikost vzdalenosti rovna velikosti pixelu Po nalezenı nejstrmejsıho smeruodtoku je hodnota ulozena v podobe bitove hodnoty reprezentujıcı danysmer Pred pouzitım nastroje Flow Direction se obvykle zpracuje vstupnırastr pomocı nastroje Sink Tento algoritmus zaplnı bezodtoke oblasti rastrunejnizsı hodnotou z okolı a do teto nejnizsı sousednı bunky pak posle voduPote jiz nemuze dojıt k situaci kdy vsechny sousednı bunky k dane buncemajı vyssı hodnoty vysek a nedochazelo by tedy k odtokuVysledny rastr nemusı obsahovat pouze bunky s hodnotami 202127 [4]Jestlize nastane situace kdy ma vıce sousednıch bunek nejnizsı hodnotuvysek pak je vysledna hodnota souctem vsech smeru Napr hodnota maximalnıhosklonu bude stejna pro sousednı bunku vlevo a nahore odtok tedy budesmerem na zapad (hodnota = 16) a na sever (hodnota = 64) vysledna hod-nota bude souctem 16 a 64 tedy 84

5

4 Popis algoritmu MDinfin

41 Obecny princip MDinfinObecny postup je prevzat z [1] Stejne jako v prıpade algoritmu Dinfin bylyzavedeny trojuhelnıkove plosky pro vypocet lokalnıho sklonu a smeru pro kazdoutrojuhelnıkovou plosku Okolo stredoveho boduM bylo vytvoreno osm trojuhelnıkuviz obrazek 3 Kazdy se zbyvajıcımi dvema vrcholy P1 P2 ve dvou sousedıcıchbunkach Pro kazdy z techto trojuhelnıku je vypocten smer nejvetsıho sklonuPokud oznacıme vysky bodu M P1 P2 jako hM hP1 hP2 rozdıly vysek sevypoctou takto

z1 = hP1 minus hM z2 = hP2 minus hM (1)

Obdobne se vypoctou rozdıly v x-ovych a y-ovych souradnicıch Po vypocturozdılu jednotlivych souradnic je vypocten normalovy vektor

n =

nx

ny

nz

=

z1y2 minus z2y1z1x2 minus z2x1y1x2 minus y2x1

(2)

Smer odtoku d a sklon s na trojuhelnıkove plose se vypocte pomocı rovnice3 Hodnota nula pro d oznacuje smer osy y a hodnota 3π2 oznacuje smerosy x

d =

0 nx = 0 ny ge 0

π nx = 0 ny lt 0

π2minus arctan(

ny

nx

) nx gt 0

3π2minus arctan(

ny

nx

) nx lt 0

(3)

s = minus tan

(arccos

(nzradic

n2x + n2

y + n2z

))(4)

Jestlize nejvetsı sklon od bodu M je mimo rozpetı 0-45 (π4 radian) jepouzit sklon strmejsı k jednomu z bodu P1 P2 a zaroven i sklon je spoctenk tomuto bodu V prıpade ze oba sousednı body jsou vyse polozeny nez bodM smer nenı pro tento trojuhelnık uvazovan Po spoctenı vsech osmi smerua sklonu pro jednotlive plosky jsou tyto smery povazovany za lokalne ne-jstrmejsı pro kazdy trojuhelnık v rozsahu 45 Smery vedoucı prımo do bodu

6

P1 nebo P2 tedy ty kde d = 0 nebo d = π4 jsou uvazovany pouze vprıpade kdy obe vedlejsı sousednı bunky majı smer k bodu P1 nebo P2Tato situace je znazornena na obrazku 2

Obrazek 2 Ukazka urcenı smeru odtoku z bunky [1]

Prvnı prıpad je smer mırıcı mezi bunky 5 a 6 Druhy prıpad je smer kteryvede prımo do bunky 3 Tato situace nastane jestlize pro trojuhelnık M43vyjde lokalnı smer d = π4 a pro trojuhelnık M32 smer vyjde d = 0Pote co je smer odtoku pro bunku vypocten je celkovy odtok rozdelendo vsech vyslednych smeru na zaklade sklonu Resenı teto problematiky jevıce popsano v sekci 42 Pro smery mırıcı mezi body P1 a P2 je odtokrozdelen do dvou bunek na zaklade nevejtsıho sklonu Pomer odtoku do buneks body P1 a P2 bude v tomto poradı α245 a α145

Obrazek 3 Trojuhelnıkove plosky [1]

7

42 Technicke resenı MDinfinVyse jiz bylo zmıneno ze algoritmus je napsan v jazyce Python Algoritmusje rozdelen do dvou skriptu Prvnı z nich obsahuje funkce a druhy je hlavnıVstupem do modelu je rastr digitalnıho modelu terenu a vystupnı adresardo ktereho se ulozı finalnı rastr smeru odtoku viz obr 4 Po nactenı rastruze vstupnıch parametru je tento rastr preveden na matici NumPy pomocıfunkce

arcpy RasterToNumPyArray ( InputRaster )

NumPy [5] je rozsırenı programovacıho jazyka Python je to balıcek uzıvanypro vedecke vypocty Umoznuje podporu velkych multi-dimenzionalnıch polıa matic spolu s velkou knihovnou matematickych funkcı pro praci s temitopoli

Algoritmus cyklem projızdı vsechny prvky matice a u tech ktere majı hod-notu ruznou od NoData nalezne okolı Hledanı okolı bunky provadı funkceneighbors ta je definovana takto

def ne ighbors ( i j array x y ) return nb1 nb2 nb3 nb4 nb5 nb6 nb7 nb8

Vstupem funkce je pozice v matici dale cela matice a jejı rozmery Funkceneighbors vypocıta hodnoty vysek sousednıch osmi bunek a vratı je na vystup

Obrazek 4 Dialogove okno nastroje MDinfin

Vystup z funkce neighbors slouzı jako jeden z vstupnıch parametru pro dalsıfunkci

8

Funkce byla pojmenovana dir slope jelikoz jejım vystupem je smer odtokua sklon tohoto smeru

def d i r s l o p e ( pointM nbrs vpix sp ix ) return d i r e c t i o n s l ope

Pro kazdy trojuhelnık byla spoctena hodnota d viz vzorec 3 Hodnota s bylapo spatnych a nelogickych vysledcıch pocıtana podle jineho vzorce ktery jizdaval spravne vysledky

s0 =

radicz212y21

+z22y22

(5)

Vzorec se lisı pro kazdy trojuhelnıcek uvedeny je pro vypocet sklonu kdy sousednıbunka je severozapadnı a severnı Tımto postupem bylo zbytecne pocıtatz-tovou slozku vekotoru n vzorec 2 Byly osetreny prıpady kdy sousednıbunky aktualnıho pocıtaneho trojuhelnıku jsou obe vyse polozene nebo obemimo rastr (NoData) Dalsı prıpad nastane jestlize je jeden bod vne rastra druhy v rastru lezı Smer je potom urcen prımo do toho bodu ktery nalezırastru Taktez i sklon je pocıtan pouze mezi tımto bodem a bodem M Lokalnı smer d v kazde plosce po vypoctenı nesmı prekrocit 45 V situacize tuto hodnotu prekrocı je smeru prirazena hodnota 0 nebo 45 v zavislostina vzajemnem porovnanı vysek bodu v trojuhelnıku Takto jsou zpracovanyvsechny plosky a je zjisteno zda-li do kazdeho trojuhelnıku nastava smerodtoku nebo ne Na konci funkce dir slope se kontroluje prıpad kdy smersousednıch trojuhelnıku odkazuje presne do stejneho bodu tedy hodnotysmeru musı byt pro prvnı trojuhelnık d = 45 a pro nasledujıcı sousednıtrojuhelnık d = 0 Vystupem funkce jsou dva vektory o osmi prvcıch smera sklon pro kazdou plosku

Dalsı fazı vypoctu je zjistenı pomeru vody ktera potece do jednotlivychsmeru K vypoctu pomeru byl pouzit tento vzorec [2]

fi =sxi8sum

j=1

sxj

(6)

kde s vyznacuje sklon vypocteneho smeru konkretnı trojuhelnıkove ploskya x je promenny exponent Pokud by byl exponent zvolen 1 bude vyslednasıtrsquo obdobna jako pri pouzitı MD8 algoritmu Pri zvetsovanı exponentu xk nekonecnu bude sıtrsquo stejna jako pri pouzitı D8 metody Vychozı hodnotaexponentu byla zvolena x = 4 coz je kompromis mezi obema variantami

9

Zmena exponentu se v soucasne podobe neprojevı na vyslednem rastru je-likoz vysledek prezentuje pouze smer odtoku a ne procentualnı cast Tohotopomeru bude vyuzito az pri spojenı skriptu s 2D modelem SMODERP

V dalsı casti vypoctu je rozdelen jiz zjisteny pomer z celkoveho odtokudo dvou prıpadne pouze do jedne bunky v zavislosti na smeru odtoku dVe vysledku je vypocten vektor osmi cısel kde kazda hodnota od 0 do 1prestavuje jiz procentualnı pomer z celkoveho odtoku do kazde sousednıbunky

Pro vyslednou reprezentaci smeru odtoku na vystup byl pro kazdou bunkuvytvoren vektor obsahujıcı 1 a 0 rıkajıcı zda nastava ci nenastava odtokdo sousednı bunky Tento vektor byl preveden na celocıselnou hodnotu po-mocı funkce bool2int

def boo l 2 i n t ( x ) y = 0for i j in enumerate ( x )

i f j y += 1ltlt ireturn y

Funkce ma na vstupu vektor jedicek a nul Naprıklad pro vektor 00000111kdy voda tece na severozapad sever a severovychod se funkce chova taktoJe testovano jestli platı j = 1 tedy prvnıch pet nul vektoru funkce preskocıa pro prvnı jednicku se pricte k promenne y 20 v dalsım kroku 21 a v poslednım22 Operator vyjadruje totiz bitovy posun smerem doleva Vysledkem jena vystupu cıslo y = 1 + 2 + 4 = 7

Pro vsechny bunky byla vypoctena hodnota reprezentujıcı smer odtoku Tatohodnota se ulozı do matice a ta se nasledne prevede na vysledny rastr

f l o w d i r = arcpy NumPyArrayToRaster ( value LLcorner spix vpix rdquordquo )

value hodnota reprezentujıcı smer odtokuLLcorner souradnice leveho dolnıho rohuspix sırka pixeluvpix vyska pixelu

10

5 Vysledky

Algoritmus MDinfin byl testovan na skutecnych datech dvou pozemku u obcıNucice ve Stredoceskem kraji a Bykovice v kraji Jihomoravskem rastry jsouv prıloze 71 Oba dva rastry jsou o rozlisenı 5 metru Finalnı rastry jsouporovnavany s rastry vytvorenymi v prostredı ArcGIS nastrojem Flow Di-rection metodou D8

51 Realna data - Bykovice

Vysledne rastry Flow Direction pro uzemı Bykovice jsou uvedeny v prıloze72 Oba rastry byly pro hodnoty 202127 obarveny shodnou barvou kvulilepsı nazornosti a porovnatelnosti vysledku Rastr ktery obsahuje z celkovehopoctu 44807 bunek celkem 23655 bunek s hodnotami vysek po probehnutıalgoritmy dal nasledujıcı vysledky

FD D8 MDinfin1 3650 7372 666 9174 207 188 21 716 94 3732 791 8564 8818 1045128 9408 14983sum

23655 14983

Tabulka 1 Tabulka porovnanı obou algoritmu pro rastr Bykovic

FD je zkratka pro Flow Direction cili smer odtoku reprezentovany celocıselnouhodnotou Ostatnı hodnoty u vysledneho rastru na ktery byl pouzit algorit-mus MDinfin jsou v rozpetı 0246 V rozmezı hodnot smeru odtoku 246255se nevyskytujı zadne bunky Cas potrebny pro vykonanı skriptu byl v prıpadeD8 4 vteriny Pro algoritmus MDinfin byl cas 15 vterin

11

52 Realna data - Nucice

Vysledne rastry jsou uvedeny v prıloze 73 Opet bylo pouzito shodne obar-venı pro zakladnı smery u obou rastru Rastr Nucice obsahoval data na 82732bunkach z celkove poctu 125449 bunek Vysledky jsou pro prehlednost uve-deny v tabulce

FD D8 MDinfin1 12186 12332 12441 87034 16907 10278 9826 1642316 2516 28832 5010 241764 7788 366128 16058 25475sum

82732 55932

Tabulka 2 Tabulka porovnanı obou algoritmu pro rastr Nucic

Ostatnı hodnoty u vysledneho rastru na ktery byl pouzit algoritmusMDinfin jsou v rozpetı 0255 Cas potrebny pro vykonanı skriptu byl v prıpadeD8 6 vterin Pro algoritmus MDinfin byl cas 50 vterin

12

6 Zaver

Cılem projektu bylo vytvorit funkcnı skript obsahujıcı algoritmus pojmen-ovany MDinfin [1] ktery resı odtok do sousednıch bunek rastru Algoritmusbyl napsan v programovacım jazyce Python a testovan na realnych datechVysledky byly mırnym prekvapenım kdy zejmena hodnoty smeru 128 tedyseverovychodnıho se vyskytovaly ve vysledku velmi casto viz tabulky 1 a 2Predpokladem bylo ze se odtok rozlozı do vıce smeru a pocet bunek s hod-notami zakladnıch smeru 1248163264 a 128 bude mene nez v prıpade al-goritmu D8 K rozkladu do vıce smeru sice doslo ale pocet nekterych bunekse zakladnımi smery byl vetsı u algoritmu MDinfin

Co se tyce delky doby behu algoritmu je algoritmus MDinfin pomalejsı viz casyv kapitole 5 nez D8 z nekolika zrejmych duvodu Predevsım algoritmus D8provadı mnohem mene pocetnıch operacı z duvodu jeho mensı slozitostiviz 3 Dalsım duvodem je take rozdıl v jazyce ve kterem jsou oba algo-ritmy napsany D8 je napsan v programovacım jazyce C++ ktery na vetsıchdatech je mnohonasobne rychlejsı nez Python Prepsanım algoritmu MDinfindo jazyka C++ by mohla byt cesta k budoucımu zvysenı rychlosti pracealgoritmu

13

Reference

[1] SEIBERT Jan McGlynn BL A new triangular multiple flow di-rection algortihm for computing upslope areas from gridded digi-tal elevation models [online] [cit 13 5 2013] Dostupne ke stazenız URL lthttpciteseerxistpsueduviewdocdownloaddoi=101179977amprep=rep1amptype=pdfgt

[2] HOLMGREN Peter Multiple direction algortihms for runoff modellingin grid based elevation models An empirical evaluation [online] [cit13 5 2013] Dostupny z URL ltftpwwwlwrkthseCommonUllaMFor_Imran[1994]20holmgren20-20multiple20flow

20direction20algorithms20for20runoff20modelling20in

20grid20based20elevation20modelspdf gt

[3] ESRI ESRI WebHelp - How Flow Direction works [online] [cit13 5 2013] Dostupne z URL lthttphelparcgiscomenarcgisdesktop100helpindexhtml009z00000063000000

htmgt

[4] ESRI ESRI Webhelp - Flow Direction (Spatial Analyst) [online][cit 13 5 2013] Dostupne z URL lthttphelparcgiscomenarcgisdesktop100helpindexhtml009z00000052000000

htmgt

[5] WIKIPEDIA NumPy [online] [cit 13 5 2013] Dostupne z URLlthttpenwikipediaorgwikiNumPygt

[6] INFORMIT Working with operators [online] [cit 13 5 2013] Dos-tupne z URL lthttpwwwinformitcomarticlesarticleaspxp=2002831ampseqNum=6gt

14

7 Prılohy

71 Bykovice a Nucice vstupnı DMT rastry

Obrazek 5 DMT Bykovice

Obrazek 6 DMT Nucice

15

72 Bykovice vysledky

Obrazek 7 Flow Direction D8

Obrazek 8 Flow Direction MDinfin

16

73 Nucice vysledky

Obrazek 9 Flow Direction D8

Obrazek 10 Flow Direction MDinfin

17

Page 10: pro zac ate cn kygeo.fsv.cvut.cz/gdata/2013/pin2/e/dokumentace/... · 2013-06-05 · CESK E VYSOK E U CEN I TECHNICKE V PRAZE FAKULTA STAVEBN I OBOR GEODEZIE A KARTOGRAFIE Dokumentace

rowName Pak by ovsem vstupnı parametr musel byt typu String byl bypovinny a neobsahoval by prednastavene hodnoty

226 Nastavenı pracovnıho adresare a prace s pozicemi na disku

Pokud nenı nastaven pracovnı adresar (tzv workspace) ArcGIS automa-ticky nabızı cestu k vystupnım parametrum podle parametru vstupnıch De-faultne je nastavena cesta k systemove geodatabazi ArcGISu DefaultgdbPokud chceme toto zmenit muzeme pracovnı adresar nastavit prıkazem

arcpyenvworkspace = cesta

Pracovnı adresar muze byt slozka i geodatabaze

227 Prace s Feature Class a Feature Layer

Nektere funkce pracujı s Feature Class a nektere s Feature Layer Nekterefunkce umı pracovat s obema typy dat Musıme se tedy rozhodnout kteradata pouzıt a popr je vytvoritRozdıl mezi temito typy je v tom ze Feature Class jsou data ulozena pevnena disku Tedy naprıklad shapefile nebo vrstva geodatabaze Typ FeatureLayer je uchovavan v pameti pocıtace a obsahuje aktualnı situaci vrstvyPredevsım tedy pouze selektovane prvkyChceme-li mıt prıstup k selektovanym prvkum musıme vzdy pouzıt typ Fe-ature Layer PRIKLAD

Chceme-li naplnit zasobnık identifikatory vsech prvku vrstvy nezavisle natom jestli jsou nektere oznaceny pouzijeme Feature Class Chceme-li na-plnit zasobnık identifikatory aktualne oznacenych prvku pouzijeme FeatureLayerVytvorenı Feature Layer z Feature Class

path = arcpyGetParameterAsText(0)

arcpyMakeFeatureLayer_management(path layer)

228 Seznam parametru

Nektere funkce jako napr Merge management pouzıvajı jako vstupnı para-metr seznam parametru (vrstev) Ten se vytvarı jako bezny seznam kteryovsem obsahuje textove retezce urcujıcı cestu k danym vrstvam

9

merge_list = []

while pathToFeatureClass

merge_listappend(rsquopathToFeatureClassrsquo)

arcpyMerge_management(merge_list outFeatureClass)

229 Testovanı existence atributoveho sloupce

Pokud chceme pridat atributovy sloupec funkcı AddField management jevhodne nejprve otestovat zda-li jiz neexistuje To se provede pomocı seznamusloupcu

fieldList = arcpyListFields(inFeatureClass rsquosectionrsquo)

fieldCount = len(fieldList)

if (fieldCount = 1)

arcpyAddField_management(inFeatureClass rsquosectionrsquo rsquoSHORTrsquo)

2210 Balıcek NumPy a jeho pouzitı

Balıcek NumPy ma obrovsky vyznam pri praci s poli a maticemi Pokudmame na vstupu rastr je treba ho prevest do podoby ve ktere budou hodnotyv jednotlivych bunkach snadno dostupne a mozne matematicke operace snimi K tomuto vyuzijeme funkce RasterToNumPyArray()

arcpyRasterToNumPyArray(InputRaster)

Tato funkce prevede na rastr na matici a jı uz muzeme bez problemu indexo-vat a provadet s nı pocetnı operace Jestlize potrebujeme dostat jako vysledekopet rastr prevedeme vyslednou matici opacnym postupem na rastr

NumPyArrayToRaster (maticelevy_dolnı_rohvelikost_pixelu_x

velikost_pixelu_y hodnota_pro_NoData)

10

3 Zaver

V tomto dokumentu byly demonstrovany ukazky a prıpady pro uplne zacatkypri programovanı skriptu spustitelneho v prostredı ESRI ArcGIS 100 Kom-pletnı zdrojove kody ze kterych se cerpaly ukazky jsou ke stazenı na strankachpredmetu PIN2

11

CESKE VYSOKE UCENI TECHNICKE V PRAZE

FAKULTA STAVEBNI

OBOR GEODEZIE A KARTOGRAFIE

Dokumentace k projektu informatika 2

Automatizace sestavenı Atlasueroznıho smyvu a transportu

splavenin ve velkych povodıch

MICHAL BECICKA

15 kvetna 2013

Obsah

1 Uvod 211 O tematu 212 Strucny souhrn 2

2 Popis pracı 321 Nastroj pro tvorbu gridu 3

211 Uvodnı dialog 4212 Vysledny log 5213 Vysledne vrstvy 5214 Cinnost nastroje podrobne 6

22 Generalizace 9221 Uvodnı dialog 9222 Vysledny log 10

23 Finalnı upravy a export 10

3 Problemy a moznosti rozsırenı 1031 Pripojovanı externıch tabulek 1032 Doba behu tvorby gridu 1133 Moznosti rozsırenı 11

4 Zaver 12

5 Prılohy 1351 Vysledny log tvorby gridu 1352 Vysledny log generalizace 14

1

1 Uvod

11 O tematu

Tema bylo urceno doc Krasou z katedry Hydromelioracı a krajinneho inzenyrstvıpro prezentovanı vysledku vypoctu eroznıho smyvu a transportu splaveninPresto ze je nastroj primarne urcen pro toto pouzitı byla snaha jej napsatco nejuniverzalnejiCılem projektu je vytvorit atlas sestaveny z jednotlivych tematickych mapTyto mapy jsou vytvoreny pro cca tretinu uzemı Ceske Republiky V potrebnemmerıtku (cca 150 000) je nemozne vytvaret spojene tematicke mapy Bylotedy nutne nejprve vyhodnotit jak nejlepe vysledky prezentovat pote vy-tvorit nastroj ktery mapy podle pozadavku upravı (generalizuje vizualizo-vane prvky) vygeneruje jednotlive mapove listy a jejich prehledku Dalevygeneruje seznam mapovych listu pro jednotliva povodı a dalsı potrebneudajeNastroj je psan v jazyce Python pro ArcGIS 100

12 Strucny souhrn

Prace se sklada z nekolika castı

1 Vytvorenı gridu - Tato cast je nejrozsahlejsı Jedna se o skript kterypro dana povodı vytvorı rozsah mapovych listu (tzv index grid layer)a do atributovych tabulek ulozı potrebne hodnoty viz dale

2 Generalizace obsahu mapy - Generalizace nakonec probehla velmijednoduse a to kategorizacı hodnot kumulovaneho smyvu

3 Uprava vzhledu a export - Tato cast byla provadena manualne varcgis layout view Po vytvorenı kyzeneho vzhledu pote probehlo ge-nerovanı jednotlivych mapovych listu pomocı toolbaru Data DrivenPages

2

2 Popis pracı

21 Nastroj pro tvorbu gridu

Tento nastroj vytvorı polygonovou vrstvu obsahujıcı grid a to podle zadanehomerıtka a velikosti mapoveho pole Do atributove tabulky gridu vlozı sloupecs nazvy mapovych listu a sloupec s cısly sekcı (bude vysvetleno dale) Zarovenprida do vstupnı polygonove vrstvy sloupec s cısly sekcı a sloupec s nazvymapovych listu na kterych se dany polygon (povodı) nachazı Dale vytvorıvrstvu nazev gridu dissolve pro prehledku sekcı

Pojem sekce Sekce je tvorena vsemi dotykajıcımi se polygony Mapovelisty jsou ke kazde sekci tvoreny zvlastrsquo a jejich nazvy jsou pote rozsıreny ocıslo sekce Prıklad cıslovanı mapovych listu 1-A1 1-A2 2-A1 2-A2

Obrazek 1 Vstupnı polygonova vrstva

3

Obrazek 2 Ocıslovane sekce polygonove vrstvy

211 Uvodnı dialog

Uvodnı dialog nastroje obsahuje pole pro 5 parametru

bull In - vstupnı parametr datovy typ Feature classVstupnı vrstva polygonu

bull Scale - vstupnı parametr datovy typ LongPozadovane merıtko

bull Map field width - vstupnı parametr s nastavenou defaultnı hodnotou25 datovy typ DoubleSırka vysledneho mapoveho ramce v cm

bull Map field height - vstupnı parametr s nastavenou defaultnı hodnotou30 datovy typ DoubleVyska vysledneho mapoveho ramce v cm

bull Out - vystupnı parametr datovy typ Feature classVystupnı vrstva gridu

4

Obrazek 3 Grid - Uvodnı dialog

212 Vysledny log

Kompletnı prıklad vysledneho logu je k nalezenı v prıloze 51Obsahuje tyto informace

bull Umıstenı pouzıvane databaze na disku

bull Dale v kazdem cyklu

ndash Poradove cıslo cyklu

ndash Aktualnı pocet nezpracovanych polygonu

ndash Cıslo vytvarene sekce

ndash Identifikatory polygonu tvorıcıch danou sekci

bull Pocet sekcı

bull Pocet mapovych listu v kazde sekci

213 Vysledne vrstvy

Vysledny grid pro merıtko 1 80 000 a defaultnı velikost mapoveho pole (25x 30 cm) vypada nasledovne

5

Obrazek 4 Grid - Vysledna vrstva

214 Cinnost nastroje podrobne

1 Prıpravne cinnostiV prvnıch radcıch kodu jsou vytvoreny pomocne promenne a pole znichz pro dalsı cinnost je potreba zmınit zasobnık IDs Ten je naplnenidentifikatory povodıPokud jiz neexistujı jsou ve vstupnı polygonove vrstve vytvoreny atri-butove sloupce hard ID section MapSheets

bull hard ID - Do tohoto sloupce byly zkopırovany identifikatory abyi po rozdelenı do nekolika vrstev mely polygony jednoznacny iden-tifikator

bull section - Po vypoctu sekcı sem bude pro kazdy polygon zapsanocıslo sekce ve ktere se nachazı

bull MapSheets - Atribut se seznamem mapovych listu na kterych sedane povodı nachazı

Ukazka tvorby atributoveho sloupce

fieldList = arcpyListFields(inFeatureClass rsquoMapSheetsrsquo)

6

fieldCount = len(fieldList)

if (fieldCount = 1)

arcpyAddField_management(inFeatureClass rsquoMapSheetsrsquo rsquoTEXTrsquo)

2 Hlavnı vypocetnı cast

Hlavnı cast je cela v cyklu while (len(IDs) gt 0) tj cyklus probıhadokud jsou v zasobnıku IDs hodnoty Na konci cyklu jsou vzdy identi-fikatory zpracovanych povodı ze zasobnıku mazany V kazdem prubehucyklu jsou selektovany povodı tvorıcı 1 sekci k takove sekci je potevytvoren grid a jsou plneny nove atributove sloupce

Ukazka hlavnıho cyklu

while len(IDs) gt 0

oznacenı povodı i-te sekce

rows_sel = arcpySearchCursor(rsquopovodi_classrsquo)

for row_sel in rows_sel

IDsremove(row_selOBJECTID)

V kazdem prubehu cyklu je zpracovana 1 sekce - tj shluk povodı kteremajı spolecnou cast hranice Sekce je tvorena na zaklade dotazu Se-lectByLocation s definicı BOUNDARY TOUCHES Dotaz se opakujev cyklu dokud se pocet oznacenych povodı zvetsuje K tomu slouzıpromenne matchcount1 matchcount2 ktere obsahujı pocet oznacenychpolygonu

Vytvorenı sekce

bull Oznacenı prvnıho nezpracovaneho polygonu

first_ID = str(IDs[0])

fieldName = OBJECTID

Query = + fieldName + = + first_ID

arcpySelectLayerByAttribute_management(rsquopovodi_classrsquo rsquoNEW_SELECTIONrsquo Query)

matchcount1 = int(arcpyGetCount_management(rsquopovodi_classrsquo)getOutput(0))

bull Prvnı prubeh SelectByLocation

7

arcpySelectLayerByLocation_management(rsquopovodi_classrsquo rsquoBOUNDARY_TOUCHESrsquo

rsquopovodi_classrsquo)

matchcount2 = int(arcpyGetCount_management(rsquopovodi_classrsquo)getOutput(0))

bull Dalsı prubehy SelectByLocation

while matchcount1 lt matchcount2

matchcount1 = matchcount2

arcpySelectLayerByLocation_management(rsquopovodi_classrsquo rsquoBOUNDARY_TOUCHESrsquo

rsquopovodi_classrsquo)

matchcount2 = int(arcpyGetCount_management(rsquopovodi_classrsquo)getOutput(0))

Oznacene polygony jsou ulozeny jako polygonova vrstva do vstupnı ge-odatabaze Tato vrstva je dale pouzita pro tvorbu gridu

Vytvorenı gridu

Pred samotnou tvorbou bylo potreba zjistit rozsah sekce Pokud bylasekce mensı nez 1 mapovy list bylo treba definovat souradnice polohylistu tak aby povodı lezelo na stredu listu Do zasobnıku byly nactenysouradnice lomovych bodu povodı a byly z nich vybrany maximalnı aminimalnı hodnoty Jejich rozdıl pak urcil rozsah sekce

Prıklad plnenı zasobnıku souradnicema

desc = arcpyDescribe(outputFeatureClassPath+rsquorsquo+output_name)

shape_field_name = descShapeFieldName

rows3 = arcpySearchCursor(outputFeatureClassPath+rsquorsquo+output_name)

mbr_X=[]

mbr_Y=[]

for row3 in rows3

Create the geometry object

feat = row3getValue(shape_field_name)

partnum = 0

for pnt in featgetPart(partnum)

mbr_Xappend(pntX)

mbr_Yappend(pntY)

partnum += 1

8

Vytvorenı gridu pote probıha budrsquo s definovanou nebo s nedefinovanoupolohou pocatecnıho mapoveho listu Pro vytvorenı gridu je pouzitafunkce GridIndexFeatures cartography

Ukazka

arcpyGridIndexFeatures_cartography(outputFeatureClassPath+rsquorsquo+grid_name

outputFeatureClassPath+rsquorsquo+output_name USEPAGEUNIT scale_str

sheet_width_str sheet_high_str str(grid_start_pnt_X)+rsquo rsquo+str(grid_start_pnt_Y))

Grid je tedy vytvoren pro jednu sekci Po vsech prubezıch cyklu jsoutakto vytvorene vrstvy gridu spojeny do jedne finalnı vrstvy V cyklujsou dale plneny nove atributove sloupce - cısla sekcı a nazvy mapovychlistu a to jak do nove (vystupnı) vrstvy gridu tak do vstupnı vrstvypovodı

3 Vytvorenı finalnıch vrstev tisk vysledku Jak bylo receno na zaverjsou spojeny jednotlive vrstvy gridu Vedle toho je vytvorena vrstvaspojenych mapovych listu po sekcıch - funkcı Dissolve - pro tvorbuprehledky Jsou vytisknuty vysledne hodnoty viz 212

22 Generalizace

Pro generalizaci byl napsan skript ktery nacıta liniovou vrstvu toku Tentoskript byl jiz psan na mıru podkladovym datum a pri nacıtanı je v nemvyuzito znalosti struktury danych podkladovych dat Skript k vrstve pripojıexternı tabulku a vytvorı atributovy sloupec kategorie Podle dat z externıtabulky pak plnı novy sloupec hodnotami 1 - 5 podle mnozstvı unasenehosedimentu Tato hodnota je pak pouzita pri vizualizaci datZajımavostı je ze pro nacıtanı musela byt tabulka indexovana viz 31

221 Uvodnı dialog

Uvodnı dialog obsahuje dva parametry

bull Input Feature Class Vstupnı liniova vrstva rıcnıch useku

bull Table Vstupnı tabulka obsahujıcı hodnoty rıcnıch splavnenin

9

222 Vysledny log

Vysledny log je k nahlednutı v prıloze 52 Obsahuje tyto informace

bull Pocet vsech rıcnıch useku

bull Pocet useku v jednotlivych kategoriıch

23 Finalnı upravy a export

Jak jiz bylo zmıneno finalnı vzhled mapoveho listu byl vytvoren manualne vLayout view a pomocı toolbaru Data Driven Pages Tento postup je casoveekonomictejsı a je jım dosazeno lepsıch vysledku dıky prehlednosti ToolbarData Driven Pages pak umoznuje vkladat dynamicke textove pole ktere seautomaticky menı s menıcım se mapovym listem Takovym polem je naprnazev mapoveho listu Stacı tedy definovat vzhled jednoho mapoveho listuv toolbaru Data Driven Pages navolit prıslusne pole - ty byly vytvorenynastrojem Grid viz 21 Dynamicky bylo potreba propojit s mapovym oknemi prehledku ktera byla vytvorena jako druhy Data Frame To se provedlo defi-novanım rozsahu podle hlavnıho mapoveho okna v Properties -iquest Data Frame-iquest Extant a definovanım Definition Query ve vlastnostech vrstvy Dalsım dy-namickym prvkem jsou oznacenı sousednıch mapovych listu a cıslo strankyNa takto sestavenou stranku s dynamickymi prvky bylo mozne pouzıt exportmapy do pdf a Atlas byl vygenerovanPrıklad dynamickeho textu pro nazev mapoveho listultdyn type=page property=PageNamegt

3 Problemy a moznosti rozsırenı

31 Pripojovanı externıch tabulek

Pri pripjovanı externıch tabulek musely byt indexovany hodnoty atribu-toveho sloupce pouziteho k parovanı To probehlo prıkazemarcpyAddIndex management (layer HydroID)Pripojenı tabulky musı probıhat k Feature layer Proto bylo nutne nejprve zFeature Class vytvorit Feature Layer1 Pote mohla byt tabulka pripojena

arcpyAddIndex_management (layer HydroID)

arcpyAddJoin_management(layer HydroID table Riverid)

1Rozdıl mezi Feature Layer a Feature Class je vysvetlen v prilozenem Tutorialu pro-gramovanı v Pythonu pro ArcGIS

10

Zde nastal problem s prıstupem k atributum Obecne nesmı nazvy atri-butovych sloupcu obsahovat mezery K hodnotam je pristupovano pres jed-notlive radky s parametrem nazev sloupce

rows= arcpySearchCursor(layer)

for row in rows

value=rownazev_sloupce

Pripojena tabulka ovsem mela v nazvech sloupcu mezeru K takto pojmeno-vanemu sloupci muselo byt pristupovano prıkazem getValue

rows= arcpySearchCursor(layer)

for row in rows

value=rowgetValue(rsquonazev tabulky$nazev sloupcersquo)

32 Doba behu tvorby gridu

Doba behu nastroje pro tvorbu gridu je znepokolive dlouha Bylo prove-deno merenı casu behu jednotlivych castı kodu funkcı time z modulu timeVysledky ukazaly ze nejdele trva vytvarenı novych vrstev Vrstva se muzevytvaret az 20 sekund Snaha o optimalizaci donutila nahradit vytvarenı vrs-tev s minimalnım ohranicujıcım obdelnıkem sekvencnım ukladanım souradniclomovych bodu polygonu z nichz pak funkcemi min a max byly tyto hodnotyzıskany Prubeh se tak urychlil o desıtky sekund (v jednom prubehu cyklupriblizne o 15 sekund) Dalsı moznostı bylo vyuzıt prostoroveho indexu datTato moznost nebyla vyuzita protoze ArcGIS pouzıva k prostorovemu in-dexovanı pravidelny grid Zıskanı MBR2 nebylo nalezeno Vyuzitı indexu byovsem problem neresilo Jak jiz bylo zmıneno nejdele trva vytvarenı novychvrstev Bohuzel funkce GridIndexFeatures cartography pro vytvorenı griduneumı pracovat se selektovanymi daty Tedy v kazdem cyklu musı byt ulozenapolygonova vrstva tvorıcı 1 sekci Pote mohla byt vytvorena vrstva tvorıcıgrid Tedy v kazdem prubehu cyklu jsou vytvareny 2 nove vrstvy Jelikozautor neprisel na zpusob jine optimalizace je nastroj pomaly Pro zadanydataset s 58mi povodımi jeho cinnost probıha desıtky minut

33 Moznosti rozsırenı

Do skriptu by se dal zakomponovat export seznamu mapovych listu pro kazdepovodı V soucasne verzi je tvoren exportem atributove tabulky

2minimum bounding rectangle - minimalnı ohranicujıcı obdelnık

11

4 Zaver

Byly vytvoreny nastroje pro automatizaci tvorby Atlasu pro mapy eroznıhosmyvu a transportu splavenin Tvorba Atlasu probıha v nekolika krocıchVizualizovane prvku jsou generalizovany Dale je vytvoren Grid ktery jepouzit jako indexova vrstva pro funkci Data Driven Pages Tou jsou vy-tvoreny jednotlive mapove listy Pomocı dynamickych prvku je pak vytvorenvzhled ktery se menı se zmenou mapoveho listu Nedostatkem je rychlostnastroje pro tvorbu gridu Presto ze je nastroj pomaly je zcela funkcnı Vprıpade potreby dalsıho rozsırenı bude ale vhodne vysledky nacıtat do novehonastroje Vzorovy vytisk vysledneho atlasu je prilozen Vzhledem k tomu zezpracovavana data jsou rozsahla a podlehajı autorskemu zakonu je vytvorenjen vzorovy vytisk z 6ti povodı Nastroje jsou psany v jazyce Python 26 proArcGIS 100 Pri praci byla vyuzıvana predevsım online napoveda ArcGISa diskuznı programatorska fora Kompletnı zdrojovy kod je ke stazenı nastrankach predmetu PIN2

12

5 Prılohy

51 Vysledny log tvorby gridu

Executing Grid

JAtlasvzorektemp_selectpovodi_vzorekgdbpokusne_povodi

70000 25 30 JAtlasvzorektemp_selectpovodi_vzorekgdbgrid70

Start Time Wed May 15 020551 2013

Running script Script2

Output folder JAtlasvzorektemp_selectpovodi_vzorekgdb

_____________________________________________________________________

count of basin polygon to process 6

_____________________________________________________________________

RUN 1

count of basins in 1 section 3

Their ID

ID 1

ID 3

ID 6

_____________________________________________________________________

count of basin polygon to process 3

_____________________________________________________________________

RUN 2

count of basins in 2 section 1

Their ID

ID 2

_____________________________________________________________________

count of basin polygon to process 2

_____________________________________________________________________

RUN 3

count of basins in 3 section 2

Their ID

ID 4

ID 5

----- RESULT -----

Number of sections 3

Number of map sheets

in section 1 13

in section 2 1

in section 3 2

Completed script Grid

Succeeded at Wed May 15 021359 2013 (Elapsed Time 8 minutes 8 seconds

13

52 Vysledny log generalizace

Executing generalization JAtlasvzorek2011_NAZV_nadrze2011_watemsedem

NAZV_tokyVT28_finshp

JAtlasvzorek2011_NAZV_nadrze2011_watemsedem28_vypocet

projectriversedimentxlsxprojectriversediment$

Start Time Wed May 15 075624 2013

Running script generalization

Category created

Total count of river parts 2879

Count of category 1 2428

Count of category 2 118

Count of category 3 68

Count of category 4 20

Count of category 5 245

Completed script generalization

Succeeded at Wed May 15 075638 2013 (Elapsed Time 1400 seconds)

14

CESKE VYSOKE UCENI TECHNICKE V PRAZE

FAKULTA STAVEBNI

OBOR GEODEZIE A KARTOGRAFIE

Dokumentace k projektu informatika 2

Stanovenı smeru odtokuna rastrovem digitalnım modelu

a implementace algoritmudo prostredı ArcGIS

BC JAN ZAJICEK

5 cervna 2013

Obsah

Obsah 1

1 Uvod 2

2 Nejbeznejsı existujıcı algoritmy 3

3 Flow Direction D8 431 Obecny princip D8 432 Popis algoritmu D8 5

4 Popis algoritmu MDinfin 641 Obecny princip MDinfin 642 Technicke resenı MDinfin 8

5 Vysledky 1151 Realna data - Bykovice 1152 Realna data - Nucice 12

6 Zaver 13

Reference 14

7 Prılohy 1571 Bykovice a Nucice vstupnı DMT rastry 1572 Bykovice vysledky 1673 Nucice vysledky 17

1

1 Uvod

Tato dokumentace byla zpracovana v ramci predmetu Projekt Informatika 2Semestralnı prace bude pouzita jako z jedna castı autorovi diplomove praces nazvem SMODERP 2D rozsırenı resıcı vztahy soustredeneho a plosnehoodtoku na danem uzemı Duvodem zpracovanı tohoto tematu byla potrebapouzitı v diplomove praci vıce nez jednoho algoritmu pro urcenı smeruodtoku v prostredı ArcGIS V soucasne dobe ArcGIS vyuzıva algoritmusD8 viz kapitola 3 jako jediny algoritmus pro vypocet smeru odtoku Tentoalgoritmus je soucastı Hydrology tools Nastroje ze skupiny Hydrology sepouzıvajı k modelovanı chovanı toku vody na povrchu Nejbeznejsı pouzıvanadigitalnı data povrchu Zeme jsou rastry digitalnı modelu terenu DMT slozenez jednotlivych bunek pixelu Tyto DMT rastry jsou pouzity jako vstupypro ruzne charakteristiky povrchu DMT rastr je souvisly povrch obvykleodkazujıcı na povrch Zeme Presnost dat je dana rozlisenım rastru taktezvzdalenostı mezi body rastru Informace o tvaru zemskeho povrchu je uzitecnapro mnoho oboru jako je napr zemedelstvı lesnictvı zivotnı prostredı neboregionalnı planovanı Tyto obory vyzadujı pochopenı jak voda tece v ramciuzemı a jak zmeny na tomto uzemı nasledne ovlivnı jejı tok

Cılem projektu bylo naprogramovat algoritmus ktery v roce 2007 publiko-vali Jan Seibert a Brian L McGlynn s nazvem MDinfin [1] Tento algoritmusje vylepsenım stavajıcıch algoritmu pro resenı urcenı smeru odtoku na ras-tru viz kapitola 2 Pro overenı spravnosti vysledku byla pouzita realnadata dvou pozemku u obcı Bykovice a Nucice Testovanı probıhalo na ras-trech o rozlisenı 5 metru Algoritmus byl naprogramovan v jazyce Pythonv prostredı NetBeans IDE 69 Pro spustenı v ArcGISu je potreba pridatdo prostredı vytvoreny toolbox upravit aktualnı cestu ke skriptu mainpya tento model nasledne spustit Vstupem modelu je rastr DMT a vystupnıadresar do ktereho se po dobehnutı modelu ulozı vysledny rastr s hodnotamismeru odtoku 1255 Algoritmus MDinfin je testovan na verzi ArcGIS 100Na nejnovejsı verzi ArcGIS 101 ktera vysla v cervnu 2012 nenı overenakompatibilita algoritmu v dusledku nefunkcnosti vıce nez jedne verze tohotoprogramu na jednom pocıtaci

2

2 Nejbeznejsı existujıcı algoritmy

Existujı tri nejbeznejsı algoritmy kazdy odlisne resıcı problematiku odtokuvody z rastru do sousednıch bunek Prvnım z nich je algoritmus D8 z roku1984 Algoritmus je podrobne popsan v nasledujıcı kapitole 3 Jelikoz odtoknastava vzdy jen do jedne sousednı bunky dochazı casto ke koncentracivodnıch sıtı a sıtrsquo odtoku pak neodpovıda skutecnosti Na druhou stranuje jeho vyhodou jeho jednoduchost a fakt ze nedochazı k nechtene disperzijako je tomu u druheho algoritmu

Druhym algoritmem je MD8 neboli multiple flow direction algorithm MD8algoritmem je voda odvadena do vsech nıze polozenych sousednıch buneka pomer vody je rozdelen procentualne podle sklonu Ve vysledku ma algo-ritmus tendenci vytvaret vıce realisticke prostorove sıte toku nez D8 tımze nedochazı k takove koncentraci vody v sıti U D8 ma mnohem vetsıvliv maly rozdıl vysek mezi sousednımi bunkami na to ktera bunka prijmeveskerou vodu Pouzitım MD8 tyto male vyskove rozdıly nemajı zdalekatakovy vliv jelikoz je mnozstvı vody rozdeleno pomerem mezi tyto bunkyNejvetsı nevyhodou tohoto algoritmu je jeho prılisna disperze na konver-gentnıch svazıch v dusledku odtoku do vsech nıze polozenych bunek

V roce 1997 byl navrzen algoritmus pojmenovany Dinfin Davidem G Tar-botonem z americke univerzity v Utahu Byl navrzen prıstup ktery je zalozenna osmi trojuhelnıkovych ploskach viz obrazek 3 Dıky tomuto postupu jsouodstraneny limitace v podobe moznosti pouze osmi smeru odtoku z bunkyProto je algoritmus pojmenovan Dinfin jelikoz muze nastat nekonecne moznostıvysledneho smeru odtoku Tento prıstup umoznuje pouze jeden smer odtokurozdeleny mezi jednu nebo dve bunky v zavislosti na smeru odtoku

Poslednı dva zmınene algoritmy MD8 a Dinfinmajı oproti D8 nevyhodu ve vetsıcasove narocnosti vypoctu V kapitole 4 je popsan algoritmus MDinfin kteryvyuzıva vyhody MD8 algoritmu za pouzitı trojuhelnıkovych plosek obdobnejako Dinfin algoritmus

3

3 Flow Direction D8

Pro pochopenı problematiky a zjevnost rozdılu mezi algoritmy je vhodneuvest jak funguje nastroj ktery pouzıva ArcGIS Zaklad algoritmu MDinfino nemz pojednava tato dokumentace je zalozen na podobnych postupech

31 Obecny princip D8

Princip nastroje urcenı smeru odtoku (Flow Direction) ktery pouzıva prostredıArcGIS je nasledujıcı Tento nastroj (tool) vezme vstupnı rastr digitalnıhomodelu terenu neboli vyskovy rastr Provede vypocet jehoz vystupem jerastr ktery v kazde bunce rastru obsahuje hodnotu urcujıcı smer odtokuz teto bunky Hodnot je osm podle osmi sousednıch bunek do kterych muzeodtekat voda viz obrazek 1 Prave podle osmi smeru odtoku se tento prıstupnazyva D8 (eight-direction approach)

Obrazek 1 Flow Direction D8 [3]

4

32 Popis algoritmu D8

Samotny vypocet algoritmu je v zasade primitivnı Pro vsechny sousednıbunky se vypocte maximalnı sklon [3]

maximalnı sklon = rozdıl vysek vzdalenost 100

Rozdıl vysek je rozdıl vysky v aktualnım bode a konkretnı sousednı bunkyVzdalenost je vypoctena mezi stredy bunek a lisı se v zavislosti na polozesousednı bunky Pro bunky sousedıcı vrcholem je hodnota velikosti pixeluprenasobena o odmocninu ze dvou Pro zbyle bunky sousedıcı hranou jevelikost vzdalenosti rovna velikosti pixelu Po nalezenı nejstrmejsıho smeruodtoku je hodnota ulozena v podobe bitove hodnoty reprezentujıcı danysmer Pred pouzitım nastroje Flow Direction se obvykle zpracuje vstupnırastr pomocı nastroje Sink Tento algoritmus zaplnı bezodtoke oblasti rastrunejnizsı hodnotou z okolı a do teto nejnizsı sousednı bunky pak posle voduPote jiz nemuze dojıt k situaci kdy vsechny sousednı bunky k dane buncemajı vyssı hodnoty vysek a nedochazelo by tedy k odtokuVysledny rastr nemusı obsahovat pouze bunky s hodnotami 202127 [4]Jestlize nastane situace kdy ma vıce sousednıch bunek nejnizsı hodnotuvysek pak je vysledna hodnota souctem vsech smeru Napr hodnota maximalnıhosklonu bude stejna pro sousednı bunku vlevo a nahore odtok tedy budesmerem na zapad (hodnota = 16) a na sever (hodnota = 64) vysledna hod-nota bude souctem 16 a 64 tedy 84

5

4 Popis algoritmu MDinfin

41 Obecny princip MDinfinObecny postup je prevzat z [1] Stejne jako v prıpade algoritmu Dinfin bylyzavedeny trojuhelnıkove plosky pro vypocet lokalnıho sklonu a smeru pro kazdoutrojuhelnıkovou plosku Okolo stredoveho boduM bylo vytvoreno osm trojuhelnıkuviz obrazek 3 Kazdy se zbyvajıcımi dvema vrcholy P1 P2 ve dvou sousedıcıchbunkach Pro kazdy z techto trojuhelnıku je vypocten smer nejvetsıho sklonuPokud oznacıme vysky bodu M P1 P2 jako hM hP1 hP2 rozdıly vysek sevypoctou takto

z1 = hP1 minus hM z2 = hP2 minus hM (1)

Obdobne se vypoctou rozdıly v x-ovych a y-ovych souradnicıch Po vypocturozdılu jednotlivych souradnic je vypocten normalovy vektor

n =

nx

ny

nz

=

z1y2 minus z2y1z1x2 minus z2x1y1x2 minus y2x1

(2)

Smer odtoku d a sklon s na trojuhelnıkove plose se vypocte pomocı rovnice3 Hodnota nula pro d oznacuje smer osy y a hodnota 3π2 oznacuje smerosy x

d =

0 nx = 0 ny ge 0

π nx = 0 ny lt 0

π2minus arctan(

ny

nx

) nx gt 0

3π2minus arctan(

ny

nx

) nx lt 0

(3)

s = minus tan

(arccos

(nzradic

n2x + n2

y + n2z

))(4)

Jestlize nejvetsı sklon od bodu M je mimo rozpetı 0-45 (π4 radian) jepouzit sklon strmejsı k jednomu z bodu P1 P2 a zaroven i sklon je spoctenk tomuto bodu V prıpade ze oba sousednı body jsou vyse polozeny nez bodM smer nenı pro tento trojuhelnık uvazovan Po spoctenı vsech osmi smerua sklonu pro jednotlive plosky jsou tyto smery povazovany za lokalne ne-jstrmejsı pro kazdy trojuhelnık v rozsahu 45 Smery vedoucı prımo do bodu

6

P1 nebo P2 tedy ty kde d = 0 nebo d = π4 jsou uvazovany pouze vprıpade kdy obe vedlejsı sousednı bunky majı smer k bodu P1 nebo P2Tato situace je znazornena na obrazku 2

Obrazek 2 Ukazka urcenı smeru odtoku z bunky [1]

Prvnı prıpad je smer mırıcı mezi bunky 5 a 6 Druhy prıpad je smer kteryvede prımo do bunky 3 Tato situace nastane jestlize pro trojuhelnık M43vyjde lokalnı smer d = π4 a pro trojuhelnık M32 smer vyjde d = 0Pote co je smer odtoku pro bunku vypocten je celkovy odtok rozdelendo vsech vyslednych smeru na zaklade sklonu Resenı teto problematiky jevıce popsano v sekci 42 Pro smery mırıcı mezi body P1 a P2 je odtokrozdelen do dvou bunek na zaklade nevejtsıho sklonu Pomer odtoku do buneks body P1 a P2 bude v tomto poradı α245 a α145

Obrazek 3 Trojuhelnıkove plosky [1]

7

42 Technicke resenı MDinfinVyse jiz bylo zmıneno ze algoritmus je napsan v jazyce Python Algoritmusje rozdelen do dvou skriptu Prvnı z nich obsahuje funkce a druhy je hlavnıVstupem do modelu je rastr digitalnıho modelu terenu a vystupnı adresardo ktereho se ulozı finalnı rastr smeru odtoku viz obr 4 Po nactenı rastruze vstupnıch parametru je tento rastr preveden na matici NumPy pomocıfunkce

arcpy RasterToNumPyArray ( InputRaster )

NumPy [5] je rozsırenı programovacıho jazyka Python je to balıcek uzıvanypro vedecke vypocty Umoznuje podporu velkych multi-dimenzionalnıch polıa matic spolu s velkou knihovnou matematickych funkcı pro praci s temitopoli

Algoritmus cyklem projızdı vsechny prvky matice a u tech ktere majı hod-notu ruznou od NoData nalezne okolı Hledanı okolı bunky provadı funkceneighbors ta je definovana takto

def ne ighbors ( i j array x y ) return nb1 nb2 nb3 nb4 nb5 nb6 nb7 nb8

Vstupem funkce je pozice v matici dale cela matice a jejı rozmery Funkceneighbors vypocıta hodnoty vysek sousednıch osmi bunek a vratı je na vystup

Obrazek 4 Dialogove okno nastroje MDinfin

Vystup z funkce neighbors slouzı jako jeden z vstupnıch parametru pro dalsıfunkci

8

Funkce byla pojmenovana dir slope jelikoz jejım vystupem je smer odtokua sklon tohoto smeru

def d i r s l o p e ( pointM nbrs vpix sp ix ) return d i r e c t i o n s l ope

Pro kazdy trojuhelnık byla spoctena hodnota d viz vzorec 3 Hodnota s bylapo spatnych a nelogickych vysledcıch pocıtana podle jineho vzorce ktery jizdaval spravne vysledky

s0 =

radicz212y21

+z22y22

(5)

Vzorec se lisı pro kazdy trojuhelnıcek uvedeny je pro vypocet sklonu kdy sousednıbunka je severozapadnı a severnı Tımto postupem bylo zbytecne pocıtatz-tovou slozku vekotoru n vzorec 2 Byly osetreny prıpady kdy sousednıbunky aktualnıho pocıtaneho trojuhelnıku jsou obe vyse polozene nebo obemimo rastr (NoData) Dalsı prıpad nastane jestlize je jeden bod vne rastra druhy v rastru lezı Smer je potom urcen prımo do toho bodu ktery nalezırastru Taktez i sklon je pocıtan pouze mezi tımto bodem a bodem M Lokalnı smer d v kazde plosce po vypoctenı nesmı prekrocit 45 V situacize tuto hodnotu prekrocı je smeru prirazena hodnota 0 nebo 45 v zavislostina vzajemnem porovnanı vysek bodu v trojuhelnıku Takto jsou zpracovanyvsechny plosky a je zjisteno zda-li do kazdeho trojuhelnıku nastava smerodtoku nebo ne Na konci funkce dir slope se kontroluje prıpad kdy smersousednıch trojuhelnıku odkazuje presne do stejneho bodu tedy hodnotysmeru musı byt pro prvnı trojuhelnık d = 45 a pro nasledujıcı sousednıtrojuhelnık d = 0 Vystupem funkce jsou dva vektory o osmi prvcıch smera sklon pro kazdou plosku

Dalsı fazı vypoctu je zjistenı pomeru vody ktera potece do jednotlivychsmeru K vypoctu pomeru byl pouzit tento vzorec [2]

fi =sxi8sum

j=1

sxj

(6)

kde s vyznacuje sklon vypocteneho smeru konkretnı trojuhelnıkove ploskya x je promenny exponent Pokud by byl exponent zvolen 1 bude vyslednasıtrsquo obdobna jako pri pouzitı MD8 algoritmu Pri zvetsovanı exponentu xk nekonecnu bude sıtrsquo stejna jako pri pouzitı D8 metody Vychozı hodnotaexponentu byla zvolena x = 4 coz je kompromis mezi obema variantami

9

Zmena exponentu se v soucasne podobe neprojevı na vyslednem rastru je-likoz vysledek prezentuje pouze smer odtoku a ne procentualnı cast Tohotopomeru bude vyuzito az pri spojenı skriptu s 2D modelem SMODERP

V dalsı casti vypoctu je rozdelen jiz zjisteny pomer z celkoveho odtokudo dvou prıpadne pouze do jedne bunky v zavislosti na smeru odtoku dVe vysledku je vypocten vektor osmi cısel kde kazda hodnota od 0 do 1prestavuje jiz procentualnı pomer z celkoveho odtoku do kazde sousednıbunky

Pro vyslednou reprezentaci smeru odtoku na vystup byl pro kazdou bunkuvytvoren vektor obsahujıcı 1 a 0 rıkajıcı zda nastava ci nenastava odtokdo sousednı bunky Tento vektor byl preveden na celocıselnou hodnotu po-mocı funkce bool2int

def boo l 2 i n t ( x ) y = 0for i j in enumerate ( x )

i f j y += 1ltlt ireturn y

Funkce ma na vstupu vektor jedicek a nul Naprıklad pro vektor 00000111kdy voda tece na severozapad sever a severovychod se funkce chova taktoJe testovano jestli platı j = 1 tedy prvnıch pet nul vektoru funkce preskocıa pro prvnı jednicku se pricte k promenne y 20 v dalsım kroku 21 a v poslednım22 Operator vyjadruje totiz bitovy posun smerem doleva Vysledkem jena vystupu cıslo y = 1 + 2 + 4 = 7

Pro vsechny bunky byla vypoctena hodnota reprezentujıcı smer odtoku Tatohodnota se ulozı do matice a ta se nasledne prevede na vysledny rastr

f l o w d i r = arcpy NumPyArrayToRaster ( value LLcorner spix vpix rdquordquo )

value hodnota reprezentujıcı smer odtokuLLcorner souradnice leveho dolnıho rohuspix sırka pixeluvpix vyska pixelu

10

5 Vysledky

Algoritmus MDinfin byl testovan na skutecnych datech dvou pozemku u obcıNucice ve Stredoceskem kraji a Bykovice v kraji Jihomoravskem rastry jsouv prıloze 71 Oba dva rastry jsou o rozlisenı 5 metru Finalnı rastry jsouporovnavany s rastry vytvorenymi v prostredı ArcGIS nastrojem Flow Di-rection metodou D8

51 Realna data - Bykovice

Vysledne rastry Flow Direction pro uzemı Bykovice jsou uvedeny v prıloze72 Oba rastry byly pro hodnoty 202127 obarveny shodnou barvou kvulilepsı nazornosti a porovnatelnosti vysledku Rastr ktery obsahuje z celkovehopoctu 44807 bunek celkem 23655 bunek s hodnotami vysek po probehnutıalgoritmy dal nasledujıcı vysledky

FD D8 MDinfin1 3650 7372 666 9174 207 188 21 716 94 3732 791 8564 8818 1045128 9408 14983sum

23655 14983

Tabulka 1 Tabulka porovnanı obou algoritmu pro rastr Bykovic

FD je zkratka pro Flow Direction cili smer odtoku reprezentovany celocıselnouhodnotou Ostatnı hodnoty u vysledneho rastru na ktery byl pouzit algorit-mus MDinfin jsou v rozpetı 0246 V rozmezı hodnot smeru odtoku 246255se nevyskytujı zadne bunky Cas potrebny pro vykonanı skriptu byl v prıpadeD8 4 vteriny Pro algoritmus MDinfin byl cas 15 vterin

11

52 Realna data - Nucice

Vysledne rastry jsou uvedeny v prıloze 73 Opet bylo pouzito shodne obar-venı pro zakladnı smery u obou rastru Rastr Nucice obsahoval data na 82732bunkach z celkove poctu 125449 bunek Vysledky jsou pro prehlednost uve-deny v tabulce

FD D8 MDinfin1 12186 12332 12441 87034 16907 10278 9826 1642316 2516 28832 5010 241764 7788 366128 16058 25475sum

82732 55932

Tabulka 2 Tabulka porovnanı obou algoritmu pro rastr Nucic

Ostatnı hodnoty u vysledneho rastru na ktery byl pouzit algoritmusMDinfin jsou v rozpetı 0255 Cas potrebny pro vykonanı skriptu byl v prıpadeD8 6 vterin Pro algoritmus MDinfin byl cas 50 vterin

12

6 Zaver

Cılem projektu bylo vytvorit funkcnı skript obsahujıcı algoritmus pojmen-ovany MDinfin [1] ktery resı odtok do sousednıch bunek rastru Algoritmusbyl napsan v programovacım jazyce Python a testovan na realnych datechVysledky byly mırnym prekvapenım kdy zejmena hodnoty smeru 128 tedyseverovychodnıho se vyskytovaly ve vysledku velmi casto viz tabulky 1 a 2Predpokladem bylo ze se odtok rozlozı do vıce smeru a pocet bunek s hod-notami zakladnıch smeru 1248163264 a 128 bude mene nez v prıpade al-goritmu D8 K rozkladu do vıce smeru sice doslo ale pocet nekterych bunekse zakladnımi smery byl vetsı u algoritmu MDinfin

Co se tyce delky doby behu algoritmu je algoritmus MDinfin pomalejsı viz casyv kapitole 5 nez D8 z nekolika zrejmych duvodu Predevsım algoritmus D8provadı mnohem mene pocetnıch operacı z duvodu jeho mensı slozitostiviz 3 Dalsım duvodem je take rozdıl v jazyce ve kterem jsou oba algo-ritmy napsany D8 je napsan v programovacım jazyce C++ ktery na vetsıchdatech je mnohonasobne rychlejsı nez Python Prepsanım algoritmu MDinfindo jazyka C++ by mohla byt cesta k budoucımu zvysenı rychlosti pracealgoritmu

13

Reference

[1] SEIBERT Jan McGlynn BL A new triangular multiple flow di-rection algortihm for computing upslope areas from gridded digi-tal elevation models [online] [cit 13 5 2013] Dostupne ke stazenız URL lthttpciteseerxistpsueduviewdocdownloaddoi=101179977amprep=rep1amptype=pdfgt

[2] HOLMGREN Peter Multiple direction algortihms for runoff modellingin grid based elevation models An empirical evaluation [online] [cit13 5 2013] Dostupny z URL ltftpwwwlwrkthseCommonUllaMFor_Imran[1994]20holmgren20-20multiple20flow

20direction20algorithms20for20runoff20modelling20in

20grid20based20elevation20modelspdf gt

[3] ESRI ESRI WebHelp - How Flow Direction works [online] [cit13 5 2013] Dostupne z URL lthttphelparcgiscomenarcgisdesktop100helpindexhtml009z00000063000000

htmgt

[4] ESRI ESRI Webhelp - Flow Direction (Spatial Analyst) [online][cit 13 5 2013] Dostupne z URL lthttphelparcgiscomenarcgisdesktop100helpindexhtml009z00000052000000

htmgt

[5] WIKIPEDIA NumPy [online] [cit 13 5 2013] Dostupne z URLlthttpenwikipediaorgwikiNumPygt

[6] INFORMIT Working with operators [online] [cit 13 5 2013] Dos-tupne z URL lthttpwwwinformitcomarticlesarticleaspxp=2002831ampseqNum=6gt

14

7 Prılohy

71 Bykovice a Nucice vstupnı DMT rastry

Obrazek 5 DMT Bykovice

Obrazek 6 DMT Nucice

15

72 Bykovice vysledky

Obrazek 7 Flow Direction D8

Obrazek 8 Flow Direction MDinfin

16

73 Nucice vysledky

Obrazek 9 Flow Direction D8

Obrazek 10 Flow Direction MDinfin

17

Page 11: pro zac ate cn kygeo.fsv.cvut.cz/gdata/2013/pin2/e/dokumentace/... · 2013-06-05 · CESK E VYSOK E U CEN I TECHNICKE V PRAZE FAKULTA STAVEBN I OBOR GEODEZIE A KARTOGRAFIE Dokumentace

merge_list = []

while pathToFeatureClass

merge_listappend(rsquopathToFeatureClassrsquo)

arcpyMerge_management(merge_list outFeatureClass)

229 Testovanı existence atributoveho sloupce

Pokud chceme pridat atributovy sloupec funkcı AddField management jevhodne nejprve otestovat zda-li jiz neexistuje To se provede pomocı seznamusloupcu

fieldList = arcpyListFields(inFeatureClass rsquosectionrsquo)

fieldCount = len(fieldList)

if (fieldCount = 1)

arcpyAddField_management(inFeatureClass rsquosectionrsquo rsquoSHORTrsquo)

2210 Balıcek NumPy a jeho pouzitı

Balıcek NumPy ma obrovsky vyznam pri praci s poli a maticemi Pokudmame na vstupu rastr je treba ho prevest do podoby ve ktere budou hodnotyv jednotlivych bunkach snadno dostupne a mozne matematicke operace snimi K tomuto vyuzijeme funkce RasterToNumPyArray()

arcpyRasterToNumPyArray(InputRaster)

Tato funkce prevede na rastr na matici a jı uz muzeme bez problemu indexo-vat a provadet s nı pocetnı operace Jestlize potrebujeme dostat jako vysledekopet rastr prevedeme vyslednou matici opacnym postupem na rastr

NumPyArrayToRaster (maticelevy_dolnı_rohvelikost_pixelu_x

velikost_pixelu_y hodnota_pro_NoData)

10

3 Zaver

V tomto dokumentu byly demonstrovany ukazky a prıpady pro uplne zacatkypri programovanı skriptu spustitelneho v prostredı ESRI ArcGIS 100 Kom-pletnı zdrojove kody ze kterych se cerpaly ukazky jsou ke stazenı na strankachpredmetu PIN2

11

CESKE VYSOKE UCENI TECHNICKE V PRAZE

FAKULTA STAVEBNI

OBOR GEODEZIE A KARTOGRAFIE

Dokumentace k projektu informatika 2

Automatizace sestavenı Atlasueroznıho smyvu a transportu

splavenin ve velkych povodıch

MICHAL BECICKA

15 kvetna 2013

Obsah

1 Uvod 211 O tematu 212 Strucny souhrn 2

2 Popis pracı 321 Nastroj pro tvorbu gridu 3

211 Uvodnı dialog 4212 Vysledny log 5213 Vysledne vrstvy 5214 Cinnost nastroje podrobne 6

22 Generalizace 9221 Uvodnı dialog 9222 Vysledny log 10

23 Finalnı upravy a export 10

3 Problemy a moznosti rozsırenı 1031 Pripojovanı externıch tabulek 1032 Doba behu tvorby gridu 1133 Moznosti rozsırenı 11

4 Zaver 12

5 Prılohy 1351 Vysledny log tvorby gridu 1352 Vysledny log generalizace 14

1

1 Uvod

11 O tematu

Tema bylo urceno doc Krasou z katedry Hydromelioracı a krajinneho inzenyrstvıpro prezentovanı vysledku vypoctu eroznıho smyvu a transportu splaveninPresto ze je nastroj primarne urcen pro toto pouzitı byla snaha jej napsatco nejuniverzalnejiCılem projektu je vytvorit atlas sestaveny z jednotlivych tematickych mapTyto mapy jsou vytvoreny pro cca tretinu uzemı Ceske Republiky V potrebnemmerıtku (cca 150 000) je nemozne vytvaret spojene tematicke mapy Bylotedy nutne nejprve vyhodnotit jak nejlepe vysledky prezentovat pote vy-tvorit nastroj ktery mapy podle pozadavku upravı (generalizuje vizualizo-vane prvky) vygeneruje jednotlive mapove listy a jejich prehledku Dalevygeneruje seznam mapovych listu pro jednotliva povodı a dalsı potrebneudajeNastroj je psan v jazyce Python pro ArcGIS 100

12 Strucny souhrn

Prace se sklada z nekolika castı

1 Vytvorenı gridu - Tato cast je nejrozsahlejsı Jedna se o skript kterypro dana povodı vytvorı rozsah mapovych listu (tzv index grid layer)a do atributovych tabulek ulozı potrebne hodnoty viz dale

2 Generalizace obsahu mapy - Generalizace nakonec probehla velmijednoduse a to kategorizacı hodnot kumulovaneho smyvu

3 Uprava vzhledu a export - Tato cast byla provadena manualne varcgis layout view Po vytvorenı kyzeneho vzhledu pote probehlo ge-nerovanı jednotlivych mapovych listu pomocı toolbaru Data DrivenPages

2

2 Popis pracı

21 Nastroj pro tvorbu gridu

Tento nastroj vytvorı polygonovou vrstvu obsahujıcı grid a to podle zadanehomerıtka a velikosti mapoveho pole Do atributove tabulky gridu vlozı sloupecs nazvy mapovych listu a sloupec s cısly sekcı (bude vysvetleno dale) Zarovenprida do vstupnı polygonove vrstvy sloupec s cısly sekcı a sloupec s nazvymapovych listu na kterych se dany polygon (povodı) nachazı Dale vytvorıvrstvu nazev gridu dissolve pro prehledku sekcı

Pojem sekce Sekce je tvorena vsemi dotykajıcımi se polygony Mapovelisty jsou ke kazde sekci tvoreny zvlastrsquo a jejich nazvy jsou pote rozsıreny ocıslo sekce Prıklad cıslovanı mapovych listu 1-A1 1-A2 2-A1 2-A2

Obrazek 1 Vstupnı polygonova vrstva

3

Obrazek 2 Ocıslovane sekce polygonove vrstvy

211 Uvodnı dialog

Uvodnı dialog nastroje obsahuje pole pro 5 parametru

bull In - vstupnı parametr datovy typ Feature classVstupnı vrstva polygonu

bull Scale - vstupnı parametr datovy typ LongPozadovane merıtko

bull Map field width - vstupnı parametr s nastavenou defaultnı hodnotou25 datovy typ DoubleSırka vysledneho mapoveho ramce v cm

bull Map field height - vstupnı parametr s nastavenou defaultnı hodnotou30 datovy typ DoubleVyska vysledneho mapoveho ramce v cm

bull Out - vystupnı parametr datovy typ Feature classVystupnı vrstva gridu

4

Obrazek 3 Grid - Uvodnı dialog

212 Vysledny log

Kompletnı prıklad vysledneho logu je k nalezenı v prıloze 51Obsahuje tyto informace

bull Umıstenı pouzıvane databaze na disku

bull Dale v kazdem cyklu

ndash Poradove cıslo cyklu

ndash Aktualnı pocet nezpracovanych polygonu

ndash Cıslo vytvarene sekce

ndash Identifikatory polygonu tvorıcıch danou sekci

bull Pocet sekcı

bull Pocet mapovych listu v kazde sekci

213 Vysledne vrstvy

Vysledny grid pro merıtko 1 80 000 a defaultnı velikost mapoveho pole (25x 30 cm) vypada nasledovne

5

Obrazek 4 Grid - Vysledna vrstva

214 Cinnost nastroje podrobne

1 Prıpravne cinnostiV prvnıch radcıch kodu jsou vytvoreny pomocne promenne a pole znichz pro dalsı cinnost je potreba zmınit zasobnık IDs Ten je naplnenidentifikatory povodıPokud jiz neexistujı jsou ve vstupnı polygonove vrstve vytvoreny atri-butove sloupce hard ID section MapSheets

bull hard ID - Do tohoto sloupce byly zkopırovany identifikatory abyi po rozdelenı do nekolika vrstev mely polygony jednoznacny iden-tifikator

bull section - Po vypoctu sekcı sem bude pro kazdy polygon zapsanocıslo sekce ve ktere se nachazı

bull MapSheets - Atribut se seznamem mapovych listu na kterych sedane povodı nachazı

Ukazka tvorby atributoveho sloupce

fieldList = arcpyListFields(inFeatureClass rsquoMapSheetsrsquo)

6

fieldCount = len(fieldList)

if (fieldCount = 1)

arcpyAddField_management(inFeatureClass rsquoMapSheetsrsquo rsquoTEXTrsquo)

2 Hlavnı vypocetnı cast

Hlavnı cast je cela v cyklu while (len(IDs) gt 0) tj cyklus probıhadokud jsou v zasobnıku IDs hodnoty Na konci cyklu jsou vzdy identi-fikatory zpracovanych povodı ze zasobnıku mazany V kazdem prubehucyklu jsou selektovany povodı tvorıcı 1 sekci k takove sekci je potevytvoren grid a jsou plneny nove atributove sloupce

Ukazka hlavnıho cyklu

while len(IDs) gt 0

oznacenı povodı i-te sekce

rows_sel = arcpySearchCursor(rsquopovodi_classrsquo)

for row_sel in rows_sel

IDsremove(row_selOBJECTID)

V kazdem prubehu cyklu je zpracovana 1 sekce - tj shluk povodı kteremajı spolecnou cast hranice Sekce je tvorena na zaklade dotazu Se-lectByLocation s definicı BOUNDARY TOUCHES Dotaz se opakujev cyklu dokud se pocet oznacenych povodı zvetsuje K tomu slouzıpromenne matchcount1 matchcount2 ktere obsahujı pocet oznacenychpolygonu

Vytvorenı sekce

bull Oznacenı prvnıho nezpracovaneho polygonu

first_ID = str(IDs[0])

fieldName = OBJECTID

Query = + fieldName + = + first_ID

arcpySelectLayerByAttribute_management(rsquopovodi_classrsquo rsquoNEW_SELECTIONrsquo Query)

matchcount1 = int(arcpyGetCount_management(rsquopovodi_classrsquo)getOutput(0))

bull Prvnı prubeh SelectByLocation

7

arcpySelectLayerByLocation_management(rsquopovodi_classrsquo rsquoBOUNDARY_TOUCHESrsquo

rsquopovodi_classrsquo)

matchcount2 = int(arcpyGetCount_management(rsquopovodi_classrsquo)getOutput(0))

bull Dalsı prubehy SelectByLocation

while matchcount1 lt matchcount2

matchcount1 = matchcount2

arcpySelectLayerByLocation_management(rsquopovodi_classrsquo rsquoBOUNDARY_TOUCHESrsquo

rsquopovodi_classrsquo)

matchcount2 = int(arcpyGetCount_management(rsquopovodi_classrsquo)getOutput(0))

Oznacene polygony jsou ulozeny jako polygonova vrstva do vstupnı ge-odatabaze Tato vrstva je dale pouzita pro tvorbu gridu

Vytvorenı gridu

Pred samotnou tvorbou bylo potreba zjistit rozsah sekce Pokud bylasekce mensı nez 1 mapovy list bylo treba definovat souradnice polohylistu tak aby povodı lezelo na stredu listu Do zasobnıku byly nactenysouradnice lomovych bodu povodı a byly z nich vybrany maximalnı aminimalnı hodnoty Jejich rozdıl pak urcil rozsah sekce

Prıklad plnenı zasobnıku souradnicema

desc = arcpyDescribe(outputFeatureClassPath+rsquorsquo+output_name)

shape_field_name = descShapeFieldName

rows3 = arcpySearchCursor(outputFeatureClassPath+rsquorsquo+output_name)

mbr_X=[]

mbr_Y=[]

for row3 in rows3

Create the geometry object

feat = row3getValue(shape_field_name)

partnum = 0

for pnt in featgetPart(partnum)

mbr_Xappend(pntX)

mbr_Yappend(pntY)

partnum += 1

8

Vytvorenı gridu pote probıha budrsquo s definovanou nebo s nedefinovanoupolohou pocatecnıho mapoveho listu Pro vytvorenı gridu je pouzitafunkce GridIndexFeatures cartography

Ukazka

arcpyGridIndexFeatures_cartography(outputFeatureClassPath+rsquorsquo+grid_name

outputFeatureClassPath+rsquorsquo+output_name USEPAGEUNIT scale_str

sheet_width_str sheet_high_str str(grid_start_pnt_X)+rsquo rsquo+str(grid_start_pnt_Y))

Grid je tedy vytvoren pro jednu sekci Po vsech prubezıch cyklu jsoutakto vytvorene vrstvy gridu spojeny do jedne finalnı vrstvy V cyklujsou dale plneny nove atributove sloupce - cısla sekcı a nazvy mapovychlistu a to jak do nove (vystupnı) vrstvy gridu tak do vstupnı vrstvypovodı

3 Vytvorenı finalnıch vrstev tisk vysledku Jak bylo receno na zaverjsou spojeny jednotlive vrstvy gridu Vedle toho je vytvorena vrstvaspojenych mapovych listu po sekcıch - funkcı Dissolve - pro tvorbuprehledky Jsou vytisknuty vysledne hodnoty viz 212

22 Generalizace

Pro generalizaci byl napsan skript ktery nacıta liniovou vrstvu toku Tentoskript byl jiz psan na mıru podkladovym datum a pri nacıtanı je v nemvyuzito znalosti struktury danych podkladovych dat Skript k vrstve pripojıexternı tabulku a vytvorı atributovy sloupec kategorie Podle dat z externıtabulky pak plnı novy sloupec hodnotami 1 - 5 podle mnozstvı unasenehosedimentu Tato hodnota je pak pouzita pri vizualizaci datZajımavostı je ze pro nacıtanı musela byt tabulka indexovana viz 31

221 Uvodnı dialog

Uvodnı dialog obsahuje dva parametry

bull Input Feature Class Vstupnı liniova vrstva rıcnıch useku

bull Table Vstupnı tabulka obsahujıcı hodnoty rıcnıch splavnenin

9

222 Vysledny log

Vysledny log je k nahlednutı v prıloze 52 Obsahuje tyto informace

bull Pocet vsech rıcnıch useku

bull Pocet useku v jednotlivych kategoriıch

23 Finalnı upravy a export

Jak jiz bylo zmıneno finalnı vzhled mapoveho listu byl vytvoren manualne vLayout view a pomocı toolbaru Data Driven Pages Tento postup je casoveekonomictejsı a je jım dosazeno lepsıch vysledku dıky prehlednosti ToolbarData Driven Pages pak umoznuje vkladat dynamicke textove pole ktere seautomaticky menı s menıcım se mapovym listem Takovym polem je naprnazev mapoveho listu Stacı tedy definovat vzhled jednoho mapoveho listuv toolbaru Data Driven Pages navolit prıslusne pole - ty byly vytvorenynastrojem Grid viz 21 Dynamicky bylo potreba propojit s mapovym oknemi prehledku ktera byla vytvorena jako druhy Data Frame To se provedlo defi-novanım rozsahu podle hlavnıho mapoveho okna v Properties -iquest Data Frame-iquest Extant a definovanım Definition Query ve vlastnostech vrstvy Dalsım dy-namickym prvkem jsou oznacenı sousednıch mapovych listu a cıslo strankyNa takto sestavenou stranku s dynamickymi prvky bylo mozne pouzıt exportmapy do pdf a Atlas byl vygenerovanPrıklad dynamickeho textu pro nazev mapoveho listultdyn type=page property=PageNamegt

3 Problemy a moznosti rozsırenı

31 Pripojovanı externıch tabulek

Pri pripjovanı externıch tabulek musely byt indexovany hodnoty atribu-toveho sloupce pouziteho k parovanı To probehlo prıkazemarcpyAddIndex management (layer HydroID)Pripojenı tabulky musı probıhat k Feature layer Proto bylo nutne nejprve zFeature Class vytvorit Feature Layer1 Pote mohla byt tabulka pripojena

arcpyAddIndex_management (layer HydroID)

arcpyAddJoin_management(layer HydroID table Riverid)

1Rozdıl mezi Feature Layer a Feature Class je vysvetlen v prilozenem Tutorialu pro-gramovanı v Pythonu pro ArcGIS

10

Zde nastal problem s prıstupem k atributum Obecne nesmı nazvy atri-butovych sloupcu obsahovat mezery K hodnotam je pristupovano pres jed-notlive radky s parametrem nazev sloupce

rows= arcpySearchCursor(layer)

for row in rows

value=rownazev_sloupce

Pripojena tabulka ovsem mela v nazvech sloupcu mezeru K takto pojmeno-vanemu sloupci muselo byt pristupovano prıkazem getValue

rows= arcpySearchCursor(layer)

for row in rows

value=rowgetValue(rsquonazev tabulky$nazev sloupcersquo)

32 Doba behu tvorby gridu

Doba behu nastroje pro tvorbu gridu je znepokolive dlouha Bylo prove-deno merenı casu behu jednotlivych castı kodu funkcı time z modulu timeVysledky ukazaly ze nejdele trva vytvarenı novych vrstev Vrstva se muzevytvaret az 20 sekund Snaha o optimalizaci donutila nahradit vytvarenı vrs-tev s minimalnım ohranicujıcım obdelnıkem sekvencnım ukladanım souradniclomovych bodu polygonu z nichz pak funkcemi min a max byly tyto hodnotyzıskany Prubeh se tak urychlil o desıtky sekund (v jednom prubehu cyklupriblizne o 15 sekund) Dalsı moznostı bylo vyuzıt prostoroveho indexu datTato moznost nebyla vyuzita protoze ArcGIS pouzıva k prostorovemu in-dexovanı pravidelny grid Zıskanı MBR2 nebylo nalezeno Vyuzitı indexu byovsem problem neresilo Jak jiz bylo zmıneno nejdele trva vytvarenı novychvrstev Bohuzel funkce GridIndexFeatures cartography pro vytvorenı griduneumı pracovat se selektovanymi daty Tedy v kazdem cyklu musı byt ulozenapolygonova vrstva tvorıcı 1 sekci Pote mohla byt vytvorena vrstva tvorıcıgrid Tedy v kazdem prubehu cyklu jsou vytvareny 2 nove vrstvy Jelikozautor neprisel na zpusob jine optimalizace je nastroj pomaly Pro zadanydataset s 58mi povodımi jeho cinnost probıha desıtky minut

33 Moznosti rozsırenı

Do skriptu by se dal zakomponovat export seznamu mapovych listu pro kazdepovodı V soucasne verzi je tvoren exportem atributove tabulky

2minimum bounding rectangle - minimalnı ohranicujıcı obdelnık

11

4 Zaver

Byly vytvoreny nastroje pro automatizaci tvorby Atlasu pro mapy eroznıhosmyvu a transportu splavenin Tvorba Atlasu probıha v nekolika krocıchVizualizovane prvku jsou generalizovany Dale je vytvoren Grid ktery jepouzit jako indexova vrstva pro funkci Data Driven Pages Tou jsou vy-tvoreny jednotlive mapove listy Pomocı dynamickych prvku je pak vytvorenvzhled ktery se menı se zmenou mapoveho listu Nedostatkem je rychlostnastroje pro tvorbu gridu Presto ze je nastroj pomaly je zcela funkcnı Vprıpade potreby dalsıho rozsırenı bude ale vhodne vysledky nacıtat do novehonastroje Vzorovy vytisk vysledneho atlasu je prilozen Vzhledem k tomu zezpracovavana data jsou rozsahla a podlehajı autorskemu zakonu je vytvorenjen vzorovy vytisk z 6ti povodı Nastroje jsou psany v jazyce Python 26 proArcGIS 100 Pri praci byla vyuzıvana predevsım online napoveda ArcGISa diskuznı programatorska fora Kompletnı zdrojovy kod je ke stazenı nastrankach predmetu PIN2

12

5 Prılohy

51 Vysledny log tvorby gridu

Executing Grid

JAtlasvzorektemp_selectpovodi_vzorekgdbpokusne_povodi

70000 25 30 JAtlasvzorektemp_selectpovodi_vzorekgdbgrid70

Start Time Wed May 15 020551 2013

Running script Script2

Output folder JAtlasvzorektemp_selectpovodi_vzorekgdb

_____________________________________________________________________

count of basin polygon to process 6

_____________________________________________________________________

RUN 1

count of basins in 1 section 3

Their ID

ID 1

ID 3

ID 6

_____________________________________________________________________

count of basin polygon to process 3

_____________________________________________________________________

RUN 2

count of basins in 2 section 1

Their ID

ID 2

_____________________________________________________________________

count of basin polygon to process 2

_____________________________________________________________________

RUN 3

count of basins in 3 section 2

Their ID

ID 4

ID 5

----- RESULT -----

Number of sections 3

Number of map sheets

in section 1 13

in section 2 1

in section 3 2

Completed script Grid

Succeeded at Wed May 15 021359 2013 (Elapsed Time 8 minutes 8 seconds

13

52 Vysledny log generalizace

Executing generalization JAtlasvzorek2011_NAZV_nadrze2011_watemsedem

NAZV_tokyVT28_finshp

JAtlasvzorek2011_NAZV_nadrze2011_watemsedem28_vypocet

projectriversedimentxlsxprojectriversediment$

Start Time Wed May 15 075624 2013

Running script generalization

Category created

Total count of river parts 2879

Count of category 1 2428

Count of category 2 118

Count of category 3 68

Count of category 4 20

Count of category 5 245

Completed script generalization

Succeeded at Wed May 15 075638 2013 (Elapsed Time 1400 seconds)

14

CESKE VYSOKE UCENI TECHNICKE V PRAZE

FAKULTA STAVEBNI

OBOR GEODEZIE A KARTOGRAFIE

Dokumentace k projektu informatika 2

Stanovenı smeru odtokuna rastrovem digitalnım modelu

a implementace algoritmudo prostredı ArcGIS

BC JAN ZAJICEK

5 cervna 2013

Obsah

Obsah 1

1 Uvod 2

2 Nejbeznejsı existujıcı algoritmy 3

3 Flow Direction D8 431 Obecny princip D8 432 Popis algoritmu D8 5

4 Popis algoritmu MDinfin 641 Obecny princip MDinfin 642 Technicke resenı MDinfin 8

5 Vysledky 1151 Realna data - Bykovice 1152 Realna data - Nucice 12

6 Zaver 13

Reference 14

7 Prılohy 1571 Bykovice a Nucice vstupnı DMT rastry 1572 Bykovice vysledky 1673 Nucice vysledky 17

1

1 Uvod

Tato dokumentace byla zpracovana v ramci predmetu Projekt Informatika 2Semestralnı prace bude pouzita jako z jedna castı autorovi diplomove praces nazvem SMODERP 2D rozsırenı resıcı vztahy soustredeneho a plosnehoodtoku na danem uzemı Duvodem zpracovanı tohoto tematu byla potrebapouzitı v diplomove praci vıce nez jednoho algoritmu pro urcenı smeruodtoku v prostredı ArcGIS V soucasne dobe ArcGIS vyuzıva algoritmusD8 viz kapitola 3 jako jediny algoritmus pro vypocet smeru odtoku Tentoalgoritmus je soucastı Hydrology tools Nastroje ze skupiny Hydrology sepouzıvajı k modelovanı chovanı toku vody na povrchu Nejbeznejsı pouzıvanadigitalnı data povrchu Zeme jsou rastry digitalnı modelu terenu DMT slozenez jednotlivych bunek pixelu Tyto DMT rastry jsou pouzity jako vstupypro ruzne charakteristiky povrchu DMT rastr je souvisly povrch obvykleodkazujıcı na povrch Zeme Presnost dat je dana rozlisenım rastru taktezvzdalenostı mezi body rastru Informace o tvaru zemskeho povrchu je uzitecnapro mnoho oboru jako je napr zemedelstvı lesnictvı zivotnı prostredı neboregionalnı planovanı Tyto obory vyzadujı pochopenı jak voda tece v ramciuzemı a jak zmeny na tomto uzemı nasledne ovlivnı jejı tok

Cılem projektu bylo naprogramovat algoritmus ktery v roce 2007 publiko-vali Jan Seibert a Brian L McGlynn s nazvem MDinfin [1] Tento algoritmusje vylepsenım stavajıcıch algoritmu pro resenı urcenı smeru odtoku na ras-tru viz kapitola 2 Pro overenı spravnosti vysledku byla pouzita realnadata dvou pozemku u obcı Bykovice a Nucice Testovanı probıhalo na ras-trech o rozlisenı 5 metru Algoritmus byl naprogramovan v jazyce Pythonv prostredı NetBeans IDE 69 Pro spustenı v ArcGISu je potreba pridatdo prostredı vytvoreny toolbox upravit aktualnı cestu ke skriptu mainpya tento model nasledne spustit Vstupem modelu je rastr DMT a vystupnıadresar do ktereho se po dobehnutı modelu ulozı vysledny rastr s hodnotamismeru odtoku 1255 Algoritmus MDinfin je testovan na verzi ArcGIS 100Na nejnovejsı verzi ArcGIS 101 ktera vysla v cervnu 2012 nenı overenakompatibilita algoritmu v dusledku nefunkcnosti vıce nez jedne verze tohotoprogramu na jednom pocıtaci

2

2 Nejbeznejsı existujıcı algoritmy

Existujı tri nejbeznejsı algoritmy kazdy odlisne resıcı problematiku odtokuvody z rastru do sousednıch bunek Prvnım z nich je algoritmus D8 z roku1984 Algoritmus je podrobne popsan v nasledujıcı kapitole 3 Jelikoz odtoknastava vzdy jen do jedne sousednı bunky dochazı casto ke koncentracivodnıch sıtı a sıtrsquo odtoku pak neodpovıda skutecnosti Na druhou stranuje jeho vyhodou jeho jednoduchost a fakt ze nedochazı k nechtene disperzijako je tomu u druheho algoritmu

Druhym algoritmem je MD8 neboli multiple flow direction algorithm MD8algoritmem je voda odvadena do vsech nıze polozenych sousednıch buneka pomer vody je rozdelen procentualne podle sklonu Ve vysledku ma algo-ritmus tendenci vytvaret vıce realisticke prostorove sıte toku nez D8 tımze nedochazı k takove koncentraci vody v sıti U D8 ma mnohem vetsıvliv maly rozdıl vysek mezi sousednımi bunkami na to ktera bunka prijmeveskerou vodu Pouzitım MD8 tyto male vyskove rozdıly nemajı zdalekatakovy vliv jelikoz je mnozstvı vody rozdeleno pomerem mezi tyto bunkyNejvetsı nevyhodou tohoto algoritmu je jeho prılisna disperze na konver-gentnıch svazıch v dusledku odtoku do vsech nıze polozenych bunek

V roce 1997 byl navrzen algoritmus pojmenovany Dinfin Davidem G Tar-botonem z americke univerzity v Utahu Byl navrzen prıstup ktery je zalozenna osmi trojuhelnıkovych ploskach viz obrazek 3 Dıky tomuto postupu jsouodstraneny limitace v podobe moznosti pouze osmi smeru odtoku z bunkyProto je algoritmus pojmenovan Dinfin jelikoz muze nastat nekonecne moznostıvysledneho smeru odtoku Tento prıstup umoznuje pouze jeden smer odtokurozdeleny mezi jednu nebo dve bunky v zavislosti na smeru odtoku

Poslednı dva zmınene algoritmy MD8 a Dinfinmajı oproti D8 nevyhodu ve vetsıcasove narocnosti vypoctu V kapitole 4 je popsan algoritmus MDinfin kteryvyuzıva vyhody MD8 algoritmu za pouzitı trojuhelnıkovych plosek obdobnejako Dinfin algoritmus

3

3 Flow Direction D8

Pro pochopenı problematiky a zjevnost rozdılu mezi algoritmy je vhodneuvest jak funguje nastroj ktery pouzıva ArcGIS Zaklad algoritmu MDinfino nemz pojednava tato dokumentace je zalozen na podobnych postupech

31 Obecny princip D8

Princip nastroje urcenı smeru odtoku (Flow Direction) ktery pouzıva prostredıArcGIS je nasledujıcı Tento nastroj (tool) vezme vstupnı rastr digitalnıhomodelu terenu neboli vyskovy rastr Provede vypocet jehoz vystupem jerastr ktery v kazde bunce rastru obsahuje hodnotu urcujıcı smer odtokuz teto bunky Hodnot je osm podle osmi sousednıch bunek do kterych muzeodtekat voda viz obrazek 1 Prave podle osmi smeru odtoku se tento prıstupnazyva D8 (eight-direction approach)

Obrazek 1 Flow Direction D8 [3]

4

32 Popis algoritmu D8

Samotny vypocet algoritmu je v zasade primitivnı Pro vsechny sousednıbunky se vypocte maximalnı sklon [3]

maximalnı sklon = rozdıl vysek vzdalenost 100

Rozdıl vysek je rozdıl vysky v aktualnım bode a konkretnı sousednı bunkyVzdalenost je vypoctena mezi stredy bunek a lisı se v zavislosti na polozesousednı bunky Pro bunky sousedıcı vrcholem je hodnota velikosti pixeluprenasobena o odmocninu ze dvou Pro zbyle bunky sousedıcı hranou jevelikost vzdalenosti rovna velikosti pixelu Po nalezenı nejstrmejsıho smeruodtoku je hodnota ulozena v podobe bitove hodnoty reprezentujıcı danysmer Pred pouzitım nastroje Flow Direction se obvykle zpracuje vstupnırastr pomocı nastroje Sink Tento algoritmus zaplnı bezodtoke oblasti rastrunejnizsı hodnotou z okolı a do teto nejnizsı sousednı bunky pak posle voduPote jiz nemuze dojıt k situaci kdy vsechny sousednı bunky k dane buncemajı vyssı hodnoty vysek a nedochazelo by tedy k odtokuVysledny rastr nemusı obsahovat pouze bunky s hodnotami 202127 [4]Jestlize nastane situace kdy ma vıce sousednıch bunek nejnizsı hodnotuvysek pak je vysledna hodnota souctem vsech smeru Napr hodnota maximalnıhosklonu bude stejna pro sousednı bunku vlevo a nahore odtok tedy budesmerem na zapad (hodnota = 16) a na sever (hodnota = 64) vysledna hod-nota bude souctem 16 a 64 tedy 84

5

4 Popis algoritmu MDinfin

41 Obecny princip MDinfinObecny postup je prevzat z [1] Stejne jako v prıpade algoritmu Dinfin bylyzavedeny trojuhelnıkove plosky pro vypocet lokalnıho sklonu a smeru pro kazdoutrojuhelnıkovou plosku Okolo stredoveho boduM bylo vytvoreno osm trojuhelnıkuviz obrazek 3 Kazdy se zbyvajıcımi dvema vrcholy P1 P2 ve dvou sousedıcıchbunkach Pro kazdy z techto trojuhelnıku je vypocten smer nejvetsıho sklonuPokud oznacıme vysky bodu M P1 P2 jako hM hP1 hP2 rozdıly vysek sevypoctou takto

z1 = hP1 minus hM z2 = hP2 minus hM (1)

Obdobne se vypoctou rozdıly v x-ovych a y-ovych souradnicıch Po vypocturozdılu jednotlivych souradnic je vypocten normalovy vektor

n =

nx

ny

nz

=

z1y2 minus z2y1z1x2 minus z2x1y1x2 minus y2x1

(2)

Smer odtoku d a sklon s na trojuhelnıkove plose se vypocte pomocı rovnice3 Hodnota nula pro d oznacuje smer osy y a hodnota 3π2 oznacuje smerosy x

d =

0 nx = 0 ny ge 0

π nx = 0 ny lt 0

π2minus arctan(

ny

nx

) nx gt 0

3π2minus arctan(

ny

nx

) nx lt 0

(3)

s = minus tan

(arccos

(nzradic

n2x + n2

y + n2z

))(4)

Jestlize nejvetsı sklon od bodu M je mimo rozpetı 0-45 (π4 radian) jepouzit sklon strmejsı k jednomu z bodu P1 P2 a zaroven i sklon je spoctenk tomuto bodu V prıpade ze oba sousednı body jsou vyse polozeny nez bodM smer nenı pro tento trojuhelnık uvazovan Po spoctenı vsech osmi smerua sklonu pro jednotlive plosky jsou tyto smery povazovany za lokalne ne-jstrmejsı pro kazdy trojuhelnık v rozsahu 45 Smery vedoucı prımo do bodu

6

P1 nebo P2 tedy ty kde d = 0 nebo d = π4 jsou uvazovany pouze vprıpade kdy obe vedlejsı sousednı bunky majı smer k bodu P1 nebo P2Tato situace je znazornena na obrazku 2

Obrazek 2 Ukazka urcenı smeru odtoku z bunky [1]

Prvnı prıpad je smer mırıcı mezi bunky 5 a 6 Druhy prıpad je smer kteryvede prımo do bunky 3 Tato situace nastane jestlize pro trojuhelnık M43vyjde lokalnı smer d = π4 a pro trojuhelnık M32 smer vyjde d = 0Pote co je smer odtoku pro bunku vypocten je celkovy odtok rozdelendo vsech vyslednych smeru na zaklade sklonu Resenı teto problematiky jevıce popsano v sekci 42 Pro smery mırıcı mezi body P1 a P2 je odtokrozdelen do dvou bunek na zaklade nevejtsıho sklonu Pomer odtoku do buneks body P1 a P2 bude v tomto poradı α245 a α145

Obrazek 3 Trojuhelnıkove plosky [1]

7

42 Technicke resenı MDinfinVyse jiz bylo zmıneno ze algoritmus je napsan v jazyce Python Algoritmusje rozdelen do dvou skriptu Prvnı z nich obsahuje funkce a druhy je hlavnıVstupem do modelu je rastr digitalnıho modelu terenu a vystupnı adresardo ktereho se ulozı finalnı rastr smeru odtoku viz obr 4 Po nactenı rastruze vstupnıch parametru je tento rastr preveden na matici NumPy pomocıfunkce

arcpy RasterToNumPyArray ( InputRaster )

NumPy [5] je rozsırenı programovacıho jazyka Python je to balıcek uzıvanypro vedecke vypocty Umoznuje podporu velkych multi-dimenzionalnıch polıa matic spolu s velkou knihovnou matematickych funkcı pro praci s temitopoli

Algoritmus cyklem projızdı vsechny prvky matice a u tech ktere majı hod-notu ruznou od NoData nalezne okolı Hledanı okolı bunky provadı funkceneighbors ta je definovana takto

def ne ighbors ( i j array x y ) return nb1 nb2 nb3 nb4 nb5 nb6 nb7 nb8

Vstupem funkce je pozice v matici dale cela matice a jejı rozmery Funkceneighbors vypocıta hodnoty vysek sousednıch osmi bunek a vratı je na vystup

Obrazek 4 Dialogove okno nastroje MDinfin

Vystup z funkce neighbors slouzı jako jeden z vstupnıch parametru pro dalsıfunkci

8

Funkce byla pojmenovana dir slope jelikoz jejım vystupem je smer odtokua sklon tohoto smeru

def d i r s l o p e ( pointM nbrs vpix sp ix ) return d i r e c t i o n s l ope

Pro kazdy trojuhelnık byla spoctena hodnota d viz vzorec 3 Hodnota s bylapo spatnych a nelogickych vysledcıch pocıtana podle jineho vzorce ktery jizdaval spravne vysledky

s0 =

radicz212y21

+z22y22

(5)

Vzorec se lisı pro kazdy trojuhelnıcek uvedeny je pro vypocet sklonu kdy sousednıbunka je severozapadnı a severnı Tımto postupem bylo zbytecne pocıtatz-tovou slozku vekotoru n vzorec 2 Byly osetreny prıpady kdy sousednıbunky aktualnıho pocıtaneho trojuhelnıku jsou obe vyse polozene nebo obemimo rastr (NoData) Dalsı prıpad nastane jestlize je jeden bod vne rastra druhy v rastru lezı Smer je potom urcen prımo do toho bodu ktery nalezırastru Taktez i sklon je pocıtan pouze mezi tımto bodem a bodem M Lokalnı smer d v kazde plosce po vypoctenı nesmı prekrocit 45 V situacize tuto hodnotu prekrocı je smeru prirazena hodnota 0 nebo 45 v zavislostina vzajemnem porovnanı vysek bodu v trojuhelnıku Takto jsou zpracovanyvsechny plosky a je zjisteno zda-li do kazdeho trojuhelnıku nastava smerodtoku nebo ne Na konci funkce dir slope se kontroluje prıpad kdy smersousednıch trojuhelnıku odkazuje presne do stejneho bodu tedy hodnotysmeru musı byt pro prvnı trojuhelnık d = 45 a pro nasledujıcı sousednıtrojuhelnık d = 0 Vystupem funkce jsou dva vektory o osmi prvcıch smera sklon pro kazdou plosku

Dalsı fazı vypoctu je zjistenı pomeru vody ktera potece do jednotlivychsmeru K vypoctu pomeru byl pouzit tento vzorec [2]

fi =sxi8sum

j=1

sxj

(6)

kde s vyznacuje sklon vypocteneho smeru konkretnı trojuhelnıkove ploskya x je promenny exponent Pokud by byl exponent zvolen 1 bude vyslednasıtrsquo obdobna jako pri pouzitı MD8 algoritmu Pri zvetsovanı exponentu xk nekonecnu bude sıtrsquo stejna jako pri pouzitı D8 metody Vychozı hodnotaexponentu byla zvolena x = 4 coz je kompromis mezi obema variantami

9

Zmena exponentu se v soucasne podobe neprojevı na vyslednem rastru je-likoz vysledek prezentuje pouze smer odtoku a ne procentualnı cast Tohotopomeru bude vyuzito az pri spojenı skriptu s 2D modelem SMODERP

V dalsı casti vypoctu je rozdelen jiz zjisteny pomer z celkoveho odtokudo dvou prıpadne pouze do jedne bunky v zavislosti na smeru odtoku dVe vysledku je vypocten vektor osmi cısel kde kazda hodnota od 0 do 1prestavuje jiz procentualnı pomer z celkoveho odtoku do kazde sousednıbunky

Pro vyslednou reprezentaci smeru odtoku na vystup byl pro kazdou bunkuvytvoren vektor obsahujıcı 1 a 0 rıkajıcı zda nastava ci nenastava odtokdo sousednı bunky Tento vektor byl preveden na celocıselnou hodnotu po-mocı funkce bool2int

def boo l 2 i n t ( x ) y = 0for i j in enumerate ( x )

i f j y += 1ltlt ireturn y

Funkce ma na vstupu vektor jedicek a nul Naprıklad pro vektor 00000111kdy voda tece na severozapad sever a severovychod se funkce chova taktoJe testovano jestli platı j = 1 tedy prvnıch pet nul vektoru funkce preskocıa pro prvnı jednicku se pricte k promenne y 20 v dalsım kroku 21 a v poslednım22 Operator vyjadruje totiz bitovy posun smerem doleva Vysledkem jena vystupu cıslo y = 1 + 2 + 4 = 7

Pro vsechny bunky byla vypoctena hodnota reprezentujıcı smer odtoku Tatohodnota se ulozı do matice a ta se nasledne prevede na vysledny rastr

f l o w d i r = arcpy NumPyArrayToRaster ( value LLcorner spix vpix rdquordquo )

value hodnota reprezentujıcı smer odtokuLLcorner souradnice leveho dolnıho rohuspix sırka pixeluvpix vyska pixelu

10

5 Vysledky

Algoritmus MDinfin byl testovan na skutecnych datech dvou pozemku u obcıNucice ve Stredoceskem kraji a Bykovice v kraji Jihomoravskem rastry jsouv prıloze 71 Oba dva rastry jsou o rozlisenı 5 metru Finalnı rastry jsouporovnavany s rastry vytvorenymi v prostredı ArcGIS nastrojem Flow Di-rection metodou D8

51 Realna data - Bykovice

Vysledne rastry Flow Direction pro uzemı Bykovice jsou uvedeny v prıloze72 Oba rastry byly pro hodnoty 202127 obarveny shodnou barvou kvulilepsı nazornosti a porovnatelnosti vysledku Rastr ktery obsahuje z celkovehopoctu 44807 bunek celkem 23655 bunek s hodnotami vysek po probehnutıalgoritmy dal nasledujıcı vysledky

FD D8 MDinfin1 3650 7372 666 9174 207 188 21 716 94 3732 791 8564 8818 1045128 9408 14983sum

23655 14983

Tabulka 1 Tabulka porovnanı obou algoritmu pro rastr Bykovic

FD je zkratka pro Flow Direction cili smer odtoku reprezentovany celocıselnouhodnotou Ostatnı hodnoty u vysledneho rastru na ktery byl pouzit algorit-mus MDinfin jsou v rozpetı 0246 V rozmezı hodnot smeru odtoku 246255se nevyskytujı zadne bunky Cas potrebny pro vykonanı skriptu byl v prıpadeD8 4 vteriny Pro algoritmus MDinfin byl cas 15 vterin

11

52 Realna data - Nucice

Vysledne rastry jsou uvedeny v prıloze 73 Opet bylo pouzito shodne obar-venı pro zakladnı smery u obou rastru Rastr Nucice obsahoval data na 82732bunkach z celkove poctu 125449 bunek Vysledky jsou pro prehlednost uve-deny v tabulce

FD D8 MDinfin1 12186 12332 12441 87034 16907 10278 9826 1642316 2516 28832 5010 241764 7788 366128 16058 25475sum

82732 55932

Tabulka 2 Tabulka porovnanı obou algoritmu pro rastr Nucic

Ostatnı hodnoty u vysledneho rastru na ktery byl pouzit algoritmusMDinfin jsou v rozpetı 0255 Cas potrebny pro vykonanı skriptu byl v prıpadeD8 6 vterin Pro algoritmus MDinfin byl cas 50 vterin

12

6 Zaver

Cılem projektu bylo vytvorit funkcnı skript obsahujıcı algoritmus pojmen-ovany MDinfin [1] ktery resı odtok do sousednıch bunek rastru Algoritmusbyl napsan v programovacım jazyce Python a testovan na realnych datechVysledky byly mırnym prekvapenım kdy zejmena hodnoty smeru 128 tedyseverovychodnıho se vyskytovaly ve vysledku velmi casto viz tabulky 1 a 2Predpokladem bylo ze se odtok rozlozı do vıce smeru a pocet bunek s hod-notami zakladnıch smeru 1248163264 a 128 bude mene nez v prıpade al-goritmu D8 K rozkladu do vıce smeru sice doslo ale pocet nekterych bunekse zakladnımi smery byl vetsı u algoritmu MDinfin

Co se tyce delky doby behu algoritmu je algoritmus MDinfin pomalejsı viz casyv kapitole 5 nez D8 z nekolika zrejmych duvodu Predevsım algoritmus D8provadı mnohem mene pocetnıch operacı z duvodu jeho mensı slozitostiviz 3 Dalsım duvodem je take rozdıl v jazyce ve kterem jsou oba algo-ritmy napsany D8 je napsan v programovacım jazyce C++ ktery na vetsıchdatech je mnohonasobne rychlejsı nez Python Prepsanım algoritmu MDinfindo jazyka C++ by mohla byt cesta k budoucımu zvysenı rychlosti pracealgoritmu

13

Reference

[1] SEIBERT Jan McGlynn BL A new triangular multiple flow di-rection algortihm for computing upslope areas from gridded digi-tal elevation models [online] [cit 13 5 2013] Dostupne ke stazenız URL lthttpciteseerxistpsueduviewdocdownloaddoi=101179977amprep=rep1amptype=pdfgt

[2] HOLMGREN Peter Multiple direction algortihms for runoff modellingin grid based elevation models An empirical evaluation [online] [cit13 5 2013] Dostupny z URL ltftpwwwlwrkthseCommonUllaMFor_Imran[1994]20holmgren20-20multiple20flow

20direction20algorithms20for20runoff20modelling20in

20grid20based20elevation20modelspdf gt

[3] ESRI ESRI WebHelp - How Flow Direction works [online] [cit13 5 2013] Dostupne z URL lthttphelparcgiscomenarcgisdesktop100helpindexhtml009z00000063000000

htmgt

[4] ESRI ESRI Webhelp - Flow Direction (Spatial Analyst) [online][cit 13 5 2013] Dostupne z URL lthttphelparcgiscomenarcgisdesktop100helpindexhtml009z00000052000000

htmgt

[5] WIKIPEDIA NumPy [online] [cit 13 5 2013] Dostupne z URLlthttpenwikipediaorgwikiNumPygt

[6] INFORMIT Working with operators [online] [cit 13 5 2013] Dos-tupne z URL lthttpwwwinformitcomarticlesarticleaspxp=2002831ampseqNum=6gt

14

7 Prılohy

71 Bykovice a Nucice vstupnı DMT rastry

Obrazek 5 DMT Bykovice

Obrazek 6 DMT Nucice

15

72 Bykovice vysledky

Obrazek 7 Flow Direction D8

Obrazek 8 Flow Direction MDinfin

16

73 Nucice vysledky

Obrazek 9 Flow Direction D8

Obrazek 10 Flow Direction MDinfin

17

Page 12: pro zac ate cn kygeo.fsv.cvut.cz/gdata/2013/pin2/e/dokumentace/... · 2013-06-05 · CESK E VYSOK E U CEN I TECHNICKE V PRAZE FAKULTA STAVEBN I OBOR GEODEZIE A KARTOGRAFIE Dokumentace

3 Zaver

V tomto dokumentu byly demonstrovany ukazky a prıpady pro uplne zacatkypri programovanı skriptu spustitelneho v prostredı ESRI ArcGIS 100 Kom-pletnı zdrojove kody ze kterych se cerpaly ukazky jsou ke stazenı na strankachpredmetu PIN2

11

CESKE VYSOKE UCENI TECHNICKE V PRAZE

FAKULTA STAVEBNI

OBOR GEODEZIE A KARTOGRAFIE

Dokumentace k projektu informatika 2

Automatizace sestavenı Atlasueroznıho smyvu a transportu

splavenin ve velkych povodıch

MICHAL BECICKA

15 kvetna 2013

Obsah

1 Uvod 211 O tematu 212 Strucny souhrn 2

2 Popis pracı 321 Nastroj pro tvorbu gridu 3

211 Uvodnı dialog 4212 Vysledny log 5213 Vysledne vrstvy 5214 Cinnost nastroje podrobne 6

22 Generalizace 9221 Uvodnı dialog 9222 Vysledny log 10

23 Finalnı upravy a export 10

3 Problemy a moznosti rozsırenı 1031 Pripojovanı externıch tabulek 1032 Doba behu tvorby gridu 1133 Moznosti rozsırenı 11

4 Zaver 12

5 Prılohy 1351 Vysledny log tvorby gridu 1352 Vysledny log generalizace 14

1

1 Uvod

11 O tematu

Tema bylo urceno doc Krasou z katedry Hydromelioracı a krajinneho inzenyrstvıpro prezentovanı vysledku vypoctu eroznıho smyvu a transportu splaveninPresto ze je nastroj primarne urcen pro toto pouzitı byla snaha jej napsatco nejuniverzalnejiCılem projektu je vytvorit atlas sestaveny z jednotlivych tematickych mapTyto mapy jsou vytvoreny pro cca tretinu uzemı Ceske Republiky V potrebnemmerıtku (cca 150 000) je nemozne vytvaret spojene tematicke mapy Bylotedy nutne nejprve vyhodnotit jak nejlepe vysledky prezentovat pote vy-tvorit nastroj ktery mapy podle pozadavku upravı (generalizuje vizualizo-vane prvky) vygeneruje jednotlive mapove listy a jejich prehledku Dalevygeneruje seznam mapovych listu pro jednotliva povodı a dalsı potrebneudajeNastroj je psan v jazyce Python pro ArcGIS 100

12 Strucny souhrn

Prace se sklada z nekolika castı

1 Vytvorenı gridu - Tato cast je nejrozsahlejsı Jedna se o skript kterypro dana povodı vytvorı rozsah mapovych listu (tzv index grid layer)a do atributovych tabulek ulozı potrebne hodnoty viz dale

2 Generalizace obsahu mapy - Generalizace nakonec probehla velmijednoduse a to kategorizacı hodnot kumulovaneho smyvu

3 Uprava vzhledu a export - Tato cast byla provadena manualne varcgis layout view Po vytvorenı kyzeneho vzhledu pote probehlo ge-nerovanı jednotlivych mapovych listu pomocı toolbaru Data DrivenPages

2

2 Popis pracı

21 Nastroj pro tvorbu gridu

Tento nastroj vytvorı polygonovou vrstvu obsahujıcı grid a to podle zadanehomerıtka a velikosti mapoveho pole Do atributove tabulky gridu vlozı sloupecs nazvy mapovych listu a sloupec s cısly sekcı (bude vysvetleno dale) Zarovenprida do vstupnı polygonove vrstvy sloupec s cısly sekcı a sloupec s nazvymapovych listu na kterych se dany polygon (povodı) nachazı Dale vytvorıvrstvu nazev gridu dissolve pro prehledku sekcı

Pojem sekce Sekce je tvorena vsemi dotykajıcımi se polygony Mapovelisty jsou ke kazde sekci tvoreny zvlastrsquo a jejich nazvy jsou pote rozsıreny ocıslo sekce Prıklad cıslovanı mapovych listu 1-A1 1-A2 2-A1 2-A2

Obrazek 1 Vstupnı polygonova vrstva

3

Obrazek 2 Ocıslovane sekce polygonove vrstvy

211 Uvodnı dialog

Uvodnı dialog nastroje obsahuje pole pro 5 parametru

bull In - vstupnı parametr datovy typ Feature classVstupnı vrstva polygonu

bull Scale - vstupnı parametr datovy typ LongPozadovane merıtko

bull Map field width - vstupnı parametr s nastavenou defaultnı hodnotou25 datovy typ DoubleSırka vysledneho mapoveho ramce v cm

bull Map field height - vstupnı parametr s nastavenou defaultnı hodnotou30 datovy typ DoubleVyska vysledneho mapoveho ramce v cm

bull Out - vystupnı parametr datovy typ Feature classVystupnı vrstva gridu

4

Obrazek 3 Grid - Uvodnı dialog

212 Vysledny log

Kompletnı prıklad vysledneho logu je k nalezenı v prıloze 51Obsahuje tyto informace

bull Umıstenı pouzıvane databaze na disku

bull Dale v kazdem cyklu

ndash Poradove cıslo cyklu

ndash Aktualnı pocet nezpracovanych polygonu

ndash Cıslo vytvarene sekce

ndash Identifikatory polygonu tvorıcıch danou sekci

bull Pocet sekcı

bull Pocet mapovych listu v kazde sekci

213 Vysledne vrstvy

Vysledny grid pro merıtko 1 80 000 a defaultnı velikost mapoveho pole (25x 30 cm) vypada nasledovne

5

Obrazek 4 Grid - Vysledna vrstva

214 Cinnost nastroje podrobne

1 Prıpravne cinnostiV prvnıch radcıch kodu jsou vytvoreny pomocne promenne a pole znichz pro dalsı cinnost je potreba zmınit zasobnık IDs Ten je naplnenidentifikatory povodıPokud jiz neexistujı jsou ve vstupnı polygonove vrstve vytvoreny atri-butove sloupce hard ID section MapSheets

bull hard ID - Do tohoto sloupce byly zkopırovany identifikatory abyi po rozdelenı do nekolika vrstev mely polygony jednoznacny iden-tifikator

bull section - Po vypoctu sekcı sem bude pro kazdy polygon zapsanocıslo sekce ve ktere se nachazı

bull MapSheets - Atribut se seznamem mapovych listu na kterych sedane povodı nachazı

Ukazka tvorby atributoveho sloupce

fieldList = arcpyListFields(inFeatureClass rsquoMapSheetsrsquo)

6

fieldCount = len(fieldList)

if (fieldCount = 1)

arcpyAddField_management(inFeatureClass rsquoMapSheetsrsquo rsquoTEXTrsquo)

2 Hlavnı vypocetnı cast

Hlavnı cast je cela v cyklu while (len(IDs) gt 0) tj cyklus probıhadokud jsou v zasobnıku IDs hodnoty Na konci cyklu jsou vzdy identi-fikatory zpracovanych povodı ze zasobnıku mazany V kazdem prubehucyklu jsou selektovany povodı tvorıcı 1 sekci k takove sekci je potevytvoren grid a jsou plneny nove atributove sloupce

Ukazka hlavnıho cyklu

while len(IDs) gt 0

oznacenı povodı i-te sekce

rows_sel = arcpySearchCursor(rsquopovodi_classrsquo)

for row_sel in rows_sel

IDsremove(row_selOBJECTID)

V kazdem prubehu cyklu je zpracovana 1 sekce - tj shluk povodı kteremajı spolecnou cast hranice Sekce je tvorena na zaklade dotazu Se-lectByLocation s definicı BOUNDARY TOUCHES Dotaz se opakujev cyklu dokud se pocet oznacenych povodı zvetsuje K tomu slouzıpromenne matchcount1 matchcount2 ktere obsahujı pocet oznacenychpolygonu

Vytvorenı sekce

bull Oznacenı prvnıho nezpracovaneho polygonu

first_ID = str(IDs[0])

fieldName = OBJECTID

Query = + fieldName + = + first_ID

arcpySelectLayerByAttribute_management(rsquopovodi_classrsquo rsquoNEW_SELECTIONrsquo Query)

matchcount1 = int(arcpyGetCount_management(rsquopovodi_classrsquo)getOutput(0))

bull Prvnı prubeh SelectByLocation

7

arcpySelectLayerByLocation_management(rsquopovodi_classrsquo rsquoBOUNDARY_TOUCHESrsquo

rsquopovodi_classrsquo)

matchcount2 = int(arcpyGetCount_management(rsquopovodi_classrsquo)getOutput(0))

bull Dalsı prubehy SelectByLocation

while matchcount1 lt matchcount2

matchcount1 = matchcount2

arcpySelectLayerByLocation_management(rsquopovodi_classrsquo rsquoBOUNDARY_TOUCHESrsquo

rsquopovodi_classrsquo)

matchcount2 = int(arcpyGetCount_management(rsquopovodi_classrsquo)getOutput(0))

Oznacene polygony jsou ulozeny jako polygonova vrstva do vstupnı ge-odatabaze Tato vrstva je dale pouzita pro tvorbu gridu

Vytvorenı gridu

Pred samotnou tvorbou bylo potreba zjistit rozsah sekce Pokud bylasekce mensı nez 1 mapovy list bylo treba definovat souradnice polohylistu tak aby povodı lezelo na stredu listu Do zasobnıku byly nactenysouradnice lomovych bodu povodı a byly z nich vybrany maximalnı aminimalnı hodnoty Jejich rozdıl pak urcil rozsah sekce

Prıklad plnenı zasobnıku souradnicema

desc = arcpyDescribe(outputFeatureClassPath+rsquorsquo+output_name)

shape_field_name = descShapeFieldName

rows3 = arcpySearchCursor(outputFeatureClassPath+rsquorsquo+output_name)

mbr_X=[]

mbr_Y=[]

for row3 in rows3

Create the geometry object

feat = row3getValue(shape_field_name)

partnum = 0

for pnt in featgetPart(partnum)

mbr_Xappend(pntX)

mbr_Yappend(pntY)

partnum += 1

8

Vytvorenı gridu pote probıha budrsquo s definovanou nebo s nedefinovanoupolohou pocatecnıho mapoveho listu Pro vytvorenı gridu je pouzitafunkce GridIndexFeatures cartography

Ukazka

arcpyGridIndexFeatures_cartography(outputFeatureClassPath+rsquorsquo+grid_name

outputFeatureClassPath+rsquorsquo+output_name USEPAGEUNIT scale_str

sheet_width_str sheet_high_str str(grid_start_pnt_X)+rsquo rsquo+str(grid_start_pnt_Y))

Grid je tedy vytvoren pro jednu sekci Po vsech prubezıch cyklu jsoutakto vytvorene vrstvy gridu spojeny do jedne finalnı vrstvy V cyklujsou dale plneny nove atributove sloupce - cısla sekcı a nazvy mapovychlistu a to jak do nove (vystupnı) vrstvy gridu tak do vstupnı vrstvypovodı

3 Vytvorenı finalnıch vrstev tisk vysledku Jak bylo receno na zaverjsou spojeny jednotlive vrstvy gridu Vedle toho je vytvorena vrstvaspojenych mapovych listu po sekcıch - funkcı Dissolve - pro tvorbuprehledky Jsou vytisknuty vysledne hodnoty viz 212

22 Generalizace

Pro generalizaci byl napsan skript ktery nacıta liniovou vrstvu toku Tentoskript byl jiz psan na mıru podkladovym datum a pri nacıtanı je v nemvyuzito znalosti struktury danych podkladovych dat Skript k vrstve pripojıexternı tabulku a vytvorı atributovy sloupec kategorie Podle dat z externıtabulky pak plnı novy sloupec hodnotami 1 - 5 podle mnozstvı unasenehosedimentu Tato hodnota je pak pouzita pri vizualizaci datZajımavostı je ze pro nacıtanı musela byt tabulka indexovana viz 31

221 Uvodnı dialog

Uvodnı dialog obsahuje dva parametry

bull Input Feature Class Vstupnı liniova vrstva rıcnıch useku

bull Table Vstupnı tabulka obsahujıcı hodnoty rıcnıch splavnenin

9

222 Vysledny log

Vysledny log je k nahlednutı v prıloze 52 Obsahuje tyto informace

bull Pocet vsech rıcnıch useku

bull Pocet useku v jednotlivych kategoriıch

23 Finalnı upravy a export

Jak jiz bylo zmıneno finalnı vzhled mapoveho listu byl vytvoren manualne vLayout view a pomocı toolbaru Data Driven Pages Tento postup je casoveekonomictejsı a je jım dosazeno lepsıch vysledku dıky prehlednosti ToolbarData Driven Pages pak umoznuje vkladat dynamicke textove pole ktere seautomaticky menı s menıcım se mapovym listem Takovym polem je naprnazev mapoveho listu Stacı tedy definovat vzhled jednoho mapoveho listuv toolbaru Data Driven Pages navolit prıslusne pole - ty byly vytvorenynastrojem Grid viz 21 Dynamicky bylo potreba propojit s mapovym oknemi prehledku ktera byla vytvorena jako druhy Data Frame To se provedlo defi-novanım rozsahu podle hlavnıho mapoveho okna v Properties -iquest Data Frame-iquest Extant a definovanım Definition Query ve vlastnostech vrstvy Dalsım dy-namickym prvkem jsou oznacenı sousednıch mapovych listu a cıslo strankyNa takto sestavenou stranku s dynamickymi prvky bylo mozne pouzıt exportmapy do pdf a Atlas byl vygenerovanPrıklad dynamickeho textu pro nazev mapoveho listultdyn type=page property=PageNamegt

3 Problemy a moznosti rozsırenı

31 Pripojovanı externıch tabulek

Pri pripjovanı externıch tabulek musely byt indexovany hodnoty atribu-toveho sloupce pouziteho k parovanı To probehlo prıkazemarcpyAddIndex management (layer HydroID)Pripojenı tabulky musı probıhat k Feature layer Proto bylo nutne nejprve zFeature Class vytvorit Feature Layer1 Pote mohla byt tabulka pripojena

arcpyAddIndex_management (layer HydroID)

arcpyAddJoin_management(layer HydroID table Riverid)

1Rozdıl mezi Feature Layer a Feature Class je vysvetlen v prilozenem Tutorialu pro-gramovanı v Pythonu pro ArcGIS

10

Zde nastal problem s prıstupem k atributum Obecne nesmı nazvy atri-butovych sloupcu obsahovat mezery K hodnotam je pristupovano pres jed-notlive radky s parametrem nazev sloupce

rows= arcpySearchCursor(layer)

for row in rows

value=rownazev_sloupce

Pripojena tabulka ovsem mela v nazvech sloupcu mezeru K takto pojmeno-vanemu sloupci muselo byt pristupovano prıkazem getValue

rows= arcpySearchCursor(layer)

for row in rows

value=rowgetValue(rsquonazev tabulky$nazev sloupcersquo)

32 Doba behu tvorby gridu

Doba behu nastroje pro tvorbu gridu je znepokolive dlouha Bylo prove-deno merenı casu behu jednotlivych castı kodu funkcı time z modulu timeVysledky ukazaly ze nejdele trva vytvarenı novych vrstev Vrstva se muzevytvaret az 20 sekund Snaha o optimalizaci donutila nahradit vytvarenı vrs-tev s minimalnım ohranicujıcım obdelnıkem sekvencnım ukladanım souradniclomovych bodu polygonu z nichz pak funkcemi min a max byly tyto hodnotyzıskany Prubeh se tak urychlil o desıtky sekund (v jednom prubehu cyklupriblizne o 15 sekund) Dalsı moznostı bylo vyuzıt prostoroveho indexu datTato moznost nebyla vyuzita protoze ArcGIS pouzıva k prostorovemu in-dexovanı pravidelny grid Zıskanı MBR2 nebylo nalezeno Vyuzitı indexu byovsem problem neresilo Jak jiz bylo zmıneno nejdele trva vytvarenı novychvrstev Bohuzel funkce GridIndexFeatures cartography pro vytvorenı griduneumı pracovat se selektovanymi daty Tedy v kazdem cyklu musı byt ulozenapolygonova vrstva tvorıcı 1 sekci Pote mohla byt vytvorena vrstva tvorıcıgrid Tedy v kazdem prubehu cyklu jsou vytvareny 2 nove vrstvy Jelikozautor neprisel na zpusob jine optimalizace je nastroj pomaly Pro zadanydataset s 58mi povodımi jeho cinnost probıha desıtky minut

33 Moznosti rozsırenı

Do skriptu by se dal zakomponovat export seznamu mapovych listu pro kazdepovodı V soucasne verzi je tvoren exportem atributove tabulky

2minimum bounding rectangle - minimalnı ohranicujıcı obdelnık

11

4 Zaver

Byly vytvoreny nastroje pro automatizaci tvorby Atlasu pro mapy eroznıhosmyvu a transportu splavenin Tvorba Atlasu probıha v nekolika krocıchVizualizovane prvku jsou generalizovany Dale je vytvoren Grid ktery jepouzit jako indexova vrstva pro funkci Data Driven Pages Tou jsou vy-tvoreny jednotlive mapove listy Pomocı dynamickych prvku je pak vytvorenvzhled ktery se menı se zmenou mapoveho listu Nedostatkem je rychlostnastroje pro tvorbu gridu Presto ze je nastroj pomaly je zcela funkcnı Vprıpade potreby dalsıho rozsırenı bude ale vhodne vysledky nacıtat do novehonastroje Vzorovy vytisk vysledneho atlasu je prilozen Vzhledem k tomu zezpracovavana data jsou rozsahla a podlehajı autorskemu zakonu je vytvorenjen vzorovy vytisk z 6ti povodı Nastroje jsou psany v jazyce Python 26 proArcGIS 100 Pri praci byla vyuzıvana predevsım online napoveda ArcGISa diskuznı programatorska fora Kompletnı zdrojovy kod je ke stazenı nastrankach predmetu PIN2

12

5 Prılohy

51 Vysledny log tvorby gridu

Executing Grid

JAtlasvzorektemp_selectpovodi_vzorekgdbpokusne_povodi

70000 25 30 JAtlasvzorektemp_selectpovodi_vzorekgdbgrid70

Start Time Wed May 15 020551 2013

Running script Script2

Output folder JAtlasvzorektemp_selectpovodi_vzorekgdb

_____________________________________________________________________

count of basin polygon to process 6

_____________________________________________________________________

RUN 1

count of basins in 1 section 3

Their ID

ID 1

ID 3

ID 6

_____________________________________________________________________

count of basin polygon to process 3

_____________________________________________________________________

RUN 2

count of basins in 2 section 1

Their ID

ID 2

_____________________________________________________________________

count of basin polygon to process 2

_____________________________________________________________________

RUN 3

count of basins in 3 section 2

Their ID

ID 4

ID 5

----- RESULT -----

Number of sections 3

Number of map sheets

in section 1 13

in section 2 1

in section 3 2

Completed script Grid

Succeeded at Wed May 15 021359 2013 (Elapsed Time 8 minutes 8 seconds

13

52 Vysledny log generalizace

Executing generalization JAtlasvzorek2011_NAZV_nadrze2011_watemsedem

NAZV_tokyVT28_finshp

JAtlasvzorek2011_NAZV_nadrze2011_watemsedem28_vypocet

projectriversedimentxlsxprojectriversediment$

Start Time Wed May 15 075624 2013

Running script generalization

Category created

Total count of river parts 2879

Count of category 1 2428

Count of category 2 118

Count of category 3 68

Count of category 4 20

Count of category 5 245

Completed script generalization

Succeeded at Wed May 15 075638 2013 (Elapsed Time 1400 seconds)

14

CESKE VYSOKE UCENI TECHNICKE V PRAZE

FAKULTA STAVEBNI

OBOR GEODEZIE A KARTOGRAFIE

Dokumentace k projektu informatika 2

Stanovenı smeru odtokuna rastrovem digitalnım modelu

a implementace algoritmudo prostredı ArcGIS

BC JAN ZAJICEK

5 cervna 2013

Obsah

Obsah 1

1 Uvod 2

2 Nejbeznejsı existujıcı algoritmy 3

3 Flow Direction D8 431 Obecny princip D8 432 Popis algoritmu D8 5

4 Popis algoritmu MDinfin 641 Obecny princip MDinfin 642 Technicke resenı MDinfin 8

5 Vysledky 1151 Realna data - Bykovice 1152 Realna data - Nucice 12

6 Zaver 13

Reference 14

7 Prılohy 1571 Bykovice a Nucice vstupnı DMT rastry 1572 Bykovice vysledky 1673 Nucice vysledky 17

1

1 Uvod

Tato dokumentace byla zpracovana v ramci predmetu Projekt Informatika 2Semestralnı prace bude pouzita jako z jedna castı autorovi diplomove praces nazvem SMODERP 2D rozsırenı resıcı vztahy soustredeneho a plosnehoodtoku na danem uzemı Duvodem zpracovanı tohoto tematu byla potrebapouzitı v diplomove praci vıce nez jednoho algoritmu pro urcenı smeruodtoku v prostredı ArcGIS V soucasne dobe ArcGIS vyuzıva algoritmusD8 viz kapitola 3 jako jediny algoritmus pro vypocet smeru odtoku Tentoalgoritmus je soucastı Hydrology tools Nastroje ze skupiny Hydrology sepouzıvajı k modelovanı chovanı toku vody na povrchu Nejbeznejsı pouzıvanadigitalnı data povrchu Zeme jsou rastry digitalnı modelu terenu DMT slozenez jednotlivych bunek pixelu Tyto DMT rastry jsou pouzity jako vstupypro ruzne charakteristiky povrchu DMT rastr je souvisly povrch obvykleodkazujıcı na povrch Zeme Presnost dat je dana rozlisenım rastru taktezvzdalenostı mezi body rastru Informace o tvaru zemskeho povrchu je uzitecnapro mnoho oboru jako je napr zemedelstvı lesnictvı zivotnı prostredı neboregionalnı planovanı Tyto obory vyzadujı pochopenı jak voda tece v ramciuzemı a jak zmeny na tomto uzemı nasledne ovlivnı jejı tok

Cılem projektu bylo naprogramovat algoritmus ktery v roce 2007 publiko-vali Jan Seibert a Brian L McGlynn s nazvem MDinfin [1] Tento algoritmusje vylepsenım stavajıcıch algoritmu pro resenı urcenı smeru odtoku na ras-tru viz kapitola 2 Pro overenı spravnosti vysledku byla pouzita realnadata dvou pozemku u obcı Bykovice a Nucice Testovanı probıhalo na ras-trech o rozlisenı 5 metru Algoritmus byl naprogramovan v jazyce Pythonv prostredı NetBeans IDE 69 Pro spustenı v ArcGISu je potreba pridatdo prostredı vytvoreny toolbox upravit aktualnı cestu ke skriptu mainpya tento model nasledne spustit Vstupem modelu je rastr DMT a vystupnıadresar do ktereho se po dobehnutı modelu ulozı vysledny rastr s hodnotamismeru odtoku 1255 Algoritmus MDinfin je testovan na verzi ArcGIS 100Na nejnovejsı verzi ArcGIS 101 ktera vysla v cervnu 2012 nenı overenakompatibilita algoritmu v dusledku nefunkcnosti vıce nez jedne verze tohotoprogramu na jednom pocıtaci

2

2 Nejbeznejsı existujıcı algoritmy

Existujı tri nejbeznejsı algoritmy kazdy odlisne resıcı problematiku odtokuvody z rastru do sousednıch bunek Prvnım z nich je algoritmus D8 z roku1984 Algoritmus je podrobne popsan v nasledujıcı kapitole 3 Jelikoz odtoknastava vzdy jen do jedne sousednı bunky dochazı casto ke koncentracivodnıch sıtı a sıtrsquo odtoku pak neodpovıda skutecnosti Na druhou stranuje jeho vyhodou jeho jednoduchost a fakt ze nedochazı k nechtene disperzijako je tomu u druheho algoritmu

Druhym algoritmem je MD8 neboli multiple flow direction algorithm MD8algoritmem je voda odvadena do vsech nıze polozenych sousednıch buneka pomer vody je rozdelen procentualne podle sklonu Ve vysledku ma algo-ritmus tendenci vytvaret vıce realisticke prostorove sıte toku nez D8 tımze nedochazı k takove koncentraci vody v sıti U D8 ma mnohem vetsıvliv maly rozdıl vysek mezi sousednımi bunkami na to ktera bunka prijmeveskerou vodu Pouzitım MD8 tyto male vyskove rozdıly nemajı zdalekatakovy vliv jelikoz je mnozstvı vody rozdeleno pomerem mezi tyto bunkyNejvetsı nevyhodou tohoto algoritmu je jeho prılisna disperze na konver-gentnıch svazıch v dusledku odtoku do vsech nıze polozenych bunek

V roce 1997 byl navrzen algoritmus pojmenovany Dinfin Davidem G Tar-botonem z americke univerzity v Utahu Byl navrzen prıstup ktery je zalozenna osmi trojuhelnıkovych ploskach viz obrazek 3 Dıky tomuto postupu jsouodstraneny limitace v podobe moznosti pouze osmi smeru odtoku z bunkyProto je algoritmus pojmenovan Dinfin jelikoz muze nastat nekonecne moznostıvysledneho smeru odtoku Tento prıstup umoznuje pouze jeden smer odtokurozdeleny mezi jednu nebo dve bunky v zavislosti na smeru odtoku

Poslednı dva zmınene algoritmy MD8 a Dinfinmajı oproti D8 nevyhodu ve vetsıcasove narocnosti vypoctu V kapitole 4 je popsan algoritmus MDinfin kteryvyuzıva vyhody MD8 algoritmu za pouzitı trojuhelnıkovych plosek obdobnejako Dinfin algoritmus

3

3 Flow Direction D8

Pro pochopenı problematiky a zjevnost rozdılu mezi algoritmy je vhodneuvest jak funguje nastroj ktery pouzıva ArcGIS Zaklad algoritmu MDinfino nemz pojednava tato dokumentace je zalozen na podobnych postupech

31 Obecny princip D8

Princip nastroje urcenı smeru odtoku (Flow Direction) ktery pouzıva prostredıArcGIS je nasledujıcı Tento nastroj (tool) vezme vstupnı rastr digitalnıhomodelu terenu neboli vyskovy rastr Provede vypocet jehoz vystupem jerastr ktery v kazde bunce rastru obsahuje hodnotu urcujıcı smer odtokuz teto bunky Hodnot je osm podle osmi sousednıch bunek do kterych muzeodtekat voda viz obrazek 1 Prave podle osmi smeru odtoku se tento prıstupnazyva D8 (eight-direction approach)

Obrazek 1 Flow Direction D8 [3]

4

32 Popis algoritmu D8

Samotny vypocet algoritmu je v zasade primitivnı Pro vsechny sousednıbunky se vypocte maximalnı sklon [3]

maximalnı sklon = rozdıl vysek vzdalenost 100

Rozdıl vysek je rozdıl vysky v aktualnım bode a konkretnı sousednı bunkyVzdalenost je vypoctena mezi stredy bunek a lisı se v zavislosti na polozesousednı bunky Pro bunky sousedıcı vrcholem je hodnota velikosti pixeluprenasobena o odmocninu ze dvou Pro zbyle bunky sousedıcı hranou jevelikost vzdalenosti rovna velikosti pixelu Po nalezenı nejstrmejsıho smeruodtoku je hodnota ulozena v podobe bitove hodnoty reprezentujıcı danysmer Pred pouzitım nastroje Flow Direction se obvykle zpracuje vstupnırastr pomocı nastroje Sink Tento algoritmus zaplnı bezodtoke oblasti rastrunejnizsı hodnotou z okolı a do teto nejnizsı sousednı bunky pak posle voduPote jiz nemuze dojıt k situaci kdy vsechny sousednı bunky k dane buncemajı vyssı hodnoty vysek a nedochazelo by tedy k odtokuVysledny rastr nemusı obsahovat pouze bunky s hodnotami 202127 [4]Jestlize nastane situace kdy ma vıce sousednıch bunek nejnizsı hodnotuvysek pak je vysledna hodnota souctem vsech smeru Napr hodnota maximalnıhosklonu bude stejna pro sousednı bunku vlevo a nahore odtok tedy budesmerem na zapad (hodnota = 16) a na sever (hodnota = 64) vysledna hod-nota bude souctem 16 a 64 tedy 84

5

4 Popis algoritmu MDinfin

41 Obecny princip MDinfinObecny postup je prevzat z [1] Stejne jako v prıpade algoritmu Dinfin bylyzavedeny trojuhelnıkove plosky pro vypocet lokalnıho sklonu a smeru pro kazdoutrojuhelnıkovou plosku Okolo stredoveho boduM bylo vytvoreno osm trojuhelnıkuviz obrazek 3 Kazdy se zbyvajıcımi dvema vrcholy P1 P2 ve dvou sousedıcıchbunkach Pro kazdy z techto trojuhelnıku je vypocten smer nejvetsıho sklonuPokud oznacıme vysky bodu M P1 P2 jako hM hP1 hP2 rozdıly vysek sevypoctou takto

z1 = hP1 minus hM z2 = hP2 minus hM (1)

Obdobne se vypoctou rozdıly v x-ovych a y-ovych souradnicıch Po vypocturozdılu jednotlivych souradnic je vypocten normalovy vektor

n =

nx

ny

nz

=

z1y2 minus z2y1z1x2 minus z2x1y1x2 minus y2x1

(2)

Smer odtoku d a sklon s na trojuhelnıkove plose se vypocte pomocı rovnice3 Hodnota nula pro d oznacuje smer osy y a hodnota 3π2 oznacuje smerosy x

d =

0 nx = 0 ny ge 0

π nx = 0 ny lt 0

π2minus arctan(

ny

nx

) nx gt 0

3π2minus arctan(

ny

nx

) nx lt 0

(3)

s = minus tan

(arccos

(nzradic

n2x + n2

y + n2z

))(4)

Jestlize nejvetsı sklon od bodu M je mimo rozpetı 0-45 (π4 radian) jepouzit sklon strmejsı k jednomu z bodu P1 P2 a zaroven i sklon je spoctenk tomuto bodu V prıpade ze oba sousednı body jsou vyse polozeny nez bodM smer nenı pro tento trojuhelnık uvazovan Po spoctenı vsech osmi smerua sklonu pro jednotlive plosky jsou tyto smery povazovany za lokalne ne-jstrmejsı pro kazdy trojuhelnık v rozsahu 45 Smery vedoucı prımo do bodu

6

P1 nebo P2 tedy ty kde d = 0 nebo d = π4 jsou uvazovany pouze vprıpade kdy obe vedlejsı sousednı bunky majı smer k bodu P1 nebo P2Tato situace je znazornena na obrazku 2

Obrazek 2 Ukazka urcenı smeru odtoku z bunky [1]

Prvnı prıpad je smer mırıcı mezi bunky 5 a 6 Druhy prıpad je smer kteryvede prımo do bunky 3 Tato situace nastane jestlize pro trojuhelnık M43vyjde lokalnı smer d = π4 a pro trojuhelnık M32 smer vyjde d = 0Pote co je smer odtoku pro bunku vypocten je celkovy odtok rozdelendo vsech vyslednych smeru na zaklade sklonu Resenı teto problematiky jevıce popsano v sekci 42 Pro smery mırıcı mezi body P1 a P2 je odtokrozdelen do dvou bunek na zaklade nevejtsıho sklonu Pomer odtoku do buneks body P1 a P2 bude v tomto poradı α245 a α145

Obrazek 3 Trojuhelnıkove plosky [1]

7

42 Technicke resenı MDinfinVyse jiz bylo zmıneno ze algoritmus je napsan v jazyce Python Algoritmusje rozdelen do dvou skriptu Prvnı z nich obsahuje funkce a druhy je hlavnıVstupem do modelu je rastr digitalnıho modelu terenu a vystupnı adresardo ktereho se ulozı finalnı rastr smeru odtoku viz obr 4 Po nactenı rastruze vstupnıch parametru je tento rastr preveden na matici NumPy pomocıfunkce

arcpy RasterToNumPyArray ( InputRaster )

NumPy [5] je rozsırenı programovacıho jazyka Python je to balıcek uzıvanypro vedecke vypocty Umoznuje podporu velkych multi-dimenzionalnıch polıa matic spolu s velkou knihovnou matematickych funkcı pro praci s temitopoli

Algoritmus cyklem projızdı vsechny prvky matice a u tech ktere majı hod-notu ruznou od NoData nalezne okolı Hledanı okolı bunky provadı funkceneighbors ta je definovana takto

def ne ighbors ( i j array x y ) return nb1 nb2 nb3 nb4 nb5 nb6 nb7 nb8

Vstupem funkce je pozice v matici dale cela matice a jejı rozmery Funkceneighbors vypocıta hodnoty vysek sousednıch osmi bunek a vratı je na vystup

Obrazek 4 Dialogove okno nastroje MDinfin

Vystup z funkce neighbors slouzı jako jeden z vstupnıch parametru pro dalsıfunkci

8

Funkce byla pojmenovana dir slope jelikoz jejım vystupem je smer odtokua sklon tohoto smeru

def d i r s l o p e ( pointM nbrs vpix sp ix ) return d i r e c t i o n s l ope

Pro kazdy trojuhelnık byla spoctena hodnota d viz vzorec 3 Hodnota s bylapo spatnych a nelogickych vysledcıch pocıtana podle jineho vzorce ktery jizdaval spravne vysledky

s0 =

radicz212y21

+z22y22

(5)

Vzorec se lisı pro kazdy trojuhelnıcek uvedeny je pro vypocet sklonu kdy sousednıbunka je severozapadnı a severnı Tımto postupem bylo zbytecne pocıtatz-tovou slozku vekotoru n vzorec 2 Byly osetreny prıpady kdy sousednıbunky aktualnıho pocıtaneho trojuhelnıku jsou obe vyse polozene nebo obemimo rastr (NoData) Dalsı prıpad nastane jestlize je jeden bod vne rastra druhy v rastru lezı Smer je potom urcen prımo do toho bodu ktery nalezırastru Taktez i sklon je pocıtan pouze mezi tımto bodem a bodem M Lokalnı smer d v kazde plosce po vypoctenı nesmı prekrocit 45 V situacize tuto hodnotu prekrocı je smeru prirazena hodnota 0 nebo 45 v zavislostina vzajemnem porovnanı vysek bodu v trojuhelnıku Takto jsou zpracovanyvsechny plosky a je zjisteno zda-li do kazdeho trojuhelnıku nastava smerodtoku nebo ne Na konci funkce dir slope se kontroluje prıpad kdy smersousednıch trojuhelnıku odkazuje presne do stejneho bodu tedy hodnotysmeru musı byt pro prvnı trojuhelnık d = 45 a pro nasledujıcı sousednıtrojuhelnık d = 0 Vystupem funkce jsou dva vektory o osmi prvcıch smera sklon pro kazdou plosku

Dalsı fazı vypoctu je zjistenı pomeru vody ktera potece do jednotlivychsmeru K vypoctu pomeru byl pouzit tento vzorec [2]

fi =sxi8sum

j=1

sxj

(6)

kde s vyznacuje sklon vypocteneho smeru konkretnı trojuhelnıkove ploskya x je promenny exponent Pokud by byl exponent zvolen 1 bude vyslednasıtrsquo obdobna jako pri pouzitı MD8 algoritmu Pri zvetsovanı exponentu xk nekonecnu bude sıtrsquo stejna jako pri pouzitı D8 metody Vychozı hodnotaexponentu byla zvolena x = 4 coz je kompromis mezi obema variantami

9

Zmena exponentu se v soucasne podobe neprojevı na vyslednem rastru je-likoz vysledek prezentuje pouze smer odtoku a ne procentualnı cast Tohotopomeru bude vyuzito az pri spojenı skriptu s 2D modelem SMODERP

V dalsı casti vypoctu je rozdelen jiz zjisteny pomer z celkoveho odtokudo dvou prıpadne pouze do jedne bunky v zavislosti na smeru odtoku dVe vysledku je vypocten vektor osmi cısel kde kazda hodnota od 0 do 1prestavuje jiz procentualnı pomer z celkoveho odtoku do kazde sousednıbunky

Pro vyslednou reprezentaci smeru odtoku na vystup byl pro kazdou bunkuvytvoren vektor obsahujıcı 1 a 0 rıkajıcı zda nastava ci nenastava odtokdo sousednı bunky Tento vektor byl preveden na celocıselnou hodnotu po-mocı funkce bool2int

def boo l 2 i n t ( x ) y = 0for i j in enumerate ( x )

i f j y += 1ltlt ireturn y

Funkce ma na vstupu vektor jedicek a nul Naprıklad pro vektor 00000111kdy voda tece na severozapad sever a severovychod se funkce chova taktoJe testovano jestli platı j = 1 tedy prvnıch pet nul vektoru funkce preskocıa pro prvnı jednicku se pricte k promenne y 20 v dalsım kroku 21 a v poslednım22 Operator vyjadruje totiz bitovy posun smerem doleva Vysledkem jena vystupu cıslo y = 1 + 2 + 4 = 7

Pro vsechny bunky byla vypoctena hodnota reprezentujıcı smer odtoku Tatohodnota se ulozı do matice a ta se nasledne prevede na vysledny rastr

f l o w d i r = arcpy NumPyArrayToRaster ( value LLcorner spix vpix rdquordquo )

value hodnota reprezentujıcı smer odtokuLLcorner souradnice leveho dolnıho rohuspix sırka pixeluvpix vyska pixelu

10

5 Vysledky

Algoritmus MDinfin byl testovan na skutecnych datech dvou pozemku u obcıNucice ve Stredoceskem kraji a Bykovice v kraji Jihomoravskem rastry jsouv prıloze 71 Oba dva rastry jsou o rozlisenı 5 metru Finalnı rastry jsouporovnavany s rastry vytvorenymi v prostredı ArcGIS nastrojem Flow Di-rection metodou D8

51 Realna data - Bykovice

Vysledne rastry Flow Direction pro uzemı Bykovice jsou uvedeny v prıloze72 Oba rastry byly pro hodnoty 202127 obarveny shodnou barvou kvulilepsı nazornosti a porovnatelnosti vysledku Rastr ktery obsahuje z celkovehopoctu 44807 bunek celkem 23655 bunek s hodnotami vysek po probehnutıalgoritmy dal nasledujıcı vysledky

FD D8 MDinfin1 3650 7372 666 9174 207 188 21 716 94 3732 791 8564 8818 1045128 9408 14983sum

23655 14983

Tabulka 1 Tabulka porovnanı obou algoritmu pro rastr Bykovic

FD je zkratka pro Flow Direction cili smer odtoku reprezentovany celocıselnouhodnotou Ostatnı hodnoty u vysledneho rastru na ktery byl pouzit algorit-mus MDinfin jsou v rozpetı 0246 V rozmezı hodnot smeru odtoku 246255se nevyskytujı zadne bunky Cas potrebny pro vykonanı skriptu byl v prıpadeD8 4 vteriny Pro algoritmus MDinfin byl cas 15 vterin

11

52 Realna data - Nucice

Vysledne rastry jsou uvedeny v prıloze 73 Opet bylo pouzito shodne obar-venı pro zakladnı smery u obou rastru Rastr Nucice obsahoval data na 82732bunkach z celkove poctu 125449 bunek Vysledky jsou pro prehlednost uve-deny v tabulce

FD D8 MDinfin1 12186 12332 12441 87034 16907 10278 9826 1642316 2516 28832 5010 241764 7788 366128 16058 25475sum

82732 55932

Tabulka 2 Tabulka porovnanı obou algoritmu pro rastr Nucic

Ostatnı hodnoty u vysledneho rastru na ktery byl pouzit algoritmusMDinfin jsou v rozpetı 0255 Cas potrebny pro vykonanı skriptu byl v prıpadeD8 6 vterin Pro algoritmus MDinfin byl cas 50 vterin

12

6 Zaver

Cılem projektu bylo vytvorit funkcnı skript obsahujıcı algoritmus pojmen-ovany MDinfin [1] ktery resı odtok do sousednıch bunek rastru Algoritmusbyl napsan v programovacım jazyce Python a testovan na realnych datechVysledky byly mırnym prekvapenım kdy zejmena hodnoty smeru 128 tedyseverovychodnıho se vyskytovaly ve vysledku velmi casto viz tabulky 1 a 2Predpokladem bylo ze se odtok rozlozı do vıce smeru a pocet bunek s hod-notami zakladnıch smeru 1248163264 a 128 bude mene nez v prıpade al-goritmu D8 K rozkladu do vıce smeru sice doslo ale pocet nekterych bunekse zakladnımi smery byl vetsı u algoritmu MDinfin

Co se tyce delky doby behu algoritmu je algoritmus MDinfin pomalejsı viz casyv kapitole 5 nez D8 z nekolika zrejmych duvodu Predevsım algoritmus D8provadı mnohem mene pocetnıch operacı z duvodu jeho mensı slozitostiviz 3 Dalsım duvodem je take rozdıl v jazyce ve kterem jsou oba algo-ritmy napsany D8 je napsan v programovacım jazyce C++ ktery na vetsıchdatech je mnohonasobne rychlejsı nez Python Prepsanım algoritmu MDinfindo jazyka C++ by mohla byt cesta k budoucımu zvysenı rychlosti pracealgoritmu

13

Reference

[1] SEIBERT Jan McGlynn BL A new triangular multiple flow di-rection algortihm for computing upslope areas from gridded digi-tal elevation models [online] [cit 13 5 2013] Dostupne ke stazenız URL lthttpciteseerxistpsueduviewdocdownloaddoi=101179977amprep=rep1amptype=pdfgt

[2] HOLMGREN Peter Multiple direction algortihms for runoff modellingin grid based elevation models An empirical evaluation [online] [cit13 5 2013] Dostupny z URL ltftpwwwlwrkthseCommonUllaMFor_Imran[1994]20holmgren20-20multiple20flow

20direction20algorithms20for20runoff20modelling20in

20grid20based20elevation20modelspdf gt

[3] ESRI ESRI WebHelp - How Flow Direction works [online] [cit13 5 2013] Dostupne z URL lthttphelparcgiscomenarcgisdesktop100helpindexhtml009z00000063000000

htmgt

[4] ESRI ESRI Webhelp - Flow Direction (Spatial Analyst) [online][cit 13 5 2013] Dostupne z URL lthttphelparcgiscomenarcgisdesktop100helpindexhtml009z00000052000000

htmgt

[5] WIKIPEDIA NumPy [online] [cit 13 5 2013] Dostupne z URLlthttpenwikipediaorgwikiNumPygt

[6] INFORMIT Working with operators [online] [cit 13 5 2013] Dos-tupne z URL lthttpwwwinformitcomarticlesarticleaspxp=2002831ampseqNum=6gt

14

7 Prılohy

71 Bykovice a Nucice vstupnı DMT rastry

Obrazek 5 DMT Bykovice

Obrazek 6 DMT Nucice

15

72 Bykovice vysledky

Obrazek 7 Flow Direction D8

Obrazek 8 Flow Direction MDinfin

16

73 Nucice vysledky

Obrazek 9 Flow Direction D8

Obrazek 10 Flow Direction MDinfin

17

Page 13: pro zac ate cn kygeo.fsv.cvut.cz/gdata/2013/pin2/e/dokumentace/... · 2013-06-05 · CESK E VYSOK E U CEN I TECHNICKE V PRAZE FAKULTA STAVEBN I OBOR GEODEZIE A KARTOGRAFIE Dokumentace

CESKE VYSOKE UCENI TECHNICKE V PRAZE

FAKULTA STAVEBNI

OBOR GEODEZIE A KARTOGRAFIE

Dokumentace k projektu informatika 2

Automatizace sestavenı Atlasueroznıho smyvu a transportu

splavenin ve velkych povodıch

MICHAL BECICKA

15 kvetna 2013

Obsah

1 Uvod 211 O tematu 212 Strucny souhrn 2

2 Popis pracı 321 Nastroj pro tvorbu gridu 3

211 Uvodnı dialog 4212 Vysledny log 5213 Vysledne vrstvy 5214 Cinnost nastroje podrobne 6

22 Generalizace 9221 Uvodnı dialog 9222 Vysledny log 10

23 Finalnı upravy a export 10

3 Problemy a moznosti rozsırenı 1031 Pripojovanı externıch tabulek 1032 Doba behu tvorby gridu 1133 Moznosti rozsırenı 11

4 Zaver 12

5 Prılohy 1351 Vysledny log tvorby gridu 1352 Vysledny log generalizace 14

1

1 Uvod

11 O tematu

Tema bylo urceno doc Krasou z katedry Hydromelioracı a krajinneho inzenyrstvıpro prezentovanı vysledku vypoctu eroznıho smyvu a transportu splaveninPresto ze je nastroj primarne urcen pro toto pouzitı byla snaha jej napsatco nejuniverzalnejiCılem projektu je vytvorit atlas sestaveny z jednotlivych tematickych mapTyto mapy jsou vytvoreny pro cca tretinu uzemı Ceske Republiky V potrebnemmerıtku (cca 150 000) je nemozne vytvaret spojene tematicke mapy Bylotedy nutne nejprve vyhodnotit jak nejlepe vysledky prezentovat pote vy-tvorit nastroj ktery mapy podle pozadavku upravı (generalizuje vizualizo-vane prvky) vygeneruje jednotlive mapove listy a jejich prehledku Dalevygeneruje seznam mapovych listu pro jednotliva povodı a dalsı potrebneudajeNastroj je psan v jazyce Python pro ArcGIS 100

12 Strucny souhrn

Prace se sklada z nekolika castı

1 Vytvorenı gridu - Tato cast je nejrozsahlejsı Jedna se o skript kterypro dana povodı vytvorı rozsah mapovych listu (tzv index grid layer)a do atributovych tabulek ulozı potrebne hodnoty viz dale

2 Generalizace obsahu mapy - Generalizace nakonec probehla velmijednoduse a to kategorizacı hodnot kumulovaneho smyvu

3 Uprava vzhledu a export - Tato cast byla provadena manualne varcgis layout view Po vytvorenı kyzeneho vzhledu pote probehlo ge-nerovanı jednotlivych mapovych listu pomocı toolbaru Data DrivenPages

2

2 Popis pracı

21 Nastroj pro tvorbu gridu

Tento nastroj vytvorı polygonovou vrstvu obsahujıcı grid a to podle zadanehomerıtka a velikosti mapoveho pole Do atributove tabulky gridu vlozı sloupecs nazvy mapovych listu a sloupec s cısly sekcı (bude vysvetleno dale) Zarovenprida do vstupnı polygonove vrstvy sloupec s cısly sekcı a sloupec s nazvymapovych listu na kterych se dany polygon (povodı) nachazı Dale vytvorıvrstvu nazev gridu dissolve pro prehledku sekcı

Pojem sekce Sekce je tvorena vsemi dotykajıcımi se polygony Mapovelisty jsou ke kazde sekci tvoreny zvlastrsquo a jejich nazvy jsou pote rozsıreny ocıslo sekce Prıklad cıslovanı mapovych listu 1-A1 1-A2 2-A1 2-A2

Obrazek 1 Vstupnı polygonova vrstva

3

Obrazek 2 Ocıslovane sekce polygonove vrstvy

211 Uvodnı dialog

Uvodnı dialog nastroje obsahuje pole pro 5 parametru

bull In - vstupnı parametr datovy typ Feature classVstupnı vrstva polygonu

bull Scale - vstupnı parametr datovy typ LongPozadovane merıtko

bull Map field width - vstupnı parametr s nastavenou defaultnı hodnotou25 datovy typ DoubleSırka vysledneho mapoveho ramce v cm

bull Map field height - vstupnı parametr s nastavenou defaultnı hodnotou30 datovy typ DoubleVyska vysledneho mapoveho ramce v cm

bull Out - vystupnı parametr datovy typ Feature classVystupnı vrstva gridu

4

Obrazek 3 Grid - Uvodnı dialog

212 Vysledny log

Kompletnı prıklad vysledneho logu je k nalezenı v prıloze 51Obsahuje tyto informace

bull Umıstenı pouzıvane databaze na disku

bull Dale v kazdem cyklu

ndash Poradove cıslo cyklu

ndash Aktualnı pocet nezpracovanych polygonu

ndash Cıslo vytvarene sekce

ndash Identifikatory polygonu tvorıcıch danou sekci

bull Pocet sekcı

bull Pocet mapovych listu v kazde sekci

213 Vysledne vrstvy

Vysledny grid pro merıtko 1 80 000 a defaultnı velikost mapoveho pole (25x 30 cm) vypada nasledovne

5

Obrazek 4 Grid - Vysledna vrstva

214 Cinnost nastroje podrobne

1 Prıpravne cinnostiV prvnıch radcıch kodu jsou vytvoreny pomocne promenne a pole znichz pro dalsı cinnost je potreba zmınit zasobnık IDs Ten je naplnenidentifikatory povodıPokud jiz neexistujı jsou ve vstupnı polygonove vrstve vytvoreny atri-butove sloupce hard ID section MapSheets

bull hard ID - Do tohoto sloupce byly zkopırovany identifikatory abyi po rozdelenı do nekolika vrstev mely polygony jednoznacny iden-tifikator

bull section - Po vypoctu sekcı sem bude pro kazdy polygon zapsanocıslo sekce ve ktere se nachazı

bull MapSheets - Atribut se seznamem mapovych listu na kterych sedane povodı nachazı

Ukazka tvorby atributoveho sloupce

fieldList = arcpyListFields(inFeatureClass rsquoMapSheetsrsquo)

6

fieldCount = len(fieldList)

if (fieldCount = 1)

arcpyAddField_management(inFeatureClass rsquoMapSheetsrsquo rsquoTEXTrsquo)

2 Hlavnı vypocetnı cast

Hlavnı cast je cela v cyklu while (len(IDs) gt 0) tj cyklus probıhadokud jsou v zasobnıku IDs hodnoty Na konci cyklu jsou vzdy identi-fikatory zpracovanych povodı ze zasobnıku mazany V kazdem prubehucyklu jsou selektovany povodı tvorıcı 1 sekci k takove sekci je potevytvoren grid a jsou plneny nove atributove sloupce

Ukazka hlavnıho cyklu

while len(IDs) gt 0

oznacenı povodı i-te sekce

rows_sel = arcpySearchCursor(rsquopovodi_classrsquo)

for row_sel in rows_sel

IDsremove(row_selOBJECTID)

V kazdem prubehu cyklu je zpracovana 1 sekce - tj shluk povodı kteremajı spolecnou cast hranice Sekce je tvorena na zaklade dotazu Se-lectByLocation s definicı BOUNDARY TOUCHES Dotaz se opakujev cyklu dokud se pocet oznacenych povodı zvetsuje K tomu slouzıpromenne matchcount1 matchcount2 ktere obsahujı pocet oznacenychpolygonu

Vytvorenı sekce

bull Oznacenı prvnıho nezpracovaneho polygonu

first_ID = str(IDs[0])

fieldName = OBJECTID

Query = + fieldName + = + first_ID

arcpySelectLayerByAttribute_management(rsquopovodi_classrsquo rsquoNEW_SELECTIONrsquo Query)

matchcount1 = int(arcpyGetCount_management(rsquopovodi_classrsquo)getOutput(0))

bull Prvnı prubeh SelectByLocation

7

arcpySelectLayerByLocation_management(rsquopovodi_classrsquo rsquoBOUNDARY_TOUCHESrsquo

rsquopovodi_classrsquo)

matchcount2 = int(arcpyGetCount_management(rsquopovodi_classrsquo)getOutput(0))

bull Dalsı prubehy SelectByLocation

while matchcount1 lt matchcount2

matchcount1 = matchcount2

arcpySelectLayerByLocation_management(rsquopovodi_classrsquo rsquoBOUNDARY_TOUCHESrsquo

rsquopovodi_classrsquo)

matchcount2 = int(arcpyGetCount_management(rsquopovodi_classrsquo)getOutput(0))

Oznacene polygony jsou ulozeny jako polygonova vrstva do vstupnı ge-odatabaze Tato vrstva je dale pouzita pro tvorbu gridu

Vytvorenı gridu

Pred samotnou tvorbou bylo potreba zjistit rozsah sekce Pokud bylasekce mensı nez 1 mapovy list bylo treba definovat souradnice polohylistu tak aby povodı lezelo na stredu listu Do zasobnıku byly nactenysouradnice lomovych bodu povodı a byly z nich vybrany maximalnı aminimalnı hodnoty Jejich rozdıl pak urcil rozsah sekce

Prıklad plnenı zasobnıku souradnicema

desc = arcpyDescribe(outputFeatureClassPath+rsquorsquo+output_name)

shape_field_name = descShapeFieldName

rows3 = arcpySearchCursor(outputFeatureClassPath+rsquorsquo+output_name)

mbr_X=[]

mbr_Y=[]

for row3 in rows3

Create the geometry object

feat = row3getValue(shape_field_name)

partnum = 0

for pnt in featgetPart(partnum)

mbr_Xappend(pntX)

mbr_Yappend(pntY)

partnum += 1

8

Vytvorenı gridu pote probıha budrsquo s definovanou nebo s nedefinovanoupolohou pocatecnıho mapoveho listu Pro vytvorenı gridu je pouzitafunkce GridIndexFeatures cartography

Ukazka

arcpyGridIndexFeatures_cartography(outputFeatureClassPath+rsquorsquo+grid_name

outputFeatureClassPath+rsquorsquo+output_name USEPAGEUNIT scale_str

sheet_width_str sheet_high_str str(grid_start_pnt_X)+rsquo rsquo+str(grid_start_pnt_Y))

Grid je tedy vytvoren pro jednu sekci Po vsech prubezıch cyklu jsoutakto vytvorene vrstvy gridu spojeny do jedne finalnı vrstvy V cyklujsou dale plneny nove atributove sloupce - cısla sekcı a nazvy mapovychlistu a to jak do nove (vystupnı) vrstvy gridu tak do vstupnı vrstvypovodı

3 Vytvorenı finalnıch vrstev tisk vysledku Jak bylo receno na zaverjsou spojeny jednotlive vrstvy gridu Vedle toho je vytvorena vrstvaspojenych mapovych listu po sekcıch - funkcı Dissolve - pro tvorbuprehledky Jsou vytisknuty vysledne hodnoty viz 212

22 Generalizace

Pro generalizaci byl napsan skript ktery nacıta liniovou vrstvu toku Tentoskript byl jiz psan na mıru podkladovym datum a pri nacıtanı je v nemvyuzito znalosti struktury danych podkladovych dat Skript k vrstve pripojıexternı tabulku a vytvorı atributovy sloupec kategorie Podle dat z externıtabulky pak plnı novy sloupec hodnotami 1 - 5 podle mnozstvı unasenehosedimentu Tato hodnota je pak pouzita pri vizualizaci datZajımavostı je ze pro nacıtanı musela byt tabulka indexovana viz 31

221 Uvodnı dialog

Uvodnı dialog obsahuje dva parametry

bull Input Feature Class Vstupnı liniova vrstva rıcnıch useku

bull Table Vstupnı tabulka obsahujıcı hodnoty rıcnıch splavnenin

9

222 Vysledny log

Vysledny log je k nahlednutı v prıloze 52 Obsahuje tyto informace

bull Pocet vsech rıcnıch useku

bull Pocet useku v jednotlivych kategoriıch

23 Finalnı upravy a export

Jak jiz bylo zmıneno finalnı vzhled mapoveho listu byl vytvoren manualne vLayout view a pomocı toolbaru Data Driven Pages Tento postup je casoveekonomictejsı a je jım dosazeno lepsıch vysledku dıky prehlednosti ToolbarData Driven Pages pak umoznuje vkladat dynamicke textove pole ktere seautomaticky menı s menıcım se mapovym listem Takovym polem je naprnazev mapoveho listu Stacı tedy definovat vzhled jednoho mapoveho listuv toolbaru Data Driven Pages navolit prıslusne pole - ty byly vytvorenynastrojem Grid viz 21 Dynamicky bylo potreba propojit s mapovym oknemi prehledku ktera byla vytvorena jako druhy Data Frame To se provedlo defi-novanım rozsahu podle hlavnıho mapoveho okna v Properties -iquest Data Frame-iquest Extant a definovanım Definition Query ve vlastnostech vrstvy Dalsım dy-namickym prvkem jsou oznacenı sousednıch mapovych listu a cıslo strankyNa takto sestavenou stranku s dynamickymi prvky bylo mozne pouzıt exportmapy do pdf a Atlas byl vygenerovanPrıklad dynamickeho textu pro nazev mapoveho listultdyn type=page property=PageNamegt

3 Problemy a moznosti rozsırenı

31 Pripojovanı externıch tabulek

Pri pripjovanı externıch tabulek musely byt indexovany hodnoty atribu-toveho sloupce pouziteho k parovanı To probehlo prıkazemarcpyAddIndex management (layer HydroID)Pripojenı tabulky musı probıhat k Feature layer Proto bylo nutne nejprve zFeature Class vytvorit Feature Layer1 Pote mohla byt tabulka pripojena

arcpyAddIndex_management (layer HydroID)

arcpyAddJoin_management(layer HydroID table Riverid)

1Rozdıl mezi Feature Layer a Feature Class je vysvetlen v prilozenem Tutorialu pro-gramovanı v Pythonu pro ArcGIS

10

Zde nastal problem s prıstupem k atributum Obecne nesmı nazvy atri-butovych sloupcu obsahovat mezery K hodnotam je pristupovano pres jed-notlive radky s parametrem nazev sloupce

rows= arcpySearchCursor(layer)

for row in rows

value=rownazev_sloupce

Pripojena tabulka ovsem mela v nazvech sloupcu mezeru K takto pojmeno-vanemu sloupci muselo byt pristupovano prıkazem getValue

rows= arcpySearchCursor(layer)

for row in rows

value=rowgetValue(rsquonazev tabulky$nazev sloupcersquo)

32 Doba behu tvorby gridu

Doba behu nastroje pro tvorbu gridu je znepokolive dlouha Bylo prove-deno merenı casu behu jednotlivych castı kodu funkcı time z modulu timeVysledky ukazaly ze nejdele trva vytvarenı novych vrstev Vrstva se muzevytvaret az 20 sekund Snaha o optimalizaci donutila nahradit vytvarenı vrs-tev s minimalnım ohranicujıcım obdelnıkem sekvencnım ukladanım souradniclomovych bodu polygonu z nichz pak funkcemi min a max byly tyto hodnotyzıskany Prubeh se tak urychlil o desıtky sekund (v jednom prubehu cyklupriblizne o 15 sekund) Dalsı moznostı bylo vyuzıt prostoroveho indexu datTato moznost nebyla vyuzita protoze ArcGIS pouzıva k prostorovemu in-dexovanı pravidelny grid Zıskanı MBR2 nebylo nalezeno Vyuzitı indexu byovsem problem neresilo Jak jiz bylo zmıneno nejdele trva vytvarenı novychvrstev Bohuzel funkce GridIndexFeatures cartography pro vytvorenı griduneumı pracovat se selektovanymi daty Tedy v kazdem cyklu musı byt ulozenapolygonova vrstva tvorıcı 1 sekci Pote mohla byt vytvorena vrstva tvorıcıgrid Tedy v kazdem prubehu cyklu jsou vytvareny 2 nove vrstvy Jelikozautor neprisel na zpusob jine optimalizace je nastroj pomaly Pro zadanydataset s 58mi povodımi jeho cinnost probıha desıtky minut

33 Moznosti rozsırenı

Do skriptu by se dal zakomponovat export seznamu mapovych listu pro kazdepovodı V soucasne verzi je tvoren exportem atributove tabulky

2minimum bounding rectangle - minimalnı ohranicujıcı obdelnık

11

4 Zaver

Byly vytvoreny nastroje pro automatizaci tvorby Atlasu pro mapy eroznıhosmyvu a transportu splavenin Tvorba Atlasu probıha v nekolika krocıchVizualizovane prvku jsou generalizovany Dale je vytvoren Grid ktery jepouzit jako indexova vrstva pro funkci Data Driven Pages Tou jsou vy-tvoreny jednotlive mapove listy Pomocı dynamickych prvku je pak vytvorenvzhled ktery se menı se zmenou mapoveho listu Nedostatkem je rychlostnastroje pro tvorbu gridu Presto ze je nastroj pomaly je zcela funkcnı Vprıpade potreby dalsıho rozsırenı bude ale vhodne vysledky nacıtat do novehonastroje Vzorovy vytisk vysledneho atlasu je prilozen Vzhledem k tomu zezpracovavana data jsou rozsahla a podlehajı autorskemu zakonu je vytvorenjen vzorovy vytisk z 6ti povodı Nastroje jsou psany v jazyce Python 26 proArcGIS 100 Pri praci byla vyuzıvana predevsım online napoveda ArcGISa diskuznı programatorska fora Kompletnı zdrojovy kod je ke stazenı nastrankach predmetu PIN2

12

5 Prılohy

51 Vysledny log tvorby gridu

Executing Grid

JAtlasvzorektemp_selectpovodi_vzorekgdbpokusne_povodi

70000 25 30 JAtlasvzorektemp_selectpovodi_vzorekgdbgrid70

Start Time Wed May 15 020551 2013

Running script Script2

Output folder JAtlasvzorektemp_selectpovodi_vzorekgdb

_____________________________________________________________________

count of basin polygon to process 6

_____________________________________________________________________

RUN 1

count of basins in 1 section 3

Their ID

ID 1

ID 3

ID 6

_____________________________________________________________________

count of basin polygon to process 3

_____________________________________________________________________

RUN 2

count of basins in 2 section 1

Their ID

ID 2

_____________________________________________________________________

count of basin polygon to process 2

_____________________________________________________________________

RUN 3

count of basins in 3 section 2

Their ID

ID 4

ID 5

----- RESULT -----

Number of sections 3

Number of map sheets

in section 1 13

in section 2 1

in section 3 2

Completed script Grid

Succeeded at Wed May 15 021359 2013 (Elapsed Time 8 minutes 8 seconds

13

52 Vysledny log generalizace

Executing generalization JAtlasvzorek2011_NAZV_nadrze2011_watemsedem

NAZV_tokyVT28_finshp

JAtlasvzorek2011_NAZV_nadrze2011_watemsedem28_vypocet

projectriversedimentxlsxprojectriversediment$

Start Time Wed May 15 075624 2013

Running script generalization

Category created

Total count of river parts 2879

Count of category 1 2428

Count of category 2 118

Count of category 3 68

Count of category 4 20

Count of category 5 245

Completed script generalization

Succeeded at Wed May 15 075638 2013 (Elapsed Time 1400 seconds)

14

CESKE VYSOKE UCENI TECHNICKE V PRAZE

FAKULTA STAVEBNI

OBOR GEODEZIE A KARTOGRAFIE

Dokumentace k projektu informatika 2

Stanovenı smeru odtokuna rastrovem digitalnım modelu

a implementace algoritmudo prostredı ArcGIS

BC JAN ZAJICEK

5 cervna 2013

Obsah

Obsah 1

1 Uvod 2

2 Nejbeznejsı existujıcı algoritmy 3

3 Flow Direction D8 431 Obecny princip D8 432 Popis algoritmu D8 5

4 Popis algoritmu MDinfin 641 Obecny princip MDinfin 642 Technicke resenı MDinfin 8

5 Vysledky 1151 Realna data - Bykovice 1152 Realna data - Nucice 12

6 Zaver 13

Reference 14

7 Prılohy 1571 Bykovice a Nucice vstupnı DMT rastry 1572 Bykovice vysledky 1673 Nucice vysledky 17

1

1 Uvod

Tato dokumentace byla zpracovana v ramci predmetu Projekt Informatika 2Semestralnı prace bude pouzita jako z jedna castı autorovi diplomove praces nazvem SMODERP 2D rozsırenı resıcı vztahy soustredeneho a plosnehoodtoku na danem uzemı Duvodem zpracovanı tohoto tematu byla potrebapouzitı v diplomove praci vıce nez jednoho algoritmu pro urcenı smeruodtoku v prostredı ArcGIS V soucasne dobe ArcGIS vyuzıva algoritmusD8 viz kapitola 3 jako jediny algoritmus pro vypocet smeru odtoku Tentoalgoritmus je soucastı Hydrology tools Nastroje ze skupiny Hydrology sepouzıvajı k modelovanı chovanı toku vody na povrchu Nejbeznejsı pouzıvanadigitalnı data povrchu Zeme jsou rastry digitalnı modelu terenu DMT slozenez jednotlivych bunek pixelu Tyto DMT rastry jsou pouzity jako vstupypro ruzne charakteristiky povrchu DMT rastr je souvisly povrch obvykleodkazujıcı na povrch Zeme Presnost dat je dana rozlisenım rastru taktezvzdalenostı mezi body rastru Informace o tvaru zemskeho povrchu je uzitecnapro mnoho oboru jako je napr zemedelstvı lesnictvı zivotnı prostredı neboregionalnı planovanı Tyto obory vyzadujı pochopenı jak voda tece v ramciuzemı a jak zmeny na tomto uzemı nasledne ovlivnı jejı tok

Cılem projektu bylo naprogramovat algoritmus ktery v roce 2007 publiko-vali Jan Seibert a Brian L McGlynn s nazvem MDinfin [1] Tento algoritmusje vylepsenım stavajıcıch algoritmu pro resenı urcenı smeru odtoku na ras-tru viz kapitola 2 Pro overenı spravnosti vysledku byla pouzita realnadata dvou pozemku u obcı Bykovice a Nucice Testovanı probıhalo na ras-trech o rozlisenı 5 metru Algoritmus byl naprogramovan v jazyce Pythonv prostredı NetBeans IDE 69 Pro spustenı v ArcGISu je potreba pridatdo prostredı vytvoreny toolbox upravit aktualnı cestu ke skriptu mainpya tento model nasledne spustit Vstupem modelu je rastr DMT a vystupnıadresar do ktereho se po dobehnutı modelu ulozı vysledny rastr s hodnotamismeru odtoku 1255 Algoritmus MDinfin je testovan na verzi ArcGIS 100Na nejnovejsı verzi ArcGIS 101 ktera vysla v cervnu 2012 nenı overenakompatibilita algoritmu v dusledku nefunkcnosti vıce nez jedne verze tohotoprogramu na jednom pocıtaci

2

2 Nejbeznejsı existujıcı algoritmy

Existujı tri nejbeznejsı algoritmy kazdy odlisne resıcı problematiku odtokuvody z rastru do sousednıch bunek Prvnım z nich je algoritmus D8 z roku1984 Algoritmus je podrobne popsan v nasledujıcı kapitole 3 Jelikoz odtoknastava vzdy jen do jedne sousednı bunky dochazı casto ke koncentracivodnıch sıtı a sıtrsquo odtoku pak neodpovıda skutecnosti Na druhou stranuje jeho vyhodou jeho jednoduchost a fakt ze nedochazı k nechtene disperzijako je tomu u druheho algoritmu

Druhym algoritmem je MD8 neboli multiple flow direction algorithm MD8algoritmem je voda odvadena do vsech nıze polozenych sousednıch buneka pomer vody je rozdelen procentualne podle sklonu Ve vysledku ma algo-ritmus tendenci vytvaret vıce realisticke prostorove sıte toku nez D8 tımze nedochazı k takove koncentraci vody v sıti U D8 ma mnohem vetsıvliv maly rozdıl vysek mezi sousednımi bunkami na to ktera bunka prijmeveskerou vodu Pouzitım MD8 tyto male vyskove rozdıly nemajı zdalekatakovy vliv jelikoz je mnozstvı vody rozdeleno pomerem mezi tyto bunkyNejvetsı nevyhodou tohoto algoritmu je jeho prılisna disperze na konver-gentnıch svazıch v dusledku odtoku do vsech nıze polozenych bunek

V roce 1997 byl navrzen algoritmus pojmenovany Dinfin Davidem G Tar-botonem z americke univerzity v Utahu Byl navrzen prıstup ktery je zalozenna osmi trojuhelnıkovych ploskach viz obrazek 3 Dıky tomuto postupu jsouodstraneny limitace v podobe moznosti pouze osmi smeru odtoku z bunkyProto je algoritmus pojmenovan Dinfin jelikoz muze nastat nekonecne moznostıvysledneho smeru odtoku Tento prıstup umoznuje pouze jeden smer odtokurozdeleny mezi jednu nebo dve bunky v zavislosti na smeru odtoku

Poslednı dva zmınene algoritmy MD8 a Dinfinmajı oproti D8 nevyhodu ve vetsıcasove narocnosti vypoctu V kapitole 4 je popsan algoritmus MDinfin kteryvyuzıva vyhody MD8 algoritmu za pouzitı trojuhelnıkovych plosek obdobnejako Dinfin algoritmus

3

3 Flow Direction D8

Pro pochopenı problematiky a zjevnost rozdılu mezi algoritmy je vhodneuvest jak funguje nastroj ktery pouzıva ArcGIS Zaklad algoritmu MDinfino nemz pojednava tato dokumentace je zalozen na podobnych postupech

31 Obecny princip D8

Princip nastroje urcenı smeru odtoku (Flow Direction) ktery pouzıva prostredıArcGIS je nasledujıcı Tento nastroj (tool) vezme vstupnı rastr digitalnıhomodelu terenu neboli vyskovy rastr Provede vypocet jehoz vystupem jerastr ktery v kazde bunce rastru obsahuje hodnotu urcujıcı smer odtokuz teto bunky Hodnot je osm podle osmi sousednıch bunek do kterych muzeodtekat voda viz obrazek 1 Prave podle osmi smeru odtoku se tento prıstupnazyva D8 (eight-direction approach)

Obrazek 1 Flow Direction D8 [3]

4

32 Popis algoritmu D8

Samotny vypocet algoritmu je v zasade primitivnı Pro vsechny sousednıbunky se vypocte maximalnı sklon [3]

maximalnı sklon = rozdıl vysek vzdalenost 100

Rozdıl vysek je rozdıl vysky v aktualnım bode a konkretnı sousednı bunkyVzdalenost je vypoctena mezi stredy bunek a lisı se v zavislosti na polozesousednı bunky Pro bunky sousedıcı vrcholem je hodnota velikosti pixeluprenasobena o odmocninu ze dvou Pro zbyle bunky sousedıcı hranou jevelikost vzdalenosti rovna velikosti pixelu Po nalezenı nejstrmejsıho smeruodtoku je hodnota ulozena v podobe bitove hodnoty reprezentujıcı danysmer Pred pouzitım nastroje Flow Direction se obvykle zpracuje vstupnırastr pomocı nastroje Sink Tento algoritmus zaplnı bezodtoke oblasti rastrunejnizsı hodnotou z okolı a do teto nejnizsı sousednı bunky pak posle voduPote jiz nemuze dojıt k situaci kdy vsechny sousednı bunky k dane buncemajı vyssı hodnoty vysek a nedochazelo by tedy k odtokuVysledny rastr nemusı obsahovat pouze bunky s hodnotami 202127 [4]Jestlize nastane situace kdy ma vıce sousednıch bunek nejnizsı hodnotuvysek pak je vysledna hodnota souctem vsech smeru Napr hodnota maximalnıhosklonu bude stejna pro sousednı bunku vlevo a nahore odtok tedy budesmerem na zapad (hodnota = 16) a na sever (hodnota = 64) vysledna hod-nota bude souctem 16 a 64 tedy 84

5

4 Popis algoritmu MDinfin

41 Obecny princip MDinfinObecny postup je prevzat z [1] Stejne jako v prıpade algoritmu Dinfin bylyzavedeny trojuhelnıkove plosky pro vypocet lokalnıho sklonu a smeru pro kazdoutrojuhelnıkovou plosku Okolo stredoveho boduM bylo vytvoreno osm trojuhelnıkuviz obrazek 3 Kazdy se zbyvajıcımi dvema vrcholy P1 P2 ve dvou sousedıcıchbunkach Pro kazdy z techto trojuhelnıku je vypocten smer nejvetsıho sklonuPokud oznacıme vysky bodu M P1 P2 jako hM hP1 hP2 rozdıly vysek sevypoctou takto

z1 = hP1 minus hM z2 = hP2 minus hM (1)

Obdobne se vypoctou rozdıly v x-ovych a y-ovych souradnicıch Po vypocturozdılu jednotlivych souradnic je vypocten normalovy vektor

n =

nx

ny

nz

=

z1y2 minus z2y1z1x2 minus z2x1y1x2 minus y2x1

(2)

Smer odtoku d a sklon s na trojuhelnıkove plose se vypocte pomocı rovnice3 Hodnota nula pro d oznacuje smer osy y a hodnota 3π2 oznacuje smerosy x

d =

0 nx = 0 ny ge 0

π nx = 0 ny lt 0

π2minus arctan(

ny

nx

) nx gt 0

3π2minus arctan(

ny

nx

) nx lt 0

(3)

s = minus tan

(arccos

(nzradic

n2x + n2

y + n2z

))(4)

Jestlize nejvetsı sklon od bodu M je mimo rozpetı 0-45 (π4 radian) jepouzit sklon strmejsı k jednomu z bodu P1 P2 a zaroven i sklon je spoctenk tomuto bodu V prıpade ze oba sousednı body jsou vyse polozeny nez bodM smer nenı pro tento trojuhelnık uvazovan Po spoctenı vsech osmi smerua sklonu pro jednotlive plosky jsou tyto smery povazovany za lokalne ne-jstrmejsı pro kazdy trojuhelnık v rozsahu 45 Smery vedoucı prımo do bodu

6

P1 nebo P2 tedy ty kde d = 0 nebo d = π4 jsou uvazovany pouze vprıpade kdy obe vedlejsı sousednı bunky majı smer k bodu P1 nebo P2Tato situace je znazornena na obrazku 2

Obrazek 2 Ukazka urcenı smeru odtoku z bunky [1]

Prvnı prıpad je smer mırıcı mezi bunky 5 a 6 Druhy prıpad je smer kteryvede prımo do bunky 3 Tato situace nastane jestlize pro trojuhelnık M43vyjde lokalnı smer d = π4 a pro trojuhelnık M32 smer vyjde d = 0Pote co je smer odtoku pro bunku vypocten je celkovy odtok rozdelendo vsech vyslednych smeru na zaklade sklonu Resenı teto problematiky jevıce popsano v sekci 42 Pro smery mırıcı mezi body P1 a P2 je odtokrozdelen do dvou bunek na zaklade nevejtsıho sklonu Pomer odtoku do buneks body P1 a P2 bude v tomto poradı α245 a α145

Obrazek 3 Trojuhelnıkove plosky [1]

7

42 Technicke resenı MDinfinVyse jiz bylo zmıneno ze algoritmus je napsan v jazyce Python Algoritmusje rozdelen do dvou skriptu Prvnı z nich obsahuje funkce a druhy je hlavnıVstupem do modelu je rastr digitalnıho modelu terenu a vystupnı adresardo ktereho se ulozı finalnı rastr smeru odtoku viz obr 4 Po nactenı rastruze vstupnıch parametru je tento rastr preveden na matici NumPy pomocıfunkce

arcpy RasterToNumPyArray ( InputRaster )

NumPy [5] je rozsırenı programovacıho jazyka Python je to balıcek uzıvanypro vedecke vypocty Umoznuje podporu velkych multi-dimenzionalnıch polıa matic spolu s velkou knihovnou matematickych funkcı pro praci s temitopoli

Algoritmus cyklem projızdı vsechny prvky matice a u tech ktere majı hod-notu ruznou od NoData nalezne okolı Hledanı okolı bunky provadı funkceneighbors ta je definovana takto

def ne ighbors ( i j array x y ) return nb1 nb2 nb3 nb4 nb5 nb6 nb7 nb8

Vstupem funkce je pozice v matici dale cela matice a jejı rozmery Funkceneighbors vypocıta hodnoty vysek sousednıch osmi bunek a vratı je na vystup

Obrazek 4 Dialogove okno nastroje MDinfin

Vystup z funkce neighbors slouzı jako jeden z vstupnıch parametru pro dalsıfunkci

8

Funkce byla pojmenovana dir slope jelikoz jejım vystupem je smer odtokua sklon tohoto smeru

def d i r s l o p e ( pointM nbrs vpix sp ix ) return d i r e c t i o n s l ope

Pro kazdy trojuhelnık byla spoctena hodnota d viz vzorec 3 Hodnota s bylapo spatnych a nelogickych vysledcıch pocıtana podle jineho vzorce ktery jizdaval spravne vysledky

s0 =

radicz212y21

+z22y22

(5)

Vzorec se lisı pro kazdy trojuhelnıcek uvedeny je pro vypocet sklonu kdy sousednıbunka je severozapadnı a severnı Tımto postupem bylo zbytecne pocıtatz-tovou slozku vekotoru n vzorec 2 Byly osetreny prıpady kdy sousednıbunky aktualnıho pocıtaneho trojuhelnıku jsou obe vyse polozene nebo obemimo rastr (NoData) Dalsı prıpad nastane jestlize je jeden bod vne rastra druhy v rastru lezı Smer je potom urcen prımo do toho bodu ktery nalezırastru Taktez i sklon je pocıtan pouze mezi tımto bodem a bodem M Lokalnı smer d v kazde plosce po vypoctenı nesmı prekrocit 45 V situacize tuto hodnotu prekrocı je smeru prirazena hodnota 0 nebo 45 v zavislostina vzajemnem porovnanı vysek bodu v trojuhelnıku Takto jsou zpracovanyvsechny plosky a je zjisteno zda-li do kazdeho trojuhelnıku nastava smerodtoku nebo ne Na konci funkce dir slope se kontroluje prıpad kdy smersousednıch trojuhelnıku odkazuje presne do stejneho bodu tedy hodnotysmeru musı byt pro prvnı trojuhelnık d = 45 a pro nasledujıcı sousednıtrojuhelnık d = 0 Vystupem funkce jsou dva vektory o osmi prvcıch smera sklon pro kazdou plosku

Dalsı fazı vypoctu je zjistenı pomeru vody ktera potece do jednotlivychsmeru K vypoctu pomeru byl pouzit tento vzorec [2]

fi =sxi8sum

j=1

sxj

(6)

kde s vyznacuje sklon vypocteneho smeru konkretnı trojuhelnıkove ploskya x je promenny exponent Pokud by byl exponent zvolen 1 bude vyslednasıtrsquo obdobna jako pri pouzitı MD8 algoritmu Pri zvetsovanı exponentu xk nekonecnu bude sıtrsquo stejna jako pri pouzitı D8 metody Vychozı hodnotaexponentu byla zvolena x = 4 coz je kompromis mezi obema variantami

9

Zmena exponentu se v soucasne podobe neprojevı na vyslednem rastru je-likoz vysledek prezentuje pouze smer odtoku a ne procentualnı cast Tohotopomeru bude vyuzito az pri spojenı skriptu s 2D modelem SMODERP

V dalsı casti vypoctu je rozdelen jiz zjisteny pomer z celkoveho odtokudo dvou prıpadne pouze do jedne bunky v zavislosti na smeru odtoku dVe vysledku je vypocten vektor osmi cısel kde kazda hodnota od 0 do 1prestavuje jiz procentualnı pomer z celkoveho odtoku do kazde sousednıbunky

Pro vyslednou reprezentaci smeru odtoku na vystup byl pro kazdou bunkuvytvoren vektor obsahujıcı 1 a 0 rıkajıcı zda nastava ci nenastava odtokdo sousednı bunky Tento vektor byl preveden na celocıselnou hodnotu po-mocı funkce bool2int

def boo l 2 i n t ( x ) y = 0for i j in enumerate ( x )

i f j y += 1ltlt ireturn y

Funkce ma na vstupu vektor jedicek a nul Naprıklad pro vektor 00000111kdy voda tece na severozapad sever a severovychod se funkce chova taktoJe testovano jestli platı j = 1 tedy prvnıch pet nul vektoru funkce preskocıa pro prvnı jednicku se pricte k promenne y 20 v dalsım kroku 21 a v poslednım22 Operator vyjadruje totiz bitovy posun smerem doleva Vysledkem jena vystupu cıslo y = 1 + 2 + 4 = 7

Pro vsechny bunky byla vypoctena hodnota reprezentujıcı smer odtoku Tatohodnota se ulozı do matice a ta se nasledne prevede na vysledny rastr

f l o w d i r = arcpy NumPyArrayToRaster ( value LLcorner spix vpix rdquordquo )

value hodnota reprezentujıcı smer odtokuLLcorner souradnice leveho dolnıho rohuspix sırka pixeluvpix vyska pixelu

10

5 Vysledky

Algoritmus MDinfin byl testovan na skutecnych datech dvou pozemku u obcıNucice ve Stredoceskem kraji a Bykovice v kraji Jihomoravskem rastry jsouv prıloze 71 Oba dva rastry jsou o rozlisenı 5 metru Finalnı rastry jsouporovnavany s rastry vytvorenymi v prostredı ArcGIS nastrojem Flow Di-rection metodou D8

51 Realna data - Bykovice

Vysledne rastry Flow Direction pro uzemı Bykovice jsou uvedeny v prıloze72 Oba rastry byly pro hodnoty 202127 obarveny shodnou barvou kvulilepsı nazornosti a porovnatelnosti vysledku Rastr ktery obsahuje z celkovehopoctu 44807 bunek celkem 23655 bunek s hodnotami vysek po probehnutıalgoritmy dal nasledujıcı vysledky

FD D8 MDinfin1 3650 7372 666 9174 207 188 21 716 94 3732 791 8564 8818 1045128 9408 14983sum

23655 14983

Tabulka 1 Tabulka porovnanı obou algoritmu pro rastr Bykovic

FD je zkratka pro Flow Direction cili smer odtoku reprezentovany celocıselnouhodnotou Ostatnı hodnoty u vysledneho rastru na ktery byl pouzit algorit-mus MDinfin jsou v rozpetı 0246 V rozmezı hodnot smeru odtoku 246255se nevyskytujı zadne bunky Cas potrebny pro vykonanı skriptu byl v prıpadeD8 4 vteriny Pro algoritmus MDinfin byl cas 15 vterin

11

52 Realna data - Nucice

Vysledne rastry jsou uvedeny v prıloze 73 Opet bylo pouzito shodne obar-venı pro zakladnı smery u obou rastru Rastr Nucice obsahoval data na 82732bunkach z celkove poctu 125449 bunek Vysledky jsou pro prehlednost uve-deny v tabulce

FD D8 MDinfin1 12186 12332 12441 87034 16907 10278 9826 1642316 2516 28832 5010 241764 7788 366128 16058 25475sum

82732 55932

Tabulka 2 Tabulka porovnanı obou algoritmu pro rastr Nucic

Ostatnı hodnoty u vysledneho rastru na ktery byl pouzit algoritmusMDinfin jsou v rozpetı 0255 Cas potrebny pro vykonanı skriptu byl v prıpadeD8 6 vterin Pro algoritmus MDinfin byl cas 50 vterin

12

6 Zaver

Cılem projektu bylo vytvorit funkcnı skript obsahujıcı algoritmus pojmen-ovany MDinfin [1] ktery resı odtok do sousednıch bunek rastru Algoritmusbyl napsan v programovacım jazyce Python a testovan na realnych datechVysledky byly mırnym prekvapenım kdy zejmena hodnoty smeru 128 tedyseverovychodnıho se vyskytovaly ve vysledku velmi casto viz tabulky 1 a 2Predpokladem bylo ze se odtok rozlozı do vıce smeru a pocet bunek s hod-notami zakladnıch smeru 1248163264 a 128 bude mene nez v prıpade al-goritmu D8 K rozkladu do vıce smeru sice doslo ale pocet nekterych bunekse zakladnımi smery byl vetsı u algoritmu MDinfin

Co se tyce delky doby behu algoritmu je algoritmus MDinfin pomalejsı viz casyv kapitole 5 nez D8 z nekolika zrejmych duvodu Predevsım algoritmus D8provadı mnohem mene pocetnıch operacı z duvodu jeho mensı slozitostiviz 3 Dalsım duvodem je take rozdıl v jazyce ve kterem jsou oba algo-ritmy napsany D8 je napsan v programovacım jazyce C++ ktery na vetsıchdatech je mnohonasobne rychlejsı nez Python Prepsanım algoritmu MDinfindo jazyka C++ by mohla byt cesta k budoucımu zvysenı rychlosti pracealgoritmu

13

Reference

[1] SEIBERT Jan McGlynn BL A new triangular multiple flow di-rection algortihm for computing upslope areas from gridded digi-tal elevation models [online] [cit 13 5 2013] Dostupne ke stazenız URL lthttpciteseerxistpsueduviewdocdownloaddoi=101179977amprep=rep1amptype=pdfgt

[2] HOLMGREN Peter Multiple direction algortihms for runoff modellingin grid based elevation models An empirical evaluation [online] [cit13 5 2013] Dostupny z URL ltftpwwwlwrkthseCommonUllaMFor_Imran[1994]20holmgren20-20multiple20flow

20direction20algorithms20for20runoff20modelling20in

20grid20based20elevation20modelspdf gt

[3] ESRI ESRI WebHelp - How Flow Direction works [online] [cit13 5 2013] Dostupne z URL lthttphelparcgiscomenarcgisdesktop100helpindexhtml009z00000063000000

htmgt

[4] ESRI ESRI Webhelp - Flow Direction (Spatial Analyst) [online][cit 13 5 2013] Dostupne z URL lthttphelparcgiscomenarcgisdesktop100helpindexhtml009z00000052000000

htmgt

[5] WIKIPEDIA NumPy [online] [cit 13 5 2013] Dostupne z URLlthttpenwikipediaorgwikiNumPygt

[6] INFORMIT Working with operators [online] [cit 13 5 2013] Dos-tupne z URL lthttpwwwinformitcomarticlesarticleaspxp=2002831ampseqNum=6gt

14

7 Prılohy

71 Bykovice a Nucice vstupnı DMT rastry

Obrazek 5 DMT Bykovice

Obrazek 6 DMT Nucice

15

72 Bykovice vysledky

Obrazek 7 Flow Direction D8

Obrazek 8 Flow Direction MDinfin

16

73 Nucice vysledky

Obrazek 9 Flow Direction D8

Obrazek 10 Flow Direction MDinfin

17

Page 14: pro zac ate cn kygeo.fsv.cvut.cz/gdata/2013/pin2/e/dokumentace/... · 2013-06-05 · CESK E VYSOK E U CEN I TECHNICKE V PRAZE FAKULTA STAVEBN I OBOR GEODEZIE A KARTOGRAFIE Dokumentace

Obsah

1 Uvod 211 O tematu 212 Strucny souhrn 2

2 Popis pracı 321 Nastroj pro tvorbu gridu 3

211 Uvodnı dialog 4212 Vysledny log 5213 Vysledne vrstvy 5214 Cinnost nastroje podrobne 6

22 Generalizace 9221 Uvodnı dialog 9222 Vysledny log 10

23 Finalnı upravy a export 10

3 Problemy a moznosti rozsırenı 1031 Pripojovanı externıch tabulek 1032 Doba behu tvorby gridu 1133 Moznosti rozsırenı 11

4 Zaver 12

5 Prılohy 1351 Vysledny log tvorby gridu 1352 Vysledny log generalizace 14

1

1 Uvod

11 O tematu

Tema bylo urceno doc Krasou z katedry Hydromelioracı a krajinneho inzenyrstvıpro prezentovanı vysledku vypoctu eroznıho smyvu a transportu splaveninPresto ze je nastroj primarne urcen pro toto pouzitı byla snaha jej napsatco nejuniverzalnejiCılem projektu je vytvorit atlas sestaveny z jednotlivych tematickych mapTyto mapy jsou vytvoreny pro cca tretinu uzemı Ceske Republiky V potrebnemmerıtku (cca 150 000) je nemozne vytvaret spojene tematicke mapy Bylotedy nutne nejprve vyhodnotit jak nejlepe vysledky prezentovat pote vy-tvorit nastroj ktery mapy podle pozadavku upravı (generalizuje vizualizo-vane prvky) vygeneruje jednotlive mapove listy a jejich prehledku Dalevygeneruje seznam mapovych listu pro jednotliva povodı a dalsı potrebneudajeNastroj je psan v jazyce Python pro ArcGIS 100

12 Strucny souhrn

Prace se sklada z nekolika castı

1 Vytvorenı gridu - Tato cast je nejrozsahlejsı Jedna se o skript kterypro dana povodı vytvorı rozsah mapovych listu (tzv index grid layer)a do atributovych tabulek ulozı potrebne hodnoty viz dale

2 Generalizace obsahu mapy - Generalizace nakonec probehla velmijednoduse a to kategorizacı hodnot kumulovaneho smyvu

3 Uprava vzhledu a export - Tato cast byla provadena manualne varcgis layout view Po vytvorenı kyzeneho vzhledu pote probehlo ge-nerovanı jednotlivych mapovych listu pomocı toolbaru Data DrivenPages

2

2 Popis pracı

21 Nastroj pro tvorbu gridu

Tento nastroj vytvorı polygonovou vrstvu obsahujıcı grid a to podle zadanehomerıtka a velikosti mapoveho pole Do atributove tabulky gridu vlozı sloupecs nazvy mapovych listu a sloupec s cısly sekcı (bude vysvetleno dale) Zarovenprida do vstupnı polygonove vrstvy sloupec s cısly sekcı a sloupec s nazvymapovych listu na kterych se dany polygon (povodı) nachazı Dale vytvorıvrstvu nazev gridu dissolve pro prehledku sekcı

Pojem sekce Sekce je tvorena vsemi dotykajıcımi se polygony Mapovelisty jsou ke kazde sekci tvoreny zvlastrsquo a jejich nazvy jsou pote rozsıreny ocıslo sekce Prıklad cıslovanı mapovych listu 1-A1 1-A2 2-A1 2-A2

Obrazek 1 Vstupnı polygonova vrstva

3

Obrazek 2 Ocıslovane sekce polygonove vrstvy

211 Uvodnı dialog

Uvodnı dialog nastroje obsahuje pole pro 5 parametru

bull In - vstupnı parametr datovy typ Feature classVstupnı vrstva polygonu

bull Scale - vstupnı parametr datovy typ LongPozadovane merıtko

bull Map field width - vstupnı parametr s nastavenou defaultnı hodnotou25 datovy typ DoubleSırka vysledneho mapoveho ramce v cm

bull Map field height - vstupnı parametr s nastavenou defaultnı hodnotou30 datovy typ DoubleVyska vysledneho mapoveho ramce v cm

bull Out - vystupnı parametr datovy typ Feature classVystupnı vrstva gridu

4

Obrazek 3 Grid - Uvodnı dialog

212 Vysledny log

Kompletnı prıklad vysledneho logu je k nalezenı v prıloze 51Obsahuje tyto informace

bull Umıstenı pouzıvane databaze na disku

bull Dale v kazdem cyklu

ndash Poradove cıslo cyklu

ndash Aktualnı pocet nezpracovanych polygonu

ndash Cıslo vytvarene sekce

ndash Identifikatory polygonu tvorıcıch danou sekci

bull Pocet sekcı

bull Pocet mapovych listu v kazde sekci

213 Vysledne vrstvy

Vysledny grid pro merıtko 1 80 000 a defaultnı velikost mapoveho pole (25x 30 cm) vypada nasledovne

5

Obrazek 4 Grid - Vysledna vrstva

214 Cinnost nastroje podrobne

1 Prıpravne cinnostiV prvnıch radcıch kodu jsou vytvoreny pomocne promenne a pole znichz pro dalsı cinnost je potreba zmınit zasobnık IDs Ten je naplnenidentifikatory povodıPokud jiz neexistujı jsou ve vstupnı polygonove vrstve vytvoreny atri-butove sloupce hard ID section MapSheets

bull hard ID - Do tohoto sloupce byly zkopırovany identifikatory abyi po rozdelenı do nekolika vrstev mely polygony jednoznacny iden-tifikator

bull section - Po vypoctu sekcı sem bude pro kazdy polygon zapsanocıslo sekce ve ktere se nachazı

bull MapSheets - Atribut se seznamem mapovych listu na kterych sedane povodı nachazı

Ukazka tvorby atributoveho sloupce

fieldList = arcpyListFields(inFeatureClass rsquoMapSheetsrsquo)

6

fieldCount = len(fieldList)

if (fieldCount = 1)

arcpyAddField_management(inFeatureClass rsquoMapSheetsrsquo rsquoTEXTrsquo)

2 Hlavnı vypocetnı cast

Hlavnı cast je cela v cyklu while (len(IDs) gt 0) tj cyklus probıhadokud jsou v zasobnıku IDs hodnoty Na konci cyklu jsou vzdy identi-fikatory zpracovanych povodı ze zasobnıku mazany V kazdem prubehucyklu jsou selektovany povodı tvorıcı 1 sekci k takove sekci je potevytvoren grid a jsou plneny nove atributove sloupce

Ukazka hlavnıho cyklu

while len(IDs) gt 0

oznacenı povodı i-te sekce

rows_sel = arcpySearchCursor(rsquopovodi_classrsquo)

for row_sel in rows_sel

IDsremove(row_selOBJECTID)

V kazdem prubehu cyklu je zpracovana 1 sekce - tj shluk povodı kteremajı spolecnou cast hranice Sekce je tvorena na zaklade dotazu Se-lectByLocation s definicı BOUNDARY TOUCHES Dotaz se opakujev cyklu dokud se pocet oznacenych povodı zvetsuje K tomu slouzıpromenne matchcount1 matchcount2 ktere obsahujı pocet oznacenychpolygonu

Vytvorenı sekce

bull Oznacenı prvnıho nezpracovaneho polygonu

first_ID = str(IDs[0])

fieldName = OBJECTID

Query = + fieldName + = + first_ID

arcpySelectLayerByAttribute_management(rsquopovodi_classrsquo rsquoNEW_SELECTIONrsquo Query)

matchcount1 = int(arcpyGetCount_management(rsquopovodi_classrsquo)getOutput(0))

bull Prvnı prubeh SelectByLocation

7

arcpySelectLayerByLocation_management(rsquopovodi_classrsquo rsquoBOUNDARY_TOUCHESrsquo

rsquopovodi_classrsquo)

matchcount2 = int(arcpyGetCount_management(rsquopovodi_classrsquo)getOutput(0))

bull Dalsı prubehy SelectByLocation

while matchcount1 lt matchcount2

matchcount1 = matchcount2

arcpySelectLayerByLocation_management(rsquopovodi_classrsquo rsquoBOUNDARY_TOUCHESrsquo

rsquopovodi_classrsquo)

matchcount2 = int(arcpyGetCount_management(rsquopovodi_classrsquo)getOutput(0))

Oznacene polygony jsou ulozeny jako polygonova vrstva do vstupnı ge-odatabaze Tato vrstva je dale pouzita pro tvorbu gridu

Vytvorenı gridu

Pred samotnou tvorbou bylo potreba zjistit rozsah sekce Pokud bylasekce mensı nez 1 mapovy list bylo treba definovat souradnice polohylistu tak aby povodı lezelo na stredu listu Do zasobnıku byly nactenysouradnice lomovych bodu povodı a byly z nich vybrany maximalnı aminimalnı hodnoty Jejich rozdıl pak urcil rozsah sekce

Prıklad plnenı zasobnıku souradnicema

desc = arcpyDescribe(outputFeatureClassPath+rsquorsquo+output_name)

shape_field_name = descShapeFieldName

rows3 = arcpySearchCursor(outputFeatureClassPath+rsquorsquo+output_name)

mbr_X=[]

mbr_Y=[]

for row3 in rows3

Create the geometry object

feat = row3getValue(shape_field_name)

partnum = 0

for pnt in featgetPart(partnum)

mbr_Xappend(pntX)

mbr_Yappend(pntY)

partnum += 1

8

Vytvorenı gridu pote probıha budrsquo s definovanou nebo s nedefinovanoupolohou pocatecnıho mapoveho listu Pro vytvorenı gridu je pouzitafunkce GridIndexFeatures cartography

Ukazka

arcpyGridIndexFeatures_cartography(outputFeatureClassPath+rsquorsquo+grid_name

outputFeatureClassPath+rsquorsquo+output_name USEPAGEUNIT scale_str

sheet_width_str sheet_high_str str(grid_start_pnt_X)+rsquo rsquo+str(grid_start_pnt_Y))

Grid je tedy vytvoren pro jednu sekci Po vsech prubezıch cyklu jsoutakto vytvorene vrstvy gridu spojeny do jedne finalnı vrstvy V cyklujsou dale plneny nove atributove sloupce - cısla sekcı a nazvy mapovychlistu a to jak do nove (vystupnı) vrstvy gridu tak do vstupnı vrstvypovodı

3 Vytvorenı finalnıch vrstev tisk vysledku Jak bylo receno na zaverjsou spojeny jednotlive vrstvy gridu Vedle toho je vytvorena vrstvaspojenych mapovych listu po sekcıch - funkcı Dissolve - pro tvorbuprehledky Jsou vytisknuty vysledne hodnoty viz 212

22 Generalizace

Pro generalizaci byl napsan skript ktery nacıta liniovou vrstvu toku Tentoskript byl jiz psan na mıru podkladovym datum a pri nacıtanı je v nemvyuzito znalosti struktury danych podkladovych dat Skript k vrstve pripojıexternı tabulku a vytvorı atributovy sloupec kategorie Podle dat z externıtabulky pak plnı novy sloupec hodnotami 1 - 5 podle mnozstvı unasenehosedimentu Tato hodnota je pak pouzita pri vizualizaci datZajımavostı je ze pro nacıtanı musela byt tabulka indexovana viz 31

221 Uvodnı dialog

Uvodnı dialog obsahuje dva parametry

bull Input Feature Class Vstupnı liniova vrstva rıcnıch useku

bull Table Vstupnı tabulka obsahujıcı hodnoty rıcnıch splavnenin

9

222 Vysledny log

Vysledny log je k nahlednutı v prıloze 52 Obsahuje tyto informace

bull Pocet vsech rıcnıch useku

bull Pocet useku v jednotlivych kategoriıch

23 Finalnı upravy a export

Jak jiz bylo zmıneno finalnı vzhled mapoveho listu byl vytvoren manualne vLayout view a pomocı toolbaru Data Driven Pages Tento postup je casoveekonomictejsı a je jım dosazeno lepsıch vysledku dıky prehlednosti ToolbarData Driven Pages pak umoznuje vkladat dynamicke textove pole ktere seautomaticky menı s menıcım se mapovym listem Takovym polem je naprnazev mapoveho listu Stacı tedy definovat vzhled jednoho mapoveho listuv toolbaru Data Driven Pages navolit prıslusne pole - ty byly vytvorenynastrojem Grid viz 21 Dynamicky bylo potreba propojit s mapovym oknemi prehledku ktera byla vytvorena jako druhy Data Frame To se provedlo defi-novanım rozsahu podle hlavnıho mapoveho okna v Properties -iquest Data Frame-iquest Extant a definovanım Definition Query ve vlastnostech vrstvy Dalsım dy-namickym prvkem jsou oznacenı sousednıch mapovych listu a cıslo strankyNa takto sestavenou stranku s dynamickymi prvky bylo mozne pouzıt exportmapy do pdf a Atlas byl vygenerovanPrıklad dynamickeho textu pro nazev mapoveho listultdyn type=page property=PageNamegt

3 Problemy a moznosti rozsırenı

31 Pripojovanı externıch tabulek

Pri pripjovanı externıch tabulek musely byt indexovany hodnoty atribu-toveho sloupce pouziteho k parovanı To probehlo prıkazemarcpyAddIndex management (layer HydroID)Pripojenı tabulky musı probıhat k Feature layer Proto bylo nutne nejprve zFeature Class vytvorit Feature Layer1 Pote mohla byt tabulka pripojena

arcpyAddIndex_management (layer HydroID)

arcpyAddJoin_management(layer HydroID table Riverid)

1Rozdıl mezi Feature Layer a Feature Class je vysvetlen v prilozenem Tutorialu pro-gramovanı v Pythonu pro ArcGIS

10

Zde nastal problem s prıstupem k atributum Obecne nesmı nazvy atri-butovych sloupcu obsahovat mezery K hodnotam je pristupovano pres jed-notlive radky s parametrem nazev sloupce

rows= arcpySearchCursor(layer)

for row in rows

value=rownazev_sloupce

Pripojena tabulka ovsem mela v nazvech sloupcu mezeru K takto pojmeno-vanemu sloupci muselo byt pristupovano prıkazem getValue

rows= arcpySearchCursor(layer)

for row in rows

value=rowgetValue(rsquonazev tabulky$nazev sloupcersquo)

32 Doba behu tvorby gridu

Doba behu nastroje pro tvorbu gridu je znepokolive dlouha Bylo prove-deno merenı casu behu jednotlivych castı kodu funkcı time z modulu timeVysledky ukazaly ze nejdele trva vytvarenı novych vrstev Vrstva se muzevytvaret az 20 sekund Snaha o optimalizaci donutila nahradit vytvarenı vrs-tev s minimalnım ohranicujıcım obdelnıkem sekvencnım ukladanım souradniclomovych bodu polygonu z nichz pak funkcemi min a max byly tyto hodnotyzıskany Prubeh se tak urychlil o desıtky sekund (v jednom prubehu cyklupriblizne o 15 sekund) Dalsı moznostı bylo vyuzıt prostoroveho indexu datTato moznost nebyla vyuzita protoze ArcGIS pouzıva k prostorovemu in-dexovanı pravidelny grid Zıskanı MBR2 nebylo nalezeno Vyuzitı indexu byovsem problem neresilo Jak jiz bylo zmıneno nejdele trva vytvarenı novychvrstev Bohuzel funkce GridIndexFeatures cartography pro vytvorenı griduneumı pracovat se selektovanymi daty Tedy v kazdem cyklu musı byt ulozenapolygonova vrstva tvorıcı 1 sekci Pote mohla byt vytvorena vrstva tvorıcıgrid Tedy v kazdem prubehu cyklu jsou vytvareny 2 nove vrstvy Jelikozautor neprisel na zpusob jine optimalizace je nastroj pomaly Pro zadanydataset s 58mi povodımi jeho cinnost probıha desıtky minut

33 Moznosti rozsırenı

Do skriptu by se dal zakomponovat export seznamu mapovych listu pro kazdepovodı V soucasne verzi je tvoren exportem atributove tabulky

2minimum bounding rectangle - minimalnı ohranicujıcı obdelnık

11

4 Zaver

Byly vytvoreny nastroje pro automatizaci tvorby Atlasu pro mapy eroznıhosmyvu a transportu splavenin Tvorba Atlasu probıha v nekolika krocıchVizualizovane prvku jsou generalizovany Dale je vytvoren Grid ktery jepouzit jako indexova vrstva pro funkci Data Driven Pages Tou jsou vy-tvoreny jednotlive mapove listy Pomocı dynamickych prvku je pak vytvorenvzhled ktery se menı se zmenou mapoveho listu Nedostatkem je rychlostnastroje pro tvorbu gridu Presto ze je nastroj pomaly je zcela funkcnı Vprıpade potreby dalsıho rozsırenı bude ale vhodne vysledky nacıtat do novehonastroje Vzorovy vytisk vysledneho atlasu je prilozen Vzhledem k tomu zezpracovavana data jsou rozsahla a podlehajı autorskemu zakonu je vytvorenjen vzorovy vytisk z 6ti povodı Nastroje jsou psany v jazyce Python 26 proArcGIS 100 Pri praci byla vyuzıvana predevsım online napoveda ArcGISa diskuznı programatorska fora Kompletnı zdrojovy kod je ke stazenı nastrankach predmetu PIN2

12

5 Prılohy

51 Vysledny log tvorby gridu

Executing Grid

JAtlasvzorektemp_selectpovodi_vzorekgdbpokusne_povodi

70000 25 30 JAtlasvzorektemp_selectpovodi_vzorekgdbgrid70

Start Time Wed May 15 020551 2013

Running script Script2

Output folder JAtlasvzorektemp_selectpovodi_vzorekgdb

_____________________________________________________________________

count of basin polygon to process 6

_____________________________________________________________________

RUN 1

count of basins in 1 section 3

Their ID

ID 1

ID 3

ID 6

_____________________________________________________________________

count of basin polygon to process 3

_____________________________________________________________________

RUN 2

count of basins in 2 section 1

Their ID

ID 2

_____________________________________________________________________

count of basin polygon to process 2

_____________________________________________________________________

RUN 3

count of basins in 3 section 2

Their ID

ID 4

ID 5

----- RESULT -----

Number of sections 3

Number of map sheets

in section 1 13

in section 2 1

in section 3 2

Completed script Grid

Succeeded at Wed May 15 021359 2013 (Elapsed Time 8 minutes 8 seconds

13

52 Vysledny log generalizace

Executing generalization JAtlasvzorek2011_NAZV_nadrze2011_watemsedem

NAZV_tokyVT28_finshp

JAtlasvzorek2011_NAZV_nadrze2011_watemsedem28_vypocet

projectriversedimentxlsxprojectriversediment$

Start Time Wed May 15 075624 2013

Running script generalization

Category created

Total count of river parts 2879

Count of category 1 2428

Count of category 2 118

Count of category 3 68

Count of category 4 20

Count of category 5 245

Completed script generalization

Succeeded at Wed May 15 075638 2013 (Elapsed Time 1400 seconds)

14

CESKE VYSOKE UCENI TECHNICKE V PRAZE

FAKULTA STAVEBNI

OBOR GEODEZIE A KARTOGRAFIE

Dokumentace k projektu informatika 2

Stanovenı smeru odtokuna rastrovem digitalnım modelu

a implementace algoritmudo prostredı ArcGIS

BC JAN ZAJICEK

5 cervna 2013

Obsah

Obsah 1

1 Uvod 2

2 Nejbeznejsı existujıcı algoritmy 3

3 Flow Direction D8 431 Obecny princip D8 432 Popis algoritmu D8 5

4 Popis algoritmu MDinfin 641 Obecny princip MDinfin 642 Technicke resenı MDinfin 8

5 Vysledky 1151 Realna data - Bykovice 1152 Realna data - Nucice 12

6 Zaver 13

Reference 14

7 Prılohy 1571 Bykovice a Nucice vstupnı DMT rastry 1572 Bykovice vysledky 1673 Nucice vysledky 17

1

1 Uvod

Tato dokumentace byla zpracovana v ramci predmetu Projekt Informatika 2Semestralnı prace bude pouzita jako z jedna castı autorovi diplomove praces nazvem SMODERP 2D rozsırenı resıcı vztahy soustredeneho a plosnehoodtoku na danem uzemı Duvodem zpracovanı tohoto tematu byla potrebapouzitı v diplomove praci vıce nez jednoho algoritmu pro urcenı smeruodtoku v prostredı ArcGIS V soucasne dobe ArcGIS vyuzıva algoritmusD8 viz kapitola 3 jako jediny algoritmus pro vypocet smeru odtoku Tentoalgoritmus je soucastı Hydrology tools Nastroje ze skupiny Hydrology sepouzıvajı k modelovanı chovanı toku vody na povrchu Nejbeznejsı pouzıvanadigitalnı data povrchu Zeme jsou rastry digitalnı modelu terenu DMT slozenez jednotlivych bunek pixelu Tyto DMT rastry jsou pouzity jako vstupypro ruzne charakteristiky povrchu DMT rastr je souvisly povrch obvykleodkazujıcı na povrch Zeme Presnost dat je dana rozlisenım rastru taktezvzdalenostı mezi body rastru Informace o tvaru zemskeho povrchu je uzitecnapro mnoho oboru jako je napr zemedelstvı lesnictvı zivotnı prostredı neboregionalnı planovanı Tyto obory vyzadujı pochopenı jak voda tece v ramciuzemı a jak zmeny na tomto uzemı nasledne ovlivnı jejı tok

Cılem projektu bylo naprogramovat algoritmus ktery v roce 2007 publiko-vali Jan Seibert a Brian L McGlynn s nazvem MDinfin [1] Tento algoritmusje vylepsenım stavajıcıch algoritmu pro resenı urcenı smeru odtoku na ras-tru viz kapitola 2 Pro overenı spravnosti vysledku byla pouzita realnadata dvou pozemku u obcı Bykovice a Nucice Testovanı probıhalo na ras-trech o rozlisenı 5 metru Algoritmus byl naprogramovan v jazyce Pythonv prostredı NetBeans IDE 69 Pro spustenı v ArcGISu je potreba pridatdo prostredı vytvoreny toolbox upravit aktualnı cestu ke skriptu mainpya tento model nasledne spustit Vstupem modelu je rastr DMT a vystupnıadresar do ktereho se po dobehnutı modelu ulozı vysledny rastr s hodnotamismeru odtoku 1255 Algoritmus MDinfin je testovan na verzi ArcGIS 100Na nejnovejsı verzi ArcGIS 101 ktera vysla v cervnu 2012 nenı overenakompatibilita algoritmu v dusledku nefunkcnosti vıce nez jedne verze tohotoprogramu na jednom pocıtaci

2

2 Nejbeznejsı existujıcı algoritmy

Existujı tri nejbeznejsı algoritmy kazdy odlisne resıcı problematiku odtokuvody z rastru do sousednıch bunek Prvnım z nich je algoritmus D8 z roku1984 Algoritmus je podrobne popsan v nasledujıcı kapitole 3 Jelikoz odtoknastava vzdy jen do jedne sousednı bunky dochazı casto ke koncentracivodnıch sıtı a sıtrsquo odtoku pak neodpovıda skutecnosti Na druhou stranuje jeho vyhodou jeho jednoduchost a fakt ze nedochazı k nechtene disperzijako je tomu u druheho algoritmu

Druhym algoritmem je MD8 neboli multiple flow direction algorithm MD8algoritmem je voda odvadena do vsech nıze polozenych sousednıch buneka pomer vody je rozdelen procentualne podle sklonu Ve vysledku ma algo-ritmus tendenci vytvaret vıce realisticke prostorove sıte toku nez D8 tımze nedochazı k takove koncentraci vody v sıti U D8 ma mnohem vetsıvliv maly rozdıl vysek mezi sousednımi bunkami na to ktera bunka prijmeveskerou vodu Pouzitım MD8 tyto male vyskove rozdıly nemajı zdalekatakovy vliv jelikoz je mnozstvı vody rozdeleno pomerem mezi tyto bunkyNejvetsı nevyhodou tohoto algoritmu je jeho prılisna disperze na konver-gentnıch svazıch v dusledku odtoku do vsech nıze polozenych bunek

V roce 1997 byl navrzen algoritmus pojmenovany Dinfin Davidem G Tar-botonem z americke univerzity v Utahu Byl navrzen prıstup ktery je zalozenna osmi trojuhelnıkovych ploskach viz obrazek 3 Dıky tomuto postupu jsouodstraneny limitace v podobe moznosti pouze osmi smeru odtoku z bunkyProto je algoritmus pojmenovan Dinfin jelikoz muze nastat nekonecne moznostıvysledneho smeru odtoku Tento prıstup umoznuje pouze jeden smer odtokurozdeleny mezi jednu nebo dve bunky v zavislosti na smeru odtoku

Poslednı dva zmınene algoritmy MD8 a Dinfinmajı oproti D8 nevyhodu ve vetsıcasove narocnosti vypoctu V kapitole 4 je popsan algoritmus MDinfin kteryvyuzıva vyhody MD8 algoritmu za pouzitı trojuhelnıkovych plosek obdobnejako Dinfin algoritmus

3

3 Flow Direction D8

Pro pochopenı problematiky a zjevnost rozdılu mezi algoritmy je vhodneuvest jak funguje nastroj ktery pouzıva ArcGIS Zaklad algoritmu MDinfino nemz pojednava tato dokumentace je zalozen na podobnych postupech

31 Obecny princip D8

Princip nastroje urcenı smeru odtoku (Flow Direction) ktery pouzıva prostredıArcGIS je nasledujıcı Tento nastroj (tool) vezme vstupnı rastr digitalnıhomodelu terenu neboli vyskovy rastr Provede vypocet jehoz vystupem jerastr ktery v kazde bunce rastru obsahuje hodnotu urcujıcı smer odtokuz teto bunky Hodnot je osm podle osmi sousednıch bunek do kterych muzeodtekat voda viz obrazek 1 Prave podle osmi smeru odtoku se tento prıstupnazyva D8 (eight-direction approach)

Obrazek 1 Flow Direction D8 [3]

4

32 Popis algoritmu D8

Samotny vypocet algoritmu je v zasade primitivnı Pro vsechny sousednıbunky se vypocte maximalnı sklon [3]

maximalnı sklon = rozdıl vysek vzdalenost 100

Rozdıl vysek je rozdıl vysky v aktualnım bode a konkretnı sousednı bunkyVzdalenost je vypoctena mezi stredy bunek a lisı se v zavislosti na polozesousednı bunky Pro bunky sousedıcı vrcholem je hodnota velikosti pixeluprenasobena o odmocninu ze dvou Pro zbyle bunky sousedıcı hranou jevelikost vzdalenosti rovna velikosti pixelu Po nalezenı nejstrmejsıho smeruodtoku je hodnota ulozena v podobe bitove hodnoty reprezentujıcı danysmer Pred pouzitım nastroje Flow Direction se obvykle zpracuje vstupnırastr pomocı nastroje Sink Tento algoritmus zaplnı bezodtoke oblasti rastrunejnizsı hodnotou z okolı a do teto nejnizsı sousednı bunky pak posle voduPote jiz nemuze dojıt k situaci kdy vsechny sousednı bunky k dane buncemajı vyssı hodnoty vysek a nedochazelo by tedy k odtokuVysledny rastr nemusı obsahovat pouze bunky s hodnotami 202127 [4]Jestlize nastane situace kdy ma vıce sousednıch bunek nejnizsı hodnotuvysek pak je vysledna hodnota souctem vsech smeru Napr hodnota maximalnıhosklonu bude stejna pro sousednı bunku vlevo a nahore odtok tedy budesmerem na zapad (hodnota = 16) a na sever (hodnota = 64) vysledna hod-nota bude souctem 16 a 64 tedy 84

5

4 Popis algoritmu MDinfin

41 Obecny princip MDinfinObecny postup je prevzat z [1] Stejne jako v prıpade algoritmu Dinfin bylyzavedeny trojuhelnıkove plosky pro vypocet lokalnıho sklonu a smeru pro kazdoutrojuhelnıkovou plosku Okolo stredoveho boduM bylo vytvoreno osm trojuhelnıkuviz obrazek 3 Kazdy se zbyvajıcımi dvema vrcholy P1 P2 ve dvou sousedıcıchbunkach Pro kazdy z techto trojuhelnıku je vypocten smer nejvetsıho sklonuPokud oznacıme vysky bodu M P1 P2 jako hM hP1 hP2 rozdıly vysek sevypoctou takto

z1 = hP1 minus hM z2 = hP2 minus hM (1)

Obdobne se vypoctou rozdıly v x-ovych a y-ovych souradnicıch Po vypocturozdılu jednotlivych souradnic je vypocten normalovy vektor

n =

nx

ny

nz

=

z1y2 minus z2y1z1x2 minus z2x1y1x2 minus y2x1

(2)

Smer odtoku d a sklon s na trojuhelnıkove plose se vypocte pomocı rovnice3 Hodnota nula pro d oznacuje smer osy y a hodnota 3π2 oznacuje smerosy x

d =

0 nx = 0 ny ge 0

π nx = 0 ny lt 0

π2minus arctan(

ny

nx

) nx gt 0

3π2minus arctan(

ny

nx

) nx lt 0

(3)

s = minus tan

(arccos

(nzradic

n2x + n2

y + n2z

))(4)

Jestlize nejvetsı sklon od bodu M je mimo rozpetı 0-45 (π4 radian) jepouzit sklon strmejsı k jednomu z bodu P1 P2 a zaroven i sklon je spoctenk tomuto bodu V prıpade ze oba sousednı body jsou vyse polozeny nez bodM smer nenı pro tento trojuhelnık uvazovan Po spoctenı vsech osmi smerua sklonu pro jednotlive plosky jsou tyto smery povazovany za lokalne ne-jstrmejsı pro kazdy trojuhelnık v rozsahu 45 Smery vedoucı prımo do bodu

6

P1 nebo P2 tedy ty kde d = 0 nebo d = π4 jsou uvazovany pouze vprıpade kdy obe vedlejsı sousednı bunky majı smer k bodu P1 nebo P2Tato situace je znazornena na obrazku 2

Obrazek 2 Ukazka urcenı smeru odtoku z bunky [1]

Prvnı prıpad je smer mırıcı mezi bunky 5 a 6 Druhy prıpad je smer kteryvede prımo do bunky 3 Tato situace nastane jestlize pro trojuhelnık M43vyjde lokalnı smer d = π4 a pro trojuhelnık M32 smer vyjde d = 0Pote co je smer odtoku pro bunku vypocten je celkovy odtok rozdelendo vsech vyslednych smeru na zaklade sklonu Resenı teto problematiky jevıce popsano v sekci 42 Pro smery mırıcı mezi body P1 a P2 je odtokrozdelen do dvou bunek na zaklade nevejtsıho sklonu Pomer odtoku do buneks body P1 a P2 bude v tomto poradı α245 a α145

Obrazek 3 Trojuhelnıkove plosky [1]

7

42 Technicke resenı MDinfinVyse jiz bylo zmıneno ze algoritmus je napsan v jazyce Python Algoritmusje rozdelen do dvou skriptu Prvnı z nich obsahuje funkce a druhy je hlavnıVstupem do modelu je rastr digitalnıho modelu terenu a vystupnı adresardo ktereho se ulozı finalnı rastr smeru odtoku viz obr 4 Po nactenı rastruze vstupnıch parametru je tento rastr preveden na matici NumPy pomocıfunkce

arcpy RasterToNumPyArray ( InputRaster )

NumPy [5] je rozsırenı programovacıho jazyka Python je to balıcek uzıvanypro vedecke vypocty Umoznuje podporu velkych multi-dimenzionalnıch polıa matic spolu s velkou knihovnou matematickych funkcı pro praci s temitopoli

Algoritmus cyklem projızdı vsechny prvky matice a u tech ktere majı hod-notu ruznou od NoData nalezne okolı Hledanı okolı bunky provadı funkceneighbors ta je definovana takto

def ne ighbors ( i j array x y ) return nb1 nb2 nb3 nb4 nb5 nb6 nb7 nb8

Vstupem funkce je pozice v matici dale cela matice a jejı rozmery Funkceneighbors vypocıta hodnoty vysek sousednıch osmi bunek a vratı je na vystup

Obrazek 4 Dialogove okno nastroje MDinfin

Vystup z funkce neighbors slouzı jako jeden z vstupnıch parametru pro dalsıfunkci

8

Funkce byla pojmenovana dir slope jelikoz jejım vystupem je smer odtokua sklon tohoto smeru

def d i r s l o p e ( pointM nbrs vpix sp ix ) return d i r e c t i o n s l ope

Pro kazdy trojuhelnık byla spoctena hodnota d viz vzorec 3 Hodnota s bylapo spatnych a nelogickych vysledcıch pocıtana podle jineho vzorce ktery jizdaval spravne vysledky

s0 =

radicz212y21

+z22y22

(5)

Vzorec se lisı pro kazdy trojuhelnıcek uvedeny je pro vypocet sklonu kdy sousednıbunka je severozapadnı a severnı Tımto postupem bylo zbytecne pocıtatz-tovou slozku vekotoru n vzorec 2 Byly osetreny prıpady kdy sousednıbunky aktualnıho pocıtaneho trojuhelnıku jsou obe vyse polozene nebo obemimo rastr (NoData) Dalsı prıpad nastane jestlize je jeden bod vne rastra druhy v rastru lezı Smer je potom urcen prımo do toho bodu ktery nalezırastru Taktez i sklon je pocıtan pouze mezi tımto bodem a bodem M Lokalnı smer d v kazde plosce po vypoctenı nesmı prekrocit 45 V situacize tuto hodnotu prekrocı je smeru prirazena hodnota 0 nebo 45 v zavislostina vzajemnem porovnanı vysek bodu v trojuhelnıku Takto jsou zpracovanyvsechny plosky a je zjisteno zda-li do kazdeho trojuhelnıku nastava smerodtoku nebo ne Na konci funkce dir slope se kontroluje prıpad kdy smersousednıch trojuhelnıku odkazuje presne do stejneho bodu tedy hodnotysmeru musı byt pro prvnı trojuhelnık d = 45 a pro nasledujıcı sousednıtrojuhelnık d = 0 Vystupem funkce jsou dva vektory o osmi prvcıch smera sklon pro kazdou plosku

Dalsı fazı vypoctu je zjistenı pomeru vody ktera potece do jednotlivychsmeru K vypoctu pomeru byl pouzit tento vzorec [2]

fi =sxi8sum

j=1

sxj

(6)

kde s vyznacuje sklon vypocteneho smeru konkretnı trojuhelnıkove ploskya x je promenny exponent Pokud by byl exponent zvolen 1 bude vyslednasıtrsquo obdobna jako pri pouzitı MD8 algoritmu Pri zvetsovanı exponentu xk nekonecnu bude sıtrsquo stejna jako pri pouzitı D8 metody Vychozı hodnotaexponentu byla zvolena x = 4 coz je kompromis mezi obema variantami

9

Zmena exponentu se v soucasne podobe neprojevı na vyslednem rastru je-likoz vysledek prezentuje pouze smer odtoku a ne procentualnı cast Tohotopomeru bude vyuzito az pri spojenı skriptu s 2D modelem SMODERP

V dalsı casti vypoctu je rozdelen jiz zjisteny pomer z celkoveho odtokudo dvou prıpadne pouze do jedne bunky v zavislosti na smeru odtoku dVe vysledku je vypocten vektor osmi cısel kde kazda hodnota od 0 do 1prestavuje jiz procentualnı pomer z celkoveho odtoku do kazde sousednıbunky

Pro vyslednou reprezentaci smeru odtoku na vystup byl pro kazdou bunkuvytvoren vektor obsahujıcı 1 a 0 rıkajıcı zda nastava ci nenastava odtokdo sousednı bunky Tento vektor byl preveden na celocıselnou hodnotu po-mocı funkce bool2int

def boo l 2 i n t ( x ) y = 0for i j in enumerate ( x )

i f j y += 1ltlt ireturn y

Funkce ma na vstupu vektor jedicek a nul Naprıklad pro vektor 00000111kdy voda tece na severozapad sever a severovychod se funkce chova taktoJe testovano jestli platı j = 1 tedy prvnıch pet nul vektoru funkce preskocıa pro prvnı jednicku se pricte k promenne y 20 v dalsım kroku 21 a v poslednım22 Operator vyjadruje totiz bitovy posun smerem doleva Vysledkem jena vystupu cıslo y = 1 + 2 + 4 = 7

Pro vsechny bunky byla vypoctena hodnota reprezentujıcı smer odtoku Tatohodnota se ulozı do matice a ta se nasledne prevede na vysledny rastr

f l o w d i r = arcpy NumPyArrayToRaster ( value LLcorner spix vpix rdquordquo )

value hodnota reprezentujıcı smer odtokuLLcorner souradnice leveho dolnıho rohuspix sırka pixeluvpix vyska pixelu

10

5 Vysledky

Algoritmus MDinfin byl testovan na skutecnych datech dvou pozemku u obcıNucice ve Stredoceskem kraji a Bykovice v kraji Jihomoravskem rastry jsouv prıloze 71 Oba dva rastry jsou o rozlisenı 5 metru Finalnı rastry jsouporovnavany s rastry vytvorenymi v prostredı ArcGIS nastrojem Flow Di-rection metodou D8

51 Realna data - Bykovice

Vysledne rastry Flow Direction pro uzemı Bykovice jsou uvedeny v prıloze72 Oba rastry byly pro hodnoty 202127 obarveny shodnou barvou kvulilepsı nazornosti a porovnatelnosti vysledku Rastr ktery obsahuje z celkovehopoctu 44807 bunek celkem 23655 bunek s hodnotami vysek po probehnutıalgoritmy dal nasledujıcı vysledky

FD D8 MDinfin1 3650 7372 666 9174 207 188 21 716 94 3732 791 8564 8818 1045128 9408 14983sum

23655 14983

Tabulka 1 Tabulka porovnanı obou algoritmu pro rastr Bykovic

FD je zkratka pro Flow Direction cili smer odtoku reprezentovany celocıselnouhodnotou Ostatnı hodnoty u vysledneho rastru na ktery byl pouzit algorit-mus MDinfin jsou v rozpetı 0246 V rozmezı hodnot smeru odtoku 246255se nevyskytujı zadne bunky Cas potrebny pro vykonanı skriptu byl v prıpadeD8 4 vteriny Pro algoritmus MDinfin byl cas 15 vterin

11

52 Realna data - Nucice

Vysledne rastry jsou uvedeny v prıloze 73 Opet bylo pouzito shodne obar-venı pro zakladnı smery u obou rastru Rastr Nucice obsahoval data na 82732bunkach z celkove poctu 125449 bunek Vysledky jsou pro prehlednost uve-deny v tabulce

FD D8 MDinfin1 12186 12332 12441 87034 16907 10278 9826 1642316 2516 28832 5010 241764 7788 366128 16058 25475sum

82732 55932

Tabulka 2 Tabulka porovnanı obou algoritmu pro rastr Nucic

Ostatnı hodnoty u vysledneho rastru na ktery byl pouzit algoritmusMDinfin jsou v rozpetı 0255 Cas potrebny pro vykonanı skriptu byl v prıpadeD8 6 vterin Pro algoritmus MDinfin byl cas 50 vterin

12

6 Zaver

Cılem projektu bylo vytvorit funkcnı skript obsahujıcı algoritmus pojmen-ovany MDinfin [1] ktery resı odtok do sousednıch bunek rastru Algoritmusbyl napsan v programovacım jazyce Python a testovan na realnych datechVysledky byly mırnym prekvapenım kdy zejmena hodnoty smeru 128 tedyseverovychodnıho se vyskytovaly ve vysledku velmi casto viz tabulky 1 a 2Predpokladem bylo ze se odtok rozlozı do vıce smeru a pocet bunek s hod-notami zakladnıch smeru 1248163264 a 128 bude mene nez v prıpade al-goritmu D8 K rozkladu do vıce smeru sice doslo ale pocet nekterych bunekse zakladnımi smery byl vetsı u algoritmu MDinfin

Co se tyce delky doby behu algoritmu je algoritmus MDinfin pomalejsı viz casyv kapitole 5 nez D8 z nekolika zrejmych duvodu Predevsım algoritmus D8provadı mnohem mene pocetnıch operacı z duvodu jeho mensı slozitostiviz 3 Dalsım duvodem je take rozdıl v jazyce ve kterem jsou oba algo-ritmy napsany D8 je napsan v programovacım jazyce C++ ktery na vetsıchdatech je mnohonasobne rychlejsı nez Python Prepsanım algoritmu MDinfindo jazyka C++ by mohla byt cesta k budoucımu zvysenı rychlosti pracealgoritmu

13

Reference

[1] SEIBERT Jan McGlynn BL A new triangular multiple flow di-rection algortihm for computing upslope areas from gridded digi-tal elevation models [online] [cit 13 5 2013] Dostupne ke stazenız URL lthttpciteseerxistpsueduviewdocdownloaddoi=101179977amprep=rep1amptype=pdfgt

[2] HOLMGREN Peter Multiple direction algortihms for runoff modellingin grid based elevation models An empirical evaluation [online] [cit13 5 2013] Dostupny z URL ltftpwwwlwrkthseCommonUllaMFor_Imran[1994]20holmgren20-20multiple20flow

20direction20algorithms20for20runoff20modelling20in

20grid20based20elevation20modelspdf gt

[3] ESRI ESRI WebHelp - How Flow Direction works [online] [cit13 5 2013] Dostupne z URL lthttphelparcgiscomenarcgisdesktop100helpindexhtml009z00000063000000

htmgt

[4] ESRI ESRI Webhelp - Flow Direction (Spatial Analyst) [online][cit 13 5 2013] Dostupne z URL lthttphelparcgiscomenarcgisdesktop100helpindexhtml009z00000052000000

htmgt

[5] WIKIPEDIA NumPy [online] [cit 13 5 2013] Dostupne z URLlthttpenwikipediaorgwikiNumPygt

[6] INFORMIT Working with operators [online] [cit 13 5 2013] Dos-tupne z URL lthttpwwwinformitcomarticlesarticleaspxp=2002831ampseqNum=6gt

14

7 Prılohy

71 Bykovice a Nucice vstupnı DMT rastry

Obrazek 5 DMT Bykovice

Obrazek 6 DMT Nucice

15

72 Bykovice vysledky

Obrazek 7 Flow Direction D8

Obrazek 8 Flow Direction MDinfin

16

73 Nucice vysledky

Obrazek 9 Flow Direction D8

Obrazek 10 Flow Direction MDinfin

17

Page 15: pro zac ate cn kygeo.fsv.cvut.cz/gdata/2013/pin2/e/dokumentace/... · 2013-06-05 · CESK E VYSOK E U CEN I TECHNICKE V PRAZE FAKULTA STAVEBN I OBOR GEODEZIE A KARTOGRAFIE Dokumentace

1 Uvod

11 O tematu

Tema bylo urceno doc Krasou z katedry Hydromelioracı a krajinneho inzenyrstvıpro prezentovanı vysledku vypoctu eroznıho smyvu a transportu splaveninPresto ze je nastroj primarne urcen pro toto pouzitı byla snaha jej napsatco nejuniverzalnejiCılem projektu je vytvorit atlas sestaveny z jednotlivych tematickych mapTyto mapy jsou vytvoreny pro cca tretinu uzemı Ceske Republiky V potrebnemmerıtku (cca 150 000) je nemozne vytvaret spojene tematicke mapy Bylotedy nutne nejprve vyhodnotit jak nejlepe vysledky prezentovat pote vy-tvorit nastroj ktery mapy podle pozadavku upravı (generalizuje vizualizo-vane prvky) vygeneruje jednotlive mapove listy a jejich prehledku Dalevygeneruje seznam mapovych listu pro jednotliva povodı a dalsı potrebneudajeNastroj je psan v jazyce Python pro ArcGIS 100

12 Strucny souhrn

Prace se sklada z nekolika castı

1 Vytvorenı gridu - Tato cast je nejrozsahlejsı Jedna se o skript kterypro dana povodı vytvorı rozsah mapovych listu (tzv index grid layer)a do atributovych tabulek ulozı potrebne hodnoty viz dale

2 Generalizace obsahu mapy - Generalizace nakonec probehla velmijednoduse a to kategorizacı hodnot kumulovaneho smyvu

3 Uprava vzhledu a export - Tato cast byla provadena manualne varcgis layout view Po vytvorenı kyzeneho vzhledu pote probehlo ge-nerovanı jednotlivych mapovych listu pomocı toolbaru Data DrivenPages

2

2 Popis pracı

21 Nastroj pro tvorbu gridu

Tento nastroj vytvorı polygonovou vrstvu obsahujıcı grid a to podle zadanehomerıtka a velikosti mapoveho pole Do atributove tabulky gridu vlozı sloupecs nazvy mapovych listu a sloupec s cısly sekcı (bude vysvetleno dale) Zarovenprida do vstupnı polygonove vrstvy sloupec s cısly sekcı a sloupec s nazvymapovych listu na kterych se dany polygon (povodı) nachazı Dale vytvorıvrstvu nazev gridu dissolve pro prehledku sekcı

Pojem sekce Sekce je tvorena vsemi dotykajıcımi se polygony Mapovelisty jsou ke kazde sekci tvoreny zvlastrsquo a jejich nazvy jsou pote rozsıreny ocıslo sekce Prıklad cıslovanı mapovych listu 1-A1 1-A2 2-A1 2-A2

Obrazek 1 Vstupnı polygonova vrstva

3

Obrazek 2 Ocıslovane sekce polygonove vrstvy

211 Uvodnı dialog

Uvodnı dialog nastroje obsahuje pole pro 5 parametru

bull In - vstupnı parametr datovy typ Feature classVstupnı vrstva polygonu

bull Scale - vstupnı parametr datovy typ LongPozadovane merıtko

bull Map field width - vstupnı parametr s nastavenou defaultnı hodnotou25 datovy typ DoubleSırka vysledneho mapoveho ramce v cm

bull Map field height - vstupnı parametr s nastavenou defaultnı hodnotou30 datovy typ DoubleVyska vysledneho mapoveho ramce v cm

bull Out - vystupnı parametr datovy typ Feature classVystupnı vrstva gridu

4

Obrazek 3 Grid - Uvodnı dialog

212 Vysledny log

Kompletnı prıklad vysledneho logu je k nalezenı v prıloze 51Obsahuje tyto informace

bull Umıstenı pouzıvane databaze na disku

bull Dale v kazdem cyklu

ndash Poradove cıslo cyklu

ndash Aktualnı pocet nezpracovanych polygonu

ndash Cıslo vytvarene sekce

ndash Identifikatory polygonu tvorıcıch danou sekci

bull Pocet sekcı

bull Pocet mapovych listu v kazde sekci

213 Vysledne vrstvy

Vysledny grid pro merıtko 1 80 000 a defaultnı velikost mapoveho pole (25x 30 cm) vypada nasledovne

5

Obrazek 4 Grid - Vysledna vrstva

214 Cinnost nastroje podrobne

1 Prıpravne cinnostiV prvnıch radcıch kodu jsou vytvoreny pomocne promenne a pole znichz pro dalsı cinnost je potreba zmınit zasobnık IDs Ten je naplnenidentifikatory povodıPokud jiz neexistujı jsou ve vstupnı polygonove vrstve vytvoreny atri-butove sloupce hard ID section MapSheets

bull hard ID - Do tohoto sloupce byly zkopırovany identifikatory abyi po rozdelenı do nekolika vrstev mely polygony jednoznacny iden-tifikator

bull section - Po vypoctu sekcı sem bude pro kazdy polygon zapsanocıslo sekce ve ktere se nachazı

bull MapSheets - Atribut se seznamem mapovych listu na kterych sedane povodı nachazı

Ukazka tvorby atributoveho sloupce

fieldList = arcpyListFields(inFeatureClass rsquoMapSheetsrsquo)

6

fieldCount = len(fieldList)

if (fieldCount = 1)

arcpyAddField_management(inFeatureClass rsquoMapSheetsrsquo rsquoTEXTrsquo)

2 Hlavnı vypocetnı cast

Hlavnı cast je cela v cyklu while (len(IDs) gt 0) tj cyklus probıhadokud jsou v zasobnıku IDs hodnoty Na konci cyklu jsou vzdy identi-fikatory zpracovanych povodı ze zasobnıku mazany V kazdem prubehucyklu jsou selektovany povodı tvorıcı 1 sekci k takove sekci je potevytvoren grid a jsou plneny nove atributove sloupce

Ukazka hlavnıho cyklu

while len(IDs) gt 0

oznacenı povodı i-te sekce

rows_sel = arcpySearchCursor(rsquopovodi_classrsquo)

for row_sel in rows_sel

IDsremove(row_selOBJECTID)

V kazdem prubehu cyklu je zpracovana 1 sekce - tj shluk povodı kteremajı spolecnou cast hranice Sekce je tvorena na zaklade dotazu Se-lectByLocation s definicı BOUNDARY TOUCHES Dotaz se opakujev cyklu dokud se pocet oznacenych povodı zvetsuje K tomu slouzıpromenne matchcount1 matchcount2 ktere obsahujı pocet oznacenychpolygonu

Vytvorenı sekce

bull Oznacenı prvnıho nezpracovaneho polygonu

first_ID = str(IDs[0])

fieldName = OBJECTID

Query = + fieldName + = + first_ID

arcpySelectLayerByAttribute_management(rsquopovodi_classrsquo rsquoNEW_SELECTIONrsquo Query)

matchcount1 = int(arcpyGetCount_management(rsquopovodi_classrsquo)getOutput(0))

bull Prvnı prubeh SelectByLocation

7

arcpySelectLayerByLocation_management(rsquopovodi_classrsquo rsquoBOUNDARY_TOUCHESrsquo

rsquopovodi_classrsquo)

matchcount2 = int(arcpyGetCount_management(rsquopovodi_classrsquo)getOutput(0))

bull Dalsı prubehy SelectByLocation

while matchcount1 lt matchcount2

matchcount1 = matchcount2

arcpySelectLayerByLocation_management(rsquopovodi_classrsquo rsquoBOUNDARY_TOUCHESrsquo

rsquopovodi_classrsquo)

matchcount2 = int(arcpyGetCount_management(rsquopovodi_classrsquo)getOutput(0))

Oznacene polygony jsou ulozeny jako polygonova vrstva do vstupnı ge-odatabaze Tato vrstva je dale pouzita pro tvorbu gridu

Vytvorenı gridu

Pred samotnou tvorbou bylo potreba zjistit rozsah sekce Pokud bylasekce mensı nez 1 mapovy list bylo treba definovat souradnice polohylistu tak aby povodı lezelo na stredu listu Do zasobnıku byly nactenysouradnice lomovych bodu povodı a byly z nich vybrany maximalnı aminimalnı hodnoty Jejich rozdıl pak urcil rozsah sekce

Prıklad plnenı zasobnıku souradnicema

desc = arcpyDescribe(outputFeatureClassPath+rsquorsquo+output_name)

shape_field_name = descShapeFieldName

rows3 = arcpySearchCursor(outputFeatureClassPath+rsquorsquo+output_name)

mbr_X=[]

mbr_Y=[]

for row3 in rows3

Create the geometry object

feat = row3getValue(shape_field_name)

partnum = 0

for pnt in featgetPart(partnum)

mbr_Xappend(pntX)

mbr_Yappend(pntY)

partnum += 1

8

Vytvorenı gridu pote probıha budrsquo s definovanou nebo s nedefinovanoupolohou pocatecnıho mapoveho listu Pro vytvorenı gridu je pouzitafunkce GridIndexFeatures cartography

Ukazka

arcpyGridIndexFeatures_cartography(outputFeatureClassPath+rsquorsquo+grid_name

outputFeatureClassPath+rsquorsquo+output_name USEPAGEUNIT scale_str

sheet_width_str sheet_high_str str(grid_start_pnt_X)+rsquo rsquo+str(grid_start_pnt_Y))

Grid je tedy vytvoren pro jednu sekci Po vsech prubezıch cyklu jsoutakto vytvorene vrstvy gridu spojeny do jedne finalnı vrstvy V cyklujsou dale plneny nove atributove sloupce - cısla sekcı a nazvy mapovychlistu a to jak do nove (vystupnı) vrstvy gridu tak do vstupnı vrstvypovodı

3 Vytvorenı finalnıch vrstev tisk vysledku Jak bylo receno na zaverjsou spojeny jednotlive vrstvy gridu Vedle toho je vytvorena vrstvaspojenych mapovych listu po sekcıch - funkcı Dissolve - pro tvorbuprehledky Jsou vytisknuty vysledne hodnoty viz 212

22 Generalizace

Pro generalizaci byl napsan skript ktery nacıta liniovou vrstvu toku Tentoskript byl jiz psan na mıru podkladovym datum a pri nacıtanı je v nemvyuzito znalosti struktury danych podkladovych dat Skript k vrstve pripojıexternı tabulku a vytvorı atributovy sloupec kategorie Podle dat z externıtabulky pak plnı novy sloupec hodnotami 1 - 5 podle mnozstvı unasenehosedimentu Tato hodnota je pak pouzita pri vizualizaci datZajımavostı je ze pro nacıtanı musela byt tabulka indexovana viz 31

221 Uvodnı dialog

Uvodnı dialog obsahuje dva parametry

bull Input Feature Class Vstupnı liniova vrstva rıcnıch useku

bull Table Vstupnı tabulka obsahujıcı hodnoty rıcnıch splavnenin

9

222 Vysledny log

Vysledny log je k nahlednutı v prıloze 52 Obsahuje tyto informace

bull Pocet vsech rıcnıch useku

bull Pocet useku v jednotlivych kategoriıch

23 Finalnı upravy a export

Jak jiz bylo zmıneno finalnı vzhled mapoveho listu byl vytvoren manualne vLayout view a pomocı toolbaru Data Driven Pages Tento postup je casoveekonomictejsı a je jım dosazeno lepsıch vysledku dıky prehlednosti ToolbarData Driven Pages pak umoznuje vkladat dynamicke textove pole ktere seautomaticky menı s menıcım se mapovym listem Takovym polem je naprnazev mapoveho listu Stacı tedy definovat vzhled jednoho mapoveho listuv toolbaru Data Driven Pages navolit prıslusne pole - ty byly vytvorenynastrojem Grid viz 21 Dynamicky bylo potreba propojit s mapovym oknemi prehledku ktera byla vytvorena jako druhy Data Frame To se provedlo defi-novanım rozsahu podle hlavnıho mapoveho okna v Properties -iquest Data Frame-iquest Extant a definovanım Definition Query ve vlastnostech vrstvy Dalsım dy-namickym prvkem jsou oznacenı sousednıch mapovych listu a cıslo strankyNa takto sestavenou stranku s dynamickymi prvky bylo mozne pouzıt exportmapy do pdf a Atlas byl vygenerovanPrıklad dynamickeho textu pro nazev mapoveho listultdyn type=page property=PageNamegt

3 Problemy a moznosti rozsırenı

31 Pripojovanı externıch tabulek

Pri pripjovanı externıch tabulek musely byt indexovany hodnoty atribu-toveho sloupce pouziteho k parovanı To probehlo prıkazemarcpyAddIndex management (layer HydroID)Pripojenı tabulky musı probıhat k Feature layer Proto bylo nutne nejprve zFeature Class vytvorit Feature Layer1 Pote mohla byt tabulka pripojena

arcpyAddIndex_management (layer HydroID)

arcpyAddJoin_management(layer HydroID table Riverid)

1Rozdıl mezi Feature Layer a Feature Class je vysvetlen v prilozenem Tutorialu pro-gramovanı v Pythonu pro ArcGIS

10

Zde nastal problem s prıstupem k atributum Obecne nesmı nazvy atri-butovych sloupcu obsahovat mezery K hodnotam je pristupovano pres jed-notlive radky s parametrem nazev sloupce

rows= arcpySearchCursor(layer)

for row in rows

value=rownazev_sloupce

Pripojena tabulka ovsem mela v nazvech sloupcu mezeru K takto pojmeno-vanemu sloupci muselo byt pristupovano prıkazem getValue

rows= arcpySearchCursor(layer)

for row in rows

value=rowgetValue(rsquonazev tabulky$nazev sloupcersquo)

32 Doba behu tvorby gridu

Doba behu nastroje pro tvorbu gridu je znepokolive dlouha Bylo prove-deno merenı casu behu jednotlivych castı kodu funkcı time z modulu timeVysledky ukazaly ze nejdele trva vytvarenı novych vrstev Vrstva se muzevytvaret az 20 sekund Snaha o optimalizaci donutila nahradit vytvarenı vrs-tev s minimalnım ohranicujıcım obdelnıkem sekvencnım ukladanım souradniclomovych bodu polygonu z nichz pak funkcemi min a max byly tyto hodnotyzıskany Prubeh se tak urychlil o desıtky sekund (v jednom prubehu cyklupriblizne o 15 sekund) Dalsı moznostı bylo vyuzıt prostoroveho indexu datTato moznost nebyla vyuzita protoze ArcGIS pouzıva k prostorovemu in-dexovanı pravidelny grid Zıskanı MBR2 nebylo nalezeno Vyuzitı indexu byovsem problem neresilo Jak jiz bylo zmıneno nejdele trva vytvarenı novychvrstev Bohuzel funkce GridIndexFeatures cartography pro vytvorenı griduneumı pracovat se selektovanymi daty Tedy v kazdem cyklu musı byt ulozenapolygonova vrstva tvorıcı 1 sekci Pote mohla byt vytvorena vrstva tvorıcıgrid Tedy v kazdem prubehu cyklu jsou vytvareny 2 nove vrstvy Jelikozautor neprisel na zpusob jine optimalizace je nastroj pomaly Pro zadanydataset s 58mi povodımi jeho cinnost probıha desıtky minut

33 Moznosti rozsırenı

Do skriptu by se dal zakomponovat export seznamu mapovych listu pro kazdepovodı V soucasne verzi je tvoren exportem atributove tabulky

2minimum bounding rectangle - minimalnı ohranicujıcı obdelnık

11

4 Zaver

Byly vytvoreny nastroje pro automatizaci tvorby Atlasu pro mapy eroznıhosmyvu a transportu splavenin Tvorba Atlasu probıha v nekolika krocıchVizualizovane prvku jsou generalizovany Dale je vytvoren Grid ktery jepouzit jako indexova vrstva pro funkci Data Driven Pages Tou jsou vy-tvoreny jednotlive mapove listy Pomocı dynamickych prvku je pak vytvorenvzhled ktery se menı se zmenou mapoveho listu Nedostatkem je rychlostnastroje pro tvorbu gridu Presto ze je nastroj pomaly je zcela funkcnı Vprıpade potreby dalsıho rozsırenı bude ale vhodne vysledky nacıtat do novehonastroje Vzorovy vytisk vysledneho atlasu je prilozen Vzhledem k tomu zezpracovavana data jsou rozsahla a podlehajı autorskemu zakonu je vytvorenjen vzorovy vytisk z 6ti povodı Nastroje jsou psany v jazyce Python 26 proArcGIS 100 Pri praci byla vyuzıvana predevsım online napoveda ArcGISa diskuznı programatorska fora Kompletnı zdrojovy kod je ke stazenı nastrankach predmetu PIN2

12

5 Prılohy

51 Vysledny log tvorby gridu

Executing Grid

JAtlasvzorektemp_selectpovodi_vzorekgdbpokusne_povodi

70000 25 30 JAtlasvzorektemp_selectpovodi_vzorekgdbgrid70

Start Time Wed May 15 020551 2013

Running script Script2

Output folder JAtlasvzorektemp_selectpovodi_vzorekgdb

_____________________________________________________________________

count of basin polygon to process 6

_____________________________________________________________________

RUN 1

count of basins in 1 section 3

Their ID

ID 1

ID 3

ID 6

_____________________________________________________________________

count of basin polygon to process 3

_____________________________________________________________________

RUN 2

count of basins in 2 section 1

Their ID

ID 2

_____________________________________________________________________

count of basin polygon to process 2

_____________________________________________________________________

RUN 3

count of basins in 3 section 2

Their ID

ID 4

ID 5

----- RESULT -----

Number of sections 3

Number of map sheets

in section 1 13

in section 2 1

in section 3 2

Completed script Grid

Succeeded at Wed May 15 021359 2013 (Elapsed Time 8 minutes 8 seconds

13

52 Vysledny log generalizace

Executing generalization JAtlasvzorek2011_NAZV_nadrze2011_watemsedem

NAZV_tokyVT28_finshp

JAtlasvzorek2011_NAZV_nadrze2011_watemsedem28_vypocet

projectriversedimentxlsxprojectriversediment$

Start Time Wed May 15 075624 2013

Running script generalization

Category created

Total count of river parts 2879

Count of category 1 2428

Count of category 2 118

Count of category 3 68

Count of category 4 20

Count of category 5 245

Completed script generalization

Succeeded at Wed May 15 075638 2013 (Elapsed Time 1400 seconds)

14

CESKE VYSOKE UCENI TECHNICKE V PRAZE

FAKULTA STAVEBNI

OBOR GEODEZIE A KARTOGRAFIE

Dokumentace k projektu informatika 2

Stanovenı smeru odtokuna rastrovem digitalnım modelu

a implementace algoritmudo prostredı ArcGIS

BC JAN ZAJICEK

5 cervna 2013

Obsah

Obsah 1

1 Uvod 2

2 Nejbeznejsı existujıcı algoritmy 3

3 Flow Direction D8 431 Obecny princip D8 432 Popis algoritmu D8 5

4 Popis algoritmu MDinfin 641 Obecny princip MDinfin 642 Technicke resenı MDinfin 8

5 Vysledky 1151 Realna data - Bykovice 1152 Realna data - Nucice 12

6 Zaver 13

Reference 14

7 Prılohy 1571 Bykovice a Nucice vstupnı DMT rastry 1572 Bykovice vysledky 1673 Nucice vysledky 17

1

1 Uvod

Tato dokumentace byla zpracovana v ramci predmetu Projekt Informatika 2Semestralnı prace bude pouzita jako z jedna castı autorovi diplomove praces nazvem SMODERP 2D rozsırenı resıcı vztahy soustredeneho a plosnehoodtoku na danem uzemı Duvodem zpracovanı tohoto tematu byla potrebapouzitı v diplomove praci vıce nez jednoho algoritmu pro urcenı smeruodtoku v prostredı ArcGIS V soucasne dobe ArcGIS vyuzıva algoritmusD8 viz kapitola 3 jako jediny algoritmus pro vypocet smeru odtoku Tentoalgoritmus je soucastı Hydrology tools Nastroje ze skupiny Hydrology sepouzıvajı k modelovanı chovanı toku vody na povrchu Nejbeznejsı pouzıvanadigitalnı data povrchu Zeme jsou rastry digitalnı modelu terenu DMT slozenez jednotlivych bunek pixelu Tyto DMT rastry jsou pouzity jako vstupypro ruzne charakteristiky povrchu DMT rastr je souvisly povrch obvykleodkazujıcı na povrch Zeme Presnost dat je dana rozlisenım rastru taktezvzdalenostı mezi body rastru Informace o tvaru zemskeho povrchu je uzitecnapro mnoho oboru jako je napr zemedelstvı lesnictvı zivotnı prostredı neboregionalnı planovanı Tyto obory vyzadujı pochopenı jak voda tece v ramciuzemı a jak zmeny na tomto uzemı nasledne ovlivnı jejı tok

Cılem projektu bylo naprogramovat algoritmus ktery v roce 2007 publiko-vali Jan Seibert a Brian L McGlynn s nazvem MDinfin [1] Tento algoritmusje vylepsenım stavajıcıch algoritmu pro resenı urcenı smeru odtoku na ras-tru viz kapitola 2 Pro overenı spravnosti vysledku byla pouzita realnadata dvou pozemku u obcı Bykovice a Nucice Testovanı probıhalo na ras-trech o rozlisenı 5 metru Algoritmus byl naprogramovan v jazyce Pythonv prostredı NetBeans IDE 69 Pro spustenı v ArcGISu je potreba pridatdo prostredı vytvoreny toolbox upravit aktualnı cestu ke skriptu mainpya tento model nasledne spustit Vstupem modelu je rastr DMT a vystupnıadresar do ktereho se po dobehnutı modelu ulozı vysledny rastr s hodnotamismeru odtoku 1255 Algoritmus MDinfin je testovan na verzi ArcGIS 100Na nejnovejsı verzi ArcGIS 101 ktera vysla v cervnu 2012 nenı overenakompatibilita algoritmu v dusledku nefunkcnosti vıce nez jedne verze tohotoprogramu na jednom pocıtaci

2

2 Nejbeznejsı existujıcı algoritmy

Existujı tri nejbeznejsı algoritmy kazdy odlisne resıcı problematiku odtokuvody z rastru do sousednıch bunek Prvnım z nich je algoritmus D8 z roku1984 Algoritmus je podrobne popsan v nasledujıcı kapitole 3 Jelikoz odtoknastava vzdy jen do jedne sousednı bunky dochazı casto ke koncentracivodnıch sıtı a sıtrsquo odtoku pak neodpovıda skutecnosti Na druhou stranuje jeho vyhodou jeho jednoduchost a fakt ze nedochazı k nechtene disperzijako je tomu u druheho algoritmu

Druhym algoritmem je MD8 neboli multiple flow direction algorithm MD8algoritmem je voda odvadena do vsech nıze polozenych sousednıch buneka pomer vody je rozdelen procentualne podle sklonu Ve vysledku ma algo-ritmus tendenci vytvaret vıce realisticke prostorove sıte toku nez D8 tımze nedochazı k takove koncentraci vody v sıti U D8 ma mnohem vetsıvliv maly rozdıl vysek mezi sousednımi bunkami na to ktera bunka prijmeveskerou vodu Pouzitım MD8 tyto male vyskove rozdıly nemajı zdalekatakovy vliv jelikoz je mnozstvı vody rozdeleno pomerem mezi tyto bunkyNejvetsı nevyhodou tohoto algoritmu je jeho prılisna disperze na konver-gentnıch svazıch v dusledku odtoku do vsech nıze polozenych bunek

V roce 1997 byl navrzen algoritmus pojmenovany Dinfin Davidem G Tar-botonem z americke univerzity v Utahu Byl navrzen prıstup ktery je zalozenna osmi trojuhelnıkovych ploskach viz obrazek 3 Dıky tomuto postupu jsouodstraneny limitace v podobe moznosti pouze osmi smeru odtoku z bunkyProto je algoritmus pojmenovan Dinfin jelikoz muze nastat nekonecne moznostıvysledneho smeru odtoku Tento prıstup umoznuje pouze jeden smer odtokurozdeleny mezi jednu nebo dve bunky v zavislosti na smeru odtoku

Poslednı dva zmınene algoritmy MD8 a Dinfinmajı oproti D8 nevyhodu ve vetsıcasove narocnosti vypoctu V kapitole 4 je popsan algoritmus MDinfin kteryvyuzıva vyhody MD8 algoritmu za pouzitı trojuhelnıkovych plosek obdobnejako Dinfin algoritmus

3

3 Flow Direction D8

Pro pochopenı problematiky a zjevnost rozdılu mezi algoritmy je vhodneuvest jak funguje nastroj ktery pouzıva ArcGIS Zaklad algoritmu MDinfino nemz pojednava tato dokumentace je zalozen na podobnych postupech

31 Obecny princip D8

Princip nastroje urcenı smeru odtoku (Flow Direction) ktery pouzıva prostredıArcGIS je nasledujıcı Tento nastroj (tool) vezme vstupnı rastr digitalnıhomodelu terenu neboli vyskovy rastr Provede vypocet jehoz vystupem jerastr ktery v kazde bunce rastru obsahuje hodnotu urcujıcı smer odtokuz teto bunky Hodnot je osm podle osmi sousednıch bunek do kterych muzeodtekat voda viz obrazek 1 Prave podle osmi smeru odtoku se tento prıstupnazyva D8 (eight-direction approach)

Obrazek 1 Flow Direction D8 [3]

4

32 Popis algoritmu D8

Samotny vypocet algoritmu je v zasade primitivnı Pro vsechny sousednıbunky se vypocte maximalnı sklon [3]

maximalnı sklon = rozdıl vysek vzdalenost 100

Rozdıl vysek je rozdıl vysky v aktualnım bode a konkretnı sousednı bunkyVzdalenost je vypoctena mezi stredy bunek a lisı se v zavislosti na polozesousednı bunky Pro bunky sousedıcı vrcholem je hodnota velikosti pixeluprenasobena o odmocninu ze dvou Pro zbyle bunky sousedıcı hranou jevelikost vzdalenosti rovna velikosti pixelu Po nalezenı nejstrmejsıho smeruodtoku je hodnota ulozena v podobe bitove hodnoty reprezentujıcı danysmer Pred pouzitım nastroje Flow Direction se obvykle zpracuje vstupnırastr pomocı nastroje Sink Tento algoritmus zaplnı bezodtoke oblasti rastrunejnizsı hodnotou z okolı a do teto nejnizsı sousednı bunky pak posle voduPote jiz nemuze dojıt k situaci kdy vsechny sousednı bunky k dane buncemajı vyssı hodnoty vysek a nedochazelo by tedy k odtokuVysledny rastr nemusı obsahovat pouze bunky s hodnotami 202127 [4]Jestlize nastane situace kdy ma vıce sousednıch bunek nejnizsı hodnotuvysek pak je vysledna hodnota souctem vsech smeru Napr hodnota maximalnıhosklonu bude stejna pro sousednı bunku vlevo a nahore odtok tedy budesmerem na zapad (hodnota = 16) a na sever (hodnota = 64) vysledna hod-nota bude souctem 16 a 64 tedy 84

5

4 Popis algoritmu MDinfin

41 Obecny princip MDinfinObecny postup je prevzat z [1] Stejne jako v prıpade algoritmu Dinfin bylyzavedeny trojuhelnıkove plosky pro vypocet lokalnıho sklonu a smeru pro kazdoutrojuhelnıkovou plosku Okolo stredoveho boduM bylo vytvoreno osm trojuhelnıkuviz obrazek 3 Kazdy se zbyvajıcımi dvema vrcholy P1 P2 ve dvou sousedıcıchbunkach Pro kazdy z techto trojuhelnıku je vypocten smer nejvetsıho sklonuPokud oznacıme vysky bodu M P1 P2 jako hM hP1 hP2 rozdıly vysek sevypoctou takto

z1 = hP1 minus hM z2 = hP2 minus hM (1)

Obdobne se vypoctou rozdıly v x-ovych a y-ovych souradnicıch Po vypocturozdılu jednotlivych souradnic je vypocten normalovy vektor

n =

nx

ny

nz

=

z1y2 minus z2y1z1x2 minus z2x1y1x2 minus y2x1

(2)

Smer odtoku d a sklon s na trojuhelnıkove plose se vypocte pomocı rovnice3 Hodnota nula pro d oznacuje smer osy y a hodnota 3π2 oznacuje smerosy x

d =

0 nx = 0 ny ge 0

π nx = 0 ny lt 0

π2minus arctan(

ny

nx

) nx gt 0

3π2minus arctan(

ny

nx

) nx lt 0

(3)

s = minus tan

(arccos

(nzradic

n2x + n2

y + n2z

))(4)

Jestlize nejvetsı sklon od bodu M je mimo rozpetı 0-45 (π4 radian) jepouzit sklon strmejsı k jednomu z bodu P1 P2 a zaroven i sklon je spoctenk tomuto bodu V prıpade ze oba sousednı body jsou vyse polozeny nez bodM smer nenı pro tento trojuhelnık uvazovan Po spoctenı vsech osmi smerua sklonu pro jednotlive plosky jsou tyto smery povazovany za lokalne ne-jstrmejsı pro kazdy trojuhelnık v rozsahu 45 Smery vedoucı prımo do bodu

6

P1 nebo P2 tedy ty kde d = 0 nebo d = π4 jsou uvazovany pouze vprıpade kdy obe vedlejsı sousednı bunky majı smer k bodu P1 nebo P2Tato situace je znazornena na obrazku 2

Obrazek 2 Ukazka urcenı smeru odtoku z bunky [1]

Prvnı prıpad je smer mırıcı mezi bunky 5 a 6 Druhy prıpad je smer kteryvede prımo do bunky 3 Tato situace nastane jestlize pro trojuhelnık M43vyjde lokalnı smer d = π4 a pro trojuhelnık M32 smer vyjde d = 0Pote co je smer odtoku pro bunku vypocten je celkovy odtok rozdelendo vsech vyslednych smeru na zaklade sklonu Resenı teto problematiky jevıce popsano v sekci 42 Pro smery mırıcı mezi body P1 a P2 je odtokrozdelen do dvou bunek na zaklade nevejtsıho sklonu Pomer odtoku do buneks body P1 a P2 bude v tomto poradı α245 a α145

Obrazek 3 Trojuhelnıkove plosky [1]

7

42 Technicke resenı MDinfinVyse jiz bylo zmıneno ze algoritmus je napsan v jazyce Python Algoritmusje rozdelen do dvou skriptu Prvnı z nich obsahuje funkce a druhy je hlavnıVstupem do modelu je rastr digitalnıho modelu terenu a vystupnı adresardo ktereho se ulozı finalnı rastr smeru odtoku viz obr 4 Po nactenı rastruze vstupnıch parametru je tento rastr preveden na matici NumPy pomocıfunkce

arcpy RasterToNumPyArray ( InputRaster )

NumPy [5] je rozsırenı programovacıho jazyka Python je to balıcek uzıvanypro vedecke vypocty Umoznuje podporu velkych multi-dimenzionalnıch polıa matic spolu s velkou knihovnou matematickych funkcı pro praci s temitopoli

Algoritmus cyklem projızdı vsechny prvky matice a u tech ktere majı hod-notu ruznou od NoData nalezne okolı Hledanı okolı bunky provadı funkceneighbors ta je definovana takto

def ne ighbors ( i j array x y ) return nb1 nb2 nb3 nb4 nb5 nb6 nb7 nb8

Vstupem funkce je pozice v matici dale cela matice a jejı rozmery Funkceneighbors vypocıta hodnoty vysek sousednıch osmi bunek a vratı je na vystup

Obrazek 4 Dialogove okno nastroje MDinfin

Vystup z funkce neighbors slouzı jako jeden z vstupnıch parametru pro dalsıfunkci

8

Funkce byla pojmenovana dir slope jelikoz jejım vystupem je smer odtokua sklon tohoto smeru

def d i r s l o p e ( pointM nbrs vpix sp ix ) return d i r e c t i o n s l ope

Pro kazdy trojuhelnık byla spoctena hodnota d viz vzorec 3 Hodnota s bylapo spatnych a nelogickych vysledcıch pocıtana podle jineho vzorce ktery jizdaval spravne vysledky

s0 =

radicz212y21

+z22y22

(5)

Vzorec se lisı pro kazdy trojuhelnıcek uvedeny je pro vypocet sklonu kdy sousednıbunka je severozapadnı a severnı Tımto postupem bylo zbytecne pocıtatz-tovou slozku vekotoru n vzorec 2 Byly osetreny prıpady kdy sousednıbunky aktualnıho pocıtaneho trojuhelnıku jsou obe vyse polozene nebo obemimo rastr (NoData) Dalsı prıpad nastane jestlize je jeden bod vne rastra druhy v rastru lezı Smer je potom urcen prımo do toho bodu ktery nalezırastru Taktez i sklon je pocıtan pouze mezi tımto bodem a bodem M Lokalnı smer d v kazde plosce po vypoctenı nesmı prekrocit 45 V situacize tuto hodnotu prekrocı je smeru prirazena hodnota 0 nebo 45 v zavislostina vzajemnem porovnanı vysek bodu v trojuhelnıku Takto jsou zpracovanyvsechny plosky a je zjisteno zda-li do kazdeho trojuhelnıku nastava smerodtoku nebo ne Na konci funkce dir slope se kontroluje prıpad kdy smersousednıch trojuhelnıku odkazuje presne do stejneho bodu tedy hodnotysmeru musı byt pro prvnı trojuhelnık d = 45 a pro nasledujıcı sousednıtrojuhelnık d = 0 Vystupem funkce jsou dva vektory o osmi prvcıch smera sklon pro kazdou plosku

Dalsı fazı vypoctu je zjistenı pomeru vody ktera potece do jednotlivychsmeru K vypoctu pomeru byl pouzit tento vzorec [2]

fi =sxi8sum

j=1

sxj

(6)

kde s vyznacuje sklon vypocteneho smeru konkretnı trojuhelnıkove ploskya x je promenny exponent Pokud by byl exponent zvolen 1 bude vyslednasıtrsquo obdobna jako pri pouzitı MD8 algoritmu Pri zvetsovanı exponentu xk nekonecnu bude sıtrsquo stejna jako pri pouzitı D8 metody Vychozı hodnotaexponentu byla zvolena x = 4 coz je kompromis mezi obema variantami

9

Zmena exponentu se v soucasne podobe neprojevı na vyslednem rastru je-likoz vysledek prezentuje pouze smer odtoku a ne procentualnı cast Tohotopomeru bude vyuzito az pri spojenı skriptu s 2D modelem SMODERP

V dalsı casti vypoctu je rozdelen jiz zjisteny pomer z celkoveho odtokudo dvou prıpadne pouze do jedne bunky v zavislosti na smeru odtoku dVe vysledku je vypocten vektor osmi cısel kde kazda hodnota od 0 do 1prestavuje jiz procentualnı pomer z celkoveho odtoku do kazde sousednıbunky

Pro vyslednou reprezentaci smeru odtoku na vystup byl pro kazdou bunkuvytvoren vektor obsahujıcı 1 a 0 rıkajıcı zda nastava ci nenastava odtokdo sousednı bunky Tento vektor byl preveden na celocıselnou hodnotu po-mocı funkce bool2int

def boo l 2 i n t ( x ) y = 0for i j in enumerate ( x )

i f j y += 1ltlt ireturn y

Funkce ma na vstupu vektor jedicek a nul Naprıklad pro vektor 00000111kdy voda tece na severozapad sever a severovychod se funkce chova taktoJe testovano jestli platı j = 1 tedy prvnıch pet nul vektoru funkce preskocıa pro prvnı jednicku se pricte k promenne y 20 v dalsım kroku 21 a v poslednım22 Operator vyjadruje totiz bitovy posun smerem doleva Vysledkem jena vystupu cıslo y = 1 + 2 + 4 = 7

Pro vsechny bunky byla vypoctena hodnota reprezentujıcı smer odtoku Tatohodnota se ulozı do matice a ta se nasledne prevede na vysledny rastr

f l o w d i r = arcpy NumPyArrayToRaster ( value LLcorner spix vpix rdquordquo )

value hodnota reprezentujıcı smer odtokuLLcorner souradnice leveho dolnıho rohuspix sırka pixeluvpix vyska pixelu

10

5 Vysledky

Algoritmus MDinfin byl testovan na skutecnych datech dvou pozemku u obcıNucice ve Stredoceskem kraji a Bykovice v kraji Jihomoravskem rastry jsouv prıloze 71 Oba dva rastry jsou o rozlisenı 5 metru Finalnı rastry jsouporovnavany s rastry vytvorenymi v prostredı ArcGIS nastrojem Flow Di-rection metodou D8

51 Realna data - Bykovice

Vysledne rastry Flow Direction pro uzemı Bykovice jsou uvedeny v prıloze72 Oba rastry byly pro hodnoty 202127 obarveny shodnou barvou kvulilepsı nazornosti a porovnatelnosti vysledku Rastr ktery obsahuje z celkovehopoctu 44807 bunek celkem 23655 bunek s hodnotami vysek po probehnutıalgoritmy dal nasledujıcı vysledky

FD D8 MDinfin1 3650 7372 666 9174 207 188 21 716 94 3732 791 8564 8818 1045128 9408 14983sum

23655 14983

Tabulka 1 Tabulka porovnanı obou algoritmu pro rastr Bykovic

FD je zkratka pro Flow Direction cili smer odtoku reprezentovany celocıselnouhodnotou Ostatnı hodnoty u vysledneho rastru na ktery byl pouzit algorit-mus MDinfin jsou v rozpetı 0246 V rozmezı hodnot smeru odtoku 246255se nevyskytujı zadne bunky Cas potrebny pro vykonanı skriptu byl v prıpadeD8 4 vteriny Pro algoritmus MDinfin byl cas 15 vterin

11

52 Realna data - Nucice

Vysledne rastry jsou uvedeny v prıloze 73 Opet bylo pouzito shodne obar-venı pro zakladnı smery u obou rastru Rastr Nucice obsahoval data na 82732bunkach z celkove poctu 125449 bunek Vysledky jsou pro prehlednost uve-deny v tabulce

FD D8 MDinfin1 12186 12332 12441 87034 16907 10278 9826 1642316 2516 28832 5010 241764 7788 366128 16058 25475sum

82732 55932

Tabulka 2 Tabulka porovnanı obou algoritmu pro rastr Nucic

Ostatnı hodnoty u vysledneho rastru na ktery byl pouzit algoritmusMDinfin jsou v rozpetı 0255 Cas potrebny pro vykonanı skriptu byl v prıpadeD8 6 vterin Pro algoritmus MDinfin byl cas 50 vterin

12

6 Zaver

Cılem projektu bylo vytvorit funkcnı skript obsahujıcı algoritmus pojmen-ovany MDinfin [1] ktery resı odtok do sousednıch bunek rastru Algoritmusbyl napsan v programovacım jazyce Python a testovan na realnych datechVysledky byly mırnym prekvapenım kdy zejmena hodnoty smeru 128 tedyseverovychodnıho se vyskytovaly ve vysledku velmi casto viz tabulky 1 a 2Predpokladem bylo ze se odtok rozlozı do vıce smeru a pocet bunek s hod-notami zakladnıch smeru 1248163264 a 128 bude mene nez v prıpade al-goritmu D8 K rozkladu do vıce smeru sice doslo ale pocet nekterych bunekse zakladnımi smery byl vetsı u algoritmu MDinfin

Co se tyce delky doby behu algoritmu je algoritmus MDinfin pomalejsı viz casyv kapitole 5 nez D8 z nekolika zrejmych duvodu Predevsım algoritmus D8provadı mnohem mene pocetnıch operacı z duvodu jeho mensı slozitostiviz 3 Dalsım duvodem je take rozdıl v jazyce ve kterem jsou oba algo-ritmy napsany D8 je napsan v programovacım jazyce C++ ktery na vetsıchdatech je mnohonasobne rychlejsı nez Python Prepsanım algoritmu MDinfindo jazyka C++ by mohla byt cesta k budoucımu zvysenı rychlosti pracealgoritmu

13

Reference

[1] SEIBERT Jan McGlynn BL A new triangular multiple flow di-rection algortihm for computing upslope areas from gridded digi-tal elevation models [online] [cit 13 5 2013] Dostupne ke stazenız URL lthttpciteseerxistpsueduviewdocdownloaddoi=101179977amprep=rep1amptype=pdfgt

[2] HOLMGREN Peter Multiple direction algortihms for runoff modellingin grid based elevation models An empirical evaluation [online] [cit13 5 2013] Dostupny z URL ltftpwwwlwrkthseCommonUllaMFor_Imran[1994]20holmgren20-20multiple20flow

20direction20algorithms20for20runoff20modelling20in

20grid20based20elevation20modelspdf gt

[3] ESRI ESRI WebHelp - How Flow Direction works [online] [cit13 5 2013] Dostupne z URL lthttphelparcgiscomenarcgisdesktop100helpindexhtml009z00000063000000

htmgt

[4] ESRI ESRI Webhelp - Flow Direction (Spatial Analyst) [online][cit 13 5 2013] Dostupne z URL lthttphelparcgiscomenarcgisdesktop100helpindexhtml009z00000052000000

htmgt

[5] WIKIPEDIA NumPy [online] [cit 13 5 2013] Dostupne z URLlthttpenwikipediaorgwikiNumPygt

[6] INFORMIT Working with operators [online] [cit 13 5 2013] Dos-tupne z URL lthttpwwwinformitcomarticlesarticleaspxp=2002831ampseqNum=6gt

14

7 Prılohy

71 Bykovice a Nucice vstupnı DMT rastry

Obrazek 5 DMT Bykovice

Obrazek 6 DMT Nucice

15

72 Bykovice vysledky

Obrazek 7 Flow Direction D8

Obrazek 8 Flow Direction MDinfin

16

73 Nucice vysledky

Obrazek 9 Flow Direction D8

Obrazek 10 Flow Direction MDinfin

17

Page 16: pro zac ate cn kygeo.fsv.cvut.cz/gdata/2013/pin2/e/dokumentace/... · 2013-06-05 · CESK E VYSOK E U CEN I TECHNICKE V PRAZE FAKULTA STAVEBN I OBOR GEODEZIE A KARTOGRAFIE Dokumentace

2 Popis pracı

21 Nastroj pro tvorbu gridu

Tento nastroj vytvorı polygonovou vrstvu obsahujıcı grid a to podle zadanehomerıtka a velikosti mapoveho pole Do atributove tabulky gridu vlozı sloupecs nazvy mapovych listu a sloupec s cısly sekcı (bude vysvetleno dale) Zarovenprida do vstupnı polygonove vrstvy sloupec s cısly sekcı a sloupec s nazvymapovych listu na kterych se dany polygon (povodı) nachazı Dale vytvorıvrstvu nazev gridu dissolve pro prehledku sekcı

Pojem sekce Sekce je tvorena vsemi dotykajıcımi se polygony Mapovelisty jsou ke kazde sekci tvoreny zvlastrsquo a jejich nazvy jsou pote rozsıreny ocıslo sekce Prıklad cıslovanı mapovych listu 1-A1 1-A2 2-A1 2-A2

Obrazek 1 Vstupnı polygonova vrstva

3

Obrazek 2 Ocıslovane sekce polygonove vrstvy

211 Uvodnı dialog

Uvodnı dialog nastroje obsahuje pole pro 5 parametru

bull In - vstupnı parametr datovy typ Feature classVstupnı vrstva polygonu

bull Scale - vstupnı parametr datovy typ LongPozadovane merıtko

bull Map field width - vstupnı parametr s nastavenou defaultnı hodnotou25 datovy typ DoubleSırka vysledneho mapoveho ramce v cm

bull Map field height - vstupnı parametr s nastavenou defaultnı hodnotou30 datovy typ DoubleVyska vysledneho mapoveho ramce v cm

bull Out - vystupnı parametr datovy typ Feature classVystupnı vrstva gridu

4

Obrazek 3 Grid - Uvodnı dialog

212 Vysledny log

Kompletnı prıklad vysledneho logu je k nalezenı v prıloze 51Obsahuje tyto informace

bull Umıstenı pouzıvane databaze na disku

bull Dale v kazdem cyklu

ndash Poradove cıslo cyklu

ndash Aktualnı pocet nezpracovanych polygonu

ndash Cıslo vytvarene sekce

ndash Identifikatory polygonu tvorıcıch danou sekci

bull Pocet sekcı

bull Pocet mapovych listu v kazde sekci

213 Vysledne vrstvy

Vysledny grid pro merıtko 1 80 000 a defaultnı velikost mapoveho pole (25x 30 cm) vypada nasledovne

5

Obrazek 4 Grid - Vysledna vrstva

214 Cinnost nastroje podrobne

1 Prıpravne cinnostiV prvnıch radcıch kodu jsou vytvoreny pomocne promenne a pole znichz pro dalsı cinnost je potreba zmınit zasobnık IDs Ten je naplnenidentifikatory povodıPokud jiz neexistujı jsou ve vstupnı polygonove vrstve vytvoreny atri-butove sloupce hard ID section MapSheets

bull hard ID - Do tohoto sloupce byly zkopırovany identifikatory abyi po rozdelenı do nekolika vrstev mely polygony jednoznacny iden-tifikator

bull section - Po vypoctu sekcı sem bude pro kazdy polygon zapsanocıslo sekce ve ktere se nachazı

bull MapSheets - Atribut se seznamem mapovych listu na kterych sedane povodı nachazı

Ukazka tvorby atributoveho sloupce

fieldList = arcpyListFields(inFeatureClass rsquoMapSheetsrsquo)

6

fieldCount = len(fieldList)

if (fieldCount = 1)

arcpyAddField_management(inFeatureClass rsquoMapSheetsrsquo rsquoTEXTrsquo)

2 Hlavnı vypocetnı cast

Hlavnı cast je cela v cyklu while (len(IDs) gt 0) tj cyklus probıhadokud jsou v zasobnıku IDs hodnoty Na konci cyklu jsou vzdy identi-fikatory zpracovanych povodı ze zasobnıku mazany V kazdem prubehucyklu jsou selektovany povodı tvorıcı 1 sekci k takove sekci je potevytvoren grid a jsou plneny nove atributove sloupce

Ukazka hlavnıho cyklu

while len(IDs) gt 0

oznacenı povodı i-te sekce

rows_sel = arcpySearchCursor(rsquopovodi_classrsquo)

for row_sel in rows_sel

IDsremove(row_selOBJECTID)

V kazdem prubehu cyklu je zpracovana 1 sekce - tj shluk povodı kteremajı spolecnou cast hranice Sekce je tvorena na zaklade dotazu Se-lectByLocation s definicı BOUNDARY TOUCHES Dotaz se opakujev cyklu dokud se pocet oznacenych povodı zvetsuje K tomu slouzıpromenne matchcount1 matchcount2 ktere obsahujı pocet oznacenychpolygonu

Vytvorenı sekce

bull Oznacenı prvnıho nezpracovaneho polygonu

first_ID = str(IDs[0])

fieldName = OBJECTID

Query = + fieldName + = + first_ID

arcpySelectLayerByAttribute_management(rsquopovodi_classrsquo rsquoNEW_SELECTIONrsquo Query)

matchcount1 = int(arcpyGetCount_management(rsquopovodi_classrsquo)getOutput(0))

bull Prvnı prubeh SelectByLocation

7

arcpySelectLayerByLocation_management(rsquopovodi_classrsquo rsquoBOUNDARY_TOUCHESrsquo

rsquopovodi_classrsquo)

matchcount2 = int(arcpyGetCount_management(rsquopovodi_classrsquo)getOutput(0))

bull Dalsı prubehy SelectByLocation

while matchcount1 lt matchcount2

matchcount1 = matchcount2

arcpySelectLayerByLocation_management(rsquopovodi_classrsquo rsquoBOUNDARY_TOUCHESrsquo

rsquopovodi_classrsquo)

matchcount2 = int(arcpyGetCount_management(rsquopovodi_classrsquo)getOutput(0))

Oznacene polygony jsou ulozeny jako polygonova vrstva do vstupnı ge-odatabaze Tato vrstva je dale pouzita pro tvorbu gridu

Vytvorenı gridu

Pred samotnou tvorbou bylo potreba zjistit rozsah sekce Pokud bylasekce mensı nez 1 mapovy list bylo treba definovat souradnice polohylistu tak aby povodı lezelo na stredu listu Do zasobnıku byly nactenysouradnice lomovych bodu povodı a byly z nich vybrany maximalnı aminimalnı hodnoty Jejich rozdıl pak urcil rozsah sekce

Prıklad plnenı zasobnıku souradnicema

desc = arcpyDescribe(outputFeatureClassPath+rsquorsquo+output_name)

shape_field_name = descShapeFieldName

rows3 = arcpySearchCursor(outputFeatureClassPath+rsquorsquo+output_name)

mbr_X=[]

mbr_Y=[]

for row3 in rows3

Create the geometry object

feat = row3getValue(shape_field_name)

partnum = 0

for pnt in featgetPart(partnum)

mbr_Xappend(pntX)

mbr_Yappend(pntY)

partnum += 1

8

Vytvorenı gridu pote probıha budrsquo s definovanou nebo s nedefinovanoupolohou pocatecnıho mapoveho listu Pro vytvorenı gridu je pouzitafunkce GridIndexFeatures cartography

Ukazka

arcpyGridIndexFeatures_cartography(outputFeatureClassPath+rsquorsquo+grid_name

outputFeatureClassPath+rsquorsquo+output_name USEPAGEUNIT scale_str

sheet_width_str sheet_high_str str(grid_start_pnt_X)+rsquo rsquo+str(grid_start_pnt_Y))

Grid je tedy vytvoren pro jednu sekci Po vsech prubezıch cyklu jsoutakto vytvorene vrstvy gridu spojeny do jedne finalnı vrstvy V cyklujsou dale plneny nove atributove sloupce - cısla sekcı a nazvy mapovychlistu a to jak do nove (vystupnı) vrstvy gridu tak do vstupnı vrstvypovodı

3 Vytvorenı finalnıch vrstev tisk vysledku Jak bylo receno na zaverjsou spojeny jednotlive vrstvy gridu Vedle toho je vytvorena vrstvaspojenych mapovych listu po sekcıch - funkcı Dissolve - pro tvorbuprehledky Jsou vytisknuty vysledne hodnoty viz 212

22 Generalizace

Pro generalizaci byl napsan skript ktery nacıta liniovou vrstvu toku Tentoskript byl jiz psan na mıru podkladovym datum a pri nacıtanı je v nemvyuzito znalosti struktury danych podkladovych dat Skript k vrstve pripojıexternı tabulku a vytvorı atributovy sloupec kategorie Podle dat z externıtabulky pak plnı novy sloupec hodnotami 1 - 5 podle mnozstvı unasenehosedimentu Tato hodnota je pak pouzita pri vizualizaci datZajımavostı je ze pro nacıtanı musela byt tabulka indexovana viz 31

221 Uvodnı dialog

Uvodnı dialog obsahuje dva parametry

bull Input Feature Class Vstupnı liniova vrstva rıcnıch useku

bull Table Vstupnı tabulka obsahujıcı hodnoty rıcnıch splavnenin

9

222 Vysledny log

Vysledny log je k nahlednutı v prıloze 52 Obsahuje tyto informace

bull Pocet vsech rıcnıch useku

bull Pocet useku v jednotlivych kategoriıch

23 Finalnı upravy a export

Jak jiz bylo zmıneno finalnı vzhled mapoveho listu byl vytvoren manualne vLayout view a pomocı toolbaru Data Driven Pages Tento postup je casoveekonomictejsı a je jım dosazeno lepsıch vysledku dıky prehlednosti ToolbarData Driven Pages pak umoznuje vkladat dynamicke textove pole ktere seautomaticky menı s menıcım se mapovym listem Takovym polem je naprnazev mapoveho listu Stacı tedy definovat vzhled jednoho mapoveho listuv toolbaru Data Driven Pages navolit prıslusne pole - ty byly vytvorenynastrojem Grid viz 21 Dynamicky bylo potreba propojit s mapovym oknemi prehledku ktera byla vytvorena jako druhy Data Frame To se provedlo defi-novanım rozsahu podle hlavnıho mapoveho okna v Properties -iquest Data Frame-iquest Extant a definovanım Definition Query ve vlastnostech vrstvy Dalsım dy-namickym prvkem jsou oznacenı sousednıch mapovych listu a cıslo strankyNa takto sestavenou stranku s dynamickymi prvky bylo mozne pouzıt exportmapy do pdf a Atlas byl vygenerovanPrıklad dynamickeho textu pro nazev mapoveho listultdyn type=page property=PageNamegt

3 Problemy a moznosti rozsırenı

31 Pripojovanı externıch tabulek

Pri pripjovanı externıch tabulek musely byt indexovany hodnoty atribu-toveho sloupce pouziteho k parovanı To probehlo prıkazemarcpyAddIndex management (layer HydroID)Pripojenı tabulky musı probıhat k Feature layer Proto bylo nutne nejprve zFeature Class vytvorit Feature Layer1 Pote mohla byt tabulka pripojena

arcpyAddIndex_management (layer HydroID)

arcpyAddJoin_management(layer HydroID table Riverid)

1Rozdıl mezi Feature Layer a Feature Class je vysvetlen v prilozenem Tutorialu pro-gramovanı v Pythonu pro ArcGIS

10

Zde nastal problem s prıstupem k atributum Obecne nesmı nazvy atri-butovych sloupcu obsahovat mezery K hodnotam je pristupovano pres jed-notlive radky s parametrem nazev sloupce

rows= arcpySearchCursor(layer)

for row in rows

value=rownazev_sloupce

Pripojena tabulka ovsem mela v nazvech sloupcu mezeru K takto pojmeno-vanemu sloupci muselo byt pristupovano prıkazem getValue

rows= arcpySearchCursor(layer)

for row in rows

value=rowgetValue(rsquonazev tabulky$nazev sloupcersquo)

32 Doba behu tvorby gridu

Doba behu nastroje pro tvorbu gridu je znepokolive dlouha Bylo prove-deno merenı casu behu jednotlivych castı kodu funkcı time z modulu timeVysledky ukazaly ze nejdele trva vytvarenı novych vrstev Vrstva se muzevytvaret az 20 sekund Snaha o optimalizaci donutila nahradit vytvarenı vrs-tev s minimalnım ohranicujıcım obdelnıkem sekvencnım ukladanım souradniclomovych bodu polygonu z nichz pak funkcemi min a max byly tyto hodnotyzıskany Prubeh se tak urychlil o desıtky sekund (v jednom prubehu cyklupriblizne o 15 sekund) Dalsı moznostı bylo vyuzıt prostoroveho indexu datTato moznost nebyla vyuzita protoze ArcGIS pouzıva k prostorovemu in-dexovanı pravidelny grid Zıskanı MBR2 nebylo nalezeno Vyuzitı indexu byovsem problem neresilo Jak jiz bylo zmıneno nejdele trva vytvarenı novychvrstev Bohuzel funkce GridIndexFeatures cartography pro vytvorenı griduneumı pracovat se selektovanymi daty Tedy v kazdem cyklu musı byt ulozenapolygonova vrstva tvorıcı 1 sekci Pote mohla byt vytvorena vrstva tvorıcıgrid Tedy v kazdem prubehu cyklu jsou vytvareny 2 nove vrstvy Jelikozautor neprisel na zpusob jine optimalizace je nastroj pomaly Pro zadanydataset s 58mi povodımi jeho cinnost probıha desıtky minut

33 Moznosti rozsırenı

Do skriptu by se dal zakomponovat export seznamu mapovych listu pro kazdepovodı V soucasne verzi je tvoren exportem atributove tabulky

2minimum bounding rectangle - minimalnı ohranicujıcı obdelnık

11

4 Zaver

Byly vytvoreny nastroje pro automatizaci tvorby Atlasu pro mapy eroznıhosmyvu a transportu splavenin Tvorba Atlasu probıha v nekolika krocıchVizualizovane prvku jsou generalizovany Dale je vytvoren Grid ktery jepouzit jako indexova vrstva pro funkci Data Driven Pages Tou jsou vy-tvoreny jednotlive mapove listy Pomocı dynamickych prvku je pak vytvorenvzhled ktery se menı se zmenou mapoveho listu Nedostatkem je rychlostnastroje pro tvorbu gridu Presto ze je nastroj pomaly je zcela funkcnı Vprıpade potreby dalsıho rozsırenı bude ale vhodne vysledky nacıtat do novehonastroje Vzorovy vytisk vysledneho atlasu je prilozen Vzhledem k tomu zezpracovavana data jsou rozsahla a podlehajı autorskemu zakonu je vytvorenjen vzorovy vytisk z 6ti povodı Nastroje jsou psany v jazyce Python 26 proArcGIS 100 Pri praci byla vyuzıvana predevsım online napoveda ArcGISa diskuznı programatorska fora Kompletnı zdrojovy kod je ke stazenı nastrankach predmetu PIN2

12

5 Prılohy

51 Vysledny log tvorby gridu

Executing Grid

JAtlasvzorektemp_selectpovodi_vzorekgdbpokusne_povodi

70000 25 30 JAtlasvzorektemp_selectpovodi_vzorekgdbgrid70

Start Time Wed May 15 020551 2013

Running script Script2

Output folder JAtlasvzorektemp_selectpovodi_vzorekgdb

_____________________________________________________________________

count of basin polygon to process 6

_____________________________________________________________________

RUN 1

count of basins in 1 section 3

Their ID

ID 1

ID 3

ID 6

_____________________________________________________________________

count of basin polygon to process 3

_____________________________________________________________________

RUN 2

count of basins in 2 section 1

Their ID

ID 2

_____________________________________________________________________

count of basin polygon to process 2

_____________________________________________________________________

RUN 3

count of basins in 3 section 2

Their ID

ID 4

ID 5

----- RESULT -----

Number of sections 3

Number of map sheets

in section 1 13

in section 2 1

in section 3 2

Completed script Grid

Succeeded at Wed May 15 021359 2013 (Elapsed Time 8 minutes 8 seconds

13

52 Vysledny log generalizace

Executing generalization JAtlasvzorek2011_NAZV_nadrze2011_watemsedem

NAZV_tokyVT28_finshp

JAtlasvzorek2011_NAZV_nadrze2011_watemsedem28_vypocet

projectriversedimentxlsxprojectriversediment$

Start Time Wed May 15 075624 2013

Running script generalization

Category created

Total count of river parts 2879

Count of category 1 2428

Count of category 2 118

Count of category 3 68

Count of category 4 20

Count of category 5 245

Completed script generalization

Succeeded at Wed May 15 075638 2013 (Elapsed Time 1400 seconds)

14

CESKE VYSOKE UCENI TECHNICKE V PRAZE

FAKULTA STAVEBNI

OBOR GEODEZIE A KARTOGRAFIE

Dokumentace k projektu informatika 2

Stanovenı smeru odtokuna rastrovem digitalnım modelu

a implementace algoritmudo prostredı ArcGIS

BC JAN ZAJICEK

5 cervna 2013

Obsah

Obsah 1

1 Uvod 2

2 Nejbeznejsı existujıcı algoritmy 3

3 Flow Direction D8 431 Obecny princip D8 432 Popis algoritmu D8 5

4 Popis algoritmu MDinfin 641 Obecny princip MDinfin 642 Technicke resenı MDinfin 8

5 Vysledky 1151 Realna data - Bykovice 1152 Realna data - Nucice 12

6 Zaver 13

Reference 14

7 Prılohy 1571 Bykovice a Nucice vstupnı DMT rastry 1572 Bykovice vysledky 1673 Nucice vysledky 17

1

1 Uvod

Tato dokumentace byla zpracovana v ramci predmetu Projekt Informatika 2Semestralnı prace bude pouzita jako z jedna castı autorovi diplomove praces nazvem SMODERP 2D rozsırenı resıcı vztahy soustredeneho a plosnehoodtoku na danem uzemı Duvodem zpracovanı tohoto tematu byla potrebapouzitı v diplomove praci vıce nez jednoho algoritmu pro urcenı smeruodtoku v prostredı ArcGIS V soucasne dobe ArcGIS vyuzıva algoritmusD8 viz kapitola 3 jako jediny algoritmus pro vypocet smeru odtoku Tentoalgoritmus je soucastı Hydrology tools Nastroje ze skupiny Hydrology sepouzıvajı k modelovanı chovanı toku vody na povrchu Nejbeznejsı pouzıvanadigitalnı data povrchu Zeme jsou rastry digitalnı modelu terenu DMT slozenez jednotlivych bunek pixelu Tyto DMT rastry jsou pouzity jako vstupypro ruzne charakteristiky povrchu DMT rastr je souvisly povrch obvykleodkazujıcı na povrch Zeme Presnost dat je dana rozlisenım rastru taktezvzdalenostı mezi body rastru Informace o tvaru zemskeho povrchu je uzitecnapro mnoho oboru jako je napr zemedelstvı lesnictvı zivotnı prostredı neboregionalnı planovanı Tyto obory vyzadujı pochopenı jak voda tece v ramciuzemı a jak zmeny na tomto uzemı nasledne ovlivnı jejı tok

Cılem projektu bylo naprogramovat algoritmus ktery v roce 2007 publiko-vali Jan Seibert a Brian L McGlynn s nazvem MDinfin [1] Tento algoritmusje vylepsenım stavajıcıch algoritmu pro resenı urcenı smeru odtoku na ras-tru viz kapitola 2 Pro overenı spravnosti vysledku byla pouzita realnadata dvou pozemku u obcı Bykovice a Nucice Testovanı probıhalo na ras-trech o rozlisenı 5 metru Algoritmus byl naprogramovan v jazyce Pythonv prostredı NetBeans IDE 69 Pro spustenı v ArcGISu je potreba pridatdo prostredı vytvoreny toolbox upravit aktualnı cestu ke skriptu mainpya tento model nasledne spustit Vstupem modelu je rastr DMT a vystupnıadresar do ktereho se po dobehnutı modelu ulozı vysledny rastr s hodnotamismeru odtoku 1255 Algoritmus MDinfin je testovan na verzi ArcGIS 100Na nejnovejsı verzi ArcGIS 101 ktera vysla v cervnu 2012 nenı overenakompatibilita algoritmu v dusledku nefunkcnosti vıce nez jedne verze tohotoprogramu na jednom pocıtaci

2

2 Nejbeznejsı existujıcı algoritmy

Existujı tri nejbeznejsı algoritmy kazdy odlisne resıcı problematiku odtokuvody z rastru do sousednıch bunek Prvnım z nich je algoritmus D8 z roku1984 Algoritmus je podrobne popsan v nasledujıcı kapitole 3 Jelikoz odtoknastava vzdy jen do jedne sousednı bunky dochazı casto ke koncentracivodnıch sıtı a sıtrsquo odtoku pak neodpovıda skutecnosti Na druhou stranuje jeho vyhodou jeho jednoduchost a fakt ze nedochazı k nechtene disperzijako je tomu u druheho algoritmu

Druhym algoritmem je MD8 neboli multiple flow direction algorithm MD8algoritmem je voda odvadena do vsech nıze polozenych sousednıch buneka pomer vody je rozdelen procentualne podle sklonu Ve vysledku ma algo-ritmus tendenci vytvaret vıce realisticke prostorove sıte toku nez D8 tımze nedochazı k takove koncentraci vody v sıti U D8 ma mnohem vetsıvliv maly rozdıl vysek mezi sousednımi bunkami na to ktera bunka prijmeveskerou vodu Pouzitım MD8 tyto male vyskove rozdıly nemajı zdalekatakovy vliv jelikoz je mnozstvı vody rozdeleno pomerem mezi tyto bunkyNejvetsı nevyhodou tohoto algoritmu je jeho prılisna disperze na konver-gentnıch svazıch v dusledku odtoku do vsech nıze polozenych bunek

V roce 1997 byl navrzen algoritmus pojmenovany Dinfin Davidem G Tar-botonem z americke univerzity v Utahu Byl navrzen prıstup ktery je zalozenna osmi trojuhelnıkovych ploskach viz obrazek 3 Dıky tomuto postupu jsouodstraneny limitace v podobe moznosti pouze osmi smeru odtoku z bunkyProto je algoritmus pojmenovan Dinfin jelikoz muze nastat nekonecne moznostıvysledneho smeru odtoku Tento prıstup umoznuje pouze jeden smer odtokurozdeleny mezi jednu nebo dve bunky v zavislosti na smeru odtoku

Poslednı dva zmınene algoritmy MD8 a Dinfinmajı oproti D8 nevyhodu ve vetsıcasove narocnosti vypoctu V kapitole 4 je popsan algoritmus MDinfin kteryvyuzıva vyhody MD8 algoritmu za pouzitı trojuhelnıkovych plosek obdobnejako Dinfin algoritmus

3

3 Flow Direction D8

Pro pochopenı problematiky a zjevnost rozdılu mezi algoritmy je vhodneuvest jak funguje nastroj ktery pouzıva ArcGIS Zaklad algoritmu MDinfino nemz pojednava tato dokumentace je zalozen na podobnych postupech

31 Obecny princip D8

Princip nastroje urcenı smeru odtoku (Flow Direction) ktery pouzıva prostredıArcGIS je nasledujıcı Tento nastroj (tool) vezme vstupnı rastr digitalnıhomodelu terenu neboli vyskovy rastr Provede vypocet jehoz vystupem jerastr ktery v kazde bunce rastru obsahuje hodnotu urcujıcı smer odtokuz teto bunky Hodnot je osm podle osmi sousednıch bunek do kterych muzeodtekat voda viz obrazek 1 Prave podle osmi smeru odtoku se tento prıstupnazyva D8 (eight-direction approach)

Obrazek 1 Flow Direction D8 [3]

4

32 Popis algoritmu D8

Samotny vypocet algoritmu je v zasade primitivnı Pro vsechny sousednıbunky se vypocte maximalnı sklon [3]

maximalnı sklon = rozdıl vysek vzdalenost 100

Rozdıl vysek je rozdıl vysky v aktualnım bode a konkretnı sousednı bunkyVzdalenost je vypoctena mezi stredy bunek a lisı se v zavislosti na polozesousednı bunky Pro bunky sousedıcı vrcholem je hodnota velikosti pixeluprenasobena o odmocninu ze dvou Pro zbyle bunky sousedıcı hranou jevelikost vzdalenosti rovna velikosti pixelu Po nalezenı nejstrmejsıho smeruodtoku je hodnota ulozena v podobe bitove hodnoty reprezentujıcı danysmer Pred pouzitım nastroje Flow Direction se obvykle zpracuje vstupnırastr pomocı nastroje Sink Tento algoritmus zaplnı bezodtoke oblasti rastrunejnizsı hodnotou z okolı a do teto nejnizsı sousednı bunky pak posle voduPote jiz nemuze dojıt k situaci kdy vsechny sousednı bunky k dane buncemajı vyssı hodnoty vysek a nedochazelo by tedy k odtokuVysledny rastr nemusı obsahovat pouze bunky s hodnotami 202127 [4]Jestlize nastane situace kdy ma vıce sousednıch bunek nejnizsı hodnotuvysek pak je vysledna hodnota souctem vsech smeru Napr hodnota maximalnıhosklonu bude stejna pro sousednı bunku vlevo a nahore odtok tedy budesmerem na zapad (hodnota = 16) a na sever (hodnota = 64) vysledna hod-nota bude souctem 16 a 64 tedy 84

5

4 Popis algoritmu MDinfin

41 Obecny princip MDinfinObecny postup je prevzat z [1] Stejne jako v prıpade algoritmu Dinfin bylyzavedeny trojuhelnıkove plosky pro vypocet lokalnıho sklonu a smeru pro kazdoutrojuhelnıkovou plosku Okolo stredoveho boduM bylo vytvoreno osm trojuhelnıkuviz obrazek 3 Kazdy se zbyvajıcımi dvema vrcholy P1 P2 ve dvou sousedıcıchbunkach Pro kazdy z techto trojuhelnıku je vypocten smer nejvetsıho sklonuPokud oznacıme vysky bodu M P1 P2 jako hM hP1 hP2 rozdıly vysek sevypoctou takto

z1 = hP1 minus hM z2 = hP2 minus hM (1)

Obdobne se vypoctou rozdıly v x-ovych a y-ovych souradnicıch Po vypocturozdılu jednotlivych souradnic je vypocten normalovy vektor

n =

nx

ny

nz

=

z1y2 minus z2y1z1x2 minus z2x1y1x2 minus y2x1

(2)

Smer odtoku d a sklon s na trojuhelnıkove plose se vypocte pomocı rovnice3 Hodnota nula pro d oznacuje smer osy y a hodnota 3π2 oznacuje smerosy x

d =

0 nx = 0 ny ge 0

π nx = 0 ny lt 0

π2minus arctan(

ny

nx

) nx gt 0

3π2minus arctan(

ny

nx

) nx lt 0

(3)

s = minus tan

(arccos

(nzradic

n2x + n2

y + n2z

))(4)

Jestlize nejvetsı sklon od bodu M je mimo rozpetı 0-45 (π4 radian) jepouzit sklon strmejsı k jednomu z bodu P1 P2 a zaroven i sklon je spoctenk tomuto bodu V prıpade ze oba sousednı body jsou vyse polozeny nez bodM smer nenı pro tento trojuhelnık uvazovan Po spoctenı vsech osmi smerua sklonu pro jednotlive plosky jsou tyto smery povazovany za lokalne ne-jstrmejsı pro kazdy trojuhelnık v rozsahu 45 Smery vedoucı prımo do bodu

6

P1 nebo P2 tedy ty kde d = 0 nebo d = π4 jsou uvazovany pouze vprıpade kdy obe vedlejsı sousednı bunky majı smer k bodu P1 nebo P2Tato situace je znazornena na obrazku 2

Obrazek 2 Ukazka urcenı smeru odtoku z bunky [1]

Prvnı prıpad je smer mırıcı mezi bunky 5 a 6 Druhy prıpad je smer kteryvede prımo do bunky 3 Tato situace nastane jestlize pro trojuhelnık M43vyjde lokalnı smer d = π4 a pro trojuhelnık M32 smer vyjde d = 0Pote co je smer odtoku pro bunku vypocten je celkovy odtok rozdelendo vsech vyslednych smeru na zaklade sklonu Resenı teto problematiky jevıce popsano v sekci 42 Pro smery mırıcı mezi body P1 a P2 je odtokrozdelen do dvou bunek na zaklade nevejtsıho sklonu Pomer odtoku do buneks body P1 a P2 bude v tomto poradı α245 a α145

Obrazek 3 Trojuhelnıkove plosky [1]

7

42 Technicke resenı MDinfinVyse jiz bylo zmıneno ze algoritmus je napsan v jazyce Python Algoritmusje rozdelen do dvou skriptu Prvnı z nich obsahuje funkce a druhy je hlavnıVstupem do modelu je rastr digitalnıho modelu terenu a vystupnı adresardo ktereho se ulozı finalnı rastr smeru odtoku viz obr 4 Po nactenı rastruze vstupnıch parametru je tento rastr preveden na matici NumPy pomocıfunkce

arcpy RasterToNumPyArray ( InputRaster )

NumPy [5] je rozsırenı programovacıho jazyka Python je to balıcek uzıvanypro vedecke vypocty Umoznuje podporu velkych multi-dimenzionalnıch polıa matic spolu s velkou knihovnou matematickych funkcı pro praci s temitopoli

Algoritmus cyklem projızdı vsechny prvky matice a u tech ktere majı hod-notu ruznou od NoData nalezne okolı Hledanı okolı bunky provadı funkceneighbors ta je definovana takto

def ne ighbors ( i j array x y ) return nb1 nb2 nb3 nb4 nb5 nb6 nb7 nb8

Vstupem funkce je pozice v matici dale cela matice a jejı rozmery Funkceneighbors vypocıta hodnoty vysek sousednıch osmi bunek a vratı je na vystup

Obrazek 4 Dialogove okno nastroje MDinfin

Vystup z funkce neighbors slouzı jako jeden z vstupnıch parametru pro dalsıfunkci

8

Funkce byla pojmenovana dir slope jelikoz jejım vystupem je smer odtokua sklon tohoto smeru

def d i r s l o p e ( pointM nbrs vpix sp ix ) return d i r e c t i o n s l ope

Pro kazdy trojuhelnık byla spoctena hodnota d viz vzorec 3 Hodnota s bylapo spatnych a nelogickych vysledcıch pocıtana podle jineho vzorce ktery jizdaval spravne vysledky

s0 =

radicz212y21

+z22y22

(5)

Vzorec se lisı pro kazdy trojuhelnıcek uvedeny je pro vypocet sklonu kdy sousednıbunka je severozapadnı a severnı Tımto postupem bylo zbytecne pocıtatz-tovou slozku vekotoru n vzorec 2 Byly osetreny prıpady kdy sousednıbunky aktualnıho pocıtaneho trojuhelnıku jsou obe vyse polozene nebo obemimo rastr (NoData) Dalsı prıpad nastane jestlize je jeden bod vne rastra druhy v rastru lezı Smer je potom urcen prımo do toho bodu ktery nalezırastru Taktez i sklon je pocıtan pouze mezi tımto bodem a bodem M Lokalnı smer d v kazde plosce po vypoctenı nesmı prekrocit 45 V situacize tuto hodnotu prekrocı je smeru prirazena hodnota 0 nebo 45 v zavislostina vzajemnem porovnanı vysek bodu v trojuhelnıku Takto jsou zpracovanyvsechny plosky a je zjisteno zda-li do kazdeho trojuhelnıku nastava smerodtoku nebo ne Na konci funkce dir slope se kontroluje prıpad kdy smersousednıch trojuhelnıku odkazuje presne do stejneho bodu tedy hodnotysmeru musı byt pro prvnı trojuhelnık d = 45 a pro nasledujıcı sousednıtrojuhelnık d = 0 Vystupem funkce jsou dva vektory o osmi prvcıch smera sklon pro kazdou plosku

Dalsı fazı vypoctu je zjistenı pomeru vody ktera potece do jednotlivychsmeru K vypoctu pomeru byl pouzit tento vzorec [2]

fi =sxi8sum

j=1

sxj

(6)

kde s vyznacuje sklon vypocteneho smeru konkretnı trojuhelnıkove ploskya x je promenny exponent Pokud by byl exponent zvolen 1 bude vyslednasıtrsquo obdobna jako pri pouzitı MD8 algoritmu Pri zvetsovanı exponentu xk nekonecnu bude sıtrsquo stejna jako pri pouzitı D8 metody Vychozı hodnotaexponentu byla zvolena x = 4 coz je kompromis mezi obema variantami

9

Zmena exponentu se v soucasne podobe neprojevı na vyslednem rastru je-likoz vysledek prezentuje pouze smer odtoku a ne procentualnı cast Tohotopomeru bude vyuzito az pri spojenı skriptu s 2D modelem SMODERP

V dalsı casti vypoctu je rozdelen jiz zjisteny pomer z celkoveho odtokudo dvou prıpadne pouze do jedne bunky v zavislosti na smeru odtoku dVe vysledku je vypocten vektor osmi cısel kde kazda hodnota od 0 do 1prestavuje jiz procentualnı pomer z celkoveho odtoku do kazde sousednıbunky

Pro vyslednou reprezentaci smeru odtoku na vystup byl pro kazdou bunkuvytvoren vektor obsahujıcı 1 a 0 rıkajıcı zda nastava ci nenastava odtokdo sousednı bunky Tento vektor byl preveden na celocıselnou hodnotu po-mocı funkce bool2int

def boo l 2 i n t ( x ) y = 0for i j in enumerate ( x )

i f j y += 1ltlt ireturn y

Funkce ma na vstupu vektor jedicek a nul Naprıklad pro vektor 00000111kdy voda tece na severozapad sever a severovychod se funkce chova taktoJe testovano jestli platı j = 1 tedy prvnıch pet nul vektoru funkce preskocıa pro prvnı jednicku se pricte k promenne y 20 v dalsım kroku 21 a v poslednım22 Operator vyjadruje totiz bitovy posun smerem doleva Vysledkem jena vystupu cıslo y = 1 + 2 + 4 = 7

Pro vsechny bunky byla vypoctena hodnota reprezentujıcı smer odtoku Tatohodnota se ulozı do matice a ta se nasledne prevede na vysledny rastr

f l o w d i r = arcpy NumPyArrayToRaster ( value LLcorner spix vpix rdquordquo )

value hodnota reprezentujıcı smer odtokuLLcorner souradnice leveho dolnıho rohuspix sırka pixeluvpix vyska pixelu

10

5 Vysledky

Algoritmus MDinfin byl testovan na skutecnych datech dvou pozemku u obcıNucice ve Stredoceskem kraji a Bykovice v kraji Jihomoravskem rastry jsouv prıloze 71 Oba dva rastry jsou o rozlisenı 5 metru Finalnı rastry jsouporovnavany s rastry vytvorenymi v prostredı ArcGIS nastrojem Flow Di-rection metodou D8

51 Realna data - Bykovice

Vysledne rastry Flow Direction pro uzemı Bykovice jsou uvedeny v prıloze72 Oba rastry byly pro hodnoty 202127 obarveny shodnou barvou kvulilepsı nazornosti a porovnatelnosti vysledku Rastr ktery obsahuje z celkovehopoctu 44807 bunek celkem 23655 bunek s hodnotami vysek po probehnutıalgoritmy dal nasledujıcı vysledky

FD D8 MDinfin1 3650 7372 666 9174 207 188 21 716 94 3732 791 8564 8818 1045128 9408 14983sum

23655 14983

Tabulka 1 Tabulka porovnanı obou algoritmu pro rastr Bykovic

FD je zkratka pro Flow Direction cili smer odtoku reprezentovany celocıselnouhodnotou Ostatnı hodnoty u vysledneho rastru na ktery byl pouzit algorit-mus MDinfin jsou v rozpetı 0246 V rozmezı hodnot smeru odtoku 246255se nevyskytujı zadne bunky Cas potrebny pro vykonanı skriptu byl v prıpadeD8 4 vteriny Pro algoritmus MDinfin byl cas 15 vterin

11

52 Realna data - Nucice

Vysledne rastry jsou uvedeny v prıloze 73 Opet bylo pouzito shodne obar-venı pro zakladnı smery u obou rastru Rastr Nucice obsahoval data na 82732bunkach z celkove poctu 125449 bunek Vysledky jsou pro prehlednost uve-deny v tabulce

FD D8 MDinfin1 12186 12332 12441 87034 16907 10278 9826 1642316 2516 28832 5010 241764 7788 366128 16058 25475sum

82732 55932

Tabulka 2 Tabulka porovnanı obou algoritmu pro rastr Nucic

Ostatnı hodnoty u vysledneho rastru na ktery byl pouzit algoritmusMDinfin jsou v rozpetı 0255 Cas potrebny pro vykonanı skriptu byl v prıpadeD8 6 vterin Pro algoritmus MDinfin byl cas 50 vterin

12

6 Zaver

Cılem projektu bylo vytvorit funkcnı skript obsahujıcı algoritmus pojmen-ovany MDinfin [1] ktery resı odtok do sousednıch bunek rastru Algoritmusbyl napsan v programovacım jazyce Python a testovan na realnych datechVysledky byly mırnym prekvapenım kdy zejmena hodnoty smeru 128 tedyseverovychodnıho se vyskytovaly ve vysledku velmi casto viz tabulky 1 a 2Predpokladem bylo ze se odtok rozlozı do vıce smeru a pocet bunek s hod-notami zakladnıch smeru 1248163264 a 128 bude mene nez v prıpade al-goritmu D8 K rozkladu do vıce smeru sice doslo ale pocet nekterych bunekse zakladnımi smery byl vetsı u algoritmu MDinfin

Co se tyce delky doby behu algoritmu je algoritmus MDinfin pomalejsı viz casyv kapitole 5 nez D8 z nekolika zrejmych duvodu Predevsım algoritmus D8provadı mnohem mene pocetnıch operacı z duvodu jeho mensı slozitostiviz 3 Dalsım duvodem je take rozdıl v jazyce ve kterem jsou oba algo-ritmy napsany D8 je napsan v programovacım jazyce C++ ktery na vetsıchdatech je mnohonasobne rychlejsı nez Python Prepsanım algoritmu MDinfindo jazyka C++ by mohla byt cesta k budoucımu zvysenı rychlosti pracealgoritmu

13

Reference

[1] SEIBERT Jan McGlynn BL A new triangular multiple flow di-rection algortihm for computing upslope areas from gridded digi-tal elevation models [online] [cit 13 5 2013] Dostupne ke stazenız URL lthttpciteseerxistpsueduviewdocdownloaddoi=101179977amprep=rep1amptype=pdfgt

[2] HOLMGREN Peter Multiple direction algortihms for runoff modellingin grid based elevation models An empirical evaluation [online] [cit13 5 2013] Dostupny z URL ltftpwwwlwrkthseCommonUllaMFor_Imran[1994]20holmgren20-20multiple20flow

20direction20algorithms20for20runoff20modelling20in

20grid20based20elevation20modelspdf gt

[3] ESRI ESRI WebHelp - How Flow Direction works [online] [cit13 5 2013] Dostupne z URL lthttphelparcgiscomenarcgisdesktop100helpindexhtml009z00000063000000

htmgt

[4] ESRI ESRI Webhelp - Flow Direction (Spatial Analyst) [online][cit 13 5 2013] Dostupne z URL lthttphelparcgiscomenarcgisdesktop100helpindexhtml009z00000052000000

htmgt

[5] WIKIPEDIA NumPy [online] [cit 13 5 2013] Dostupne z URLlthttpenwikipediaorgwikiNumPygt

[6] INFORMIT Working with operators [online] [cit 13 5 2013] Dos-tupne z URL lthttpwwwinformitcomarticlesarticleaspxp=2002831ampseqNum=6gt

14

7 Prılohy

71 Bykovice a Nucice vstupnı DMT rastry

Obrazek 5 DMT Bykovice

Obrazek 6 DMT Nucice

15

72 Bykovice vysledky

Obrazek 7 Flow Direction D8

Obrazek 8 Flow Direction MDinfin

16

73 Nucice vysledky

Obrazek 9 Flow Direction D8

Obrazek 10 Flow Direction MDinfin

17

Page 17: pro zac ate cn kygeo.fsv.cvut.cz/gdata/2013/pin2/e/dokumentace/... · 2013-06-05 · CESK E VYSOK E U CEN I TECHNICKE V PRAZE FAKULTA STAVEBN I OBOR GEODEZIE A KARTOGRAFIE Dokumentace

Obrazek 2 Ocıslovane sekce polygonove vrstvy

211 Uvodnı dialog

Uvodnı dialog nastroje obsahuje pole pro 5 parametru

bull In - vstupnı parametr datovy typ Feature classVstupnı vrstva polygonu

bull Scale - vstupnı parametr datovy typ LongPozadovane merıtko

bull Map field width - vstupnı parametr s nastavenou defaultnı hodnotou25 datovy typ DoubleSırka vysledneho mapoveho ramce v cm

bull Map field height - vstupnı parametr s nastavenou defaultnı hodnotou30 datovy typ DoubleVyska vysledneho mapoveho ramce v cm

bull Out - vystupnı parametr datovy typ Feature classVystupnı vrstva gridu

4

Obrazek 3 Grid - Uvodnı dialog

212 Vysledny log

Kompletnı prıklad vysledneho logu je k nalezenı v prıloze 51Obsahuje tyto informace

bull Umıstenı pouzıvane databaze na disku

bull Dale v kazdem cyklu

ndash Poradove cıslo cyklu

ndash Aktualnı pocet nezpracovanych polygonu

ndash Cıslo vytvarene sekce

ndash Identifikatory polygonu tvorıcıch danou sekci

bull Pocet sekcı

bull Pocet mapovych listu v kazde sekci

213 Vysledne vrstvy

Vysledny grid pro merıtko 1 80 000 a defaultnı velikost mapoveho pole (25x 30 cm) vypada nasledovne

5

Obrazek 4 Grid - Vysledna vrstva

214 Cinnost nastroje podrobne

1 Prıpravne cinnostiV prvnıch radcıch kodu jsou vytvoreny pomocne promenne a pole znichz pro dalsı cinnost je potreba zmınit zasobnık IDs Ten je naplnenidentifikatory povodıPokud jiz neexistujı jsou ve vstupnı polygonove vrstve vytvoreny atri-butove sloupce hard ID section MapSheets

bull hard ID - Do tohoto sloupce byly zkopırovany identifikatory abyi po rozdelenı do nekolika vrstev mely polygony jednoznacny iden-tifikator

bull section - Po vypoctu sekcı sem bude pro kazdy polygon zapsanocıslo sekce ve ktere se nachazı

bull MapSheets - Atribut se seznamem mapovych listu na kterych sedane povodı nachazı

Ukazka tvorby atributoveho sloupce

fieldList = arcpyListFields(inFeatureClass rsquoMapSheetsrsquo)

6

fieldCount = len(fieldList)

if (fieldCount = 1)

arcpyAddField_management(inFeatureClass rsquoMapSheetsrsquo rsquoTEXTrsquo)

2 Hlavnı vypocetnı cast

Hlavnı cast je cela v cyklu while (len(IDs) gt 0) tj cyklus probıhadokud jsou v zasobnıku IDs hodnoty Na konci cyklu jsou vzdy identi-fikatory zpracovanych povodı ze zasobnıku mazany V kazdem prubehucyklu jsou selektovany povodı tvorıcı 1 sekci k takove sekci je potevytvoren grid a jsou plneny nove atributove sloupce

Ukazka hlavnıho cyklu

while len(IDs) gt 0

oznacenı povodı i-te sekce

rows_sel = arcpySearchCursor(rsquopovodi_classrsquo)

for row_sel in rows_sel

IDsremove(row_selOBJECTID)

V kazdem prubehu cyklu je zpracovana 1 sekce - tj shluk povodı kteremajı spolecnou cast hranice Sekce je tvorena na zaklade dotazu Se-lectByLocation s definicı BOUNDARY TOUCHES Dotaz se opakujev cyklu dokud se pocet oznacenych povodı zvetsuje K tomu slouzıpromenne matchcount1 matchcount2 ktere obsahujı pocet oznacenychpolygonu

Vytvorenı sekce

bull Oznacenı prvnıho nezpracovaneho polygonu

first_ID = str(IDs[0])

fieldName = OBJECTID

Query = + fieldName + = + first_ID

arcpySelectLayerByAttribute_management(rsquopovodi_classrsquo rsquoNEW_SELECTIONrsquo Query)

matchcount1 = int(arcpyGetCount_management(rsquopovodi_classrsquo)getOutput(0))

bull Prvnı prubeh SelectByLocation

7

arcpySelectLayerByLocation_management(rsquopovodi_classrsquo rsquoBOUNDARY_TOUCHESrsquo

rsquopovodi_classrsquo)

matchcount2 = int(arcpyGetCount_management(rsquopovodi_classrsquo)getOutput(0))

bull Dalsı prubehy SelectByLocation

while matchcount1 lt matchcount2

matchcount1 = matchcount2

arcpySelectLayerByLocation_management(rsquopovodi_classrsquo rsquoBOUNDARY_TOUCHESrsquo

rsquopovodi_classrsquo)

matchcount2 = int(arcpyGetCount_management(rsquopovodi_classrsquo)getOutput(0))

Oznacene polygony jsou ulozeny jako polygonova vrstva do vstupnı ge-odatabaze Tato vrstva je dale pouzita pro tvorbu gridu

Vytvorenı gridu

Pred samotnou tvorbou bylo potreba zjistit rozsah sekce Pokud bylasekce mensı nez 1 mapovy list bylo treba definovat souradnice polohylistu tak aby povodı lezelo na stredu listu Do zasobnıku byly nactenysouradnice lomovych bodu povodı a byly z nich vybrany maximalnı aminimalnı hodnoty Jejich rozdıl pak urcil rozsah sekce

Prıklad plnenı zasobnıku souradnicema

desc = arcpyDescribe(outputFeatureClassPath+rsquorsquo+output_name)

shape_field_name = descShapeFieldName

rows3 = arcpySearchCursor(outputFeatureClassPath+rsquorsquo+output_name)

mbr_X=[]

mbr_Y=[]

for row3 in rows3

Create the geometry object

feat = row3getValue(shape_field_name)

partnum = 0

for pnt in featgetPart(partnum)

mbr_Xappend(pntX)

mbr_Yappend(pntY)

partnum += 1

8

Vytvorenı gridu pote probıha budrsquo s definovanou nebo s nedefinovanoupolohou pocatecnıho mapoveho listu Pro vytvorenı gridu je pouzitafunkce GridIndexFeatures cartography

Ukazka

arcpyGridIndexFeatures_cartography(outputFeatureClassPath+rsquorsquo+grid_name

outputFeatureClassPath+rsquorsquo+output_name USEPAGEUNIT scale_str

sheet_width_str sheet_high_str str(grid_start_pnt_X)+rsquo rsquo+str(grid_start_pnt_Y))

Grid je tedy vytvoren pro jednu sekci Po vsech prubezıch cyklu jsoutakto vytvorene vrstvy gridu spojeny do jedne finalnı vrstvy V cyklujsou dale plneny nove atributove sloupce - cısla sekcı a nazvy mapovychlistu a to jak do nove (vystupnı) vrstvy gridu tak do vstupnı vrstvypovodı

3 Vytvorenı finalnıch vrstev tisk vysledku Jak bylo receno na zaverjsou spojeny jednotlive vrstvy gridu Vedle toho je vytvorena vrstvaspojenych mapovych listu po sekcıch - funkcı Dissolve - pro tvorbuprehledky Jsou vytisknuty vysledne hodnoty viz 212

22 Generalizace

Pro generalizaci byl napsan skript ktery nacıta liniovou vrstvu toku Tentoskript byl jiz psan na mıru podkladovym datum a pri nacıtanı je v nemvyuzito znalosti struktury danych podkladovych dat Skript k vrstve pripojıexternı tabulku a vytvorı atributovy sloupec kategorie Podle dat z externıtabulky pak plnı novy sloupec hodnotami 1 - 5 podle mnozstvı unasenehosedimentu Tato hodnota je pak pouzita pri vizualizaci datZajımavostı je ze pro nacıtanı musela byt tabulka indexovana viz 31

221 Uvodnı dialog

Uvodnı dialog obsahuje dva parametry

bull Input Feature Class Vstupnı liniova vrstva rıcnıch useku

bull Table Vstupnı tabulka obsahujıcı hodnoty rıcnıch splavnenin

9

222 Vysledny log

Vysledny log je k nahlednutı v prıloze 52 Obsahuje tyto informace

bull Pocet vsech rıcnıch useku

bull Pocet useku v jednotlivych kategoriıch

23 Finalnı upravy a export

Jak jiz bylo zmıneno finalnı vzhled mapoveho listu byl vytvoren manualne vLayout view a pomocı toolbaru Data Driven Pages Tento postup je casoveekonomictejsı a je jım dosazeno lepsıch vysledku dıky prehlednosti ToolbarData Driven Pages pak umoznuje vkladat dynamicke textove pole ktere seautomaticky menı s menıcım se mapovym listem Takovym polem je naprnazev mapoveho listu Stacı tedy definovat vzhled jednoho mapoveho listuv toolbaru Data Driven Pages navolit prıslusne pole - ty byly vytvorenynastrojem Grid viz 21 Dynamicky bylo potreba propojit s mapovym oknemi prehledku ktera byla vytvorena jako druhy Data Frame To se provedlo defi-novanım rozsahu podle hlavnıho mapoveho okna v Properties -iquest Data Frame-iquest Extant a definovanım Definition Query ve vlastnostech vrstvy Dalsım dy-namickym prvkem jsou oznacenı sousednıch mapovych listu a cıslo strankyNa takto sestavenou stranku s dynamickymi prvky bylo mozne pouzıt exportmapy do pdf a Atlas byl vygenerovanPrıklad dynamickeho textu pro nazev mapoveho listultdyn type=page property=PageNamegt

3 Problemy a moznosti rozsırenı

31 Pripojovanı externıch tabulek

Pri pripjovanı externıch tabulek musely byt indexovany hodnoty atribu-toveho sloupce pouziteho k parovanı To probehlo prıkazemarcpyAddIndex management (layer HydroID)Pripojenı tabulky musı probıhat k Feature layer Proto bylo nutne nejprve zFeature Class vytvorit Feature Layer1 Pote mohla byt tabulka pripojena

arcpyAddIndex_management (layer HydroID)

arcpyAddJoin_management(layer HydroID table Riverid)

1Rozdıl mezi Feature Layer a Feature Class je vysvetlen v prilozenem Tutorialu pro-gramovanı v Pythonu pro ArcGIS

10

Zde nastal problem s prıstupem k atributum Obecne nesmı nazvy atri-butovych sloupcu obsahovat mezery K hodnotam je pristupovano pres jed-notlive radky s parametrem nazev sloupce

rows= arcpySearchCursor(layer)

for row in rows

value=rownazev_sloupce

Pripojena tabulka ovsem mela v nazvech sloupcu mezeru K takto pojmeno-vanemu sloupci muselo byt pristupovano prıkazem getValue

rows= arcpySearchCursor(layer)

for row in rows

value=rowgetValue(rsquonazev tabulky$nazev sloupcersquo)

32 Doba behu tvorby gridu

Doba behu nastroje pro tvorbu gridu je znepokolive dlouha Bylo prove-deno merenı casu behu jednotlivych castı kodu funkcı time z modulu timeVysledky ukazaly ze nejdele trva vytvarenı novych vrstev Vrstva se muzevytvaret az 20 sekund Snaha o optimalizaci donutila nahradit vytvarenı vrs-tev s minimalnım ohranicujıcım obdelnıkem sekvencnım ukladanım souradniclomovych bodu polygonu z nichz pak funkcemi min a max byly tyto hodnotyzıskany Prubeh se tak urychlil o desıtky sekund (v jednom prubehu cyklupriblizne o 15 sekund) Dalsı moznostı bylo vyuzıt prostoroveho indexu datTato moznost nebyla vyuzita protoze ArcGIS pouzıva k prostorovemu in-dexovanı pravidelny grid Zıskanı MBR2 nebylo nalezeno Vyuzitı indexu byovsem problem neresilo Jak jiz bylo zmıneno nejdele trva vytvarenı novychvrstev Bohuzel funkce GridIndexFeatures cartography pro vytvorenı griduneumı pracovat se selektovanymi daty Tedy v kazdem cyklu musı byt ulozenapolygonova vrstva tvorıcı 1 sekci Pote mohla byt vytvorena vrstva tvorıcıgrid Tedy v kazdem prubehu cyklu jsou vytvareny 2 nove vrstvy Jelikozautor neprisel na zpusob jine optimalizace je nastroj pomaly Pro zadanydataset s 58mi povodımi jeho cinnost probıha desıtky minut

33 Moznosti rozsırenı

Do skriptu by se dal zakomponovat export seznamu mapovych listu pro kazdepovodı V soucasne verzi je tvoren exportem atributove tabulky

2minimum bounding rectangle - minimalnı ohranicujıcı obdelnık

11

4 Zaver

Byly vytvoreny nastroje pro automatizaci tvorby Atlasu pro mapy eroznıhosmyvu a transportu splavenin Tvorba Atlasu probıha v nekolika krocıchVizualizovane prvku jsou generalizovany Dale je vytvoren Grid ktery jepouzit jako indexova vrstva pro funkci Data Driven Pages Tou jsou vy-tvoreny jednotlive mapove listy Pomocı dynamickych prvku je pak vytvorenvzhled ktery se menı se zmenou mapoveho listu Nedostatkem je rychlostnastroje pro tvorbu gridu Presto ze je nastroj pomaly je zcela funkcnı Vprıpade potreby dalsıho rozsırenı bude ale vhodne vysledky nacıtat do novehonastroje Vzorovy vytisk vysledneho atlasu je prilozen Vzhledem k tomu zezpracovavana data jsou rozsahla a podlehajı autorskemu zakonu je vytvorenjen vzorovy vytisk z 6ti povodı Nastroje jsou psany v jazyce Python 26 proArcGIS 100 Pri praci byla vyuzıvana predevsım online napoveda ArcGISa diskuznı programatorska fora Kompletnı zdrojovy kod je ke stazenı nastrankach predmetu PIN2

12

5 Prılohy

51 Vysledny log tvorby gridu

Executing Grid

JAtlasvzorektemp_selectpovodi_vzorekgdbpokusne_povodi

70000 25 30 JAtlasvzorektemp_selectpovodi_vzorekgdbgrid70

Start Time Wed May 15 020551 2013

Running script Script2

Output folder JAtlasvzorektemp_selectpovodi_vzorekgdb

_____________________________________________________________________

count of basin polygon to process 6

_____________________________________________________________________

RUN 1

count of basins in 1 section 3

Their ID

ID 1

ID 3

ID 6

_____________________________________________________________________

count of basin polygon to process 3

_____________________________________________________________________

RUN 2

count of basins in 2 section 1

Their ID

ID 2

_____________________________________________________________________

count of basin polygon to process 2

_____________________________________________________________________

RUN 3

count of basins in 3 section 2

Their ID

ID 4

ID 5

----- RESULT -----

Number of sections 3

Number of map sheets

in section 1 13

in section 2 1

in section 3 2

Completed script Grid

Succeeded at Wed May 15 021359 2013 (Elapsed Time 8 minutes 8 seconds

13

52 Vysledny log generalizace

Executing generalization JAtlasvzorek2011_NAZV_nadrze2011_watemsedem

NAZV_tokyVT28_finshp

JAtlasvzorek2011_NAZV_nadrze2011_watemsedem28_vypocet

projectriversedimentxlsxprojectriversediment$

Start Time Wed May 15 075624 2013

Running script generalization

Category created

Total count of river parts 2879

Count of category 1 2428

Count of category 2 118

Count of category 3 68

Count of category 4 20

Count of category 5 245

Completed script generalization

Succeeded at Wed May 15 075638 2013 (Elapsed Time 1400 seconds)

14

CESKE VYSOKE UCENI TECHNICKE V PRAZE

FAKULTA STAVEBNI

OBOR GEODEZIE A KARTOGRAFIE

Dokumentace k projektu informatika 2

Stanovenı smeru odtokuna rastrovem digitalnım modelu

a implementace algoritmudo prostredı ArcGIS

BC JAN ZAJICEK

5 cervna 2013

Obsah

Obsah 1

1 Uvod 2

2 Nejbeznejsı existujıcı algoritmy 3

3 Flow Direction D8 431 Obecny princip D8 432 Popis algoritmu D8 5

4 Popis algoritmu MDinfin 641 Obecny princip MDinfin 642 Technicke resenı MDinfin 8

5 Vysledky 1151 Realna data - Bykovice 1152 Realna data - Nucice 12

6 Zaver 13

Reference 14

7 Prılohy 1571 Bykovice a Nucice vstupnı DMT rastry 1572 Bykovice vysledky 1673 Nucice vysledky 17

1

1 Uvod

Tato dokumentace byla zpracovana v ramci predmetu Projekt Informatika 2Semestralnı prace bude pouzita jako z jedna castı autorovi diplomove praces nazvem SMODERP 2D rozsırenı resıcı vztahy soustredeneho a plosnehoodtoku na danem uzemı Duvodem zpracovanı tohoto tematu byla potrebapouzitı v diplomove praci vıce nez jednoho algoritmu pro urcenı smeruodtoku v prostredı ArcGIS V soucasne dobe ArcGIS vyuzıva algoritmusD8 viz kapitola 3 jako jediny algoritmus pro vypocet smeru odtoku Tentoalgoritmus je soucastı Hydrology tools Nastroje ze skupiny Hydrology sepouzıvajı k modelovanı chovanı toku vody na povrchu Nejbeznejsı pouzıvanadigitalnı data povrchu Zeme jsou rastry digitalnı modelu terenu DMT slozenez jednotlivych bunek pixelu Tyto DMT rastry jsou pouzity jako vstupypro ruzne charakteristiky povrchu DMT rastr je souvisly povrch obvykleodkazujıcı na povrch Zeme Presnost dat je dana rozlisenım rastru taktezvzdalenostı mezi body rastru Informace o tvaru zemskeho povrchu je uzitecnapro mnoho oboru jako je napr zemedelstvı lesnictvı zivotnı prostredı neboregionalnı planovanı Tyto obory vyzadujı pochopenı jak voda tece v ramciuzemı a jak zmeny na tomto uzemı nasledne ovlivnı jejı tok

Cılem projektu bylo naprogramovat algoritmus ktery v roce 2007 publiko-vali Jan Seibert a Brian L McGlynn s nazvem MDinfin [1] Tento algoritmusje vylepsenım stavajıcıch algoritmu pro resenı urcenı smeru odtoku na ras-tru viz kapitola 2 Pro overenı spravnosti vysledku byla pouzita realnadata dvou pozemku u obcı Bykovice a Nucice Testovanı probıhalo na ras-trech o rozlisenı 5 metru Algoritmus byl naprogramovan v jazyce Pythonv prostredı NetBeans IDE 69 Pro spustenı v ArcGISu je potreba pridatdo prostredı vytvoreny toolbox upravit aktualnı cestu ke skriptu mainpya tento model nasledne spustit Vstupem modelu je rastr DMT a vystupnıadresar do ktereho se po dobehnutı modelu ulozı vysledny rastr s hodnotamismeru odtoku 1255 Algoritmus MDinfin je testovan na verzi ArcGIS 100Na nejnovejsı verzi ArcGIS 101 ktera vysla v cervnu 2012 nenı overenakompatibilita algoritmu v dusledku nefunkcnosti vıce nez jedne verze tohotoprogramu na jednom pocıtaci

2

2 Nejbeznejsı existujıcı algoritmy

Existujı tri nejbeznejsı algoritmy kazdy odlisne resıcı problematiku odtokuvody z rastru do sousednıch bunek Prvnım z nich je algoritmus D8 z roku1984 Algoritmus je podrobne popsan v nasledujıcı kapitole 3 Jelikoz odtoknastava vzdy jen do jedne sousednı bunky dochazı casto ke koncentracivodnıch sıtı a sıtrsquo odtoku pak neodpovıda skutecnosti Na druhou stranuje jeho vyhodou jeho jednoduchost a fakt ze nedochazı k nechtene disperzijako je tomu u druheho algoritmu

Druhym algoritmem je MD8 neboli multiple flow direction algorithm MD8algoritmem je voda odvadena do vsech nıze polozenych sousednıch buneka pomer vody je rozdelen procentualne podle sklonu Ve vysledku ma algo-ritmus tendenci vytvaret vıce realisticke prostorove sıte toku nez D8 tımze nedochazı k takove koncentraci vody v sıti U D8 ma mnohem vetsıvliv maly rozdıl vysek mezi sousednımi bunkami na to ktera bunka prijmeveskerou vodu Pouzitım MD8 tyto male vyskove rozdıly nemajı zdalekatakovy vliv jelikoz je mnozstvı vody rozdeleno pomerem mezi tyto bunkyNejvetsı nevyhodou tohoto algoritmu je jeho prılisna disperze na konver-gentnıch svazıch v dusledku odtoku do vsech nıze polozenych bunek

V roce 1997 byl navrzen algoritmus pojmenovany Dinfin Davidem G Tar-botonem z americke univerzity v Utahu Byl navrzen prıstup ktery je zalozenna osmi trojuhelnıkovych ploskach viz obrazek 3 Dıky tomuto postupu jsouodstraneny limitace v podobe moznosti pouze osmi smeru odtoku z bunkyProto je algoritmus pojmenovan Dinfin jelikoz muze nastat nekonecne moznostıvysledneho smeru odtoku Tento prıstup umoznuje pouze jeden smer odtokurozdeleny mezi jednu nebo dve bunky v zavislosti na smeru odtoku

Poslednı dva zmınene algoritmy MD8 a Dinfinmajı oproti D8 nevyhodu ve vetsıcasove narocnosti vypoctu V kapitole 4 je popsan algoritmus MDinfin kteryvyuzıva vyhody MD8 algoritmu za pouzitı trojuhelnıkovych plosek obdobnejako Dinfin algoritmus

3

3 Flow Direction D8

Pro pochopenı problematiky a zjevnost rozdılu mezi algoritmy je vhodneuvest jak funguje nastroj ktery pouzıva ArcGIS Zaklad algoritmu MDinfino nemz pojednava tato dokumentace je zalozen na podobnych postupech

31 Obecny princip D8

Princip nastroje urcenı smeru odtoku (Flow Direction) ktery pouzıva prostredıArcGIS je nasledujıcı Tento nastroj (tool) vezme vstupnı rastr digitalnıhomodelu terenu neboli vyskovy rastr Provede vypocet jehoz vystupem jerastr ktery v kazde bunce rastru obsahuje hodnotu urcujıcı smer odtokuz teto bunky Hodnot je osm podle osmi sousednıch bunek do kterych muzeodtekat voda viz obrazek 1 Prave podle osmi smeru odtoku se tento prıstupnazyva D8 (eight-direction approach)

Obrazek 1 Flow Direction D8 [3]

4

32 Popis algoritmu D8

Samotny vypocet algoritmu je v zasade primitivnı Pro vsechny sousednıbunky se vypocte maximalnı sklon [3]

maximalnı sklon = rozdıl vysek vzdalenost 100

Rozdıl vysek je rozdıl vysky v aktualnım bode a konkretnı sousednı bunkyVzdalenost je vypoctena mezi stredy bunek a lisı se v zavislosti na polozesousednı bunky Pro bunky sousedıcı vrcholem je hodnota velikosti pixeluprenasobena o odmocninu ze dvou Pro zbyle bunky sousedıcı hranou jevelikost vzdalenosti rovna velikosti pixelu Po nalezenı nejstrmejsıho smeruodtoku je hodnota ulozena v podobe bitove hodnoty reprezentujıcı danysmer Pred pouzitım nastroje Flow Direction se obvykle zpracuje vstupnırastr pomocı nastroje Sink Tento algoritmus zaplnı bezodtoke oblasti rastrunejnizsı hodnotou z okolı a do teto nejnizsı sousednı bunky pak posle voduPote jiz nemuze dojıt k situaci kdy vsechny sousednı bunky k dane buncemajı vyssı hodnoty vysek a nedochazelo by tedy k odtokuVysledny rastr nemusı obsahovat pouze bunky s hodnotami 202127 [4]Jestlize nastane situace kdy ma vıce sousednıch bunek nejnizsı hodnotuvysek pak je vysledna hodnota souctem vsech smeru Napr hodnota maximalnıhosklonu bude stejna pro sousednı bunku vlevo a nahore odtok tedy budesmerem na zapad (hodnota = 16) a na sever (hodnota = 64) vysledna hod-nota bude souctem 16 a 64 tedy 84

5

4 Popis algoritmu MDinfin

41 Obecny princip MDinfinObecny postup je prevzat z [1] Stejne jako v prıpade algoritmu Dinfin bylyzavedeny trojuhelnıkove plosky pro vypocet lokalnıho sklonu a smeru pro kazdoutrojuhelnıkovou plosku Okolo stredoveho boduM bylo vytvoreno osm trojuhelnıkuviz obrazek 3 Kazdy se zbyvajıcımi dvema vrcholy P1 P2 ve dvou sousedıcıchbunkach Pro kazdy z techto trojuhelnıku je vypocten smer nejvetsıho sklonuPokud oznacıme vysky bodu M P1 P2 jako hM hP1 hP2 rozdıly vysek sevypoctou takto

z1 = hP1 minus hM z2 = hP2 minus hM (1)

Obdobne se vypoctou rozdıly v x-ovych a y-ovych souradnicıch Po vypocturozdılu jednotlivych souradnic je vypocten normalovy vektor

n =

nx

ny

nz

=

z1y2 minus z2y1z1x2 minus z2x1y1x2 minus y2x1

(2)

Smer odtoku d a sklon s na trojuhelnıkove plose se vypocte pomocı rovnice3 Hodnota nula pro d oznacuje smer osy y a hodnota 3π2 oznacuje smerosy x

d =

0 nx = 0 ny ge 0

π nx = 0 ny lt 0

π2minus arctan(

ny

nx

) nx gt 0

3π2minus arctan(

ny

nx

) nx lt 0

(3)

s = minus tan

(arccos

(nzradic

n2x + n2

y + n2z

))(4)

Jestlize nejvetsı sklon od bodu M je mimo rozpetı 0-45 (π4 radian) jepouzit sklon strmejsı k jednomu z bodu P1 P2 a zaroven i sklon je spoctenk tomuto bodu V prıpade ze oba sousednı body jsou vyse polozeny nez bodM smer nenı pro tento trojuhelnık uvazovan Po spoctenı vsech osmi smerua sklonu pro jednotlive plosky jsou tyto smery povazovany za lokalne ne-jstrmejsı pro kazdy trojuhelnık v rozsahu 45 Smery vedoucı prımo do bodu

6

P1 nebo P2 tedy ty kde d = 0 nebo d = π4 jsou uvazovany pouze vprıpade kdy obe vedlejsı sousednı bunky majı smer k bodu P1 nebo P2Tato situace je znazornena na obrazku 2

Obrazek 2 Ukazka urcenı smeru odtoku z bunky [1]

Prvnı prıpad je smer mırıcı mezi bunky 5 a 6 Druhy prıpad je smer kteryvede prımo do bunky 3 Tato situace nastane jestlize pro trojuhelnık M43vyjde lokalnı smer d = π4 a pro trojuhelnık M32 smer vyjde d = 0Pote co je smer odtoku pro bunku vypocten je celkovy odtok rozdelendo vsech vyslednych smeru na zaklade sklonu Resenı teto problematiky jevıce popsano v sekci 42 Pro smery mırıcı mezi body P1 a P2 je odtokrozdelen do dvou bunek na zaklade nevejtsıho sklonu Pomer odtoku do buneks body P1 a P2 bude v tomto poradı α245 a α145

Obrazek 3 Trojuhelnıkove plosky [1]

7

42 Technicke resenı MDinfinVyse jiz bylo zmıneno ze algoritmus je napsan v jazyce Python Algoritmusje rozdelen do dvou skriptu Prvnı z nich obsahuje funkce a druhy je hlavnıVstupem do modelu je rastr digitalnıho modelu terenu a vystupnı adresardo ktereho se ulozı finalnı rastr smeru odtoku viz obr 4 Po nactenı rastruze vstupnıch parametru je tento rastr preveden na matici NumPy pomocıfunkce

arcpy RasterToNumPyArray ( InputRaster )

NumPy [5] je rozsırenı programovacıho jazyka Python je to balıcek uzıvanypro vedecke vypocty Umoznuje podporu velkych multi-dimenzionalnıch polıa matic spolu s velkou knihovnou matematickych funkcı pro praci s temitopoli

Algoritmus cyklem projızdı vsechny prvky matice a u tech ktere majı hod-notu ruznou od NoData nalezne okolı Hledanı okolı bunky provadı funkceneighbors ta je definovana takto

def ne ighbors ( i j array x y ) return nb1 nb2 nb3 nb4 nb5 nb6 nb7 nb8

Vstupem funkce je pozice v matici dale cela matice a jejı rozmery Funkceneighbors vypocıta hodnoty vysek sousednıch osmi bunek a vratı je na vystup

Obrazek 4 Dialogove okno nastroje MDinfin

Vystup z funkce neighbors slouzı jako jeden z vstupnıch parametru pro dalsıfunkci

8

Funkce byla pojmenovana dir slope jelikoz jejım vystupem je smer odtokua sklon tohoto smeru

def d i r s l o p e ( pointM nbrs vpix sp ix ) return d i r e c t i o n s l ope

Pro kazdy trojuhelnık byla spoctena hodnota d viz vzorec 3 Hodnota s bylapo spatnych a nelogickych vysledcıch pocıtana podle jineho vzorce ktery jizdaval spravne vysledky

s0 =

radicz212y21

+z22y22

(5)

Vzorec se lisı pro kazdy trojuhelnıcek uvedeny je pro vypocet sklonu kdy sousednıbunka je severozapadnı a severnı Tımto postupem bylo zbytecne pocıtatz-tovou slozku vekotoru n vzorec 2 Byly osetreny prıpady kdy sousednıbunky aktualnıho pocıtaneho trojuhelnıku jsou obe vyse polozene nebo obemimo rastr (NoData) Dalsı prıpad nastane jestlize je jeden bod vne rastra druhy v rastru lezı Smer je potom urcen prımo do toho bodu ktery nalezırastru Taktez i sklon je pocıtan pouze mezi tımto bodem a bodem M Lokalnı smer d v kazde plosce po vypoctenı nesmı prekrocit 45 V situacize tuto hodnotu prekrocı je smeru prirazena hodnota 0 nebo 45 v zavislostina vzajemnem porovnanı vysek bodu v trojuhelnıku Takto jsou zpracovanyvsechny plosky a je zjisteno zda-li do kazdeho trojuhelnıku nastava smerodtoku nebo ne Na konci funkce dir slope se kontroluje prıpad kdy smersousednıch trojuhelnıku odkazuje presne do stejneho bodu tedy hodnotysmeru musı byt pro prvnı trojuhelnık d = 45 a pro nasledujıcı sousednıtrojuhelnık d = 0 Vystupem funkce jsou dva vektory o osmi prvcıch smera sklon pro kazdou plosku

Dalsı fazı vypoctu je zjistenı pomeru vody ktera potece do jednotlivychsmeru K vypoctu pomeru byl pouzit tento vzorec [2]

fi =sxi8sum

j=1

sxj

(6)

kde s vyznacuje sklon vypocteneho smeru konkretnı trojuhelnıkove ploskya x je promenny exponent Pokud by byl exponent zvolen 1 bude vyslednasıtrsquo obdobna jako pri pouzitı MD8 algoritmu Pri zvetsovanı exponentu xk nekonecnu bude sıtrsquo stejna jako pri pouzitı D8 metody Vychozı hodnotaexponentu byla zvolena x = 4 coz je kompromis mezi obema variantami

9

Zmena exponentu se v soucasne podobe neprojevı na vyslednem rastru je-likoz vysledek prezentuje pouze smer odtoku a ne procentualnı cast Tohotopomeru bude vyuzito az pri spojenı skriptu s 2D modelem SMODERP

V dalsı casti vypoctu je rozdelen jiz zjisteny pomer z celkoveho odtokudo dvou prıpadne pouze do jedne bunky v zavislosti na smeru odtoku dVe vysledku je vypocten vektor osmi cısel kde kazda hodnota od 0 do 1prestavuje jiz procentualnı pomer z celkoveho odtoku do kazde sousednıbunky

Pro vyslednou reprezentaci smeru odtoku na vystup byl pro kazdou bunkuvytvoren vektor obsahujıcı 1 a 0 rıkajıcı zda nastava ci nenastava odtokdo sousednı bunky Tento vektor byl preveden na celocıselnou hodnotu po-mocı funkce bool2int

def boo l 2 i n t ( x ) y = 0for i j in enumerate ( x )

i f j y += 1ltlt ireturn y

Funkce ma na vstupu vektor jedicek a nul Naprıklad pro vektor 00000111kdy voda tece na severozapad sever a severovychod se funkce chova taktoJe testovano jestli platı j = 1 tedy prvnıch pet nul vektoru funkce preskocıa pro prvnı jednicku se pricte k promenne y 20 v dalsım kroku 21 a v poslednım22 Operator vyjadruje totiz bitovy posun smerem doleva Vysledkem jena vystupu cıslo y = 1 + 2 + 4 = 7

Pro vsechny bunky byla vypoctena hodnota reprezentujıcı smer odtoku Tatohodnota se ulozı do matice a ta se nasledne prevede na vysledny rastr

f l o w d i r = arcpy NumPyArrayToRaster ( value LLcorner spix vpix rdquordquo )

value hodnota reprezentujıcı smer odtokuLLcorner souradnice leveho dolnıho rohuspix sırka pixeluvpix vyska pixelu

10

5 Vysledky

Algoritmus MDinfin byl testovan na skutecnych datech dvou pozemku u obcıNucice ve Stredoceskem kraji a Bykovice v kraji Jihomoravskem rastry jsouv prıloze 71 Oba dva rastry jsou o rozlisenı 5 metru Finalnı rastry jsouporovnavany s rastry vytvorenymi v prostredı ArcGIS nastrojem Flow Di-rection metodou D8

51 Realna data - Bykovice

Vysledne rastry Flow Direction pro uzemı Bykovice jsou uvedeny v prıloze72 Oba rastry byly pro hodnoty 202127 obarveny shodnou barvou kvulilepsı nazornosti a porovnatelnosti vysledku Rastr ktery obsahuje z celkovehopoctu 44807 bunek celkem 23655 bunek s hodnotami vysek po probehnutıalgoritmy dal nasledujıcı vysledky

FD D8 MDinfin1 3650 7372 666 9174 207 188 21 716 94 3732 791 8564 8818 1045128 9408 14983sum

23655 14983

Tabulka 1 Tabulka porovnanı obou algoritmu pro rastr Bykovic

FD je zkratka pro Flow Direction cili smer odtoku reprezentovany celocıselnouhodnotou Ostatnı hodnoty u vysledneho rastru na ktery byl pouzit algorit-mus MDinfin jsou v rozpetı 0246 V rozmezı hodnot smeru odtoku 246255se nevyskytujı zadne bunky Cas potrebny pro vykonanı skriptu byl v prıpadeD8 4 vteriny Pro algoritmus MDinfin byl cas 15 vterin

11

52 Realna data - Nucice

Vysledne rastry jsou uvedeny v prıloze 73 Opet bylo pouzito shodne obar-venı pro zakladnı smery u obou rastru Rastr Nucice obsahoval data na 82732bunkach z celkove poctu 125449 bunek Vysledky jsou pro prehlednost uve-deny v tabulce

FD D8 MDinfin1 12186 12332 12441 87034 16907 10278 9826 1642316 2516 28832 5010 241764 7788 366128 16058 25475sum

82732 55932

Tabulka 2 Tabulka porovnanı obou algoritmu pro rastr Nucic

Ostatnı hodnoty u vysledneho rastru na ktery byl pouzit algoritmusMDinfin jsou v rozpetı 0255 Cas potrebny pro vykonanı skriptu byl v prıpadeD8 6 vterin Pro algoritmus MDinfin byl cas 50 vterin

12

6 Zaver

Cılem projektu bylo vytvorit funkcnı skript obsahujıcı algoritmus pojmen-ovany MDinfin [1] ktery resı odtok do sousednıch bunek rastru Algoritmusbyl napsan v programovacım jazyce Python a testovan na realnych datechVysledky byly mırnym prekvapenım kdy zejmena hodnoty smeru 128 tedyseverovychodnıho se vyskytovaly ve vysledku velmi casto viz tabulky 1 a 2Predpokladem bylo ze se odtok rozlozı do vıce smeru a pocet bunek s hod-notami zakladnıch smeru 1248163264 a 128 bude mene nez v prıpade al-goritmu D8 K rozkladu do vıce smeru sice doslo ale pocet nekterych bunekse zakladnımi smery byl vetsı u algoritmu MDinfin

Co se tyce delky doby behu algoritmu je algoritmus MDinfin pomalejsı viz casyv kapitole 5 nez D8 z nekolika zrejmych duvodu Predevsım algoritmus D8provadı mnohem mene pocetnıch operacı z duvodu jeho mensı slozitostiviz 3 Dalsım duvodem je take rozdıl v jazyce ve kterem jsou oba algo-ritmy napsany D8 je napsan v programovacım jazyce C++ ktery na vetsıchdatech je mnohonasobne rychlejsı nez Python Prepsanım algoritmu MDinfindo jazyka C++ by mohla byt cesta k budoucımu zvysenı rychlosti pracealgoritmu

13

Reference

[1] SEIBERT Jan McGlynn BL A new triangular multiple flow di-rection algortihm for computing upslope areas from gridded digi-tal elevation models [online] [cit 13 5 2013] Dostupne ke stazenız URL lthttpciteseerxistpsueduviewdocdownloaddoi=101179977amprep=rep1amptype=pdfgt

[2] HOLMGREN Peter Multiple direction algortihms for runoff modellingin grid based elevation models An empirical evaluation [online] [cit13 5 2013] Dostupny z URL ltftpwwwlwrkthseCommonUllaMFor_Imran[1994]20holmgren20-20multiple20flow

20direction20algorithms20for20runoff20modelling20in

20grid20based20elevation20modelspdf gt

[3] ESRI ESRI WebHelp - How Flow Direction works [online] [cit13 5 2013] Dostupne z URL lthttphelparcgiscomenarcgisdesktop100helpindexhtml009z00000063000000

htmgt

[4] ESRI ESRI Webhelp - Flow Direction (Spatial Analyst) [online][cit 13 5 2013] Dostupne z URL lthttphelparcgiscomenarcgisdesktop100helpindexhtml009z00000052000000

htmgt

[5] WIKIPEDIA NumPy [online] [cit 13 5 2013] Dostupne z URLlthttpenwikipediaorgwikiNumPygt

[6] INFORMIT Working with operators [online] [cit 13 5 2013] Dos-tupne z URL lthttpwwwinformitcomarticlesarticleaspxp=2002831ampseqNum=6gt

14

7 Prılohy

71 Bykovice a Nucice vstupnı DMT rastry

Obrazek 5 DMT Bykovice

Obrazek 6 DMT Nucice

15

72 Bykovice vysledky

Obrazek 7 Flow Direction D8

Obrazek 8 Flow Direction MDinfin

16

73 Nucice vysledky

Obrazek 9 Flow Direction D8

Obrazek 10 Flow Direction MDinfin

17

Page 18: pro zac ate cn kygeo.fsv.cvut.cz/gdata/2013/pin2/e/dokumentace/... · 2013-06-05 · CESK E VYSOK E U CEN I TECHNICKE V PRAZE FAKULTA STAVEBN I OBOR GEODEZIE A KARTOGRAFIE Dokumentace

Obrazek 3 Grid - Uvodnı dialog

212 Vysledny log

Kompletnı prıklad vysledneho logu je k nalezenı v prıloze 51Obsahuje tyto informace

bull Umıstenı pouzıvane databaze na disku

bull Dale v kazdem cyklu

ndash Poradove cıslo cyklu

ndash Aktualnı pocet nezpracovanych polygonu

ndash Cıslo vytvarene sekce

ndash Identifikatory polygonu tvorıcıch danou sekci

bull Pocet sekcı

bull Pocet mapovych listu v kazde sekci

213 Vysledne vrstvy

Vysledny grid pro merıtko 1 80 000 a defaultnı velikost mapoveho pole (25x 30 cm) vypada nasledovne

5

Obrazek 4 Grid - Vysledna vrstva

214 Cinnost nastroje podrobne

1 Prıpravne cinnostiV prvnıch radcıch kodu jsou vytvoreny pomocne promenne a pole znichz pro dalsı cinnost je potreba zmınit zasobnık IDs Ten je naplnenidentifikatory povodıPokud jiz neexistujı jsou ve vstupnı polygonove vrstve vytvoreny atri-butove sloupce hard ID section MapSheets

bull hard ID - Do tohoto sloupce byly zkopırovany identifikatory abyi po rozdelenı do nekolika vrstev mely polygony jednoznacny iden-tifikator

bull section - Po vypoctu sekcı sem bude pro kazdy polygon zapsanocıslo sekce ve ktere se nachazı

bull MapSheets - Atribut se seznamem mapovych listu na kterych sedane povodı nachazı

Ukazka tvorby atributoveho sloupce

fieldList = arcpyListFields(inFeatureClass rsquoMapSheetsrsquo)

6

fieldCount = len(fieldList)

if (fieldCount = 1)

arcpyAddField_management(inFeatureClass rsquoMapSheetsrsquo rsquoTEXTrsquo)

2 Hlavnı vypocetnı cast

Hlavnı cast je cela v cyklu while (len(IDs) gt 0) tj cyklus probıhadokud jsou v zasobnıku IDs hodnoty Na konci cyklu jsou vzdy identi-fikatory zpracovanych povodı ze zasobnıku mazany V kazdem prubehucyklu jsou selektovany povodı tvorıcı 1 sekci k takove sekci je potevytvoren grid a jsou plneny nove atributove sloupce

Ukazka hlavnıho cyklu

while len(IDs) gt 0

oznacenı povodı i-te sekce

rows_sel = arcpySearchCursor(rsquopovodi_classrsquo)

for row_sel in rows_sel

IDsremove(row_selOBJECTID)

V kazdem prubehu cyklu je zpracovana 1 sekce - tj shluk povodı kteremajı spolecnou cast hranice Sekce je tvorena na zaklade dotazu Se-lectByLocation s definicı BOUNDARY TOUCHES Dotaz se opakujev cyklu dokud se pocet oznacenych povodı zvetsuje K tomu slouzıpromenne matchcount1 matchcount2 ktere obsahujı pocet oznacenychpolygonu

Vytvorenı sekce

bull Oznacenı prvnıho nezpracovaneho polygonu

first_ID = str(IDs[0])

fieldName = OBJECTID

Query = + fieldName + = + first_ID

arcpySelectLayerByAttribute_management(rsquopovodi_classrsquo rsquoNEW_SELECTIONrsquo Query)

matchcount1 = int(arcpyGetCount_management(rsquopovodi_classrsquo)getOutput(0))

bull Prvnı prubeh SelectByLocation

7

arcpySelectLayerByLocation_management(rsquopovodi_classrsquo rsquoBOUNDARY_TOUCHESrsquo

rsquopovodi_classrsquo)

matchcount2 = int(arcpyGetCount_management(rsquopovodi_classrsquo)getOutput(0))

bull Dalsı prubehy SelectByLocation

while matchcount1 lt matchcount2

matchcount1 = matchcount2

arcpySelectLayerByLocation_management(rsquopovodi_classrsquo rsquoBOUNDARY_TOUCHESrsquo

rsquopovodi_classrsquo)

matchcount2 = int(arcpyGetCount_management(rsquopovodi_classrsquo)getOutput(0))

Oznacene polygony jsou ulozeny jako polygonova vrstva do vstupnı ge-odatabaze Tato vrstva je dale pouzita pro tvorbu gridu

Vytvorenı gridu

Pred samotnou tvorbou bylo potreba zjistit rozsah sekce Pokud bylasekce mensı nez 1 mapovy list bylo treba definovat souradnice polohylistu tak aby povodı lezelo na stredu listu Do zasobnıku byly nactenysouradnice lomovych bodu povodı a byly z nich vybrany maximalnı aminimalnı hodnoty Jejich rozdıl pak urcil rozsah sekce

Prıklad plnenı zasobnıku souradnicema

desc = arcpyDescribe(outputFeatureClassPath+rsquorsquo+output_name)

shape_field_name = descShapeFieldName

rows3 = arcpySearchCursor(outputFeatureClassPath+rsquorsquo+output_name)

mbr_X=[]

mbr_Y=[]

for row3 in rows3

Create the geometry object

feat = row3getValue(shape_field_name)

partnum = 0

for pnt in featgetPart(partnum)

mbr_Xappend(pntX)

mbr_Yappend(pntY)

partnum += 1

8

Vytvorenı gridu pote probıha budrsquo s definovanou nebo s nedefinovanoupolohou pocatecnıho mapoveho listu Pro vytvorenı gridu je pouzitafunkce GridIndexFeatures cartography

Ukazka

arcpyGridIndexFeatures_cartography(outputFeatureClassPath+rsquorsquo+grid_name

outputFeatureClassPath+rsquorsquo+output_name USEPAGEUNIT scale_str

sheet_width_str sheet_high_str str(grid_start_pnt_X)+rsquo rsquo+str(grid_start_pnt_Y))

Grid je tedy vytvoren pro jednu sekci Po vsech prubezıch cyklu jsoutakto vytvorene vrstvy gridu spojeny do jedne finalnı vrstvy V cyklujsou dale plneny nove atributove sloupce - cısla sekcı a nazvy mapovychlistu a to jak do nove (vystupnı) vrstvy gridu tak do vstupnı vrstvypovodı

3 Vytvorenı finalnıch vrstev tisk vysledku Jak bylo receno na zaverjsou spojeny jednotlive vrstvy gridu Vedle toho je vytvorena vrstvaspojenych mapovych listu po sekcıch - funkcı Dissolve - pro tvorbuprehledky Jsou vytisknuty vysledne hodnoty viz 212

22 Generalizace

Pro generalizaci byl napsan skript ktery nacıta liniovou vrstvu toku Tentoskript byl jiz psan na mıru podkladovym datum a pri nacıtanı je v nemvyuzito znalosti struktury danych podkladovych dat Skript k vrstve pripojıexternı tabulku a vytvorı atributovy sloupec kategorie Podle dat z externıtabulky pak plnı novy sloupec hodnotami 1 - 5 podle mnozstvı unasenehosedimentu Tato hodnota je pak pouzita pri vizualizaci datZajımavostı je ze pro nacıtanı musela byt tabulka indexovana viz 31

221 Uvodnı dialog

Uvodnı dialog obsahuje dva parametry

bull Input Feature Class Vstupnı liniova vrstva rıcnıch useku

bull Table Vstupnı tabulka obsahujıcı hodnoty rıcnıch splavnenin

9

222 Vysledny log

Vysledny log je k nahlednutı v prıloze 52 Obsahuje tyto informace

bull Pocet vsech rıcnıch useku

bull Pocet useku v jednotlivych kategoriıch

23 Finalnı upravy a export

Jak jiz bylo zmıneno finalnı vzhled mapoveho listu byl vytvoren manualne vLayout view a pomocı toolbaru Data Driven Pages Tento postup je casoveekonomictejsı a je jım dosazeno lepsıch vysledku dıky prehlednosti ToolbarData Driven Pages pak umoznuje vkladat dynamicke textove pole ktere seautomaticky menı s menıcım se mapovym listem Takovym polem je naprnazev mapoveho listu Stacı tedy definovat vzhled jednoho mapoveho listuv toolbaru Data Driven Pages navolit prıslusne pole - ty byly vytvorenynastrojem Grid viz 21 Dynamicky bylo potreba propojit s mapovym oknemi prehledku ktera byla vytvorena jako druhy Data Frame To se provedlo defi-novanım rozsahu podle hlavnıho mapoveho okna v Properties -iquest Data Frame-iquest Extant a definovanım Definition Query ve vlastnostech vrstvy Dalsım dy-namickym prvkem jsou oznacenı sousednıch mapovych listu a cıslo strankyNa takto sestavenou stranku s dynamickymi prvky bylo mozne pouzıt exportmapy do pdf a Atlas byl vygenerovanPrıklad dynamickeho textu pro nazev mapoveho listultdyn type=page property=PageNamegt

3 Problemy a moznosti rozsırenı

31 Pripojovanı externıch tabulek

Pri pripjovanı externıch tabulek musely byt indexovany hodnoty atribu-toveho sloupce pouziteho k parovanı To probehlo prıkazemarcpyAddIndex management (layer HydroID)Pripojenı tabulky musı probıhat k Feature layer Proto bylo nutne nejprve zFeature Class vytvorit Feature Layer1 Pote mohla byt tabulka pripojena

arcpyAddIndex_management (layer HydroID)

arcpyAddJoin_management(layer HydroID table Riverid)

1Rozdıl mezi Feature Layer a Feature Class je vysvetlen v prilozenem Tutorialu pro-gramovanı v Pythonu pro ArcGIS

10

Zde nastal problem s prıstupem k atributum Obecne nesmı nazvy atri-butovych sloupcu obsahovat mezery K hodnotam je pristupovano pres jed-notlive radky s parametrem nazev sloupce

rows= arcpySearchCursor(layer)

for row in rows

value=rownazev_sloupce

Pripojena tabulka ovsem mela v nazvech sloupcu mezeru K takto pojmeno-vanemu sloupci muselo byt pristupovano prıkazem getValue

rows= arcpySearchCursor(layer)

for row in rows

value=rowgetValue(rsquonazev tabulky$nazev sloupcersquo)

32 Doba behu tvorby gridu

Doba behu nastroje pro tvorbu gridu je znepokolive dlouha Bylo prove-deno merenı casu behu jednotlivych castı kodu funkcı time z modulu timeVysledky ukazaly ze nejdele trva vytvarenı novych vrstev Vrstva se muzevytvaret az 20 sekund Snaha o optimalizaci donutila nahradit vytvarenı vrs-tev s minimalnım ohranicujıcım obdelnıkem sekvencnım ukladanım souradniclomovych bodu polygonu z nichz pak funkcemi min a max byly tyto hodnotyzıskany Prubeh se tak urychlil o desıtky sekund (v jednom prubehu cyklupriblizne o 15 sekund) Dalsı moznostı bylo vyuzıt prostoroveho indexu datTato moznost nebyla vyuzita protoze ArcGIS pouzıva k prostorovemu in-dexovanı pravidelny grid Zıskanı MBR2 nebylo nalezeno Vyuzitı indexu byovsem problem neresilo Jak jiz bylo zmıneno nejdele trva vytvarenı novychvrstev Bohuzel funkce GridIndexFeatures cartography pro vytvorenı griduneumı pracovat se selektovanymi daty Tedy v kazdem cyklu musı byt ulozenapolygonova vrstva tvorıcı 1 sekci Pote mohla byt vytvorena vrstva tvorıcıgrid Tedy v kazdem prubehu cyklu jsou vytvareny 2 nove vrstvy Jelikozautor neprisel na zpusob jine optimalizace je nastroj pomaly Pro zadanydataset s 58mi povodımi jeho cinnost probıha desıtky minut

33 Moznosti rozsırenı

Do skriptu by se dal zakomponovat export seznamu mapovych listu pro kazdepovodı V soucasne verzi je tvoren exportem atributove tabulky

2minimum bounding rectangle - minimalnı ohranicujıcı obdelnık

11

4 Zaver

Byly vytvoreny nastroje pro automatizaci tvorby Atlasu pro mapy eroznıhosmyvu a transportu splavenin Tvorba Atlasu probıha v nekolika krocıchVizualizovane prvku jsou generalizovany Dale je vytvoren Grid ktery jepouzit jako indexova vrstva pro funkci Data Driven Pages Tou jsou vy-tvoreny jednotlive mapove listy Pomocı dynamickych prvku je pak vytvorenvzhled ktery se menı se zmenou mapoveho listu Nedostatkem je rychlostnastroje pro tvorbu gridu Presto ze je nastroj pomaly je zcela funkcnı Vprıpade potreby dalsıho rozsırenı bude ale vhodne vysledky nacıtat do novehonastroje Vzorovy vytisk vysledneho atlasu je prilozen Vzhledem k tomu zezpracovavana data jsou rozsahla a podlehajı autorskemu zakonu je vytvorenjen vzorovy vytisk z 6ti povodı Nastroje jsou psany v jazyce Python 26 proArcGIS 100 Pri praci byla vyuzıvana predevsım online napoveda ArcGISa diskuznı programatorska fora Kompletnı zdrojovy kod je ke stazenı nastrankach predmetu PIN2

12

5 Prılohy

51 Vysledny log tvorby gridu

Executing Grid

JAtlasvzorektemp_selectpovodi_vzorekgdbpokusne_povodi

70000 25 30 JAtlasvzorektemp_selectpovodi_vzorekgdbgrid70

Start Time Wed May 15 020551 2013

Running script Script2

Output folder JAtlasvzorektemp_selectpovodi_vzorekgdb

_____________________________________________________________________

count of basin polygon to process 6

_____________________________________________________________________

RUN 1

count of basins in 1 section 3

Their ID

ID 1

ID 3

ID 6

_____________________________________________________________________

count of basin polygon to process 3

_____________________________________________________________________

RUN 2

count of basins in 2 section 1

Their ID

ID 2

_____________________________________________________________________

count of basin polygon to process 2

_____________________________________________________________________

RUN 3

count of basins in 3 section 2

Their ID

ID 4

ID 5

----- RESULT -----

Number of sections 3

Number of map sheets

in section 1 13

in section 2 1

in section 3 2

Completed script Grid

Succeeded at Wed May 15 021359 2013 (Elapsed Time 8 minutes 8 seconds

13

52 Vysledny log generalizace

Executing generalization JAtlasvzorek2011_NAZV_nadrze2011_watemsedem

NAZV_tokyVT28_finshp

JAtlasvzorek2011_NAZV_nadrze2011_watemsedem28_vypocet

projectriversedimentxlsxprojectriversediment$

Start Time Wed May 15 075624 2013

Running script generalization

Category created

Total count of river parts 2879

Count of category 1 2428

Count of category 2 118

Count of category 3 68

Count of category 4 20

Count of category 5 245

Completed script generalization

Succeeded at Wed May 15 075638 2013 (Elapsed Time 1400 seconds)

14

CESKE VYSOKE UCENI TECHNICKE V PRAZE

FAKULTA STAVEBNI

OBOR GEODEZIE A KARTOGRAFIE

Dokumentace k projektu informatika 2

Stanovenı smeru odtokuna rastrovem digitalnım modelu

a implementace algoritmudo prostredı ArcGIS

BC JAN ZAJICEK

5 cervna 2013

Obsah

Obsah 1

1 Uvod 2

2 Nejbeznejsı existujıcı algoritmy 3

3 Flow Direction D8 431 Obecny princip D8 432 Popis algoritmu D8 5

4 Popis algoritmu MDinfin 641 Obecny princip MDinfin 642 Technicke resenı MDinfin 8

5 Vysledky 1151 Realna data - Bykovice 1152 Realna data - Nucice 12

6 Zaver 13

Reference 14

7 Prılohy 1571 Bykovice a Nucice vstupnı DMT rastry 1572 Bykovice vysledky 1673 Nucice vysledky 17

1

1 Uvod

Tato dokumentace byla zpracovana v ramci predmetu Projekt Informatika 2Semestralnı prace bude pouzita jako z jedna castı autorovi diplomove praces nazvem SMODERP 2D rozsırenı resıcı vztahy soustredeneho a plosnehoodtoku na danem uzemı Duvodem zpracovanı tohoto tematu byla potrebapouzitı v diplomove praci vıce nez jednoho algoritmu pro urcenı smeruodtoku v prostredı ArcGIS V soucasne dobe ArcGIS vyuzıva algoritmusD8 viz kapitola 3 jako jediny algoritmus pro vypocet smeru odtoku Tentoalgoritmus je soucastı Hydrology tools Nastroje ze skupiny Hydrology sepouzıvajı k modelovanı chovanı toku vody na povrchu Nejbeznejsı pouzıvanadigitalnı data povrchu Zeme jsou rastry digitalnı modelu terenu DMT slozenez jednotlivych bunek pixelu Tyto DMT rastry jsou pouzity jako vstupypro ruzne charakteristiky povrchu DMT rastr je souvisly povrch obvykleodkazujıcı na povrch Zeme Presnost dat je dana rozlisenım rastru taktezvzdalenostı mezi body rastru Informace o tvaru zemskeho povrchu je uzitecnapro mnoho oboru jako je napr zemedelstvı lesnictvı zivotnı prostredı neboregionalnı planovanı Tyto obory vyzadujı pochopenı jak voda tece v ramciuzemı a jak zmeny na tomto uzemı nasledne ovlivnı jejı tok

Cılem projektu bylo naprogramovat algoritmus ktery v roce 2007 publiko-vali Jan Seibert a Brian L McGlynn s nazvem MDinfin [1] Tento algoritmusje vylepsenım stavajıcıch algoritmu pro resenı urcenı smeru odtoku na ras-tru viz kapitola 2 Pro overenı spravnosti vysledku byla pouzita realnadata dvou pozemku u obcı Bykovice a Nucice Testovanı probıhalo na ras-trech o rozlisenı 5 metru Algoritmus byl naprogramovan v jazyce Pythonv prostredı NetBeans IDE 69 Pro spustenı v ArcGISu je potreba pridatdo prostredı vytvoreny toolbox upravit aktualnı cestu ke skriptu mainpya tento model nasledne spustit Vstupem modelu je rastr DMT a vystupnıadresar do ktereho se po dobehnutı modelu ulozı vysledny rastr s hodnotamismeru odtoku 1255 Algoritmus MDinfin je testovan na verzi ArcGIS 100Na nejnovejsı verzi ArcGIS 101 ktera vysla v cervnu 2012 nenı overenakompatibilita algoritmu v dusledku nefunkcnosti vıce nez jedne verze tohotoprogramu na jednom pocıtaci

2

2 Nejbeznejsı existujıcı algoritmy

Existujı tri nejbeznejsı algoritmy kazdy odlisne resıcı problematiku odtokuvody z rastru do sousednıch bunek Prvnım z nich je algoritmus D8 z roku1984 Algoritmus je podrobne popsan v nasledujıcı kapitole 3 Jelikoz odtoknastava vzdy jen do jedne sousednı bunky dochazı casto ke koncentracivodnıch sıtı a sıtrsquo odtoku pak neodpovıda skutecnosti Na druhou stranuje jeho vyhodou jeho jednoduchost a fakt ze nedochazı k nechtene disperzijako je tomu u druheho algoritmu

Druhym algoritmem je MD8 neboli multiple flow direction algorithm MD8algoritmem je voda odvadena do vsech nıze polozenych sousednıch buneka pomer vody je rozdelen procentualne podle sklonu Ve vysledku ma algo-ritmus tendenci vytvaret vıce realisticke prostorove sıte toku nez D8 tımze nedochazı k takove koncentraci vody v sıti U D8 ma mnohem vetsıvliv maly rozdıl vysek mezi sousednımi bunkami na to ktera bunka prijmeveskerou vodu Pouzitım MD8 tyto male vyskove rozdıly nemajı zdalekatakovy vliv jelikoz je mnozstvı vody rozdeleno pomerem mezi tyto bunkyNejvetsı nevyhodou tohoto algoritmu je jeho prılisna disperze na konver-gentnıch svazıch v dusledku odtoku do vsech nıze polozenych bunek

V roce 1997 byl navrzen algoritmus pojmenovany Dinfin Davidem G Tar-botonem z americke univerzity v Utahu Byl navrzen prıstup ktery je zalozenna osmi trojuhelnıkovych ploskach viz obrazek 3 Dıky tomuto postupu jsouodstraneny limitace v podobe moznosti pouze osmi smeru odtoku z bunkyProto je algoritmus pojmenovan Dinfin jelikoz muze nastat nekonecne moznostıvysledneho smeru odtoku Tento prıstup umoznuje pouze jeden smer odtokurozdeleny mezi jednu nebo dve bunky v zavislosti na smeru odtoku

Poslednı dva zmınene algoritmy MD8 a Dinfinmajı oproti D8 nevyhodu ve vetsıcasove narocnosti vypoctu V kapitole 4 je popsan algoritmus MDinfin kteryvyuzıva vyhody MD8 algoritmu za pouzitı trojuhelnıkovych plosek obdobnejako Dinfin algoritmus

3

3 Flow Direction D8

Pro pochopenı problematiky a zjevnost rozdılu mezi algoritmy je vhodneuvest jak funguje nastroj ktery pouzıva ArcGIS Zaklad algoritmu MDinfino nemz pojednava tato dokumentace je zalozen na podobnych postupech

31 Obecny princip D8

Princip nastroje urcenı smeru odtoku (Flow Direction) ktery pouzıva prostredıArcGIS je nasledujıcı Tento nastroj (tool) vezme vstupnı rastr digitalnıhomodelu terenu neboli vyskovy rastr Provede vypocet jehoz vystupem jerastr ktery v kazde bunce rastru obsahuje hodnotu urcujıcı smer odtokuz teto bunky Hodnot je osm podle osmi sousednıch bunek do kterych muzeodtekat voda viz obrazek 1 Prave podle osmi smeru odtoku se tento prıstupnazyva D8 (eight-direction approach)

Obrazek 1 Flow Direction D8 [3]

4

32 Popis algoritmu D8

Samotny vypocet algoritmu je v zasade primitivnı Pro vsechny sousednıbunky se vypocte maximalnı sklon [3]

maximalnı sklon = rozdıl vysek vzdalenost 100

Rozdıl vysek je rozdıl vysky v aktualnım bode a konkretnı sousednı bunkyVzdalenost je vypoctena mezi stredy bunek a lisı se v zavislosti na polozesousednı bunky Pro bunky sousedıcı vrcholem je hodnota velikosti pixeluprenasobena o odmocninu ze dvou Pro zbyle bunky sousedıcı hranou jevelikost vzdalenosti rovna velikosti pixelu Po nalezenı nejstrmejsıho smeruodtoku je hodnota ulozena v podobe bitove hodnoty reprezentujıcı danysmer Pred pouzitım nastroje Flow Direction se obvykle zpracuje vstupnırastr pomocı nastroje Sink Tento algoritmus zaplnı bezodtoke oblasti rastrunejnizsı hodnotou z okolı a do teto nejnizsı sousednı bunky pak posle voduPote jiz nemuze dojıt k situaci kdy vsechny sousednı bunky k dane buncemajı vyssı hodnoty vysek a nedochazelo by tedy k odtokuVysledny rastr nemusı obsahovat pouze bunky s hodnotami 202127 [4]Jestlize nastane situace kdy ma vıce sousednıch bunek nejnizsı hodnotuvysek pak je vysledna hodnota souctem vsech smeru Napr hodnota maximalnıhosklonu bude stejna pro sousednı bunku vlevo a nahore odtok tedy budesmerem na zapad (hodnota = 16) a na sever (hodnota = 64) vysledna hod-nota bude souctem 16 a 64 tedy 84

5

4 Popis algoritmu MDinfin

41 Obecny princip MDinfinObecny postup je prevzat z [1] Stejne jako v prıpade algoritmu Dinfin bylyzavedeny trojuhelnıkove plosky pro vypocet lokalnıho sklonu a smeru pro kazdoutrojuhelnıkovou plosku Okolo stredoveho boduM bylo vytvoreno osm trojuhelnıkuviz obrazek 3 Kazdy se zbyvajıcımi dvema vrcholy P1 P2 ve dvou sousedıcıchbunkach Pro kazdy z techto trojuhelnıku je vypocten smer nejvetsıho sklonuPokud oznacıme vysky bodu M P1 P2 jako hM hP1 hP2 rozdıly vysek sevypoctou takto

z1 = hP1 minus hM z2 = hP2 minus hM (1)

Obdobne se vypoctou rozdıly v x-ovych a y-ovych souradnicıch Po vypocturozdılu jednotlivych souradnic je vypocten normalovy vektor

n =

nx

ny

nz

=

z1y2 minus z2y1z1x2 minus z2x1y1x2 minus y2x1

(2)

Smer odtoku d a sklon s na trojuhelnıkove plose se vypocte pomocı rovnice3 Hodnota nula pro d oznacuje smer osy y a hodnota 3π2 oznacuje smerosy x

d =

0 nx = 0 ny ge 0

π nx = 0 ny lt 0

π2minus arctan(

ny

nx

) nx gt 0

3π2minus arctan(

ny

nx

) nx lt 0

(3)

s = minus tan

(arccos

(nzradic

n2x + n2

y + n2z

))(4)

Jestlize nejvetsı sklon od bodu M je mimo rozpetı 0-45 (π4 radian) jepouzit sklon strmejsı k jednomu z bodu P1 P2 a zaroven i sklon je spoctenk tomuto bodu V prıpade ze oba sousednı body jsou vyse polozeny nez bodM smer nenı pro tento trojuhelnık uvazovan Po spoctenı vsech osmi smerua sklonu pro jednotlive plosky jsou tyto smery povazovany za lokalne ne-jstrmejsı pro kazdy trojuhelnık v rozsahu 45 Smery vedoucı prımo do bodu

6

P1 nebo P2 tedy ty kde d = 0 nebo d = π4 jsou uvazovany pouze vprıpade kdy obe vedlejsı sousednı bunky majı smer k bodu P1 nebo P2Tato situace je znazornena na obrazku 2

Obrazek 2 Ukazka urcenı smeru odtoku z bunky [1]

Prvnı prıpad je smer mırıcı mezi bunky 5 a 6 Druhy prıpad je smer kteryvede prımo do bunky 3 Tato situace nastane jestlize pro trojuhelnık M43vyjde lokalnı smer d = π4 a pro trojuhelnık M32 smer vyjde d = 0Pote co je smer odtoku pro bunku vypocten je celkovy odtok rozdelendo vsech vyslednych smeru na zaklade sklonu Resenı teto problematiky jevıce popsano v sekci 42 Pro smery mırıcı mezi body P1 a P2 je odtokrozdelen do dvou bunek na zaklade nevejtsıho sklonu Pomer odtoku do buneks body P1 a P2 bude v tomto poradı α245 a α145

Obrazek 3 Trojuhelnıkove plosky [1]

7

42 Technicke resenı MDinfinVyse jiz bylo zmıneno ze algoritmus je napsan v jazyce Python Algoritmusje rozdelen do dvou skriptu Prvnı z nich obsahuje funkce a druhy je hlavnıVstupem do modelu je rastr digitalnıho modelu terenu a vystupnı adresardo ktereho se ulozı finalnı rastr smeru odtoku viz obr 4 Po nactenı rastruze vstupnıch parametru je tento rastr preveden na matici NumPy pomocıfunkce

arcpy RasterToNumPyArray ( InputRaster )

NumPy [5] je rozsırenı programovacıho jazyka Python je to balıcek uzıvanypro vedecke vypocty Umoznuje podporu velkych multi-dimenzionalnıch polıa matic spolu s velkou knihovnou matematickych funkcı pro praci s temitopoli

Algoritmus cyklem projızdı vsechny prvky matice a u tech ktere majı hod-notu ruznou od NoData nalezne okolı Hledanı okolı bunky provadı funkceneighbors ta je definovana takto

def ne ighbors ( i j array x y ) return nb1 nb2 nb3 nb4 nb5 nb6 nb7 nb8

Vstupem funkce je pozice v matici dale cela matice a jejı rozmery Funkceneighbors vypocıta hodnoty vysek sousednıch osmi bunek a vratı je na vystup

Obrazek 4 Dialogove okno nastroje MDinfin

Vystup z funkce neighbors slouzı jako jeden z vstupnıch parametru pro dalsıfunkci

8

Funkce byla pojmenovana dir slope jelikoz jejım vystupem je smer odtokua sklon tohoto smeru

def d i r s l o p e ( pointM nbrs vpix sp ix ) return d i r e c t i o n s l ope

Pro kazdy trojuhelnık byla spoctena hodnota d viz vzorec 3 Hodnota s bylapo spatnych a nelogickych vysledcıch pocıtana podle jineho vzorce ktery jizdaval spravne vysledky

s0 =

radicz212y21

+z22y22

(5)

Vzorec se lisı pro kazdy trojuhelnıcek uvedeny je pro vypocet sklonu kdy sousednıbunka je severozapadnı a severnı Tımto postupem bylo zbytecne pocıtatz-tovou slozku vekotoru n vzorec 2 Byly osetreny prıpady kdy sousednıbunky aktualnıho pocıtaneho trojuhelnıku jsou obe vyse polozene nebo obemimo rastr (NoData) Dalsı prıpad nastane jestlize je jeden bod vne rastra druhy v rastru lezı Smer je potom urcen prımo do toho bodu ktery nalezırastru Taktez i sklon je pocıtan pouze mezi tımto bodem a bodem M Lokalnı smer d v kazde plosce po vypoctenı nesmı prekrocit 45 V situacize tuto hodnotu prekrocı je smeru prirazena hodnota 0 nebo 45 v zavislostina vzajemnem porovnanı vysek bodu v trojuhelnıku Takto jsou zpracovanyvsechny plosky a je zjisteno zda-li do kazdeho trojuhelnıku nastava smerodtoku nebo ne Na konci funkce dir slope se kontroluje prıpad kdy smersousednıch trojuhelnıku odkazuje presne do stejneho bodu tedy hodnotysmeru musı byt pro prvnı trojuhelnık d = 45 a pro nasledujıcı sousednıtrojuhelnık d = 0 Vystupem funkce jsou dva vektory o osmi prvcıch smera sklon pro kazdou plosku

Dalsı fazı vypoctu je zjistenı pomeru vody ktera potece do jednotlivychsmeru K vypoctu pomeru byl pouzit tento vzorec [2]

fi =sxi8sum

j=1

sxj

(6)

kde s vyznacuje sklon vypocteneho smeru konkretnı trojuhelnıkove ploskya x je promenny exponent Pokud by byl exponent zvolen 1 bude vyslednasıtrsquo obdobna jako pri pouzitı MD8 algoritmu Pri zvetsovanı exponentu xk nekonecnu bude sıtrsquo stejna jako pri pouzitı D8 metody Vychozı hodnotaexponentu byla zvolena x = 4 coz je kompromis mezi obema variantami

9

Zmena exponentu se v soucasne podobe neprojevı na vyslednem rastru je-likoz vysledek prezentuje pouze smer odtoku a ne procentualnı cast Tohotopomeru bude vyuzito az pri spojenı skriptu s 2D modelem SMODERP

V dalsı casti vypoctu je rozdelen jiz zjisteny pomer z celkoveho odtokudo dvou prıpadne pouze do jedne bunky v zavislosti na smeru odtoku dVe vysledku je vypocten vektor osmi cısel kde kazda hodnota od 0 do 1prestavuje jiz procentualnı pomer z celkoveho odtoku do kazde sousednıbunky

Pro vyslednou reprezentaci smeru odtoku na vystup byl pro kazdou bunkuvytvoren vektor obsahujıcı 1 a 0 rıkajıcı zda nastava ci nenastava odtokdo sousednı bunky Tento vektor byl preveden na celocıselnou hodnotu po-mocı funkce bool2int

def boo l 2 i n t ( x ) y = 0for i j in enumerate ( x )

i f j y += 1ltlt ireturn y

Funkce ma na vstupu vektor jedicek a nul Naprıklad pro vektor 00000111kdy voda tece na severozapad sever a severovychod se funkce chova taktoJe testovano jestli platı j = 1 tedy prvnıch pet nul vektoru funkce preskocıa pro prvnı jednicku se pricte k promenne y 20 v dalsım kroku 21 a v poslednım22 Operator vyjadruje totiz bitovy posun smerem doleva Vysledkem jena vystupu cıslo y = 1 + 2 + 4 = 7

Pro vsechny bunky byla vypoctena hodnota reprezentujıcı smer odtoku Tatohodnota se ulozı do matice a ta se nasledne prevede na vysledny rastr

f l o w d i r = arcpy NumPyArrayToRaster ( value LLcorner spix vpix rdquordquo )

value hodnota reprezentujıcı smer odtokuLLcorner souradnice leveho dolnıho rohuspix sırka pixeluvpix vyska pixelu

10

5 Vysledky

Algoritmus MDinfin byl testovan na skutecnych datech dvou pozemku u obcıNucice ve Stredoceskem kraji a Bykovice v kraji Jihomoravskem rastry jsouv prıloze 71 Oba dva rastry jsou o rozlisenı 5 metru Finalnı rastry jsouporovnavany s rastry vytvorenymi v prostredı ArcGIS nastrojem Flow Di-rection metodou D8

51 Realna data - Bykovice

Vysledne rastry Flow Direction pro uzemı Bykovice jsou uvedeny v prıloze72 Oba rastry byly pro hodnoty 202127 obarveny shodnou barvou kvulilepsı nazornosti a porovnatelnosti vysledku Rastr ktery obsahuje z celkovehopoctu 44807 bunek celkem 23655 bunek s hodnotami vysek po probehnutıalgoritmy dal nasledujıcı vysledky

FD D8 MDinfin1 3650 7372 666 9174 207 188 21 716 94 3732 791 8564 8818 1045128 9408 14983sum

23655 14983

Tabulka 1 Tabulka porovnanı obou algoritmu pro rastr Bykovic

FD je zkratka pro Flow Direction cili smer odtoku reprezentovany celocıselnouhodnotou Ostatnı hodnoty u vysledneho rastru na ktery byl pouzit algorit-mus MDinfin jsou v rozpetı 0246 V rozmezı hodnot smeru odtoku 246255se nevyskytujı zadne bunky Cas potrebny pro vykonanı skriptu byl v prıpadeD8 4 vteriny Pro algoritmus MDinfin byl cas 15 vterin

11

52 Realna data - Nucice

Vysledne rastry jsou uvedeny v prıloze 73 Opet bylo pouzito shodne obar-venı pro zakladnı smery u obou rastru Rastr Nucice obsahoval data na 82732bunkach z celkove poctu 125449 bunek Vysledky jsou pro prehlednost uve-deny v tabulce

FD D8 MDinfin1 12186 12332 12441 87034 16907 10278 9826 1642316 2516 28832 5010 241764 7788 366128 16058 25475sum

82732 55932

Tabulka 2 Tabulka porovnanı obou algoritmu pro rastr Nucic

Ostatnı hodnoty u vysledneho rastru na ktery byl pouzit algoritmusMDinfin jsou v rozpetı 0255 Cas potrebny pro vykonanı skriptu byl v prıpadeD8 6 vterin Pro algoritmus MDinfin byl cas 50 vterin

12

6 Zaver

Cılem projektu bylo vytvorit funkcnı skript obsahujıcı algoritmus pojmen-ovany MDinfin [1] ktery resı odtok do sousednıch bunek rastru Algoritmusbyl napsan v programovacım jazyce Python a testovan na realnych datechVysledky byly mırnym prekvapenım kdy zejmena hodnoty smeru 128 tedyseverovychodnıho se vyskytovaly ve vysledku velmi casto viz tabulky 1 a 2Predpokladem bylo ze se odtok rozlozı do vıce smeru a pocet bunek s hod-notami zakladnıch smeru 1248163264 a 128 bude mene nez v prıpade al-goritmu D8 K rozkladu do vıce smeru sice doslo ale pocet nekterych bunekse zakladnımi smery byl vetsı u algoritmu MDinfin

Co se tyce delky doby behu algoritmu je algoritmus MDinfin pomalejsı viz casyv kapitole 5 nez D8 z nekolika zrejmych duvodu Predevsım algoritmus D8provadı mnohem mene pocetnıch operacı z duvodu jeho mensı slozitostiviz 3 Dalsım duvodem je take rozdıl v jazyce ve kterem jsou oba algo-ritmy napsany D8 je napsan v programovacım jazyce C++ ktery na vetsıchdatech je mnohonasobne rychlejsı nez Python Prepsanım algoritmu MDinfindo jazyka C++ by mohla byt cesta k budoucımu zvysenı rychlosti pracealgoritmu

13

Reference

[1] SEIBERT Jan McGlynn BL A new triangular multiple flow di-rection algortihm for computing upslope areas from gridded digi-tal elevation models [online] [cit 13 5 2013] Dostupne ke stazenız URL lthttpciteseerxistpsueduviewdocdownloaddoi=101179977amprep=rep1amptype=pdfgt

[2] HOLMGREN Peter Multiple direction algortihms for runoff modellingin grid based elevation models An empirical evaluation [online] [cit13 5 2013] Dostupny z URL ltftpwwwlwrkthseCommonUllaMFor_Imran[1994]20holmgren20-20multiple20flow

20direction20algorithms20for20runoff20modelling20in

20grid20based20elevation20modelspdf gt

[3] ESRI ESRI WebHelp - How Flow Direction works [online] [cit13 5 2013] Dostupne z URL lthttphelparcgiscomenarcgisdesktop100helpindexhtml009z00000063000000

htmgt

[4] ESRI ESRI Webhelp - Flow Direction (Spatial Analyst) [online][cit 13 5 2013] Dostupne z URL lthttphelparcgiscomenarcgisdesktop100helpindexhtml009z00000052000000

htmgt

[5] WIKIPEDIA NumPy [online] [cit 13 5 2013] Dostupne z URLlthttpenwikipediaorgwikiNumPygt

[6] INFORMIT Working with operators [online] [cit 13 5 2013] Dos-tupne z URL lthttpwwwinformitcomarticlesarticleaspxp=2002831ampseqNum=6gt

14

7 Prılohy

71 Bykovice a Nucice vstupnı DMT rastry

Obrazek 5 DMT Bykovice

Obrazek 6 DMT Nucice

15

72 Bykovice vysledky

Obrazek 7 Flow Direction D8

Obrazek 8 Flow Direction MDinfin

16

73 Nucice vysledky

Obrazek 9 Flow Direction D8

Obrazek 10 Flow Direction MDinfin

17

Page 19: pro zac ate cn kygeo.fsv.cvut.cz/gdata/2013/pin2/e/dokumentace/... · 2013-06-05 · CESK E VYSOK E U CEN I TECHNICKE V PRAZE FAKULTA STAVEBN I OBOR GEODEZIE A KARTOGRAFIE Dokumentace

Obrazek 4 Grid - Vysledna vrstva

214 Cinnost nastroje podrobne

1 Prıpravne cinnostiV prvnıch radcıch kodu jsou vytvoreny pomocne promenne a pole znichz pro dalsı cinnost je potreba zmınit zasobnık IDs Ten je naplnenidentifikatory povodıPokud jiz neexistujı jsou ve vstupnı polygonove vrstve vytvoreny atri-butove sloupce hard ID section MapSheets

bull hard ID - Do tohoto sloupce byly zkopırovany identifikatory abyi po rozdelenı do nekolika vrstev mely polygony jednoznacny iden-tifikator

bull section - Po vypoctu sekcı sem bude pro kazdy polygon zapsanocıslo sekce ve ktere se nachazı

bull MapSheets - Atribut se seznamem mapovych listu na kterych sedane povodı nachazı

Ukazka tvorby atributoveho sloupce

fieldList = arcpyListFields(inFeatureClass rsquoMapSheetsrsquo)

6

fieldCount = len(fieldList)

if (fieldCount = 1)

arcpyAddField_management(inFeatureClass rsquoMapSheetsrsquo rsquoTEXTrsquo)

2 Hlavnı vypocetnı cast

Hlavnı cast je cela v cyklu while (len(IDs) gt 0) tj cyklus probıhadokud jsou v zasobnıku IDs hodnoty Na konci cyklu jsou vzdy identi-fikatory zpracovanych povodı ze zasobnıku mazany V kazdem prubehucyklu jsou selektovany povodı tvorıcı 1 sekci k takove sekci je potevytvoren grid a jsou plneny nove atributove sloupce

Ukazka hlavnıho cyklu

while len(IDs) gt 0

oznacenı povodı i-te sekce

rows_sel = arcpySearchCursor(rsquopovodi_classrsquo)

for row_sel in rows_sel

IDsremove(row_selOBJECTID)

V kazdem prubehu cyklu je zpracovana 1 sekce - tj shluk povodı kteremajı spolecnou cast hranice Sekce je tvorena na zaklade dotazu Se-lectByLocation s definicı BOUNDARY TOUCHES Dotaz se opakujev cyklu dokud se pocet oznacenych povodı zvetsuje K tomu slouzıpromenne matchcount1 matchcount2 ktere obsahujı pocet oznacenychpolygonu

Vytvorenı sekce

bull Oznacenı prvnıho nezpracovaneho polygonu

first_ID = str(IDs[0])

fieldName = OBJECTID

Query = + fieldName + = + first_ID

arcpySelectLayerByAttribute_management(rsquopovodi_classrsquo rsquoNEW_SELECTIONrsquo Query)

matchcount1 = int(arcpyGetCount_management(rsquopovodi_classrsquo)getOutput(0))

bull Prvnı prubeh SelectByLocation

7

arcpySelectLayerByLocation_management(rsquopovodi_classrsquo rsquoBOUNDARY_TOUCHESrsquo

rsquopovodi_classrsquo)

matchcount2 = int(arcpyGetCount_management(rsquopovodi_classrsquo)getOutput(0))

bull Dalsı prubehy SelectByLocation

while matchcount1 lt matchcount2

matchcount1 = matchcount2

arcpySelectLayerByLocation_management(rsquopovodi_classrsquo rsquoBOUNDARY_TOUCHESrsquo

rsquopovodi_classrsquo)

matchcount2 = int(arcpyGetCount_management(rsquopovodi_classrsquo)getOutput(0))

Oznacene polygony jsou ulozeny jako polygonova vrstva do vstupnı ge-odatabaze Tato vrstva je dale pouzita pro tvorbu gridu

Vytvorenı gridu

Pred samotnou tvorbou bylo potreba zjistit rozsah sekce Pokud bylasekce mensı nez 1 mapovy list bylo treba definovat souradnice polohylistu tak aby povodı lezelo na stredu listu Do zasobnıku byly nactenysouradnice lomovych bodu povodı a byly z nich vybrany maximalnı aminimalnı hodnoty Jejich rozdıl pak urcil rozsah sekce

Prıklad plnenı zasobnıku souradnicema

desc = arcpyDescribe(outputFeatureClassPath+rsquorsquo+output_name)

shape_field_name = descShapeFieldName

rows3 = arcpySearchCursor(outputFeatureClassPath+rsquorsquo+output_name)

mbr_X=[]

mbr_Y=[]

for row3 in rows3

Create the geometry object

feat = row3getValue(shape_field_name)

partnum = 0

for pnt in featgetPart(partnum)

mbr_Xappend(pntX)

mbr_Yappend(pntY)

partnum += 1

8

Vytvorenı gridu pote probıha budrsquo s definovanou nebo s nedefinovanoupolohou pocatecnıho mapoveho listu Pro vytvorenı gridu je pouzitafunkce GridIndexFeatures cartography

Ukazka

arcpyGridIndexFeatures_cartography(outputFeatureClassPath+rsquorsquo+grid_name

outputFeatureClassPath+rsquorsquo+output_name USEPAGEUNIT scale_str

sheet_width_str sheet_high_str str(grid_start_pnt_X)+rsquo rsquo+str(grid_start_pnt_Y))

Grid je tedy vytvoren pro jednu sekci Po vsech prubezıch cyklu jsoutakto vytvorene vrstvy gridu spojeny do jedne finalnı vrstvy V cyklujsou dale plneny nove atributove sloupce - cısla sekcı a nazvy mapovychlistu a to jak do nove (vystupnı) vrstvy gridu tak do vstupnı vrstvypovodı

3 Vytvorenı finalnıch vrstev tisk vysledku Jak bylo receno na zaverjsou spojeny jednotlive vrstvy gridu Vedle toho je vytvorena vrstvaspojenych mapovych listu po sekcıch - funkcı Dissolve - pro tvorbuprehledky Jsou vytisknuty vysledne hodnoty viz 212

22 Generalizace

Pro generalizaci byl napsan skript ktery nacıta liniovou vrstvu toku Tentoskript byl jiz psan na mıru podkladovym datum a pri nacıtanı je v nemvyuzito znalosti struktury danych podkladovych dat Skript k vrstve pripojıexternı tabulku a vytvorı atributovy sloupec kategorie Podle dat z externıtabulky pak plnı novy sloupec hodnotami 1 - 5 podle mnozstvı unasenehosedimentu Tato hodnota je pak pouzita pri vizualizaci datZajımavostı je ze pro nacıtanı musela byt tabulka indexovana viz 31

221 Uvodnı dialog

Uvodnı dialog obsahuje dva parametry

bull Input Feature Class Vstupnı liniova vrstva rıcnıch useku

bull Table Vstupnı tabulka obsahujıcı hodnoty rıcnıch splavnenin

9

222 Vysledny log

Vysledny log je k nahlednutı v prıloze 52 Obsahuje tyto informace

bull Pocet vsech rıcnıch useku

bull Pocet useku v jednotlivych kategoriıch

23 Finalnı upravy a export

Jak jiz bylo zmıneno finalnı vzhled mapoveho listu byl vytvoren manualne vLayout view a pomocı toolbaru Data Driven Pages Tento postup je casoveekonomictejsı a je jım dosazeno lepsıch vysledku dıky prehlednosti ToolbarData Driven Pages pak umoznuje vkladat dynamicke textove pole ktere seautomaticky menı s menıcım se mapovym listem Takovym polem je naprnazev mapoveho listu Stacı tedy definovat vzhled jednoho mapoveho listuv toolbaru Data Driven Pages navolit prıslusne pole - ty byly vytvorenynastrojem Grid viz 21 Dynamicky bylo potreba propojit s mapovym oknemi prehledku ktera byla vytvorena jako druhy Data Frame To se provedlo defi-novanım rozsahu podle hlavnıho mapoveho okna v Properties -iquest Data Frame-iquest Extant a definovanım Definition Query ve vlastnostech vrstvy Dalsım dy-namickym prvkem jsou oznacenı sousednıch mapovych listu a cıslo strankyNa takto sestavenou stranku s dynamickymi prvky bylo mozne pouzıt exportmapy do pdf a Atlas byl vygenerovanPrıklad dynamickeho textu pro nazev mapoveho listultdyn type=page property=PageNamegt

3 Problemy a moznosti rozsırenı

31 Pripojovanı externıch tabulek

Pri pripjovanı externıch tabulek musely byt indexovany hodnoty atribu-toveho sloupce pouziteho k parovanı To probehlo prıkazemarcpyAddIndex management (layer HydroID)Pripojenı tabulky musı probıhat k Feature layer Proto bylo nutne nejprve zFeature Class vytvorit Feature Layer1 Pote mohla byt tabulka pripojena

arcpyAddIndex_management (layer HydroID)

arcpyAddJoin_management(layer HydroID table Riverid)

1Rozdıl mezi Feature Layer a Feature Class je vysvetlen v prilozenem Tutorialu pro-gramovanı v Pythonu pro ArcGIS

10

Zde nastal problem s prıstupem k atributum Obecne nesmı nazvy atri-butovych sloupcu obsahovat mezery K hodnotam je pristupovano pres jed-notlive radky s parametrem nazev sloupce

rows= arcpySearchCursor(layer)

for row in rows

value=rownazev_sloupce

Pripojena tabulka ovsem mela v nazvech sloupcu mezeru K takto pojmeno-vanemu sloupci muselo byt pristupovano prıkazem getValue

rows= arcpySearchCursor(layer)

for row in rows

value=rowgetValue(rsquonazev tabulky$nazev sloupcersquo)

32 Doba behu tvorby gridu

Doba behu nastroje pro tvorbu gridu je znepokolive dlouha Bylo prove-deno merenı casu behu jednotlivych castı kodu funkcı time z modulu timeVysledky ukazaly ze nejdele trva vytvarenı novych vrstev Vrstva se muzevytvaret az 20 sekund Snaha o optimalizaci donutila nahradit vytvarenı vrs-tev s minimalnım ohranicujıcım obdelnıkem sekvencnım ukladanım souradniclomovych bodu polygonu z nichz pak funkcemi min a max byly tyto hodnotyzıskany Prubeh se tak urychlil o desıtky sekund (v jednom prubehu cyklupriblizne o 15 sekund) Dalsı moznostı bylo vyuzıt prostoroveho indexu datTato moznost nebyla vyuzita protoze ArcGIS pouzıva k prostorovemu in-dexovanı pravidelny grid Zıskanı MBR2 nebylo nalezeno Vyuzitı indexu byovsem problem neresilo Jak jiz bylo zmıneno nejdele trva vytvarenı novychvrstev Bohuzel funkce GridIndexFeatures cartography pro vytvorenı griduneumı pracovat se selektovanymi daty Tedy v kazdem cyklu musı byt ulozenapolygonova vrstva tvorıcı 1 sekci Pote mohla byt vytvorena vrstva tvorıcıgrid Tedy v kazdem prubehu cyklu jsou vytvareny 2 nove vrstvy Jelikozautor neprisel na zpusob jine optimalizace je nastroj pomaly Pro zadanydataset s 58mi povodımi jeho cinnost probıha desıtky minut

33 Moznosti rozsırenı

Do skriptu by se dal zakomponovat export seznamu mapovych listu pro kazdepovodı V soucasne verzi je tvoren exportem atributove tabulky

2minimum bounding rectangle - minimalnı ohranicujıcı obdelnık

11

4 Zaver

Byly vytvoreny nastroje pro automatizaci tvorby Atlasu pro mapy eroznıhosmyvu a transportu splavenin Tvorba Atlasu probıha v nekolika krocıchVizualizovane prvku jsou generalizovany Dale je vytvoren Grid ktery jepouzit jako indexova vrstva pro funkci Data Driven Pages Tou jsou vy-tvoreny jednotlive mapove listy Pomocı dynamickych prvku je pak vytvorenvzhled ktery se menı se zmenou mapoveho listu Nedostatkem je rychlostnastroje pro tvorbu gridu Presto ze je nastroj pomaly je zcela funkcnı Vprıpade potreby dalsıho rozsırenı bude ale vhodne vysledky nacıtat do novehonastroje Vzorovy vytisk vysledneho atlasu je prilozen Vzhledem k tomu zezpracovavana data jsou rozsahla a podlehajı autorskemu zakonu je vytvorenjen vzorovy vytisk z 6ti povodı Nastroje jsou psany v jazyce Python 26 proArcGIS 100 Pri praci byla vyuzıvana predevsım online napoveda ArcGISa diskuznı programatorska fora Kompletnı zdrojovy kod je ke stazenı nastrankach predmetu PIN2

12

5 Prılohy

51 Vysledny log tvorby gridu

Executing Grid

JAtlasvzorektemp_selectpovodi_vzorekgdbpokusne_povodi

70000 25 30 JAtlasvzorektemp_selectpovodi_vzorekgdbgrid70

Start Time Wed May 15 020551 2013

Running script Script2

Output folder JAtlasvzorektemp_selectpovodi_vzorekgdb

_____________________________________________________________________

count of basin polygon to process 6

_____________________________________________________________________

RUN 1

count of basins in 1 section 3

Their ID

ID 1

ID 3

ID 6

_____________________________________________________________________

count of basin polygon to process 3

_____________________________________________________________________

RUN 2

count of basins in 2 section 1

Their ID

ID 2

_____________________________________________________________________

count of basin polygon to process 2

_____________________________________________________________________

RUN 3

count of basins in 3 section 2

Their ID

ID 4

ID 5

----- RESULT -----

Number of sections 3

Number of map sheets

in section 1 13

in section 2 1

in section 3 2

Completed script Grid

Succeeded at Wed May 15 021359 2013 (Elapsed Time 8 minutes 8 seconds

13

52 Vysledny log generalizace

Executing generalization JAtlasvzorek2011_NAZV_nadrze2011_watemsedem

NAZV_tokyVT28_finshp

JAtlasvzorek2011_NAZV_nadrze2011_watemsedem28_vypocet

projectriversedimentxlsxprojectriversediment$

Start Time Wed May 15 075624 2013

Running script generalization

Category created

Total count of river parts 2879

Count of category 1 2428

Count of category 2 118

Count of category 3 68

Count of category 4 20

Count of category 5 245

Completed script generalization

Succeeded at Wed May 15 075638 2013 (Elapsed Time 1400 seconds)

14

CESKE VYSOKE UCENI TECHNICKE V PRAZE

FAKULTA STAVEBNI

OBOR GEODEZIE A KARTOGRAFIE

Dokumentace k projektu informatika 2

Stanovenı smeru odtokuna rastrovem digitalnım modelu

a implementace algoritmudo prostredı ArcGIS

BC JAN ZAJICEK

5 cervna 2013

Obsah

Obsah 1

1 Uvod 2

2 Nejbeznejsı existujıcı algoritmy 3

3 Flow Direction D8 431 Obecny princip D8 432 Popis algoritmu D8 5

4 Popis algoritmu MDinfin 641 Obecny princip MDinfin 642 Technicke resenı MDinfin 8

5 Vysledky 1151 Realna data - Bykovice 1152 Realna data - Nucice 12

6 Zaver 13

Reference 14

7 Prılohy 1571 Bykovice a Nucice vstupnı DMT rastry 1572 Bykovice vysledky 1673 Nucice vysledky 17

1

1 Uvod

Tato dokumentace byla zpracovana v ramci predmetu Projekt Informatika 2Semestralnı prace bude pouzita jako z jedna castı autorovi diplomove praces nazvem SMODERP 2D rozsırenı resıcı vztahy soustredeneho a plosnehoodtoku na danem uzemı Duvodem zpracovanı tohoto tematu byla potrebapouzitı v diplomove praci vıce nez jednoho algoritmu pro urcenı smeruodtoku v prostredı ArcGIS V soucasne dobe ArcGIS vyuzıva algoritmusD8 viz kapitola 3 jako jediny algoritmus pro vypocet smeru odtoku Tentoalgoritmus je soucastı Hydrology tools Nastroje ze skupiny Hydrology sepouzıvajı k modelovanı chovanı toku vody na povrchu Nejbeznejsı pouzıvanadigitalnı data povrchu Zeme jsou rastry digitalnı modelu terenu DMT slozenez jednotlivych bunek pixelu Tyto DMT rastry jsou pouzity jako vstupypro ruzne charakteristiky povrchu DMT rastr je souvisly povrch obvykleodkazujıcı na povrch Zeme Presnost dat je dana rozlisenım rastru taktezvzdalenostı mezi body rastru Informace o tvaru zemskeho povrchu je uzitecnapro mnoho oboru jako je napr zemedelstvı lesnictvı zivotnı prostredı neboregionalnı planovanı Tyto obory vyzadujı pochopenı jak voda tece v ramciuzemı a jak zmeny na tomto uzemı nasledne ovlivnı jejı tok

Cılem projektu bylo naprogramovat algoritmus ktery v roce 2007 publiko-vali Jan Seibert a Brian L McGlynn s nazvem MDinfin [1] Tento algoritmusje vylepsenım stavajıcıch algoritmu pro resenı urcenı smeru odtoku na ras-tru viz kapitola 2 Pro overenı spravnosti vysledku byla pouzita realnadata dvou pozemku u obcı Bykovice a Nucice Testovanı probıhalo na ras-trech o rozlisenı 5 metru Algoritmus byl naprogramovan v jazyce Pythonv prostredı NetBeans IDE 69 Pro spustenı v ArcGISu je potreba pridatdo prostredı vytvoreny toolbox upravit aktualnı cestu ke skriptu mainpya tento model nasledne spustit Vstupem modelu je rastr DMT a vystupnıadresar do ktereho se po dobehnutı modelu ulozı vysledny rastr s hodnotamismeru odtoku 1255 Algoritmus MDinfin je testovan na verzi ArcGIS 100Na nejnovejsı verzi ArcGIS 101 ktera vysla v cervnu 2012 nenı overenakompatibilita algoritmu v dusledku nefunkcnosti vıce nez jedne verze tohotoprogramu na jednom pocıtaci

2

2 Nejbeznejsı existujıcı algoritmy

Existujı tri nejbeznejsı algoritmy kazdy odlisne resıcı problematiku odtokuvody z rastru do sousednıch bunek Prvnım z nich je algoritmus D8 z roku1984 Algoritmus je podrobne popsan v nasledujıcı kapitole 3 Jelikoz odtoknastava vzdy jen do jedne sousednı bunky dochazı casto ke koncentracivodnıch sıtı a sıtrsquo odtoku pak neodpovıda skutecnosti Na druhou stranuje jeho vyhodou jeho jednoduchost a fakt ze nedochazı k nechtene disperzijako je tomu u druheho algoritmu

Druhym algoritmem je MD8 neboli multiple flow direction algorithm MD8algoritmem je voda odvadena do vsech nıze polozenych sousednıch buneka pomer vody je rozdelen procentualne podle sklonu Ve vysledku ma algo-ritmus tendenci vytvaret vıce realisticke prostorove sıte toku nez D8 tımze nedochazı k takove koncentraci vody v sıti U D8 ma mnohem vetsıvliv maly rozdıl vysek mezi sousednımi bunkami na to ktera bunka prijmeveskerou vodu Pouzitım MD8 tyto male vyskove rozdıly nemajı zdalekatakovy vliv jelikoz je mnozstvı vody rozdeleno pomerem mezi tyto bunkyNejvetsı nevyhodou tohoto algoritmu je jeho prılisna disperze na konver-gentnıch svazıch v dusledku odtoku do vsech nıze polozenych bunek

V roce 1997 byl navrzen algoritmus pojmenovany Dinfin Davidem G Tar-botonem z americke univerzity v Utahu Byl navrzen prıstup ktery je zalozenna osmi trojuhelnıkovych ploskach viz obrazek 3 Dıky tomuto postupu jsouodstraneny limitace v podobe moznosti pouze osmi smeru odtoku z bunkyProto je algoritmus pojmenovan Dinfin jelikoz muze nastat nekonecne moznostıvysledneho smeru odtoku Tento prıstup umoznuje pouze jeden smer odtokurozdeleny mezi jednu nebo dve bunky v zavislosti na smeru odtoku

Poslednı dva zmınene algoritmy MD8 a Dinfinmajı oproti D8 nevyhodu ve vetsıcasove narocnosti vypoctu V kapitole 4 je popsan algoritmus MDinfin kteryvyuzıva vyhody MD8 algoritmu za pouzitı trojuhelnıkovych plosek obdobnejako Dinfin algoritmus

3

3 Flow Direction D8

Pro pochopenı problematiky a zjevnost rozdılu mezi algoritmy je vhodneuvest jak funguje nastroj ktery pouzıva ArcGIS Zaklad algoritmu MDinfino nemz pojednava tato dokumentace je zalozen na podobnych postupech

31 Obecny princip D8

Princip nastroje urcenı smeru odtoku (Flow Direction) ktery pouzıva prostredıArcGIS je nasledujıcı Tento nastroj (tool) vezme vstupnı rastr digitalnıhomodelu terenu neboli vyskovy rastr Provede vypocet jehoz vystupem jerastr ktery v kazde bunce rastru obsahuje hodnotu urcujıcı smer odtokuz teto bunky Hodnot je osm podle osmi sousednıch bunek do kterych muzeodtekat voda viz obrazek 1 Prave podle osmi smeru odtoku se tento prıstupnazyva D8 (eight-direction approach)

Obrazek 1 Flow Direction D8 [3]

4

32 Popis algoritmu D8

Samotny vypocet algoritmu je v zasade primitivnı Pro vsechny sousednıbunky se vypocte maximalnı sklon [3]

maximalnı sklon = rozdıl vysek vzdalenost 100

Rozdıl vysek je rozdıl vysky v aktualnım bode a konkretnı sousednı bunkyVzdalenost je vypoctena mezi stredy bunek a lisı se v zavislosti na polozesousednı bunky Pro bunky sousedıcı vrcholem je hodnota velikosti pixeluprenasobena o odmocninu ze dvou Pro zbyle bunky sousedıcı hranou jevelikost vzdalenosti rovna velikosti pixelu Po nalezenı nejstrmejsıho smeruodtoku je hodnota ulozena v podobe bitove hodnoty reprezentujıcı danysmer Pred pouzitım nastroje Flow Direction se obvykle zpracuje vstupnırastr pomocı nastroje Sink Tento algoritmus zaplnı bezodtoke oblasti rastrunejnizsı hodnotou z okolı a do teto nejnizsı sousednı bunky pak posle voduPote jiz nemuze dojıt k situaci kdy vsechny sousednı bunky k dane buncemajı vyssı hodnoty vysek a nedochazelo by tedy k odtokuVysledny rastr nemusı obsahovat pouze bunky s hodnotami 202127 [4]Jestlize nastane situace kdy ma vıce sousednıch bunek nejnizsı hodnotuvysek pak je vysledna hodnota souctem vsech smeru Napr hodnota maximalnıhosklonu bude stejna pro sousednı bunku vlevo a nahore odtok tedy budesmerem na zapad (hodnota = 16) a na sever (hodnota = 64) vysledna hod-nota bude souctem 16 a 64 tedy 84

5

4 Popis algoritmu MDinfin

41 Obecny princip MDinfinObecny postup je prevzat z [1] Stejne jako v prıpade algoritmu Dinfin bylyzavedeny trojuhelnıkove plosky pro vypocet lokalnıho sklonu a smeru pro kazdoutrojuhelnıkovou plosku Okolo stredoveho boduM bylo vytvoreno osm trojuhelnıkuviz obrazek 3 Kazdy se zbyvajıcımi dvema vrcholy P1 P2 ve dvou sousedıcıchbunkach Pro kazdy z techto trojuhelnıku je vypocten smer nejvetsıho sklonuPokud oznacıme vysky bodu M P1 P2 jako hM hP1 hP2 rozdıly vysek sevypoctou takto

z1 = hP1 minus hM z2 = hP2 minus hM (1)

Obdobne se vypoctou rozdıly v x-ovych a y-ovych souradnicıch Po vypocturozdılu jednotlivych souradnic je vypocten normalovy vektor

n =

nx

ny

nz

=

z1y2 minus z2y1z1x2 minus z2x1y1x2 minus y2x1

(2)

Smer odtoku d a sklon s na trojuhelnıkove plose se vypocte pomocı rovnice3 Hodnota nula pro d oznacuje smer osy y a hodnota 3π2 oznacuje smerosy x

d =

0 nx = 0 ny ge 0

π nx = 0 ny lt 0

π2minus arctan(

ny

nx

) nx gt 0

3π2minus arctan(

ny

nx

) nx lt 0

(3)

s = minus tan

(arccos

(nzradic

n2x + n2

y + n2z

))(4)

Jestlize nejvetsı sklon od bodu M je mimo rozpetı 0-45 (π4 radian) jepouzit sklon strmejsı k jednomu z bodu P1 P2 a zaroven i sklon je spoctenk tomuto bodu V prıpade ze oba sousednı body jsou vyse polozeny nez bodM smer nenı pro tento trojuhelnık uvazovan Po spoctenı vsech osmi smerua sklonu pro jednotlive plosky jsou tyto smery povazovany za lokalne ne-jstrmejsı pro kazdy trojuhelnık v rozsahu 45 Smery vedoucı prımo do bodu

6

P1 nebo P2 tedy ty kde d = 0 nebo d = π4 jsou uvazovany pouze vprıpade kdy obe vedlejsı sousednı bunky majı smer k bodu P1 nebo P2Tato situace je znazornena na obrazku 2

Obrazek 2 Ukazka urcenı smeru odtoku z bunky [1]

Prvnı prıpad je smer mırıcı mezi bunky 5 a 6 Druhy prıpad je smer kteryvede prımo do bunky 3 Tato situace nastane jestlize pro trojuhelnık M43vyjde lokalnı smer d = π4 a pro trojuhelnık M32 smer vyjde d = 0Pote co je smer odtoku pro bunku vypocten je celkovy odtok rozdelendo vsech vyslednych smeru na zaklade sklonu Resenı teto problematiky jevıce popsano v sekci 42 Pro smery mırıcı mezi body P1 a P2 je odtokrozdelen do dvou bunek na zaklade nevejtsıho sklonu Pomer odtoku do buneks body P1 a P2 bude v tomto poradı α245 a α145

Obrazek 3 Trojuhelnıkove plosky [1]

7

42 Technicke resenı MDinfinVyse jiz bylo zmıneno ze algoritmus je napsan v jazyce Python Algoritmusje rozdelen do dvou skriptu Prvnı z nich obsahuje funkce a druhy je hlavnıVstupem do modelu je rastr digitalnıho modelu terenu a vystupnı adresardo ktereho se ulozı finalnı rastr smeru odtoku viz obr 4 Po nactenı rastruze vstupnıch parametru je tento rastr preveden na matici NumPy pomocıfunkce

arcpy RasterToNumPyArray ( InputRaster )

NumPy [5] je rozsırenı programovacıho jazyka Python je to balıcek uzıvanypro vedecke vypocty Umoznuje podporu velkych multi-dimenzionalnıch polıa matic spolu s velkou knihovnou matematickych funkcı pro praci s temitopoli

Algoritmus cyklem projızdı vsechny prvky matice a u tech ktere majı hod-notu ruznou od NoData nalezne okolı Hledanı okolı bunky provadı funkceneighbors ta je definovana takto

def ne ighbors ( i j array x y ) return nb1 nb2 nb3 nb4 nb5 nb6 nb7 nb8

Vstupem funkce je pozice v matici dale cela matice a jejı rozmery Funkceneighbors vypocıta hodnoty vysek sousednıch osmi bunek a vratı je na vystup

Obrazek 4 Dialogove okno nastroje MDinfin

Vystup z funkce neighbors slouzı jako jeden z vstupnıch parametru pro dalsıfunkci

8

Funkce byla pojmenovana dir slope jelikoz jejım vystupem je smer odtokua sklon tohoto smeru

def d i r s l o p e ( pointM nbrs vpix sp ix ) return d i r e c t i o n s l ope

Pro kazdy trojuhelnık byla spoctena hodnota d viz vzorec 3 Hodnota s bylapo spatnych a nelogickych vysledcıch pocıtana podle jineho vzorce ktery jizdaval spravne vysledky

s0 =

radicz212y21

+z22y22

(5)

Vzorec se lisı pro kazdy trojuhelnıcek uvedeny je pro vypocet sklonu kdy sousednıbunka je severozapadnı a severnı Tımto postupem bylo zbytecne pocıtatz-tovou slozku vekotoru n vzorec 2 Byly osetreny prıpady kdy sousednıbunky aktualnıho pocıtaneho trojuhelnıku jsou obe vyse polozene nebo obemimo rastr (NoData) Dalsı prıpad nastane jestlize je jeden bod vne rastra druhy v rastru lezı Smer je potom urcen prımo do toho bodu ktery nalezırastru Taktez i sklon je pocıtan pouze mezi tımto bodem a bodem M Lokalnı smer d v kazde plosce po vypoctenı nesmı prekrocit 45 V situacize tuto hodnotu prekrocı je smeru prirazena hodnota 0 nebo 45 v zavislostina vzajemnem porovnanı vysek bodu v trojuhelnıku Takto jsou zpracovanyvsechny plosky a je zjisteno zda-li do kazdeho trojuhelnıku nastava smerodtoku nebo ne Na konci funkce dir slope se kontroluje prıpad kdy smersousednıch trojuhelnıku odkazuje presne do stejneho bodu tedy hodnotysmeru musı byt pro prvnı trojuhelnık d = 45 a pro nasledujıcı sousednıtrojuhelnık d = 0 Vystupem funkce jsou dva vektory o osmi prvcıch smera sklon pro kazdou plosku

Dalsı fazı vypoctu je zjistenı pomeru vody ktera potece do jednotlivychsmeru K vypoctu pomeru byl pouzit tento vzorec [2]

fi =sxi8sum

j=1

sxj

(6)

kde s vyznacuje sklon vypocteneho smeru konkretnı trojuhelnıkove ploskya x je promenny exponent Pokud by byl exponent zvolen 1 bude vyslednasıtrsquo obdobna jako pri pouzitı MD8 algoritmu Pri zvetsovanı exponentu xk nekonecnu bude sıtrsquo stejna jako pri pouzitı D8 metody Vychozı hodnotaexponentu byla zvolena x = 4 coz je kompromis mezi obema variantami

9

Zmena exponentu se v soucasne podobe neprojevı na vyslednem rastru je-likoz vysledek prezentuje pouze smer odtoku a ne procentualnı cast Tohotopomeru bude vyuzito az pri spojenı skriptu s 2D modelem SMODERP

V dalsı casti vypoctu je rozdelen jiz zjisteny pomer z celkoveho odtokudo dvou prıpadne pouze do jedne bunky v zavislosti na smeru odtoku dVe vysledku je vypocten vektor osmi cısel kde kazda hodnota od 0 do 1prestavuje jiz procentualnı pomer z celkoveho odtoku do kazde sousednıbunky

Pro vyslednou reprezentaci smeru odtoku na vystup byl pro kazdou bunkuvytvoren vektor obsahujıcı 1 a 0 rıkajıcı zda nastava ci nenastava odtokdo sousednı bunky Tento vektor byl preveden na celocıselnou hodnotu po-mocı funkce bool2int

def boo l 2 i n t ( x ) y = 0for i j in enumerate ( x )

i f j y += 1ltlt ireturn y

Funkce ma na vstupu vektor jedicek a nul Naprıklad pro vektor 00000111kdy voda tece na severozapad sever a severovychod se funkce chova taktoJe testovano jestli platı j = 1 tedy prvnıch pet nul vektoru funkce preskocıa pro prvnı jednicku se pricte k promenne y 20 v dalsım kroku 21 a v poslednım22 Operator vyjadruje totiz bitovy posun smerem doleva Vysledkem jena vystupu cıslo y = 1 + 2 + 4 = 7

Pro vsechny bunky byla vypoctena hodnota reprezentujıcı smer odtoku Tatohodnota se ulozı do matice a ta se nasledne prevede na vysledny rastr

f l o w d i r = arcpy NumPyArrayToRaster ( value LLcorner spix vpix rdquordquo )

value hodnota reprezentujıcı smer odtokuLLcorner souradnice leveho dolnıho rohuspix sırka pixeluvpix vyska pixelu

10

5 Vysledky

Algoritmus MDinfin byl testovan na skutecnych datech dvou pozemku u obcıNucice ve Stredoceskem kraji a Bykovice v kraji Jihomoravskem rastry jsouv prıloze 71 Oba dva rastry jsou o rozlisenı 5 metru Finalnı rastry jsouporovnavany s rastry vytvorenymi v prostredı ArcGIS nastrojem Flow Di-rection metodou D8

51 Realna data - Bykovice

Vysledne rastry Flow Direction pro uzemı Bykovice jsou uvedeny v prıloze72 Oba rastry byly pro hodnoty 202127 obarveny shodnou barvou kvulilepsı nazornosti a porovnatelnosti vysledku Rastr ktery obsahuje z celkovehopoctu 44807 bunek celkem 23655 bunek s hodnotami vysek po probehnutıalgoritmy dal nasledujıcı vysledky

FD D8 MDinfin1 3650 7372 666 9174 207 188 21 716 94 3732 791 8564 8818 1045128 9408 14983sum

23655 14983

Tabulka 1 Tabulka porovnanı obou algoritmu pro rastr Bykovic

FD je zkratka pro Flow Direction cili smer odtoku reprezentovany celocıselnouhodnotou Ostatnı hodnoty u vysledneho rastru na ktery byl pouzit algorit-mus MDinfin jsou v rozpetı 0246 V rozmezı hodnot smeru odtoku 246255se nevyskytujı zadne bunky Cas potrebny pro vykonanı skriptu byl v prıpadeD8 4 vteriny Pro algoritmus MDinfin byl cas 15 vterin

11

52 Realna data - Nucice

Vysledne rastry jsou uvedeny v prıloze 73 Opet bylo pouzito shodne obar-venı pro zakladnı smery u obou rastru Rastr Nucice obsahoval data na 82732bunkach z celkove poctu 125449 bunek Vysledky jsou pro prehlednost uve-deny v tabulce

FD D8 MDinfin1 12186 12332 12441 87034 16907 10278 9826 1642316 2516 28832 5010 241764 7788 366128 16058 25475sum

82732 55932

Tabulka 2 Tabulka porovnanı obou algoritmu pro rastr Nucic

Ostatnı hodnoty u vysledneho rastru na ktery byl pouzit algoritmusMDinfin jsou v rozpetı 0255 Cas potrebny pro vykonanı skriptu byl v prıpadeD8 6 vterin Pro algoritmus MDinfin byl cas 50 vterin

12

6 Zaver

Cılem projektu bylo vytvorit funkcnı skript obsahujıcı algoritmus pojmen-ovany MDinfin [1] ktery resı odtok do sousednıch bunek rastru Algoritmusbyl napsan v programovacım jazyce Python a testovan na realnych datechVysledky byly mırnym prekvapenım kdy zejmena hodnoty smeru 128 tedyseverovychodnıho se vyskytovaly ve vysledku velmi casto viz tabulky 1 a 2Predpokladem bylo ze se odtok rozlozı do vıce smeru a pocet bunek s hod-notami zakladnıch smeru 1248163264 a 128 bude mene nez v prıpade al-goritmu D8 K rozkladu do vıce smeru sice doslo ale pocet nekterych bunekse zakladnımi smery byl vetsı u algoritmu MDinfin

Co se tyce delky doby behu algoritmu je algoritmus MDinfin pomalejsı viz casyv kapitole 5 nez D8 z nekolika zrejmych duvodu Predevsım algoritmus D8provadı mnohem mene pocetnıch operacı z duvodu jeho mensı slozitostiviz 3 Dalsım duvodem je take rozdıl v jazyce ve kterem jsou oba algo-ritmy napsany D8 je napsan v programovacım jazyce C++ ktery na vetsıchdatech je mnohonasobne rychlejsı nez Python Prepsanım algoritmu MDinfindo jazyka C++ by mohla byt cesta k budoucımu zvysenı rychlosti pracealgoritmu

13

Reference

[1] SEIBERT Jan McGlynn BL A new triangular multiple flow di-rection algortihm for computing upslope areas from gridded digi-tal elevation models [online] [cit 13 5 2013] Dostupne ke stazenız URL lthttpciteseerxistpsueduviewdocdownloaddoi=101179977amprep=rep1amptype=pdfgt

[2] HOLMGREN Peter Multiple direction algortihms for runoff modellingin grid based elevation models An empirical evaluation [online] [cit13 5 2013] Dostupny z URL ltftpwwwlwrkthseCommonUllaMFor_Imran[1994]20holmgren20-20multiple20flow

20direction20algorithms20for20runoff20modelling20in

20grid20based20elevation20modelspdf gt

[3] ESRI ESRI WebHelp - How Flow Direction works [online] [cit13 5 2013] Dostupne z URL lthttphelparcgiscomenarcgisdesktop100helpindexhtml009z00000063000000

htmgt

[4] ESRI ESRI Webhelp - Flow Direction (Spatial Analyst) [online][cit 13 5 2013] Dostupne z URL lthttphelparcgiscomenarcgisdesktop100helpindexhtml009z00000052000000

htmgt

[5] WIKIPEDIA NumPy [online] [cit 13 5 2013] Dostupne z URLlthttpenwikipediaorgwikiNumPygt

[6] INFORMIT Working with operators [online] [cit 13 5 2013] Dos-tupne z URL lthttpwwwinformitcomarticlesarticleaspxp=2002831ampseqNum=6gt

14

7 Prılohy

71 Bykovice a Nucice vstupnı DMT rastry

Obrazek 5 DMT Bykovice

Obrazek 6 DMT Nucice

15

72 Bykovice vysledky

Obrazek 7 Flow Direction D8

Obrazek 8 Flow Direction MDinfin

16

73 Nucice vysledky

Obrazek 9 Flow Direction D8

Obrazek 10 Flow Direction MDinfin

17

Page 20: pro zac ate cn kygeo.fsv.cvut.cz/gdata/2013/pin2/e/dokumentace/... · 2013-06-05 · CESK E VYSOK E U CEN I TECHNICKE V PRAZE FAKULTA STAVEBN I OBOR GEODEZIE A KARTOGRAFIE Dokumentace

fieldCount = len(fieldList)

if (fieldCount = 1)

arcpyAddField_management(inFeatureClass rsquoMapSheetsrsquo rsquoTEXTrsquo)

2 Hlavnı vypocetnı cast

Hlavnı cast je cela v cyklu while (len(IDs) gt 0) tj cyklus probıhadokud jsou v zasobnıku IDs hodnoty Na konci cyklu jsou vzdy identi-fikatory zpracovanych povodı ze zasobnıku mazany V kazdem prubehucyklu jsou selektovany povodı tvorıcı 1 sekci k takove sekci je potevytvoren grid a jsou plneny nove atributove sloupce

Ukazka hlavnıho cyklu

while len(IDs) gt 0

oznacenı povodı i-te sekce

rows_sel = arcpySearchCursor(rsquopovodi_classrsquo)

for row_sel in rows_sel

IDsremove(row_selOBJECTID)

V kazdem prubehu cyklu je zpracovana 1 sekce - tj shluk povodı kteremajı spolecnou cast hranice Sekce je tvorena na zaklade dotazu Se-lectByLocation s definicı BOUNDARY TOUCHES Dotaz se opakujev cyklu dokud se pocet oznacenych povodı zvetsuje K tomu slouzıpromenne matchcount1 matchcount2 ktere obsahujı pocet oznacenychpolygonu

Vytvorenı sekce

bull Oznacenı prvnıho nezpracovaneho polygonu

first_ID = str(IDs[0])

fieldName = OBJECTID

Query = + fieldName + = + first_ID

arcpySelectLayerByAttribute_management(rsquopovodi_classrsquo rsquoNEW_SELECTIONrsquo Query)

matchcount1 = int(arcpyGetCount_management(rsquopovodi_classrsquo)getOutput(0))

bull Prvnı prubeh SelectByLocation

7

arcpySelectLayerByLocation_management(rsquopovodi_classrsquo rsquoBOUNDARY_TOUCHESrsquo

rsquopovodi_classrsquo)

matchcount2 = int(arcpyGetCount_management(rsquopovodi_classrsquo)getOutput(0))

bull Dalsı prubehy SelectByLocation

while matchcount1 lt matchcount2

matchcount1 = matchcount2

arcpySelectLayerByLocation_management(rsquopovodi_classrsquo rsquoBOUNDARY_TOUCHESrsquo

rsquopovodi_classrsquo)

matchcount2 = int(arcpyGetCount_management(rsquopovodi_classrsquo)getOutput(0))

Oznacene polygony jsou ulozeny jako polygonova vrstva do vstupnı ge-odatabaze Tato vrstva je dale pouzita pro tvorbu gridu

Vytvorenı gridu

Pred samotnou tvorbou bylo potreba zjistit rozsah sekce Pokud bylasekce mensı nez 1 mapovy list bylo treba definovat souradnice polohylistu tak aby povodı lezelo na stredu listu Do zasobnıku byly nactenysouradnice lomovych bodu povodı a byly z nich vybrany maximalnı aminimalnı hodnoty Jejich rozdıl pak urcil rozsah sekce

Prıklad plnenı zasobnıku souradnicema

desc = arcpyDescribe(outputFeatureClassPath+rsquorsquo+output_name)

shape_field_name = descShapeFieldName

rows3 = arcpySearchCursor(outputFeatureClassPath+rsquorsquo+output_name)

mbr_X=[]

mbr_Y=[]

for row3 in rows3

Create the geometry object

feat = row3getValue(shape_field_name)

partnum = 0

for pnt in featgetPart(partnum)

mbr_Xappend(pntX)

mbr_Yappend(pntY)

partnum += 1

8

Vytvorenı gridu pote probıha budrsquo s definovanou nebo s nedefinovanoupolohou pocatecnıho mapoveho listu Pro vytvorenı gridu je pouzitafunkce GridIndexFeatures cartography

Ukazka

arcpyGridIndexFeatures_cartography(outputFeatureClassPath+rsquorsquo+grid_name

outputFeatureClassPath+rsquorsquo+output_name USEPAGEUNIT scale_str

sheet_width_str sheet_high_str str(grid_start_pnt_X)+rsquo rsquo+str(grid_start_pnt_Y))

Grid je tedy vytvoren pro jednu sekci Po vsech prubezıch cyklu jsoutakto vytvorene vrstvy gridu spojeny do jedne finalnı vrstvy V cyklujsou dale plneny nove atributove sloupce - cısla sekcı a nazvy mapovychlistu a to jak do nove (vystupnı) vrstvy gridu tak do vstupnı vrstvypovodı

3 Vytvorenı finalnıch vrstev tisk vysledku Jak bylo receno na zaverjsou spojeny jednotlive vrstvy gridu Vedle toho je vytvorena vrstvaspojenych mapovych listu po sekcıch - funkcı Dissolve - pro tvorbuprehledky Jsou vytisknuty vysledne hodnoty viz 212

22 Generalizace

Pro generalizaci byl napsan skript ktery nacıta liniovou vrstvu toku Tentoskript byl jiz psan na mıru podkladovym datum a pri nacıtanı je v nemvyuzito znalosti struktury danych podkladovych dat Skript k vrstve pripojıexternı tabulku a vytvorı atributovy sloupec kategorie Podle dat z externıtabulky pak plnı novy sloupec hodnotami 1 - 5 podle mnozstvı unasenehosedimentu Tato hodnota je pak pouzita pri vizualizaci datZajımavostı je ze pro nacıtanı musela byt tabulka indexovana viz 31

221 Uvodnı dialog

Uvodnı dialog obsahuje dva parametry

bull Input Feature Class Vstupnı liniova vrstva rıcnıch useku

bull Table Vstupnı tabulka obsahujıcı hodnoty rıcnıch splavnenin

9

222 Vysledny log

Vysledny log je k nahlednutı v prıloze 52 Obsahuje tyto informace

bull Pocet vsech rıcnıch useku

bull Pocet useku v jednotlivych kategoriıch

23 Finalnı upravy a export

Jak jiz bylo zmıneno finalnı vzhled mapoveho listu byl vytvoren manualne vLayout view a pomocı toolbaru Data Driven Pages Tento postup je casoveekonomictejsı a je jım dosazeno lepsıch vysledku dıky prehlednosti ToolbarData Driven Pages pak umoznuje vkladat dynamicke textove pole ktere seautomaticky menı s menıcım se mapovym listem Takovym polem je naprnazev mapoveho listu Stacı tedy definovat vzhled jednoho mapoveho listuv toolbaru Data Driven Pages navolit prıslusne pole - ty byly vytvorenynastrojem Grid viz 21 Dynamicky bylo potreba propojit s mapovym oknemi prehledku ktera byla vytvorena jako druhy Data Frame To se provedlo defi-novanım rozsahu podle hlavnıho mapoveho okna v Properties -iquest Data Frame-iquest Extant a definovanım Definition Query ve vlastnostech vrstvy Dalsım dy-namickym prvkem jsou oznacenı sousednıch mapovych listu a cıslo strankyNa takto sestavenou stranku s dynamickymi prvky bylo mozne pouzıt exportmapy do pdf a Atlas byl vygenerovanPrıklad dynamickeho textu pro nazev mapoveho listultdyn type=page property=PageNamegt

3 Problemy a moznosti rozsırenı

31 Pripojovanı externıch tabulek

Pri pripjovanı externıch tabulek musely byt indexovany hodnoty atribu-toveho sloupce pouziteho k parovanı To probehlo prıkazemarcpyAddIndex management (layer HydroID)Pripojenı tabulky musı probıhat k Feature layer Proto bylo nutne nejprve zFeature Class vytvorit Feature Layer1 Pote mohla byt tabulka pripojena

arcpyAddIndex_management (layer HydroID)

arcpyAddJoin_management(layer HydroID table Riverid)

1Rozdıl mezi Feature Layer a Feature Class je vysvetlen v prilozenem Tutorialu pro-gramovanı v Pythonu pro ArcGIS

10

Zde nastal problem s prıstupem k atributum Obecne nesmı nazvy atri-butovych sloupcu obsahovat mezery K hodnotam je pristupovano pres jed-notlive radky s parametrem nazev sloupce

rows= arcpySearchCursor(layer)

for row in rows

value=rownazev_sloupce

Pripojena tabulka ovsem mela v nazvech sloupcu mezeru K takto pojmeno-vanemu sloupci muselo byt pristupovano prıkazem getValue

rows= arcpySearchCursor(layer)

for row in rows

value=rowgetValue(rsquonazev tabulky$nazev sloupcersquo)

32 Doba behu tvorby gridu

Doba behu nastroje pro tvorbu gridu je znepokolive dlouha Bylo prove-deno merenı casu behu jednotlivych castı kodu funkcı time z modulu timeVysledky ukazaly ze nejdele trva vytvarenı novych vrstev Vrstva se muzevytvaret az 20 sekund Snaha o optimalizaci donutila nahradit vytvarenı vrs-tev s minimalnım ohranicujıcım obdelnıkem sekvencnım ukladanım souradniclomovych bodu polygonu z nichz pak funkcemi min a max byly tyto hodnotyzıskany Prubeh se tak urychlil o desıtky sekund (v jednom prubehu cyklupriblizne o 15 sekund) Dalsı moznostı bylo vyuzıt prostoroveho indexu datTato moznost nebyla vyuzita protoze ArcGIS pouzıva k prostorovemu in-dexovanı pravidelny grid Zıskanı MBR2 nebylo nalezeno Vyuzitı indexu byovsem problem neresilo Jak jiz bylo zmıneno nejdele trva vytvarenı novychvrstev Bohuzel funkce GridIndexFeatures cartography pro vytvorenı griduneumı pracovat se selektovanymi daty Tedy v kazdem cyklu musı byt ulozenapolygonova vrstva tvorıcı 1 sekci Pote mohla byt vytvorena vrstva tvorıcıgrid Tedy v kazdem prubehu cyklu jsou vytvareny 2 nove vrstvy Jelikozautor neprisel na zpusob jine optimalizace je nastroj pomaly Pro zadanydataset s 58mi povodımi jeho cinnost probıha desıtky minut

33 Moznosti rozsırenı

Do skriptu by se dal zakomponovat export seznamu mapovych listu pro kazdepovodı V soucasne verzi je tvoren exportem atributove tabulky

2minimum bounding rectangle - minimalnı ohranicujıcı obdelnık

11

4 Zaver

Byly vytvoreny nastroje pro automatizaci tvorby Atlasu pro mapy eroznıhosmyvu a transportu splavenin Tvorba Atlasu probıha v nekolika krocıchVizualizovane prvku jsou generalizovany Dale je vytvoren Grid ktery jepouzit jako indexova vrstva pro funkci Data Driven Pages Tou jsou vy-tvoreny jednotlive mapove listy Pomocı dynamickych prvku je pak vytvorenvzhled ktery se menı se zmenou mapoveho listu Nedostatkem je rychlostnastroje pro tvorbu gridu Presto ze je nastroj pomaly je zcela funkcnı Vprıpade potreby dalsıho rozsırenı bude ale vhodne vysledky nacıtat do novehonastroje Vzorovy vytisk vysledneho atlasu je prilozen Vzhledem k tomu zezpracovavana data jsou rozsahla a podlehajı autorskemu zakonu je vytvorenjen vzorovy vytisk z 6ti povodı Nastroje jsou psany v jazyce Python 26 proArcGIS 100 Pri praci byla vyuzıvana predevsım online napoveda ArcGISa diskuznı programatorska fora Kompletnı zdrojovy kod je ke stazenı nastrankach predmetu PIN2

12

5 Prılohy

51 Vysledny log tvorby gridu

Executing Grid

JAtlasvzorektemp_selectpovodi_vzorekgdbpokusne_povodi

70000 25 30 JAtlasvzorektemp_selectpovodi_vzorekgdbgrid70

Start Time Wed May 15 020551 2013

Running script Script2

Output folder JAtlasvzorektemp_selectpovodi_vzorekgdb

_____________________________________________________________________

count of basin polygon to process 6

_____________________________________________________________________

RUN 1

count of basins in 1 section 3

Their ID

ID 1

ID 3

ID 6

_____________________________________________________________________

count of basin polygon to process 3

_____________________________________________________________________

RUN 2

count of basins in 2 section 1

Their ID

ID 2

_____________________________________________________________________

count of basin polygon to process 2

_____________________________________________________________________

RUN 3

count of basins in 3 section 2

Their ID

ID 4

ID 5

----- RESULT -----

Number of sections 3

Number of map sheets

in section 1 13

in section 2 1

in section 3 2

Completed script Grid

Succeeded at Wed May 15 021359 2013 (Elapsed Time 8 minutes 8 seconds

13

52 Vysledny log generalizace

Executing generalization JAtlasvzorek2011_NAZV_nadrze2011_watemsedem

NAZV_tokyVT28_finshp

JAtlasvzorek2011_NAZV_nadrze2011_watemsedem28_vypocet

projectriversedimentxlsxprojectriversediment$

Start Time Wed May 15 075624 2013

Running script generalization

Category created

Total count of river parts 2879

Count of category 1 2428

Count of category 2 118

Count of category 3 68

Count of category 4 20

Count of category 5 245

Completed script generalization

Succeeded at Wed May 15 075638 2013 (Elapsed Time 1400 seconds)

14

CESKE VYSOKE UCENI TECHNICKE V PRAZE

FAKULTA STAVEBNI

OBOR GEODEZIE A KARTOGRAFIE

Dokumentace k projektu informatika 2

Stanovenı smeru odtokuna rastrovem digitalnım modelu

a implementace algoritmudo prostredı ArcGIS

BC JAN ZAJICEK

5 cervna 2013

Obsah

Obsah 1

1 Uvod 2

2 Nejbeznejsı existujıcı algoritmy 3

3 Flow Direction D8 431 Obecny princip D8 432 Popis algoritmu D8 5

4 Popis algoritmu MDinfin 641 Obecny princip MDinfin 642 Technicke resenı MDinfin 8

5 Vysledky 1151 Realna data - Bykovice 1152 Realna data - Nucice 12

6 Zaver 13

Reference 14

7 Prılohy 1571 Bykovice a Nucice vstupnı DMT rastry 1572 Bykovice vysledky 1673 Nucice vysledky 17

1

1 Uvod

Tato dokumentace byla zpracovana v ramci predmetu Projekt Informatika 2Semestralnı prace bude pouzita jako z jedna castı autorovi diplomove praces nazvem SMODERP 2D rozsırenı resıcı vztahy soustredeneho a plosnehoodtoku na danem uzemı Duvodem zpracovanı tohoto tematu byla potrebapouzitı v diplomove praci vıce nez jednoho algoritmu pro urcenı smeruodtoku v prostredı ArcGIS V soucasne dobe ArcGIS vyuzıva algoritmusD8 viz kapitola 3 jako jediny algoritmus pro vypocet smeru odtoku Tentoalgoritmus je soucastı Hydrology tools Nastroje ze skupiny Hydrology sepouzıvajı k modelovanı chovanı toku vody na povrchu Nejbeznejsı pouzıvanadigitalnı data povrchu Zeme jsou rastry digitalnı modelu terenu DMT slozenez jednotlivych bunek pixelu Tyto DMT rastry jsou pouzity jako vstupypro ruzne charakteristiky povrchu DMT rastr je souvisly povrch obvykleodkazujıcı na povrch Zeme Presnost dat je dana rozlisenım rastru taktezvzdalenostı mezi body rastru Informace o tvaru zemskeho povrchu je uzitecnapro mnoho oboru jako je napr zemedelstvı lesnictvı zivotnı prostredı neboregionalnı planovanı Tyto obory vyzadujı pochopenı jak voda tece v ramciuzemı a jak zmeny na tomto uzemı nasledne ovlivnı jejı tok

Cılem projektu bylo naprogramovat algoritmus ktery v roce 2007 publiko-vali Jan Seibert a Brian L McGlynn s nazvem MDinfin [1] Tento algoritmusje vylepsenım stavajıcıch algoritmu pro resenı urcenı smeru odtoku na ras-tru viz kapitola 2 Pro overenı spravnosti vysledku byla pouzita realnadata dvou pozemku u obcı Bykovice a Nucice Testovanı probıhalo na ras-trech o rozlisenı 5 metru Algoritmus byl naprogramovan v jazyce Pythonv prostredı NetBeans IDE 69 Pro spustenı v ArcGISu je potreba pridatdo prostredı vytvoreny toolbox upravit aktualnı cestu ke skriptu mainpya tento model nasledne spustit Vstupem modelu je rastr DMT a vystupnıadresar do ktereho se po dobehnutı modelu ulozı vysledny rastr s hodnotamismeru odtoku 1255 Algoritmus MDinfin je testovan na verzi ArcGIS 100Na nejnovejsı verzi ArcGIS 101 ktera vysla v cervnu 2012 nenı overenakompatibilita algoritmu v dusledku nefunkcnosti vıce nez jedne verze tohotoprogramu na jednom pocıtaci

2

2 Nejbeznejsı existujıcı algoritmy

Existujı tri nejbeznejsı algoritmy kazdy odlisne resıcı problematiku odtokuvody z rastru do sousednıch bunek Prvnım z nich je algoritmus D8 z roku1984 Algoritmus je podrobne popsan v nasledujıcı kapitole 3 Jelikoz odtoknastava vzdy jen do jedne sousednı bunky dochazı casto ke koncentracivodnıch sıtı a sıtrsquo odtoku pak neodpovıda skutecnosti Na druhou stranuje jeho vyhodou jeho jednoduchost a fakt ze nedochazı k nechtene disperzijako je tomu u druheho algoritmu

Druhym algoritmem je MD8 neboli multiple flow direction algorithm MD8algoritmem je voda odvadena do vsech nıze polozenych sousednıch buneka pomer vody je rozdelen procentualne podle sklonu Ve vysledku ma algo-ritmus tendenci vytvaret vıce realisticke prostorove sıte toku nez D8 tımze nedochazı k takove koncentraci vody v sıti U D8 ma mnohem vetsıvliv maly rozdıl vysek mezi sousednımi bunkami na to ktera bunka prijmeveskerou vodu Pouzitım MD8 tyto male vyskove rozdıly nemajı zdalekatakovy vliv jelikoz je mnozstvı vody rozdeleno pomerem mezi tyto bunkyNejvetsı nevyhodou tohoto algoritmu je jeho prılisna disperze na konver-gentnıch svazıch v dusledku odtoku do vsech nıze polozenych bunek

V roce 1997 byl navrzen algoritmus pojmenovany Dinfin Davidem G Tar-botonem z americke univerzity v Utahu Byl navrzen prıstup ktery je zalozenna osmi trojuhelnıkovych ploskach viz obrazek 3 Dıky tomuto postupu jsouodstraneny limitace v podobe moznosti pouze osmi smeru odtoku z bunkyProto je algoritmus pojmenovan Dinfin jelikoz muze nastat nekonecne moznostıvysledneho smeru odtoku Tento prıstup umoznuje pouze jeden smer odtokurozdeleny mezi jednu nebo dve bunky v zavislosti na smeru odtoku

Poslednı dva zmınene algoritmy MD8 a Dinfinmajı oproti D8 nevyhodu ve vetsıcasove narocnosti vypoctu V kapitole 4 je popsan algoritmus MDinfin kteryvyuzıva vyhody MD8 algoritmu za pouzitı trojuhelnıkovych plosek obdobnejako Dinfin algoritmus

3

3 Flow Direction D8

Pro pochopenı problematiky a zjevnost rozdılu mezi algoritmy je vhodneuvest jak funguje nastroj ktery pouzıva ArcGIS Zaklad algoritmu MDinfino nemz pojednava tato dokumentace je zalozen na podobnych postupech

31 Obecny princip D8

Princip nastroje urcenı smeru odtoku (Flow Direction) ktery pouzıva prostredıArcGIS je nasledujıcı Tento nastroj (tool) vezme vstupnı rastr digitalnıhomodelu terenu neboli vyskovy rastr Provede vypocet jehoz vystupem jerastr ktery v kazde bunce rastru obsahuje hodnotu urcujıcı smer odtokuz teto bunky Hodnot je osm podle osmi sousednıch bunek do kterych muzeodtekat voda viz obrazek 1 Prave podle osmi smeru odtoku se tento prıstupnazyva D8 (eight-direction approach)

Obrazek 1 Flow Direction D8 [3]

4

32 Popis algoritmu D8

Samotny vypocet algoritmu je v zasade primitivnı Pro vsechny sousednıbunky se vypocte maximalnı sklon [3]

maximalnı sklon = rozdıl vysek vzdalenost 100

Rozdıl vysek je rozdıl vysky v aktualnım bode a konkretnı sousednı bunkyVzdalenost je vypoctena mezi stredy bunek a lisı se v zavislosti na polozesousednı bunky Pro bunky sousedıcı vrcholem je hodnota velikosti pixeluprenasobena o odmocninu ze dvou Pro zbyle bunky sousedıcı hranou jevelikost vzdalenosti rovna velikosti pixelu Po nalezenı nejstrmejsıho smeruodtoku je hodnota ulozena v podobe bitove hodnoty reprezentujıcı danysmer Pred pouzitım nastroje Flow Direction se obvykle zpracuje vstupnırastr pomocı nastroje Sink Tento algoritmus zaplnı bezodtoke oblasti rastrunejnizsı hodnotou z okolı a do teto nejnizsı sousednı bunky pak posle voduPote jiz nemuze dojıt k situaci kdy vsechny sousednı bunky k dane buncemajı vyssı hodnoty vysek a nedochazelo by tedy k odtokuVysledny rastr nemusı obsahovat pouze bunky s hodnotami 202127 [4]Jestlize nastane situace kdy ma vıce sousednıch bunek nejnizsı hodnotuvysek pak je vysledna hodnota souctem vsech smeru Napr hodnota maximalnıhosklonu bude stejna pro sousednı bunku vlevo a nahore odtok tedy budesmerem na zapad (hodnota = 16) a na sever (hodnota = 64) vysledna hod-nota bude souctem 16 a 64 tedy 84

5

4 Popis algoritmu MDinfin

41 Obecny princip MDinfinObecny postup je prevzat z [1] Stejne jako v prıpade algoritmu Dinfin bylyzavedeny trojuhelnıkove plosky pro vypocet lokalnıho sklonu a smeru pro kazdoutrojuhelnıkovou plosku Okolo stredoveho boduM bylo vytvoreno osm trojuhelnıkuviz obrazek 3 Kazdy se zbyvajıcımi dvema vrcholy P1 P2 ve dvou sousedıcıchbunkach Pro kazdy z techto trojuhelnıku je vypocten smer nejvetsıho sklonuPokud oznacıme vysky bodu M P1 P2 jako hM hP1 hP2 rozdıly vysek sevypoctou takto

z1 = hP1 minus hM z2 = hP2 minus hM (1)

Obdobne se vypoctou rozdıly v x-ovych a y-ovych souradnicıch Po vypocturozdılu jednotlivych souradnic je vypocten normalovy vektor

n =

nx

ny

nz

=

z1y2 minus z2y1z1x2 minus z2x1y1x2 minus y2x1

(2)

Smer odtoku d a sklon s na trojuhelnıkove plose se vypocte pomocı rovnice3 Hodnota nula pro d oznacuje smer osy y a hodnota 3π2 oznacuje smerosy x

d =

0 nx = 0 ny ge 0

π nx = 0 ny lt 0

π2minus arctan(

ny

nx

) nx gt 0

3π2minus arctan(

ny

nx

) nx lt 0

(3)

s = minus tan

(arccos

(nzradic

n2x + n2

y + n2z

))(4)

Jestlize nejvetsı sklon od bodu M je mimo rozpetı 0-45 (π4 radian) jepouzit sklon strmejsı k jednomu z bodu P1 P2 a zaroven i sklon je spoctenk tomuto bodu V prıpade ze oba sousednı body jsou vyse polozeny nez bodM smer nenı pro tento trojuhelnık uvazovan Po spoctenı vsech osmi smerua sklonu pro jednotlive plosky jsou tyto smery povazovany za lokalne ne-jstrmejsı pro kazdy trojuhelnık v rozsahu 45 Smery vedoucı prımo do bodu

6

P1 nebo P2 tedy ty kde d = 0 nebo d = π4 jsou uvazovany pouze vprıpade kdy obe vedlejsı sousednı bunky majı smer k bodu P1 nebo P2Tato situace je znazornena na obrazku 2

Obrazek 2 Ukazka urcenı smeru odtoku z bunky [1]

Prvnı prıpad je smer mırıcı mezi bunky 5 a 6 Druhy prıpad je smer kteryvede prımo do bunky 3 Tato situace nastane jestlize pro trojuhelnık M43vyjde lokalnı smer d = π4 a pro trojuhelnık M32 smer vyjde d = 0Pote co je smer odtoku pro bunku vypocten je celkovy odtok rozdelendo vsech vyslednych smeru na zaklade sklonu Resenı teto problematiky jevıce popsano v sekci 42 Pro smery mırıcı mezi body P1 a P2 je odtokrozdelen do dvou bunek na zaklade nevejtsıho sklonu Pomer odtoku do buneks body P1 a P2 bude v tomto poradı α245 a α145

Obrazek 3 Trojuhelnıkove plosky [1]

7

42 Technicke resenı MDinfinVyse jiz bylo zmıneno ze algoritmus je napsan v jazyce Python Algoritmusje rozdelen do dvou skriptu Prvnı z nich obsahuje funkce a druhy je hlavnıVstupem do modelu je rastr digitalnıho modelu terenu a vystupnı adresardo ktereho se ulozı finalnı rastr smeru odtoku viz obr 4 Po nactenı rastruze vstupnıch parametru je tento rastr preveden na matici NumPy pomocıfunkce

arcpy RasterToNumPyArray ( InputRaster )

NumPy [5] je rozsırenı programovacıho jazyka Python je to balıcek uzıvanypro vedecke vypocty Umoznuje podporu velkych multi-dimenzionalnıch polıa matic spolu s velkou knihovnou matematickych funkcı pro praci s temitopoli

Algoritmus cyklem projızdı vsechny prvky matice a u tech ktere majı hod-notu ruznou od NoData nalezne okolı Hledanı okolı bunky provadı funkceneighbors ta je definovana takto

def ne ighbors ( i j array x y ) return nb1 nb2 nb3 nb4 nb5 nb6 nb7 nb8

Vstupem funkce je pozice v matici dale cela matice a jejı rozmery Funkceneighbors vypocıta hodnoty vysek sousednıch osmi bunek a vratı je na vystup

Obrazek 4 Dialogove okno nastroje MDinfin

Vystup z funkce neighbors slouzı jako jeden z vstupnıch parametru pro dalsıfunkci

8

Funkce byla pojmenovana dir slope jelikoz jejım vystupem je smer odtokua sklon tohoto smeru

def d i r s l o p e ( pointM nbrs vpix sp ix ) return d i r e c t i o n s l ope

Pro kazdy trojuhelnık byla spoctena hodnota d viz vzorec 3 Hodnota s bylapo spatnych a nelogickych vysledcıch pocıtana podle jineho vzorce ktery jizdaval spravne vysledky

s0 =

radicz212y21

+z22y22

(5)

Vzorec se lisı pro kazdy trojuhelnıcek uvedeny je pro vypocet sklonu kdy sousednıbunka je severozapadnı a severnı Tımto postupem bylo zbytecne pocıtatz-tovou slozku vekotoru n vzorec 2 Byly osetreny prıpady kdy sousednıbunky aktualnıho pocıtaneho trojuhelnıku jsou obe vyse polozene nebo obemimo rastr (NoData) Dalsı prıpad nastane jestlize je jeden bod vne rastra druhy v rastru lezı Smer je potom urcen prımo do toho bodu ktery nalezırastru Taktez i sklon je pocıtan pouze mezi tımto bodem a bodem M Lokalnı smer d v kazde plosce po vypoctenı nesmı prekrocit 45 V situacize tuto hodnotu prekrocı je smeru prirazena hodnota 0 nebo 45 v zavislostina vzajemnem porovnanı vysek bodu v trojuhelnıku Takto jsou zpracovanyvsechny plosky a je zjisteno zda-li do kazdeho trojuhelnıku nastava smerodtoku nebo ne Na konci funkce dir slope se kontroluje prıpad kdy smersousednıch trojuhelnıku odkazuje presne do stejneho bodu tedy hodnotysmeru musı byt pro prvnı trojuhelnık d = 45 a pro nasledujıcı sousednıtrojuhelnık d = 0 Vystupem funkce jsou dva vektory o osmi prvcıch smera sklon pro kazdou plosku

Dalsı fazı vypoctu je zjistenı pomeru vody ktera potece do jednotlivychsmeru K vypoctu pomeru byl pouzit tento vzorec [2]

fi =sxi8sum

j=1

sxj

(6)

kde s vyznacuje sklon vypocteneho smeru konkretnı trojuhelnıkove ploskya x je promenny exponent Pokud by byl exponent zvolen 1 bude vyslednasıtrsquo obdobna jako pri pouzitı MD8 algoritmu Pri zvetsovanı exponentu xk nekonecnu bude sıtrsquo stejna jako pri pouzitı D8 metody Vychozı hodnotaexponentu byla zvolena x = 4 coz je kompromis mezi obema variantami

9

Zmena exponentu se v soucasne podobe neprojevı na vyslednem rastru je-likoz vysledek prezentuje pouze smer odtoku a ne procentualnı cast Tohotopomeru bude vyuzito az pri spojenı skriptu s 2D modelem SMODERP

V dalsı casti vypoctu je rozdelen jiz zjisteny pomer z celkoveho odtokudo dvou prıpadne pouze do jedne bunky v zavislosti na smeru odtoku dVe vysledku je vypocten vektor osmi cısel kde kazda hodnota od 0 do 1prestavuje jiz procentualnı pomer z celkoveho odtoku do kazde sousednıbunky

Pro vyslednou reprezentaci smeru odtoku na vystup byl pro kazdou bunkuvytvoren vektor obsahujıcı 1 a 0 rıkajıcı zda nastava ci nenastava odtokdo sousednı bunky Tento vektor byl preveden na celocıselnou hodnotu po-mocı funkce bool2int

def boo l 2 i n t ( x ) y = 0for i j in enumerate ( x )

i f j y += 1ltlt ireturn y

Funkce ma na vstupu vektor jedicek a nul Naprıklad pro vektor 00000111kdy voda tece na severozapad sever a severovychod se funkce chova taktoJe testovano jestli platı j = 1 tedy prvnıch pet nul vektoru funkce preskocıa pro prvnı jednicku se pricte k promenne y 20 v dalsım kroku 21 a v poslednım22 Operator vyjadruje totiz bitovy posun smerem doleva Vysledkem jena vystupu cıslo y = 1 + 2 + 4 = 7

Pro vsechny bunky byla vypoctena hodnota reprezentujıcı smer odtoku Tatohodnota se ulozı do matice a ta se nasledne prevede na vysledny rastr

f l o w d i r = arcpy NumPyArrayToRaster ( value LLcorner spix vpix rdquordquo )

value hodnota reprezentujıcı smer odtokuLLcorner souradnice leveho dolnıho rohuspix sırka pixeluvpix vyska pixelu

10

5 Vysledky

Algoritmus MDinfin byl testovan na skutecnych datech dvou pozemku u obcıNucice ve Stredoceskem kraji a Bykovice v kraji Jihomoravskem rastry jsouv prıloze 71 Oba dva rastry jsou o rozlisenı 5 metru Finalnı rastry jsouporovnavany s rastry vytvorenymi v prostredı ArcGIS nastrojem Flow Di-rection metodou D8

51 Realna data - Bykovice

Vysledne rastry Flow Direction pro uzemı Bykovice jsou uvedeny v prıloze72 Oba rastry byly pro hodnoty 202127 obarveny shodnou barvou kvulilepsı nazornosti a porovnatelnosti vysledku Rastr ktery obsahuje z celkovehopoctu 44807 bunek celkem 23655 bunek s hodnotami vysek po probehnutıalgoritmy dal nasledujıcı vysledky

FD D8 MDinfin1 3650 7372 666 9174 207 188 21 716 94 3732 791 8564 8818 1045128 9408 14983sum

23655 14983

Tabulka 1 Tabulka porovnanı obou algoritmu pro rastr Bykovic

FD je zkratka pro Flow Direction cili smer odtoku reprezentovany celocıselnouhodnotou Ostatnı hodnoty u vysledneho rastru na ktery byl pouzit algorit-mus MDinfin jsou v rozpetı 0246 V rozmezı hodnot smeru odtoku 246255se nevyskytujı zadne bunky Cas potrebny pro vykonanı skriptu byl v prıpadeD8 4 vteriny Pro algoritmus MDinfin byl cas 15 vterin

11

52 Realna data - Nucice

Vysledne rastry jsou uvedeny v prıloze 73 Opet bylo pouzito shodne obar-venı pro zakladnı smery u obou rastru Rastr Nucice obsahoval data na 82732bunkach z celkove poctu 125449 bunek Vysledky jsou pro prehlednost uve-deny v tabulce

FD D8 MDinfin1 12186 12332 12441 87034 16907 10278 9826 1642316 2516 28832 5010 241764 7788 366128 16058 25475sum

82732 55932

Tabulka 2 Tabulka porovnanı obou algoritmu pro rastr Nucic

Ostatnı hodnoty u vysledneho rastru na ktery byl pouzit algoritmusMDinfin jsou v rozpetı 0255 Cas potrebny pro vykonanı skriptu byl v prıpadeD8 6 vterin Pro algoritmus MDinfin byl cas 50 vterin

12

6 Zaver

Cılem projektu bylo vytvorit funkcnı skript obsahujıcı algoritmus pojmen-ovany MDinfin [1] ktery resı odtok do sousednıch bunek rastru Algoritmusbyl napsan v programovacım jazyce Python a testovan na realnych datechVysledky byly mırnym prekvapenım kdy zejmena hodnoty smeru 128 tedyseverovychodnıho se vyskytovaly ve vysledku velmi casto viz tabulky 1 a 2Predpokladem bylo ze se odtok rozlozı do vıce smeru a pocet bunek s hod-notami zakladnıch smeru 1248163264 a 128 bude mene nez v prıpade al-goritmu D8 K rozkladu do vıce smeru sice doslo ale pocet nekterych bunekse zakladnımi smery byl vetsı u algoritmu MDinfin

Co se tyce delky doby behu algoritmu je algoritmus MDinfin pomalejsı viz casyv kapitole 5 nez D8 z nekolika zrejmych duvodu Predevsım algoritmus D8provadı mnohem mene pocetnıch operacı z duvodu jeho mensı slozitostiviz 3 Dalsım duvodem je take rozdıl v jazyce ve kterem jsou oba algo-ritmy napsany D8 je napsan v programovacım jazyce C++ ktery na vetsıchdatech je mnohonasobne rychlejsı nez Python Prepsanım algoritmu MDinfindo jazyka C++ by mohla byt cesta k budoucımu zvysenı rychlosti pracealgoritmu

13

Reference

[1] SEIBERT Jan McGlynn BL A new triangular multiple flow di-rection algortihm for computing upslope areas from gridded digi-tal elevation models [online] [cit 13 5 2013] Dostupne ke stazenız URL lthttpciteseerxistpsueduviewdocdownloaddoi=101179977amprep=rep1amptype=pdfgt

[2] HOLMGREN Peter Multiple direction algortihms for runoff modellingin grid based elevation models An empirical evaluation [online] [cit13 5 2013] Dostupny z URL ltftpwwwlwrkthseCommonUllaMFor_Imran[1994]20holmgren20-20multiple20flow

20direction20algorithms20for20runoff20modelling20in

20grid20based20elevation20modelspdf gt

[3] ESRI ESRI WebHelp - How Flow Direction works [online] [cit13 5 2013] Dostupne z URL lthttphelparcgiscomenarcgisdesktop100helpindexhtml009z00000063000000

htmgt

[4] ESRI ESRI Webhelp - Flow Direction (Spatial Analyst) [online][cit 13 5 2013] Dostupne z URL lthttphelparcgiscomenarcgisdesktop100helpindexhtml009z00000052000000

htmgt

[5] WIKIPEDIA NumPy [online] [cit 13 5 2013] Dostupne z URLlthttpenwikipediaorgwikiNumPygt

[6] INFORMIT Working with operators [online] [cit 13 5 2013] Dos-tupne z URL lthttpwwwinformitcomarticlesarticleaspxp=2002831ampseqNum=6gt

14

7 Prılohy

71 Bykovice a Nucice vstupnı DMT rastry

Obrazek 5 DMT Bykovice

Obrazek 6 DMT Nucice

15

72 Bykovice vysledky

Obrazek 7 Flow Direction D8

Obrazek 8 Flow Direction MDinfin

16

73 Nucice vysledky

Obrazek 9 Flow Direction D8

Obrazek 10 Flow Direction MDinfin

17

Page 21: pro zac ate cn kygeo.fsv.cvut.cz/gdata/2013/pin2/e/dokumentace/... · 2013-06-05 · CESK E VYSOK E U CEN I TECHNICKE V PRAZE FAKULTA STAVEBN I OBOR GEODEZIE A KARTOGRAFIE Dokumentace

arcpySelectLayerByLocation_management(rsquopovodi_classrsquo rsquoBOUNDARY_TOUCHESrsquo

rsquopovodi_classrsquo)

matchcount2 = int(arcpyGetCount_management(rsquopovodi_classrsquo)getOutput(0))

bull Dalsı prubehy SelectByLocation

while matchcount1 lt matchcount2

matchcount1 = matchcount2

arcpySelectLayerByLocation_management(rsquopovodi_classrsquo rsquoBOUNDARY_TOUCHESrsquo

rsquopovodi_classrsquo)

matchcount2 = int(arcpyGetCount_management(rsquopovodi_classrsquo)getOutput(0))

Oznacene polygony jsou ulozeny jako polygonova vrstva do vstupnı ge-odatabaze Tato vrstva je dale pouzita pro tvorbu gridu

Vytvorenı gridu

Pred samotnou tvorbou bylo potreba zjistit rozsah sekce Pokud bylasekce mensı nez 1 mapovy list bylo treba definovat souradnice polohylistu tak aby povodı lezelo na stredu listu Do zasobnıku byly nactenysouradnice lomovych bodu povodı a byly z nich vybrany maximalnı aminimalnı hodnoty Jejich rozdıl pak urcil rozsah sekce

Prıklad plnenı zasobnıku souradnicema

desc = arcpyDescribe(outputFeatureClassPath+rsquorsquo+output_name)

shape_field_name = descShapeFieldName

rows3 = arcpySearchCursor(outputFeatureClassPath+rsquorsquo+output_name)

mbr_X=[]

mbr_Y=[]

for row3 in rows3

Create the geometry object

feat = row3getValue(shape_field_name)

partnum = 0

for pnt in featgetPart(partnum)

mbr_Xappend(pntX)

mbr_Yappend(pntY)

partnum += 1

8

Vytvorenı gridu pote probıha budrsquo s definovanou nebo s nedefinovanoupolohou pocatecnıho mapoveho listu Pro vytvorenı gridu je pouzitafunkce GridIndexFeatures cartography

Ukazka

arcpyGridIndexFeatures_cartography(outputFeatureClassPath+rsquorsquo+grid_name

outputFeatureClassPath+rsquorsquo+output_name USEPAGEUNIT scale_str

sheet_width_str sheet_high_str str(grid_start_pnt_X)+rsquo rsquo+str(grid_start_pnt_Y))

Grid je tedy vytvoren pro jednu sekci Po vsech prubezıch cyklu jsoutakto vytvorene vrstvy gridu spojeny do jedne finalnı vrstvy V cyklujsou dale plneny nove atributove sloupce - cısla sekcı a nazvy mapovychlistu a to jak do nove (vystupnı) vrstvy gridu tak do vstupnı vrstvypovodı

3 Vytvorenı finalnıch vrstev tisk vysledku Jak bylo receno na zaverjsou spojeny jednotlive vrstvy gridu Vedle toho je vytvorena vrstvaspojenych mapovych listu po sekcıch - funkcı Dissolve - pro tvorbuprehledky Jsou vytisknuty vysledne hodnoty viz 212

22 Generalizace

Pro generalizaci byl napsan skript ktery nacıta liniovou vrstvu toku Tentoskript byl jiz psan na mıru podkladovym datum a pri nacıtanı je v nemvyuzito znalosti struktury danych podkladovych dat Skript k vrstve pripojıexternı tabulku a vytvorı atributovy sloupec kategorie Podle dat z externıtabulky pak plnı novy sloupec hodnotami 1 - 5 podle mnozstvı unasenehosedimentu Tato hodnota je pak pouzita pri vizualizaci datZajımavostı je ze pro nacıtanı musela byt tabulka indexovana viz 31

221 Uvodnı dialog

Uvodnı dialog obsahuje dva parametry

bull Input Feature Class Vstupnı liniova vrstva rıcnıch useku

bull Table Vstupnı tabulka obsahujıcı hodnoty rıcnıch splavnenin

9

222 Vysledny log

Vysledny log je k nahlednutı v prıloze 52 Obsahuje tyto informace

bull Pocet vsech rıcnıch useku

bull Pocet useku v jednotlivych kategoriıch

23 Finalnı upravy a export

Jak jiz bylo zmıneno finalnı vzhled mapoveho listu byl vytvoren manualne vLayout view a pomocı toolbaru Data Driven Pages Tento postup je casoveekonomictejsı a je jım dosazeno lepsıch vysledku dıky prehlednosti ToolbarData Driven Pages pak umoznuje vkladat dynamicke textove pole ktere seautomaticky menı s menıcım se mapovym listem Takovym polem je naprnazev mapoveho listu Stacı tedy definovat vzhled jednoho mapoveho listuv toolbaru Data Driven Pages navolit prıslusne pole - ty byly vytvorenynastrojem Grid viz 21 Dynamicky bylo potreba propojit s mapovym oknemi prehledku ktera byla vytvorena jako druhy Data Frame To se provedlo defi-novanım rozsahu podle hlavnıho mapoveho okna v Properties -iquest Data Frame-iquest Extant a definovanım Definition Query ve vlastnostech vrstvy Dalsım dy-namickym prvkem jsou oznacenı sousednıch mapovych listu a cıslo strankyNa takto sestavenou stranku s dynamickymi prvky bylo mozne pouzıt exportmapy do pdf a Atlas byl vygenerovanPrıklad dynamickeho textu pro nazev mapoveho listultdyn type=page property=PageNamegt

3 Problemy a moznosti rozsırenı

31 Pripojovanı externıch tabulek

Pri pripjovanı externıch tabulek musely byt indexovany hodnoty atribu-toveho sloupce pouziteho k parovanı To probehlo prıkazemarcpyAddIndex management (layer HydroID)Pripojenı tabulky musı probıhat k Feature layer Proto bylo nutne nejprve zFeature Class vytvorit Feature Layer1 Pote mohla byt tabulka pripojena

arcpyAddIndex_management (layer HydroID)

arcpyAddJoin_management(layer HydroID table Riverid)

1Rozdıl mezi Feature Layer a Feature Class je vysvetlen v prilozenem Tutorialu pro-gramovanı v Pythonu pro ArcGIS

10

Zde nastal problem s prıstupem k atributum Obecne nesmı nazvy atri-butovych sloupcu obsahovat mezery K hodnotam je pristupovano pres jed-notlive radky s parametrem nazev sloupce

rows= arcpySearchCursor(layer)

for row in rows

value=rownazev_sloupce

Pripojena tabulka ovsem mela v nazvech sloupcu mezeru K takto pojmeno-vanemu sloupci muselo byt pristupovano prıkazem getValue

rows= arcpySearchCursor(layer)

for row in rows

value=rowgetValue(rsquonazev tabulky$nazev sloupcersquo)

32 Doba behu tvorby gridu

Doba behu nastroje pro tvorbu gridu je znepokolive dlouha Bylo prove-deno merenı casu behu jednotlivych castı kodu funkcı time z modulu timeVysledky ukazaly ze nejdele trva vytvarenı novych vrstev Vrstva se muzevytvaret az 20 sekund Snaha o optimalizaci donutila nahradit vytvarenı vrs-tev s minimalnım ohranicujıcım obdelnıkem sekvencnım ukladanım souradniclomovych bodu polygonu z nichz pak funkcemi min a max byly tyto hodnotyzıskany Prubeh se tak urychlil o desıtky sekund (v jednom prubehu cyklupriblizne o 15 sekund) Dalsı moznostı bylo vyuzıt prostoroveho indexu datTato moznost nebyla vyuzita protoze ArcGIS pouzıva k prostorovemu in-dexovanı pravidelny grid Zıskanı MBR2 nebylo nalezeno Vyuzitı indexu byovsem problem neresilo Jak jiz bylo zmıneno nejdele trva vytvarenı novychvrstev Bohuzel funkce GridIndexFeatures cartography pro vytvorenı griduneumı pracovat se selektovanymi daty Tedy v kazdem cyklu musı byt ulozenapolygonova vrstva tvorıcı 1 sekci Pote mohla byt vytvorena vrstva tvorıcıgrid Tedy v kazdem prubehu cyklu jsou vytvareny 2 nove vrstvy Jelikozautor neprisel na zpusob jine optimalizace je nastroj pomaly Pro zadanydataset s 58mi povodımi jeho cinnost probıha desıtky minut

33 Moznosti rozsırenı

Do skriptu by se dal zakomponovat export seznamu mapovych listu pro kazdepovodı V soucasne verzi je tvoren exportem atributove tabulky

2minimum bounding rectangle - minimalnı ohranicujıcı obdelnık

11

4 Zaver

Byly vytvoreny nastroje pro automatizaci tvorby Atlasu pro mapy eroznıhosmyvu a transportu splavenin Tvorba Atlasu probıha v nekolika krocıchVizualizovane prvku jsou generalizovany Dale je vytvoren Grid ktery jepouzit jako indexova vrstva pro funkci Data Driven Pages Tou jsou vy-tvoreny jednotlive mapove listy Pomocı dynamickych prvku je pak vytvorenvzhled ktery se menı se zmenou mapoveho listu Nedostatkem je rychlostnastroje pro tvorbu gridu Presto ze je nastroj pomaly je zcela funkcnı Vprıpade potreby dalsıho rozsırenı bude ale vhodne vysledky nacıtat do novehonastroje Vzorovy vytisk vysledneho atlasu je prilozen Vzhledem k tomu zezpracovavana data jsou rozsahla a podlehajı autorskemu zakonu je vytvorenjen vzorovy vytisk z 6ti povodı Nastroje jsou psany v jazyce Python 26 proArcGIS 100 Pri praci byla vyuzıvana predevsım online napoveda ArcGISa diskuznı programatorska fora Kompletnı zdrojovy kod je ke stazenı nastrankach predmetu PIN2

12

5 Prılohy

51 Vysledny log tvorby gridu

Executing Grid

JAtlasvzorektemp_selectpovodi_vzorekgdbpokusne_povodi

70000 25 30 JAtlasvzorektemp_selectpovodi_vzorekgdbgrid70

Start Time Wed May 15 020551 2013

Running script Script2

Output folder JAtlasvzorektemp_selectpovodi_vzorekgdb

_____________________________________________________________________

count of basin polygon to process 6

_____________________________________________________________________

RUN 1

count of basins in 1 section 3

Their ID

ID 1

ID 3

ID 6

_____________________________________________________________________

count of basin polygon to process 3

_____________________________________________________________________

RUN 2

count of basins in 2 section 1

Their ID

ID 2

_____________________________________________________________________

count of basin polygon to process 2

_____________________________________________________________________

RUN 3

count of basins in 3 section 2

Their ID

ID 4

ID 5

----- RESULT -----

Number of sections 3

Number of map sheets

in section 1 13

in section 2 1

in section 3 2

Completed script Grid

Succeeded at Wed May 15 021359 2013 (Elapsed Time 8 minutes 8 seconds

13

52 Vysledny log generalizace

Executing generalization JAtlasvzorek2011_NAZV_nadrze2011_watemsedem

NAZV_tokyVT28_finshp

JAtlasvzorek2011_NAZV_nadrze2011_watemsedem28_vypocet

projectriversedimentxlsxprojectriversediment$

Start Time Wed May 15 075624 2013

Running script generalization

Category created

Total count of river parts 2879

Count of category 1 2428

Count of category 2 118

Count of category 3 68

Count of category 4 20

Count of category 5 245

Completed script generalization

Succeeded at Wed May 15 075638 2013 (Elapsed Time 1400 seconds)

14

CESKE VYSOKE UCENI TECHNICKE V PRAZE

FAKULTA STAVEBNI

OBOR GEODEZIE A KARTOGRAFIE

Dokumentace k projektu informatika 2

Stanovenı smeru odtokuna rastrovem digitalnım modelu

a implementace algoritmudo prostredı ArcGIS

BC JAN ZAJICEK

5 cervna 2013

Obsah

Obsah 1

1 Uvod 2

2 Nejbeznejsı existujıcı algoritmy 3

3 Flow Direction D8 431 Obecny princip D8 432 Popis algoritmu D8 5

4 Popis algoritmu MDinfin 641 Obecny princip MDinfin 642 Technicke resenı MDinfin 8

5 Vysledky 1151 Realna data - Bykovice 1152 Realna data - Nucice 12

6 Zaver 13

Reference 14

7 Prılohy 1571 Bykovice a Nucice vstupnı DMT rastry 1572 Bykovice vysledky 1673 Nucice vysledky 17

1

1 Uvod

Tato dokumentace byla zpracovana v ramci predmetu Projekt Informatika 2Semestralnı prace bude pouzita jako z jedna castı autorovi diplomove praces nazvem SMODERP 2D rozsırenı resıcı vztahy soustredeneho a plosnehoodtoku na danem uzemı Duvodem zpracovanı tohoto tematu byla potrebapouzitı v diplomove praci vıce nez jednoho algoritmu pro urcenı smeruodtoku v prostredı ArcGIS V soucasne dobe ArcGIS vyuzıva algoritmusD8 viz kapitola 3 jako jediny algoritmus pro vypocet smeru odtoku Tentoalgoritmus je soucastı Hydrology tools Nastroje ze skupiny Hydrology sepouzıvajı k modelovanı chovanı toku vody na povrchu Nejbeznejsı pouzıvanadigitalnı data povrchu Zeme jsou rastry digitalnı modelu terenu DMT slozenez jednotlivych bunek pixelu Tyto DMT rastry jsou pouzity jako vstupypro ruzne charakteristiky povrchu DMT rastr je souvisly povrch obvykleodkazujıcı na povrch Zeme Presnost dat je dana rozlisenım rastru taktezvzdalenostı mezi body rastru Informace o tvaru zemskeho povrchu je uzitecnapro mnoho oboru jako je napr zemedelstvı lesnictvı zivotnı prostredı neboregionalnı planovanı Tyto obory vyzadujı pochopenı jak voda tece v ramciuzemı a jak zmeny na tomto uzemı nasledne ovlivnı jejı tok

Cılem projektu bylo naprogramovat algoritmus ktery v roce 2007 publiko-vali Jan Seibert a Brian L McGlynn s nazvem MDinfin [1] Tento algoritmusje vylepsenım stavajıcıch algoritmu pro resenı urcenı smeru odtoku na ras-tru viz kapitola 2 Pro overenı spravnosti vysledku byla pouzita realnadata dvou pozemku u obcı Bykovice a Nucice Testovanı probıhalo na ras-trech o rozlisenı 5 metru Algoritmus byl naprogramovan v jazyce Pythonv prostredı NetBeans IDE 69 Pro spustenı v ArcGISu je potreba pridatdo prostredı vytvoreny toolbox upravit aktualnı cestu ke skriptu mainpya tento model nasledne spustit Vstupem modelu je rastr DMT a vystupnıadresar do ktereho se po dobehnutı modelu ulozı vysledny rastr s hodnotamismeru odtoku 1255 Algoritmus MDinfin je testovan na verzi ArcGIS 100Na nejnovejsı verzi ArcGIS 101 ktera vysla v cervnu 2012 nenı overenakompatibilita algoritmu v dusledku nefunkcnosti vıce nez jedne verze tohotoprogramu na jednom pocıtaci

2

2 Nejbeznejsı existujıcı algoritmy

Existujı tri nejbeznejsı algoritmy kazdy odlisne resıcı problematiku odtokuvody z rastru do sousednıch bunek Prvnım z nich je algoritmus D8 z roku1984 Algoritmus je podrobne popsan v nasledujıcı kapitole 3 Jelikoz odtoknastava vzdy jen do jedne sousednı bunky dochazı casto ke koncentracivodnıch sıtı a sıtrsquo odtoku pak neodpovıda skutecnosti Na druhou stranuje jeho vyhodou jeho jednoduchost a fakt ze nedochazı k nechtene disperzijako je tomu u druheho algoritmu

Druhym algoritmem je MD8 neboli multiple flow direction algorithm MD8algoritmem je voda odvadena do vsech nıze polozenych sousednıch buneka pomer vody je rozdelen procentualne podle sklonu Ve vysledku ma algo-ritmus tendenci vytvaret vıce realisticke prostorove sıte toku nez D8 tımze nedochazı k takove koncentraci vody v sıti U D8 ma mnohem vetsıvliv maly rozdıl vysek mezi sousednımi bunkami na to ktera bunka prijmeveskerou vodu Pouzitım MD8 tyto male vyskove rozdıly nemajı zdalekatakovy vliv jelikoz je mnozstvı vody rozdeleno pomerem mezi tyto bunkyNejvetsı nevyhodou tohoto algoritmu je jeho prılisna disperze na konver-gentnıch svazıch v dusledku odtoku do vsech nıze polozenych bunek

V roce 1997 byl navrzen algoritmus pojmenovany Dinfin Davidem G Tar-botonem z americke univerzity v Utahu Byl navrzen prıstup ktery je zalozenna osmi trojuhelnıkovych ploskach viz obrazek 3 Dıky tomuto postupu jsouodstraneny limitace v podobe moznosti pouze osmi smeru odtoku z bunkyProto je algoritmus pojmenovan Dinfin jelikoz muze nastat nekonecne moznostıvysledneho smeru odtoku Tento prıstup umoznuje pouze jeden smer odtokurozdeleny mezi jednu nebo dve bunky v zavislosti na smeru odtoku

Poslednı dva zmınene algoritmy MD8 a Dinfinmajı oproti D8 nevyhodu ve vetsıcasove narocnosti vypoctu V kapitole 4 je popsan algoritmus MDinfin kteryvyuzıva vyhody MD8 algoritmu za pouzitı trojuhelnıkovych plosek obdobnejako Dinfin algoritmus

3

3 Flow Direction D8

Pro pochopenı problematiky a zjevnost rozdılu mezi algoritmy je vhodneuvest jak funguje nastroj ktery pouzıva ArcGIS Zaklad algoritmu MDinfino nemz pojednava tato dokumentace je zalozen na podobnych postupech

31 Obecny princip D8

Princip nastroje urcenı smeru odtoku (Flow Direction) ktery pouzıva prostredıArcGIS je nasledujıcı Tento nastroj (tool) vezme vstupnı rastr digitalnıhomodelu terenu neboli vyskovy rastr Provede vypocet jehoz vystupem jerastr ktery v kazde bunce rastru obsahuje hodnotu urcujıcı smer odtokuz teto bunky Hodnot je osm podle osmi sousednıch bunek do kterych muzeodtekat voda viz obrazek 1 Prave podle osmi smeru odtoku se tento prıstupnazyva D8 (eight-direction approach)

Obrazek 1 Flow Direction D8 [3]

4

32 Popis algoritmu D8

Samotny vypocet algoritmu je v zasade primitivnı Pro vsechny sousednıbunky se vypocte maximalnı sklon [3]

maximalnı sklon = rozdıl vysek vzdalenost 100

Rozdıl vysek je rozdıl vysky v aktualnım bode a konkretnı sousednı bunkyVzdalenost je vypoctena mezi stredy bunek a lisı se v zavislosti na polozesousednı bunky Pro bunky sousedıcı vrcholem je hodnota velikosti pixeluprenasobena o odmocninu ze dvou Pro zbyle bunky sousedıcı hranou jevelikost vzdalenosti rovna velikosti pixelu Po nalezenı nejstrmejsıho smeruodtoku je hodnota ulozena v podobe bitove hodnoty reprezentujıcı danysmer Pred pouzitım nastroje Flow Direction se obvykle zpracuje vstupnırastr pomocı nastroje Sink Tento algoritmus zaplnı bezodtoke oblasti rastrunejnizsı hodnotou z okolı a do teto nejnizsı sousednı bunky pak posle voduPote jiz nemuze dojıt k situaci kdy vsechny sousednı bunky k dane buncemajı vyssı hodnoty vysek a nedochazelo by tedy k odtokuVysledny rastr nemusı obsahovat pouze bunky s hodnotami 202127 [4]Jestlize nastane situace kdy ma vıce sousednıch bunek nejnizsı hodnotuvysek pak je vysledna hodnota souctem vsech smeru Napr hodnota maximalnıhosklonu bude stejna pro sousednı bunku vlevo a nahore odtok tedy budesmerem na zapad (hodnota = 16) a na sever (hodnota = 64) vysledna hod-nota bude souctem 16 a 64 tedy 84

5

4 Popis algoritmu MDinfin

41 Obecny princip MDinfinObecny postup je prevzat z [1] Stejne jako v prıpade algoritmu Dinfin bylyzavedeny trojuhelnıkove plosky pro vypocet lokalnıho sklonu a smeru pro kazdoutrojuhelnıkovou plosku Okolo stredoveho boduM bylo vytvoreno osm trojuhelnıkuviz obrazek 3 Kazdy se zbyvajıcımi dvema vrcholy P1 P2 ve dvou sousedıcıchbunkach Pro kazdy z techto trojuhelnıku je vypocten smer nejvetsıho sklonuPokud oznacıme vysky bodu M P1 P2 jako hM hP1 hP2 rozdıly vysek sevypoctou takto

z1 = hP1 minus hM z2 = hP2 minus hM (1)

Obdobne se vypoctou rozdıly v x-ovych a y-ovych souradnicıch Po vypocturozdılu jednotlivych souradnic je vypocten normalovy vektor

n =

nx

ny

nz

=

z1y2 minus z2y1z1x2 minus z2x1y1x2 minus y2x1

(2)

Smer odtoku d a sklon s na trojuhelnıkove plose se vypocte pomocı rovnice3 Hodnota nula pro d oznacuje smer osy y a hodnota 3π2 oznacuje smerosy x

d =

0 nx = 0 ny ge 0

π nx = 0 ny lt 0

π2minus arctan(

ny

nx

) nx gt 0

3π2minus arctan(

ny

nx

) nx lt 0

(3)

s = minus tan

(arccos

(nzradic

n2x + n2

y + n2z

))(4)

Jestlize nejvetsı sklon od bodu M je mimo rozpetı 0-45 (π4 radian) jepouzit sklon strmejsı k jednomu z bodu P1 P2 a zaroven i sklon je spoctenk tomuto bodu V prıpade ze oba sousednı body jsou vyse polozeny nez bodM smer nenı pro tento trojuhelnık uvazovan Po spoctenı vsech osmi smerua sklonu pro jednotlive plosky jsou tyto smery povazovany za lokalne ne-jstrmejsı pro kazdy trojuhelnık v rozsahu 45 Smery vedoucı prımo do bodu

6

P1 nebo P2 tedy ty kde d = 0 nebo d = π4 jsou uvazovany pouze vprıpade kdy obe vedlejsı sousednı bunky majı smer k bodu P1 nebo P2Tato situace je znazornena na obrazku 2

Obrazek 2 Ukazka urcenı smeru odtoku z bunky [1]

Prvnı prıpad je smer mırıcı mezi bunky 5 a 6 Druhy prıpad je smer kteryvede prımo do bunky 3 Tato situace nastane jestlize pro trojuhelnık M43vyjde lokalnı smer d = π4 a pro trojuhelnık M32 smer vyjde d = 0Pote co je smer odtoku pro bunku vypocten je celkovy odtok rozdelendo vsech vyslednych smeru na zaklade sklonu Resenı teto problematiky jevıce popsano v sekci 42 Pro smery mırıcı mezi body P1 a P2 je odtokrozdelen do dvou bunek na zaklade nevejtsıho sklonu Pomer odtoku do buneks body P1 a P2 bude v tomto poradı α245 a α145

Obrazek 3 Trojuhelnıkove plosky [1]

7

42 Technicke resenı MDinfinVyse jiz bylo zmıneno ze algoritmus je napsan v jazyce Python Algoritmusje rozdelen do dvou skriptu Prvnı z nich obsahuje funkce a druhy je hlavnıVstupem do modelu je rastr digitalnıho modelu terenu a vystupnı adresardo ktereho se ulozı finalnı rastr smeru odtoku viz obr 4 Po nactenı rastruze vstupnıch parametru je tento rastr preveden na matici NumPy pomocıfunkce

arcpy RasterToNumPyArray ( InputRaster )

NumPy [5] je rozsırenı programovacıho jazyka Python je to balıcek uzıvanypro vedecke vypocty Umoznuje podporu velkych multi-dimenzionalnıch polıa matic spolu s velkou knihovnou matematickych funkcı pro praci s temitopoli

Algoritmus cyklem projızdı vsechny prvky matice a u tech ktere majı hod-notu ruznou od NoData nalezne okolı Hledanı okolı bunky provadı funkceneighbors ta je definovana takto

def ne ighbors ( i j array x y ) return nb1 nb2 nb3 nb4 nb5 nb6 nb7 nb8

Vstupem funkce je pozice v matici dale cela matice a jejı rozmery Funkceneighbors vypocıta hodnoty vysek sousednıch osmi bunek a vratı je na vystup

Obrazek 4 Dialogove okno nastroje MDinfin

Vystup z funkce neighbors slouzı jako jeden z vstupnıch parametru pro dalsıfunkci

8

Funkce byla pojmenovana dir slope jelikoz jejım vystupem je smer odtokua sklon tohoto smeru

def d i r s l o p e ( pointM nbrs vpix sp ix ) return d i r e c t i o n s l ope

Pro kazdy trojuhelnık byla spoctena hodnota d viz vzorec 3 Hodnota s bylapo spatnych a nelogickych vysledcıch pocıtana podle jineho vzorce ktery jizdaval spravne vysledky

s0 =

radicz212y21

+z22y22

(5)

Vzorec se lisı pro kazdy trojuhelnıcek uvedeny je pro vypocet sklonu kdy sousednıbunka je severozapadnı a severnı Tımto postupem bylo zbytecne pocıtatz-tovou slozku vekotoru n vzorec 2 Byly osetreny prıpady kdy sousednıbunky aktualnıho pocıtaneho trojuhelnıku jsou obe vyse polozene nebo obemimo rastr (NoData) Dalsı prıpad nastane jestlize je jeden bod vne rastra druhy v rastru lezı Smer je potom urcen prımo do toho bodu ktery nalezırastru Taktez i sklon je pocıtan pouze mezi tımto bodem a bodem M Lokalnı smer d v kazde plosce po vypoctenı nesmı prekrocit 45 V situacize tuto hodnotu prekrocı je smeru prirazena hodnota 0 nebo 45 v zavislostina vzajemnem porovnanı vysek bodu v trojuhelnıku Takto jsou zpracovanyvsechny plosky a je zjisteno zda-li do kazdeho trojuhelnıku nastava smerodtoku nebo ne Na konci funkce dir slope se kontroluje prıpad kdy smersousednıch trojuhelnıku odkazuje presne do stejneho bodu tedy hodnotysmeru musı byt pro prvnı trojuhelnık d = 45 a pro nasledujıcı sousednıtrojuhelnık d = 0 Vystupem funkce jsou dva vektory o osmi prvcıch smera sklon pro kazdou plosku

Dalsı fazı vypoctu je zjistenı pomeru vody ktera potece do jednotlivychsmeru K vypoctu pomeru byl pouzit tento vzorec [2]

fi =sxi8sum

j=1

sxj

(6)

kde s vyznacuje sklon vypocteneho smeru konkretnı trojuhelnıkove ploskya x je promenny exponent Pokud by byl exponent zvolen 1 bude vyslednasıtrsquo obdobna jako pri pouzitı MD8 algoritmu Pri zvetsovanı exponentu xk nekonecnu bude sıtrsquo stejna jako pri pouzitı D8 metody Vychozı hodnotaexponentu byla zvolena x = 4 coz je kompromis mezi obema variantami

9

Zmena exponentu se v soucasne podobe neprojevı na vyslednem rastru je-likoz vysledek prezentuje pouze smer odtoku a ne procentualnı cast Tohotopomeru bude vyuzito az pri spojenı skriptu s 2D modelem SMODERP

V dalsı casti vypoctu je rozdelen jiz zjisteny pomer z celkoveho odtokudo dvou prıpadne pouze do jedne bunky v zavislosti na smeru odtoku dVe vysledku je vypocten vektor osmi cısel kde kazda hodnota od 0 do 1prestavuje jiz procentualnı pomer z celkoveho odtoku do kazde sousednıbunky

Pro vyslednou reprezentaci smeru odtoku na vystup byl pro kazdou bunkuvytvoren vektor obsahujıcı 1 a 0 rıkajıcı zda nastava ci nenastava odtokdo sousednı bunky Tento vektor byl preveden na celocıselnou hodnotu po-mocı funkce bool2int

def boo l 2 i n t ( x ) y = 0for i j in enumerate ( x )

i f j y += 1ltlt ireturn y

Funkce ma na vstupu vektor jedicek a nul Naprıklad pro vektor 00000111kdy voda tece na severozapad sever a severovychod se funkce chova taktoJe testovano jestli platı j = 1 tedy prvnıch pet nul vektoru funkce preskocıa pro prvnı jednicku se pricte k promenne y 20 v dalsım kroku 21 a v poslednım22 Operator vyjadruje totiz bitovy posun smerem doleva Vysledkem jena vystupu cıslo y = 1 + 2 + 4 = 7

Pro vsechny bunky byla vypoctena hodnota reprezentujıcı smer odtoku Tatohodnota se ulozı do matice a ta se nasledne prevede na vysledny rastr

f l o w d i r = arcpy NumPyArrayToRaster ( value LLcorner spix vpix rdquordquo )

value hodnota reprezentujıcı smer odtokuLLcorner souradnice leveho dolnıho rohuspix sırka pixeluvpix vyska pixelu

10

5 Vysledky

Algoritmus MDinfin byl testovan na skutecnych datech dvou pozemku u obcıNucice ve Stredoceskem kraji a Bykovice v kraji Jihomoravskem rastry jsouv prıloze 71 Oba dva rastry jsou o rozlisenı 5 metru Finalnı rastry jsouporovnavany s rastry vytvorenymi v prostredı ArcGIS nastrojem Flow Di-rection metodou D8

51 Realna data - Bykovice

Vysledne rastry Flow Direction pro uzemı Bykovice jsou uvedeny v prıloze72 Oba rastry byly pro hodnoty 202127 obarveny shodnou barvou kvulilepsı nazornosti a porovnatelnosti vysledku Rastr ktery obsahuje z celkovehopoctu 44807 bunek celkem 23655 bunek s hodnotami vysek po probehnutıalgoritmy dal nasledujıcı vysledky

FD D8 MDinfin1 3650 7372 666 9174 207 188 21 716 94 3732 791 8564 8818 1045128 9408 14983sum

23655 14983

Tabulka 1 Tabulka porovnanı obou algoritmu pro rastr Bykovic

FD je zkratka pro Flow Direction cili smer odtoku reprezentovany celocıselnouhodnotou Ostatnı hodnoty u vysledneho rastru na ktery byl pouzit algorit-mus MDinfin jsou v rozpetı 0246 V rozmezı hodnot smeru odtoku 246255se nevyskytujı zadne bunky Cas potrebny pro vykonanı skriptu byl v prıpadeD8 4 vteriny Pro algoritmus MDinfin byl cas 15 vterin

11

52 Realna data - Nucice

Vysledne rastry jsou uvedeny v prıloze 73 Opet bylo pouzito shodne obar-venı pro zakladnı smery u obou rastru Rastr Nucice obsahoval data na 82732bunkach z celkove poctu 125449 bunek Vysledky jsou pro prehlednost uve-deny v tabulce

FD D8 MDinfin1 12186 12332 12441 87034 16907 10278 9826 1642316 2516 28832 5010 241764 7788 366128 16058 25475sum

82732 55932

Tabulka 2 Tabulka porovnanı obou algoritmu pro rastr Nucic

Ostatnı hodnoty u vysledneho rastru na ktery byl pouzit algoritmusMDinfin jsou v rozpetı 0255 Cas potrebny pro vykonanı skriptu byl v prıpadeD8 6 vterin Pro algoritmus MDinfin byl cas 50 vterin

12

6 Zaver

Cılem projektu bylo vytvorit funkcnı skript obsahujıcı algoritmus pojmen-ovany MDinfin [1] ktery resı odtok do sousednıch bunek rastru Algoritmusbyl napsan v programovacım jazyce Python a testovan na realnych datechVysledky byly mırnym prekvapenım kdy zejmena hodnoty smeru 128 tedyseverovychodnıho se vyskytovaly ve vysledku velmi casto viz tabulky 1 a 2Predpokladem bylo ze se odtok rozlozı do vıce smeru a pocet bunek s hod-notami zakladnıch smeru 1248163264 a 128 bude mene nez v prıpade al-goritmu D8 K rozkladu do vıce smeru sice doslo ale pocet nekterych bunekse zakladnımi smery byl vetsı u algoritmu MDinfin

Co se tyce delky doby behu algoritmu je algoritmus MDinfin pomalejsı viz casyv kapitole 5 nez D8 z nekolika zrejmych duvodu Predevsım algoritmus D8provadı mnohem mene pocetnıch operacı z duvodu jeho mensı slozitostiviz 3 Dalsım duvodem je take rozdıl v jazyce ve kterem jsou oba algo-ritmy napsany D8 je napsan v programovacım jazyce C++ ktery na vetsıchdatech je mnohonasobne rychlejsı nez Python Prepsanım algoritmu MDinfindo jazyka C++ by mohla byt cesta k budoucımu zvysenı rychlosti pracealgoritmu

13

Reference

[1] SEIBERT Jan McGlynn BL A new triangular multiple flow di-rection algortihm for computing upslope areas from gridded digi-tal elevation models [online] [cit 13 5 2013] Dostupne ke stazenız URL lthttpciteseerxistpsueduviewdocdownloaddoi=101179977amprep=rep1amptype=pdfgt

[2] HOLMGREN Peter Multiple direction algortihms for runoff modellingin grid based elevation models An empirical evaluation [online] [cit13 5 2013] Dostupny z URL ltftpwwwlwrkthseCommonUllaMFor_Imran[1994]20holmgren20-20multiple20flow

20direction20algorithms20for20runoff20modelling20in

20grid20based20elevation20modelspdf gt

[3] ESRI ESRI WebHelp - How Flow Direction works [online] [cit13 5 2013] Dostupne z URL lthttphelparcgiscomenarcgisdesktop100helpindexhtml009z00000063000000

htmgt

[4] ESRI ESRI Webhelp - Flow Direction (Spatial Analyst) [online][cit 13 5 2013] Dostupne z URL lthttphelparcgiscomenarcgisdesktop100helpindexhtml009z00000052000000

htmgt

[5] WIKIPEDIA NumPy [online] [cit 13 5 2013] Dostupne z URLlthttpenwikipediaorgwikiNumPygt

[6] INFORMIT Working with operators [online] [cit 13 5 2013] Dos-tupne z URL lthttpwwwinformitcomarticlesarticleaspxp=2002831ampseqNum=6gt

14

7 Prılohy

71 Bykovice a Nucice vstupnı DMT rastry

Obrazek 5 DMT Bykovice

Obrazek 6 DMT Nucice

15

72 Bykovice vysledky

Obrazek 7 Flow Direction D8

Obrazek 8 Flow Direction MDinfin

16

73 Nucice vysledky

Obrazek 9 Flow Direction D8

Obrazek 10 Flow Direction MDinfin

17

Page 22: pro zac ate cn kygeo.fsv.cvut.cz/gdata/2013/pin2/e/dokumentace/... · 2013-06-05 · CESK E VYSOK E U CEN I TECHNICKE V PRAZE FAKULTA STAVEBN I OBOR GEODEZIE A KARTOGRAFIE Dokumentace

Vytvorenı gridu pote probıha budrsquo s definovanou nebo s nedefinovanoupolohou pocatecnıho mapoveho listu Pro vytvorenı gridu je pouzitafunkce GridIndexFeatures cartography

Ukazka

arcpyGridIndexFeatures_cartography(outputFeatureClassPath+rsquorsquo+grid_name

outputFeatureClassPath+rsquorsquo+output_name USEPAGEUNIT scale_str

sheet_width_str sheet_high_str str(grid_start_pnt_X)+rsquo rsquo+str(grid_start_pnt_Y))

Grid je tedy vytvoren pro jednu sekci Po vsech prubezıch cyklu jsoutakto vytvorene vrstvy gridu spojeny do jedne finalnı vrstvy V cyklujsou dale plneny nove atributove sloupce - cısla sekcı a nazvy mapovychlistu a to jak do nove (vystupnı) vrstvy gridu tak do vstupnı vrstvypovodı

3 Vytvorenı finalnıch vrstev tisk vysledku Jak bylo receno na zaverjsou spojeny jednotlive vrstvy gridu Vedle toho je vytvorena vrstvaspojenych mapovych listu po sekcıch - funkcı Dissolve - pro tvorbuprehledky Jsou vytisknuty vysledne hodnoty viz 212

22 Generalizace

Pro generalizaci byl napsan skript ktery nacıta liniovou vrstvu toku Tentoskript byl jiz psan na mıru podkladovym datum a pri nacıtanı je v nemvyuzito znalosti struktury danych podkladovych dat Skript k vrstve pripojıexternı tabulku a vytvorı atributovy sloupec kategorie Podle dat z externıtabulky pak plnı novy sloupec hodnotami 1 - 5 podle mnozstvı unasenehosedimentu Tato hodnota je pak pouzita pri vizualizaci datZajımavostı je ze pro nacıtanı musela byt tabulka indexovana viz 31

221 Uvodnı dialog

Uvodnı dialog obsahuje dva parametry

bull Input Feature Class Vstupnı liniova vrstva rıcnıch useku

bull Table Vstupnı tabulka obsahujıcı hodnoty rıcnıch splavnenin

9

222 Vysledny log

Vysledny log je k nahlednutı v prıloze 52 Obsahuje tyto informace

bull Pocet vsech rıcnıch useku

bull Pocet useku v jednotlivych kategoriıch

23 Finalnı upravy a export

Jak jiz bylo zmıneno finalnı vzhled mapoveho listu byl vytvoren manualne vLayout view a pomocı toolbaru Data Driven Pages Tento postup je casoveekonomictejsı a je jım dosazeno lepsıch vysledku dıky prehlednosti ToolbarData Driven Pages pak umoznuje vkladat dynamicke textove pole ktere seautomaticky menı s menıcım se mapovym listem Takovym polem je naprnazev mapoveho listu Stacı tedy definovat vzhled jednoho mapoveho listuv toolbaru Data Driven Pages navolit prıslusne pole - ty byly vytvorenynastrojem Grid viz 21 Dynamicky bylo potreba propojit s mapovym oknemi prehledku ktera byla vytvorena jako druhy Data Frame To se provedlo defi-novanım rozsahu podle hlavnıho mapoveho okna v Properties -iquest Data Frame-iquest Extant a definovanım Definition Query ve vlastnostech vrstvy Dalsım dy-namickym prvkem jsou oznacenı sousednıch mapovych listu a cıslo strankyNa takto sestavenou stranku s dynamickymi prvky bylo mozne pouzıt exportmapy do pdf a Atlas byl vygenerovanPrıklad dynamickeho textu pro nazev mapoveho listultdyn type=page property=PageNamegt

3 Problemy a moznosti rozsırenı

31 Pripojovanı externıch tabulek

Pri pripjovanı externıch tabulek musely byt indexovany hodnoty atribu-toveho sloupce pouziteho k parovanı To probehlo prıkazemarcpyAddIndex management (layer HydroID)Pripojenı tabulky musı probıhat k Feature layer Proto bylo nutne nejprve zFeature Class vytvorit Feature Layer1 Pote mohla byt tabulka pripojena

arcpyAddIndex_management (layer HydroID)

arcpyAddJoin_management(layer HydroID table Riverid)

1Rozdıl mezi Feature Layer a Feature Class je vysvetlen v prilozenem Tutorialu pro-gramovanı v Pythonu pro ArcGIS

10

Zde nastal problem s prıstupem k atributum Obecne nesmı nazvy atri-butovych sloupcu obsahovat mezery K hodnotam je pristupovano pres jed-notlive radky s parametrem nazev sloupce

rows= arcpySearchCursor(layer)

for row in rows

value=rownazev_sloupce

Pripojena tabulka ovsem mela v nazvech sloupcu mezeru K takto pojmeno-vanemu sloupci muselo byt pristupovano prıkazem getValue

rows= arcpySearchCursor(layer)

for row in rows

value=rowgetValue(rsquonazev tabulky$nazev sloupcersquo)

32 Doba behu tvorby gridu

Doba behu nastroje pro tvorbu gridu je znepokolive dlouha Bylo prove-deno merenı casu behu jednotlivych castı kodu funkcı time z modulu timeVysledky ukazaly ze nejdele trva vytvarenı novych vrstev Vrstva se muzevytvaret az 20 sekund Snaha o optimalizaci donutila nahradit vytvarenı vrs-tev s minimalnım ohranicujıcım obdelnıkem sekvencnım ukladanım souradniclomovych bodu polygonu z nichz pak funkcemi min a max byly tyto hodnotyzıskany Prubeh se tak urychlil o desıtky sekund (v jednom prubehu cyklupriblizne o 15 sekund) Dalsı moznostı bylo vyuzıt prostoroveho indexu datTato moznost nebyla vyuzita protoze ArcGIS pouzıva k prostorovemu in-dexovanı pravidelny grid Zıskanı MBR2 nebylo nalezeno Vyuzitı indexu byovsem problem neresilo Jak jiz bylo zmıneno nejdele trva vytvarenı novychvrstev Bohuzel funkce GridIndexFeatures cartography pro vytvorenı griduneumı pracovat se selektovanymi daty Tedy v kazdem cyklu musı byt ulozenapolygonova vrstva tvorıcı 1 sekci Pote mohla byt vytvorena vrstva tvorıcıgrid Tedy v kazdem prubehu cyklu jsou vytvareny 2 nove vrstvy Jelikozautor neprisel na zpusob jine optimalizace je nastroj pomaly Pro zadanydataset s 58mi povodımi jeho cinnost probıha desıtky minut

33 Moznosti rozsırenı

Do skriptu by se dal zakomponovat export seznamu mapovych listu pro kazdepovodı V soucasne verzi je tvoren exportem atributove tabulky

2minimum bounding rectangle - minimalnı ohranicujıcı obdelnık

11

4 Zaver

Byly vytvoreny nastroje pro automatizaci tvorby Atlasu pro mapy eroznıhosmyvu a transportu splavenin Tvorba Atlasu probıha v nekolika krocıchVizualizovane prvku jsou generalizovany Dale je vytvoren Grid ktery jepouzit jako indexova vrstva pro funkci Data Driven Pages Tou jsou vy-tvoreny jednotlive mapove listy Pomocı dynamickych prvku je pak vytvorenvzhled ktery se menı se zmenou mapoveho listu Nedostatkem je rychlostnastroje pro tvorbu gridu Presto ze je nastroj pomaly je zcela funkcnı Vprıpade potreby dalsıho rozsırenı bude ale vhodne vysledky nacıtat do novehonastroje Vzorovy vytisk vysledneho atlasu je prilozen Vzhledem k tomu zezpracovavana data jsou rozsahla a podlehajı autorskemu zakonu je vytvorenjen vzorovy vytisk z 6ti povodı Nastroje jsou psany v jazyce Python 26 proArcGIS 100 Pri praci byla vyuzıvana predevsım online napoveda ArcGISa diskuznı programatorska fora Kompletnı zdrojovy kod je ke stazenı nastrankach predmetu PIN2

12

5 Prılohy

51 Vysledny log tvorby gridu

Executing Grid

JAtlasvzorektemp_selectpovodi_vzorekgdbpokusne_povodi

70000 25 30 JAtlasvzorektemp_selectpovodi_vzorekgdbgrid70

Start Time Wed May 15 020551 2013

Running script Script2

Output folder JAtlasvzorektemp_selectpovodi_vzorekgdb

_____________________________________________________________________

count of basin polygon to process 6

_____________________________________________________________________

RUN 1

count of basins in 1 section 3

Their ID

ID 1

ID 3

ID 6

_____________________________________________________________________

count of basin polygon to process 3

_____________________________________________________________________

RUN 2

count of basins in 2 section 1

Their ID

ID 2

_____________________________________________________________________

count of basin polygon to process 2

_____________________________________________________________________

RUN 3

count of basins in 3 section 2

Their ID

ID 4

ID 5

----- RESULT -----

Number of sections 3

Number of map sheets

in section 1 13

in section 2 1

in section 3 2

Completed script Grid

Succeeded at Wed May 15 021359 2013 (Elapsed Time 8 minutes 8 seconds

13

52 Vysledny log generalizace

Executing generalization JAtlasvzorek2011_NAZV_nadrze2011_watemsedem

NAZV_tokyVT28_finshp

JAtlasvzorek2011_NAZV_nadrze2011_watemsedem28_vypocet

projectriversedimentxlsxprojectriversediment$

Start Time Wed May 15 075624 2013

Running script generalization

Category created

Total count of river parts 2879

Count of category 1 2428

Count of category 2 118

Count of category 3 68

Count of category 4 20

Count of category 5 245

Completed script generalization

Succeeded at Wed May 15 075638 2013 (Elapsed Time 1400 seconds)

14

CESKE VYSOKE UCENI TECHNICKE V PRAZE

FAKULTA STAVEBNI

OBOR GEODEZIE A KARTOGRAFIE

Dokumentace k projektu informatika 2

Stanovenı smeru odtokuna rastrovem digitalnım modelu

a implementace algoritmudo prostredı ArcGIS

BC JAN ZAJICEK

5 cervna 2013

Obsah

Obsah 1

1 Uvod 2

2 Nejbeznejsı existujıcı algoritmy 3

3 Flow Direction D8 431 Obecny princip D8 432 Popis algoritmu D8 5

4 Popis algoritmu MDinfin 641 Obecny princip MDinfin 642 Technicke resenı MDinfin 8

5 Vysledky 1151 Realna data - Bykovice 1152 Realna data - Nucice 12

6 Zaver 13

Reference 14

7 Prılohy 1571 Bykovice a Nucice vstupnı DMT rastry 1572 Bykovice vysledky 1673 Nucice vysledky 17

1

1 Uvod

Tato dokumentace byla zpracovana v ramci predmetu Projekt Informatika 2Semestralnı prace bude pouzita jako z jedna castı autorovi diplomove praces nazvem SMODERP 2D rozsırenı resıcı vztahy soustredeneho a plosnehoodtoku na danem uzemı Duvodem zpracovanı tohoto tematu byla potrebapouzitı v diplomove praci vıce nez jednoho algoritmu pro urcenı smeruodtoku v prostredı ArcGIS V soucasne dobe ArcGIS vyuzıva algoritmusD8 viz kapitola 3 jako jediny algoritmus pro vypocet smeru odtoku Tentoalgoritmus je soucastı Hydrology tools Nastroje ze skupiny Hydrology sepouzıvajı k modelovanı chovanı toku vody na povrchu Nejbeznejsı pouzıvanadigitalnı data povrchu Zeme jsou rastry digitalnı modelu terenu DMT slozenez jednotlivych bunek pixelu Tyto DMT rastry jsou pouzity jako vstupypro ruzne charakteristiky povrchu DMT rastr je souvisly povrch obvykleodkazujıcı na povrch Zeme Presnost dat je dana rozlisenım rastru taktezvzdalenostı mezi body rastru Informace o tvaru zemskeho povrchu je uzitecnapro mnoho oboru jako je napr zemedelstvı lesnictvı zivotnı prostredı neboregionalnı planovanı Tyto obory vyzadujı pochopenı jak voda tece v ramciuzemı a jak zmeny na tomto uzemı nasledne ovlivnı jejı tok

Cılem projektu bylo naprogramovat algoritmus ktery v roce 2007 publiko-vali Jan Seibert a Brian L McGlynn s nazvem MDinfin [1] Tento algoritmusje vylepsenım stavajıcıch algoritmu pro resenı urcenı smeru odtoku na ras-tru viz kapitola 2 Pro overenı spravnosti vysledku byla pouzita realnadata dvou pozemku u obcı Bykovice a Nucice Testovanı probıhalo na ras-trech o rozlisenı 5 metru Algoritmus byl naprogramovan v jazyce Pythonv prostredı NetBeans IDE 69 Pro spustenı v ArcGISu je potreba pridatdo prostredı vytvoreny toolbox upravit aktualnı cestu ke skriptu mainpya tento model nasledne spustit Vstupem modelu je rastr DMT a vystupnıadresar do ktereho se po dobehnutı modelu ulozı vysledny rastr s hodnotamismeru odtoku 1255 Algoritmus MDinfin je testovan na verzi ArcGIS 100Na nejnovejsı verzi ArcGIS 101 ktera vysla v cervnu 2012 nenı overenakompatibilita algoritmu v dusledku nefunkcnosti vıce nez jedne verze tohotoprogramu na jednom pocıtaci

2

2 Nejbeznejsı existujıcı algoritmy

Existujı tri nejbeznejsı algoritmy kazdy odlisne resıcı problematiku odtokuvody z rastru do sousednıch bunek Prvnım z nich je algoritmus D8 z roku1984 Algoritmus je podrobne popsan v nasledujıcı kapitole 3 Jelikoz odtoknastava vzdy jen do jedne sousednı bunky dochazı casto ke koncentracivodnıch sıtı a sıtrsquo odtoku pak neodpovıda skutecnosti Na druhou stranuje jeho vyhodou jeho jednoduchost a fakt ze nedochazı k nechtene disperzijako je tomu u druheho algoritmu

Druhym algoritmem je MD8 neboli multiple flow direction algorithm MD8algoritmem je voda odvadena do vsech nıze polozenych sousednıch buneka pomer vody je rozdelen procentualne podle sklonu Ve vysledku ma algo-ritmus tendenci vytvaret vıce realisticke prostorove sıte toku nez D8 tımze nedochazı k takove koncentraci vody v sıti U D8 ma mnohem vetsıvliv maly rozdıl vysek mezi sousednımi bunkami na to ktera bunka prijmeveskerou vodu Pouzitım MD8 tyto male vyskove rozdıly nemajı zdalekatakovy vliv jelikoz je mnozstvı vody rozdeleno pomerem mezi tyto bunkyNejvetsı nevyhodou tohoto algoritmu je jeho prılisna disperze na konver-gentnıch svazıch v dusledku odtoku do vsech nıze polozenych bunek

V roce 1997 byl navrzen algoritmus pojmenovany Dinfin Davidem G Tar-botonem z americke univerzity v Utahu Byl navrzen prıstup ktery je zalozenna osmi trojuhelnıkovych ploskach viz obrazek 3 Dıky tomuto postupu jsouodstraneny limitace v podobe moznosti pouze osmi smeru odtoku z bunkyProto je algoritmus pojmenovan Dinfin jelikoz muze nastat nekonecne moznostıvysledneho smeru odtoku Tento prıstup umoznuje pouze jeden smer odtokurozdeleny mezi jednu nebo dve bunky v zavislosti na smeru odtoku

Poslednı dva zmınene algoritmy MD8 a Dinfinmajı oproti D8 nevyhodu ve vetsıcasove narocnosti vypoctu V kapitole 4 je popsan algoritmus MDinfin kteryvyuzıva vyhody MD8 algoritmu za pouzitı trojuhelnıkovych plosek obdobnejako Dinfin algoritmus

3

3 Flow Direction D8

Pro pochopenı problematiky a zjevnost rozdılu mezi algoritmy je vhodneuvest jak funguje nastroj ktery pouzıva ArcGIS Zaklad algoritmu MDinfino nemz pojednava tato dokumentace je zalozen na podobnych postupech

31 Obecny princip D8

Princip nastroje urcenı smeru odtoku (Flow Direction) ktery pouzıva prostredıArcGIS je nasledujıcı Tento nastroj (tool) vezme vstupnı rastr digitalnıhomodelu terenu neboli vyskovy rastr Provede vypocet jehoz vystupem jerastr ktery v kazde bunce rastru obsahuje hodnotu urcujıcı smer odtokuz teto bunky Hodnot je osm podle osmi sousednıch bunek do kterych muzeodtekat voda viz obrazek 1 Prave podle osmi smeru odtoku se tento prıstupnazyva D8 (eight-direction approach)

Obrazek 1 Flow Direction D8 [3]

4

32 Popis algoritmu D8

Samotny vypocet algoritmu je v zasade primitivnı Pro vsechny sousednıbunky se vypocte maximalnı sklon [3]

maximalnı sklon = rozdıl vysek vzdalenost 100

Rozdıl vysek je rozdıl vysky v aktualnım bode a konkretnı sousednı bunkyVzdalenost je vypoctena mezi stredy bunek a lisı se v zavislosti na polozesousednı bunky Pro bunky sousedıcı vrcholem je hodnota velikosti pixeluprenasobena o odmocninu ze dvou Pro zbyle bunky sousedıcı hranou jevelikost vzdalenosti rovna velikosti pixelu Po nalezenı nejstrmejsıho smeruodtoku je hodnota ulozena v podobe bitove hodnoty reprezentujıcı danysmer Pred pouzitım nastroje Flow Direction se obvykle zpracuje vstupnırastr pomocı nastroje Sink Tento algoritmus zaplnı bezodtoke oblasti rastrunejnizsı hodnotou z okolı a do teto nejnizsı sousednı bunky pak posle voduPote jiz nemuze dojıt k situaci kdy vsechny sousednı bunky k dane buncemajı vyssı hodnoty vysek a nedochazelo by tedy k odtokuVysledny rastr nemusı obsahovat pouze bunky s hodnotami 202127 [4]Jestlize nastane situace kdy ma vıce sousednıch bunek nejnizsı hodnotuvysek pak je vysledna hodnota souctem vsech smeru Napr hodnota maximalnıhosklonu bude stejna pro sousednı bunku vlevo a nahore odtok tedy budesmerem na zapad (hodnota = 16) a na sever (hodnota = 64) vysledna hod-nota bude souctem 16 a 64 tedy 84

5

4 Popis algoritmu MDinfin

41 Obecny princip MDinfinObecny postup je prevzat z [1] Stejne jako v prıpade algoritmu Dinfin bylyzavedeny trojuhelnıkove plosky pro vypocet lokalnıho sklonu a smeru pro kazdoutrojuhelnıkovou plosku Okolo stredoveho boduM bylo vytvoreno osm trojuhelnıkuviz obrazek 3 Kazdy se zbyvajıcımi dvema vrcholy P1 P2 ve dvou sousedıcıchbunkach Pro kazdy z techto trojuhelnıku je vypocten smer nejvetsıho sklonuPokud oznacıme vysky bodu M P1 P2 jako hM hP1 hP2 rozdıly vysek sevypoctou takto

z1 = hP1 minus hM z2 = hP2 minus hM (1)

Obdobne se vypoctou rozdıly v x-ovych a y-ovych souradnicıch Po vypocturozdılu jednotlivych souradnic je vypocten normalovy vektor

n =

nx

ny

nz

=

z1y2 minus z2y1z1x2 minus z2x1y1x2 minus y2x1

(2)

Smer odtoku d a sklon s na trojuhelnıkove plose se vypocte pomocı rovnice3 Hodnota nula pro d oznacuje smer osy y a hodnota 3π2 oznacuje smerosy x

d =

0 nx = 0 ny ge 0

π nx = 0 ny lt 0

π2minus arctan(

ny

nx

) nx gt 0

3π2minus arctan(

ny

nx

) nx lt 0

(3)

s = minus tan

(arccos

(nzradic

n2x + n2

y + n2z

))(4)

Jestlize nejvetsı sklon od bodu M je mimo rozpetı 0-45 (π4 radian) jepouzit sklon strmejsı k jednomu z bodu P1 P2 a zaroven i sklon je spoctenk tomuto bodu V prıpade ze oba sousednı body jsou vyse polozeny nez bodM smer nenı pro tento trojuhelnık uvazovan Po spoctenı vsech osmi smerua sklonu pro jednotlive plosky jsou tyto smery povazovany za lokalne ne-jstrmejsı pro kazdy trojuhelnık v rozsahu 45 Smery vedoucı prımo do bodu

6

P1 nebo P2 tedy ty kde d = 0 nebo d = π4 jsou uvazovany pouze vprıpade kdy obe vedlejsı sousednı bunky majı smer k bodu P1 nebo P2Tato situace je znazornena na obrazku 2

Obrazek 2 Ukazka urcenı smeru odtoku z bunky [1]

Prvnı prıpad je smer mırıcı mezi bunky 5 a 6 Druhy prıpad je smer kteryvede prımo do bunky 3 Tato situace nastane jestlize pro trojuhelnık M43vyjde lokalnı smer d = π4 a pro trojuhelnık M32 smer vyjde d = 0Pote co je smer odtoku pro bunku vypocten je celkovy odtok rozdelendo vsech vyslednych smeru na zaklade sklonu Resenı teto problematiky jevıce popsano v sekci 42 Pro smery mırıcı mezi body P1 a P2 je odtokrozdelen do dvou bunek na zaklade nevejtsıho sklonu Pomer odtoku do buneks body P1 a P2 bude v tomto poradı α245 a α145

Obrazek 3 Trojuhelnıkove plosky [1]

7

42 Technicke resenı MDinfinVyse jiz bylo zmıneno ze algoritmus je napsan v jazyce Python Algoritmusje rozdelen do dvou skriptu Prvnı z nich obsahuje funkce a druhy je hlavnıVstupem do modelu je rastr digitalnıho modelu terenu a vystupnı adresardo ktereho se ulozı finalnı rastr smeru odtoku viz obr 4 Po nactenı rastruze vstupnıch parametru je tento rastr preveden na matici NumPy pomocıfunkce

arcpy RasterToNumPyArray ( InputRaster )

NumPy [5] je rozsırenı programovacıho jazyka Python je to balıcek uzıvanypro vedecke vypocty Umoznuje podporu velkych multi-dimenzionalnıch polıa matic spolu s velkou knihovnou matematickych funkcı pro praci s temitopoli

Algoritmus cyklem projızdı vsechny prvky matice a u tech ktere majı hod-notu ruznou od NoData nalezne okolı Hledanı okolı bunky provadı funkceneighbors ta je definovana takto

def ne ighbors ( i j array x y ) return nb1 nb2 nb3 nb4 nb5 nb6 nb7 nb8

Vstupem funkce je pozice v matici dale cela matice a jejı rozmery Funkceneighbors vypocıta hodnoty vysek sousednıch osmi bunek a vratı je na vystup

Obrazek 4 Dialogove okno nastroje MDinfin

Vystup z funkce neighbors slouzı jako jeden z vstupnıch parametru pro dalsıfunkci

8

Funkce byla pojmenovana dir slope jelikoz jejım vystupem je smer odtokua sklon tohoto smeru

def d i r s l o p e ( pointM nbrs vpix sp ix ) return d i r e c t i o n s l ope

Pro kazdy trojuhelnık byla spoctena hodnota d viz vzorec 3 Hodnota s bylapo spatnych a nelogickych vysledcıch pocıtana podle jineho vzorce ktery jizdaval spravne vysledky

s0 =

radicz212y21

+z22y22

(5)

Vzorec se lisı pro kazdy trojuhelnıcek uvedeny je pro vypocet sklonu kdy sousednıbunka je severozapadnı a severnı Tımto postupem bylo zbytecne pocıtatz-tovou slozku vekotoru n vzorec 2 Byly osetreny prıpady kdy sousednıbunky aktualnıho pocıtaneho trojuhelnıku jsou obe vyse polozene nebo obemimo rastr (NoData) Dalsı prıpad nastane jestlize je jeden bod vne rastra druhy v rastru lezı Smer je potom urcen prımo do toho bodu ktery nalezırastru Taktez i sklon je pocıtan pouze mezi tımto bodem a bodem M Lokalnı smer d v kazde plosce po vypoctenı nesmı prekrocit 45 V situacize tuto hodnotu prekrocı je smeru prirazena hodnota 0 nebo 45 v zavislostina vzajemnem porovnanı vysek bodu v trojuhelnıku Takto jsou zpracovanyvsechny plosky a je zjisteno zda-li do kazdeho trojuhelnıku nastava smerodtoku nebo ne Na konci funkce dir slope se kontroluje prıpad kdy smersousednıch trojuhelnıku odkazuje presne do stejneho bodu tedy hodnotysmeru musı byt pro prvnı trojuhelnık d = 45 a pro nasledujıcı sousednıtrojuhelnık d = 0 Vystupem funkce jsou dva vektory o osmi prvcıch smera sklon pro kazdou plosku

Dalsı fazı vypoctu je zjistenı pomeru vody ktera potece do jednotlivychsmeru K vypoctu pomeru byl pouzit tento vzorec [2]

fi =sxi8sum

j=1

sxj

(6)

kde s vyznacuje sklon vypocteneho smeru konkretnı trojuhelnıkove ploskya x je promenny exponent Pokud by byl exponent zvolen 1 bude vyslednasıtrsquo obdobna jako pri pouzitı MD8 algoritmu Pri zvetsovanı exponentu xk nekonecnu bude sıtrsquo stejna jako pri pouzitı D8 metody Vychozı hodnotaexponentu byla zvolena x = 4 coz je kompromis mezi obema variantami

9

Zmena exponentu se v soucasne podobe neprojevı na vyslednem rastru je-likoz vysledek prezentuje pouze smer odtoku a ne procentualnı cast Tohotopomeru bude vyuzito az pri spojenı skriptu s 2D modelem SMODERP

V dalsı casti vypoctu je rozdelen jiz zjisteny pomer z celkoveho odtokudo dvou prıpadne pouze do jedne bunky v zavislosti na smeru odtoku dVe vysledku je vypocten vektor osmi cısel kde kazda hodnota od 0 do 1prestavuje jiz procentualnı pomer z celkoveho odtoku do kazde sousednıbunky

Pro vyslednou reprezentaci smeru odtoku na vystup byl pro kazdou bunkuvytvoren vektor obsahujıcı 1 a 0 rıkajıcı zda nastava ci nenastava odtokdo sousednı bunky Tento vektor byl preveden na celocıselnou hodnotu po-mocı funkce bool2int

def boo l 2 i n t ( x ) y = 0for i j in enumerate ( x )

i f j y += 1ltlt ireturn y

Funkce ma na vstupu vektor jedicek a nul Naprıklad pro vektor 00000111kdy voda tece na severozapad sever a severovychod se funkce chova taktoJe testovano jestli platı j = 1 tedy prvnıch pet nul vektoru funkce preskocıa pro prvnı jednicku se pricte k promenne y 20 v dalsım kroku 21 a v poslednım22 Operator vyjadruje totiz bitovy posun smerem doleva Vysledkem jena vystupu cıslo y = 1 + 2 + 4 = 7

Pro vsechny bunky byla vypoctena hodnota reprezentujıcı smer odtoku Tatohodnota se ulozı do matice a ta se nasledne prevede na vysledny rastr

f l o w d i r = arcpy NumPyArrayToRaster ( value LLcorner spix vpix rdquordquo )

value hodnota reprezentujıcı smer odtokuLLcorner souradnice leveho dolnıho rohuspix sırka pixeluvpix vyska pixelu

10

5 Vysledky

Algoritmus MDinfin byl testovan na skutecnych datech dvou pozemku u obcıNucice ve Stredoceskem kraji a Bykovice v kraji Jihomoravskem rastry jsouv prıloze 71 Oba dva rastry jsou o rozlisenı 5 metru Finalnı rastry jsouporovnavany s rastry vytvorenymi v prostredı ArcGIS nastrojem Flow Di-rection metodou D8

51 Realna data - Bykovice

Vysledne rastry Flow Direction pro uzemı Bykovice jsou uvedeny v prıloze72 Oba rastry byly pro hodnoty 202127 obarveny shodnou barvou kvulilepsı nazornosti a porovnatelnosti vysledku Rastr ktery obsahuje z celkovehopoctu 44807 bunek celkem 23655 bunek s hodnotami vysek po probehnutıalgoritmy dal nasledujıcı vysledky

FD D8 MDinfin1 3650 7372 666 9174 207 188 21 716 94 3732 791 8564 8818 1045128 9408 14983sum

23655 14983

Tabulka 1 Tabulka porovnanı obou algoritmu pro rastr Bykovic

FD je zkratka pro Flow Direction cili smer odtoku reprezentovany celocıselnouhodnotou Ostatnı hodnoty u vysledneho rastru na ktery byl pouzit algorit-mus MDinfin jsou v rozpetı 0246 V rozmezı hodnot smeru odtoku 246255se nevyskytujı zadne bunky Cas potrebny pro vykonanı skriptu byl v prıpadeD8 4 vteriny Pro algoritmus MDinfin byl cas 15 vterin

11

52 Realna data - Nucice

Vysledne rastry jsou uvedeny v prıloze 73 Opet bylo pouzito shodne obar-venı pro zakladnı smery u obou rastru Rastr Nucice obsahoval data na 82732bunkach z celkove poctu 125449 bunek Vysledky jsou pro prehlednost uve-deny v tabulce

FD D8 MDinfin1 12186 12332 12441 87034 16907 10278 9826 1642316 2516 28832 5010 241764 7788 366128 16058 25475sum

82732 55932

Tabulka 2 Tabulka porovnanı obou algoritmu pro rastr Nucic

Ostatnı hodnoty u vysledneho rastru na ktery byl pouzit algoritmusMDinfin jsou v rozpetı 0255 Cas potrebny pro vykonanı skriptu byl v prıpadeD8 6 vterin Pro algoritmus MDinfin byl cas 50 vterin

12

6 Zaver

Cılem projektu bylo vytvorit funkcnı skript obsahujıcı algoritmus pojmen-ovany MDinfin [1] ktery resı odtok do sousednıch bunek rastru Algoritmusbyl napsan v programovacım jazyce Python a testovan na realnych datechVysledky byly mırnym prekvapenım kdy zejmena hodnoty smeru 128 tedyseverovychodnıho se vyskytovaly ve vysledku velmi casto viz tabulky 1 a 2Predpokladem bylo ze se odtok rozlozı do vıce smeru a pocet bunek s hod-notami zakladnıch smeru 1248163264 a 128 bude mene nez v prıpade al-goritmu D8 K rozkladu do vıce smeru sice doslo ale pocet nekterych bunekse zakladnımi smery byl vetsı u algoritmu MDinfin

Co se tyce delky doby behu algoritmu je algoritmus MDinfin pomalejsı viz casyv kapitole 5 nez D8 z nekolika zrejmych duvodu Predevsım algoritmus D8provadı mnohem mene pocetnıch operacı z duvodu jeho mensı slozitostiviz 3 Dalsım duvodem je take rozdıl v jazyce ve kterem jsou oba algo-ritmy napsany D8 je napsan v programovacım jazyce C++ ktery na vetsıchdatech je mnohonasobne rychlejsı nez Python Prepsanım algoritmu MDinfindo jazyka C++ by mohla byt cesta k budoucımu zvysenı rychlosti pracealgoritmu

13

Reference

[1] SEIBERT Jan McGlynn BL A new triangular multiple flow di-rection algortihm for computing upslope areas from gridded digi-tal elevation models [online] [cit 13 5 2013] Dostupne ke stazenız URL lthttpciteseerxistpsueduviewdocdownloaddoi=101179977amprep=rep1amptype=pdfgt

[2] HOLMGREN Peter Multiple direction algortihms for runoff modellingin grid based elevation models An empirical evaluation [online] [cit13 5 2013] Dostupny z URL ltftpwwwlwrkthseCommonUllaMFor_Imran[1994]20holmgren20-20multiple20flow

20direction20algorithms20for20runoff20modelling20in

20grid20based20elevation20modelspdf gt

[3] ESRI ESRI WebHelp - How Flow Direction works [online] [cit13 5 2013] Dostupne z URL lthttphelparcgiscomenarcgisdesktop100helpindexhtml009z00000063000000

htmgt

[4] ESRI ESRI Webhelp - Flow Direction (Spatial Analyst) [online][cit 13 5 2013] Dostupne z URL lthttphelparcgiscomenarcgisdesktop100helpindexhtml009z00000052000000

htmgt

[5] WIKIPEDIA NumPy [online] [cit 13 5 2013] Dostupne z URLlthttpenwikipediaorgwikiNumPygt

[6] INFORMIT Working with operators [online] [cit 13 5 2013] Dos-tupne z URL lthttpwwwinformitcomarticlesarticleaspxp=2002831ampseqNum=6gt

14

7 Prılohy

71 Bykovice a Nucice vstupnı DMT rastry

Obrazek 5 DMT Bykovice

Obrazek 6 DMT Nucice

15

72 Bykovice vysledky

Obrazek 7 Flow Direction D8

Obrazek 8 Flow Direction MDinfin

16

73 Nucice vysledky

Obrazek 9 Flow Direction D8

Obrazek 10 Flow Direction MDinfin

17

Page 23: pro zac ate cn kygeo.fsv.cvut.cz/gdata/2013/pin2/e/dokumentace/... · 2013-06-05 · CESK E VYSOK E U CEN I TECHNICKE V PRAZE FAKULTA STAVEBN I OBOR GEODEZIE A KARTOGRAFIE Dokumentace

222 Vysledny log

Vysledny log je k nahlednutı v prıloze 52 Obsahuje tyto informace

bull Pocet vsech rıcnıch useku

bull Pocet useku v jednotlivych kategoriıch

23 Finalnı upravy a export

Jak jiz bylo zmıneno finalnı vzhled mapoveho listu byl vytvoren manualne vLayout view a pomocı toolbaru Data Driven Pages Tento postup je casoveekonomictejsı a je jım dosazeno lepsıch vysledku dıky prehlednosti ToolbarData Driven Pages pak umoznuje vkladat dynamicke textove pole ktere seautomaticky menı s menıcım se mapovym listem Takovym polem je naprnazev mapoveho listu Stacı tedy definovat vzhled jednoho mapoveho listuv toolbaru Data Driven Pages navolit prıslusne pole - ty byly vytvorenynastrojem Grid viz 21 Dynamicky bylo potreba propojit s mapovym oknemi prehledku ktera byla vytvorena jako druhy Data Frame To se provedlo defi-novanım rozsahu podle hlavnıho mapoveho okna v Properties -iquest Data Frame-iquest Extant a definovanım Definition Query ve vlastnostech vrstvy Dalsım dy-namickym prvkem jsou oznacenı sousednıch mapovych listu a cıslo strankyNa takto sestavenou stranku s dynamickymi prvky bylo mozne pouzıt exportmapy do pdf a Atlas byl vygenerovanPrıklad dynamickeho textu pro nazev mapoveho listultdyn type=page property=PageNamegt

3 Problemy a moznosti rozsırenı

31 Pripojovanı externıch tabulek

Pri pripjovanı externıch tabulek musely byt indexovany hodnoty atribu-toveho sloupce pouziteho k parovanı To probehlo prıkazemarcpyAddIndex management (layer HydroID)Pripojenı tabulky musı probıhat k Feature layer Proto bylo nutne nejprve zFeature Class vytvorit Feature Layer1 Pote mohla byt tabulka pripojena

arcpyAddIndex_management (layer HydroID)

arcpyAddJoin_management(layer HydroID table Riverid)

1Rozdıl mezi Feature Layer a Feature Class je vysvetlen v prilozenem Tutorialu pro-gramovanı v Pythonu pro ArcGIS

10

Zde nastal problem s prıstupem k atributum Obecne nesmı nazvy atri-butovych sloupcu obsahovat mezery K hodnotam je pristupovano pres jed-notlive radky s parametrem nazev sloupce

rows= arcpySearchCursor(layer)

for row in rows

value=rownazev_sloupce

Pripojena tabulka ovsem mela v nazvech sloupcu mezeru K takto pojmeno-vanemu sloupci muselo byt pristupovano prıkazem getValue

rows= arcpySearchCursor(layer)

for row in rows

value=rowgetValue(rsquonazev tabulky$nazev sloupcersquo)

32 Doba behu tvorby gridu

Doba behu nastroje pro tvorbu gridu je znepokolive dlouha Bylo prove-deno merenı casu behu jednotlivych castı kodu funkcı time z modulu timeVysledky ukazaly ze nejdele trva vytvarenı novych vrstev Vrstva se muzevytvaret az 20 sekund Snaha o optimalizaci donutila nahradit vytvarenı vrs-tev s minimalnım ohranicujıcım obdelnıkem sekvencnım ukladanım souradniclomovych bodu polygonu z nichz pak funkcemi min a max byly tyto hodnotyzıskany Prubeh se tak urychlil o desıtky sekund (v jednom prubehu cyklupriblizne o 15 sekund) Dalsı moznostı bylo vyuzıt prostoroveho indexu datTato moznost nebyla vyuzita protoze ArcGIS pouzıva k prostorovemu in-dexovanı pravidelny grid Zıskanı MBR2 nebylo nalezeno Vyuzitı indexu byovsem problem neresilo Jak jiz bylo zmıneno nejdele trva vytvarenı novychvrstev Bohuzel funkce GridIndexFeatures cartography pro vytvorenı griduneumı pracovat se selektovanymi daty Tedy v kazdem cyklu musı byt ulozenapolygonova vrstva tvorıcı 1 sekci Pote mohla byt vytvorena vrstva tvorıcıgrid Tedy v kazdem prubehu cyklu jsou vytvareny 2 nove vrstvy Jelikozautor neprisel na zpusob jine optimalizace je nastroj pomaly Pro zadanydataset s 58mi povodımi jeho cinnost probıha desıtky minut

33 Moznosti rozsırenı

Do skriptu by se dal zakomponovat export seznamu mapovych listu pro kazdepovodı V soucasne verzi je tvoren exportem atributove tabulky

2minimum bounding rectangle - minimalnı ohranicujıcı obdelnık

11

4 Zaver

Byly vytvoreny nastroje pro automatizaci tvorby Atlasu pro mapy eroznıhosmyvu a transportu splavenin Tvorba Atlasu probıha v nekolika krocıchVizualizovane prvku jsou generalizovany Dale je vytvoren Grid ktery jepouzit jako indexova vrstva pro funkci Data Driven Pages Tou jsou vy-tvoreny jednotlive mapove listy Pomocı dynamickych prvku je pak vytvorenvzhled ktery se menı se zmenou mapoveho listu Nedostatkem je rychlostnastroje pro tvorbu gridu Presto ze je nastroj pomaly je zcela funkcnı Vprıpade potreby dalsıho rozsırenı bude ale vhodne vysledky nacıtat do novehonastroje Vzorovy vytisk vysledneho atlasu je prilozen Vzhledem k tomu zezpracovavana data jsou rozsahla a podlehajı autorskemu zakonu je vytvorenjen vzorovy vytisk z 6ti povodı Nastroje jsou psany v jazyce Python 26 proArcGIS 100 Pri praci byla vyuzıvana predevsım online napoveda ArcGISa diskuznı programatorska fora Kompletnı zdrojovy kod je ke stazenı nastrankach predmetu PIN2

12

5 Prılohy

51 Vysledny log tvorby gridu

Executing Grid

JAtlasvzorektemp_selectpovodi_vzorekgdbpokusne_povodi

70000 25 30 JAtlasvzorektemp_selectpovodi_vzorekgdbgrid70

Start Time Wed May 15 020551 2013

Running script Script2

Output folder JAtlasvzorektemp_selectpovodi_vzorekgdb

_____________________________________________________________________

count of basin polygon to process 6

_____________________________________________________________________

RUN 1

count of basins in 1 section 3

Their ID

ID 1

ID 3

ID 6

_____________________________________________________________________

count of basin polygon to process 3

_____________________________________________________________________

RUN 2

count of basins in 2 section 1

Their ID

ID 2

_____________________________________________________________________

count of basin polygon to process 2

_____________________________________________________________________

RUN 3

count of basins in 3 section 2

Their ID

ID 4

ID 5

----- RESULT -----

Number of sections 3

Number of map sheets

in section 1 13

in section 2 1

in section 3 2

Completed script Grid

Succeeded at Wed May 15 021359 2013 (Elapsed Time 8 minutes 8 seconds

13

52 Vysledny log generalizace

Executing generalization JAtlasvzorek2011_NAZV_nadrze2011_watemsedem

NAZV_tokyVT28_finshp

JAtlasvzorek2011_NAZV_nadrze2011_watemsedem28_vypocet

projectriversedimentxlsxprojectriversediment$

Start Time Wed May 15 075624 2013

Running script generalization

Category created

Total count of river parts 2879

Count of category 1 2428

Count of category 2 118

Count of category 3 68

Count of category 4 20

Count of category 5 245

Completed script generalization

Succeeded at Wed May 15 075638 2013 (Elapsed Time 1400 seconds)

14

CESKE VYSOKE UCENI TECHNICKE V PRAZE

FAKULTA STAVEBNI

OBOR GEODEZIE A KARTOGRAFIE

Dokumentace k projektu informatika 2

Stanovenı smeru odtokuna rastrovem digitalnım modelu

a implementace algoritmudo prostredı ArcGIS

BC JAN ZAJICEK

5 cervna 2013

Obsah

Obsah 1

1 Uvod 2

2 Nejbeznejsı existujıcı algoritmy 3

3 Flow Direction D8 431 Obecny princip D8 432 Popis algoritmu D8 5

4 Popis algoritmu MDinfin 641 Obecny princip MDinfin 642 Technicke resenı MDinfin 8

5 Vysledky 1151 Realna data - Bykovice 1152 Realna data - Nucice 12

6 Zaver 13

Reference 14

7 Prılohy 1571 Bykovice a Nucice vstupnı DMT rastry 1572 Bykovice vysledky 1673 Nucice vysledky 17

1

1 Uvod

Tato dokumentace byla zpracovana v ramci predmetu Projekt Informatika 2Semestralnı prace bude pouzita jako z jedna castı autorovi diplomove praces nazvem SMODERP 2D rozsırenı resıcı vztahy soustredeneho a plosnehoodtoku na danem uzemı Duvodem zpracovanı tohoto tematu byla potrebapouzitı v diplomove praci vıce nez jednoho algoritmu pro urcenı smeruodtoku v prostredı ArcGIS V soucasne dobe ArcGIS vyuzıva algoritmusD8 viz kapitola 3 jako jediny algoritmus pro vypocet smeru odtoku Tentoalgoritmus je soucastı Hydrology tools Nastroje ze skupiny Hydrology sepouzıvajı k modelovanı chovanı toku vody na povrchu Nejbeznejsı pouzıvanadigitalnı data povrchu Zeme jsou rastry digitalnı modelu terenu DMT slozenez jednotlivych bunek pixelu Tyto DMT rastry jsou pouzity jako vstupypro ruzne charakteristiky povrchu DMT rastr je souvisly povrch obvykleodkazujıcı na povrch Zeme Presnost dat je dana rozlisenım rastru taktezvzdalenostı mezi body rastru Informace o tvaru zemskeho povrchu je uzitecnapro mnoho oboru jako je napr zemedelstvı lesnictvı zivotnı prostredı neboregionalnı planovanı Tyto obory vyzadujı pochopenı jak voda tece v ramciuzemı a jak zmeny na tomto uzemı nasledne ovlivnı jejı tok

Cılem projektu bylo naprogramovat algoritmus ktery v roce 2007 publiko-vali Jan Seibert a Brian L McGlynn s nazvem MDinfin [1] Tento algoritmusje vylepsenım stavajıcıch algoritmu pro resenı urcenı smeru odtoku na ras-tru viz kapitola 2 Pro overenı spravnosti vysledku byla pouzita realnadata dvou pozemku u obcı Bykovice a Nucice Testovanı probıhalo na ras-trech o rozlisenı 5 metru Algoritmus byl naprogramovan v jazyce Pythonv prostredı NetBeans IDE 69 Pro spustenı v ArcGISu je potreba pridatdo prostredı vytvoreny toolbox upravit aktualnı cestu ke skriptu mainpya tento model nasledne spustit Vstupem modelu je rastr DMT a vystupnıadresar do ktereho se po dobehnutı modelu ulozı vysledny rastr s hodnotamismeru odtoku 1255 Algoritmus MDinfin je testovan na verzi ArcGIS 100Na nejnovejsı verzi ArcGIS 101 ktera vysla v cervnu 2012 nenı overenakompatibilita algoritmu v dusledku nefunkcnosti vıce nez jedne verze tohotoprogramu na jednom pocıtaci

2

2 Nejbeznejsı existujıcı algoritmy

Existujı tri nejbeznejsı algoritmy kazdy odlisne resıcı problematiku odtokuvody z rastru do sousednıch bunek Prvnım z nich je algoritmus D8 z roku1984 Algoritmus je podrobne popsan v nasledujıcı kapitole 3 Jelikoz odtoknastava vzdy jen do jedne sousednı bunky dochazı casto ke koncentracivodnıch sıtı a sıtrsquo odtoku pak neodpovıda skutecnosti Na druhou stranuje jeho vyhodou jeho jednoduchost a fakt ze nedochazı k nechtene disperzijako je tomu u druheho algoritmu

Druhym algoritmem je MD8 neboli multiple flow direction algorithm MD8algoritmem je voda odvadena do vsech nıze polozenych sousednıch buneka pomer vody je rozdelen procentualne podle sklonu Ve vysledku ma algo-ritmus tendenci vytvaret vıce realisticke prostorove sıte toku nez D8 tımze nedochazı k takove koncentraci vody v sıti U D8 ma mnohem vetsıvliv maly rozdıl vysek mezi sousednımi bunkami na to ktera bunka prijmeveskerou vodu Pouzitım MD8 tyto male vyskove rozdıly nemajı zdalekatakovy vliv jelikoz je mnozstvı vody rozdeleno pomerem mezi tyto bunkyNejvetsı nevyhodou tohoto algoritmu je jeho prılisna disperze na konver-gentnıch svazıch v dusledku odtoku do vsech nıze polozenych bunek

V roce 1997 byl navrzen algoritmus pojmenovany Dinfin Davidem G Tar-botonem z americke univerzity v Utahu Byl navrzen prıstup ktery je zalozenna osmi trojuhelnıkovych ploskach viz obrazek 3 Dıky tomuto postupu jsouodstraneny limitace v podobe moznosti pouze osmi smeru odtoku z bunkyProto je algoritmus pojmenovan Dinfin jelikoz muze nastat nekonecne moznostıvysledneho smeru odtoku Tento prıstup umoznuje pouze jeden smer odtokurozdeleny mezi jednu nebo dve bunky v zavislosti na smeru odtoku

Poslednı dva zmınene algoritmy MD8 a Dinfinmajı oproti D8 nevyhodu ve vetsıcasove narocnosti vypoctu V kapitole 4 je popsan algoritmus MDinfin kteryvyuzıva vyhody MD8 algoritmu za pouzitı trojuhelnıkovych plosek obdobnejako Dinfin algoritmus

3

3 Flow Direction D8

Pro pochopenı problematiky a zjevnost rozdılu mezi algoritmy je vhodneuvest jak funguje nastroj ktery pouzıva ArcGIS Zaklad algoritmu MDinfino nemz pojednava tato dokumentace je zalozen na podobnych postupech

31 Obecny princip D8

Princip nastroje urcenı smeru odtoku (Flow Direction) ktery pouzıva prostredıArcGIS je nasledujıcı Tento nastroj (tool) vezme vstupnı rastr digitalnıhomodelu terenu neboli vyskovy rastr Provede vypocet jehoz vystupem jerastr ktery v kazde bunce rastru obsahuje hodnotu urcujıcı smer odtokuz teto bunky Hodnot je osm podle osmi sousednıch bunek do kterych muzeodtekat voda viz obrazek 1 Prave podle osmi smeru odtoku se tento prıstupnazyva D8 (eight-direction approach)

Obrazek 1 Flow Direction D8 [3]

4

32 Popis algoritmu D8

Samotny vypocet algoritmu je v zasade primitivnı Pro vsechny sousednıbunky se vypocte maximalnı sklon [3]

maximalnı sklon = rozdıl vysek vzdalenost 100

Rozdıl vysek je rozdıl vysky v aktualnım bode a konkretnı sousednı bunkyVzdalenost je vypoctena mezi stredy bunek a lisı se v zavislosti na polozesousednı bunky Pro bunky sousedıcı vrcholem je hodnota velikosti pixeluprenasobena o odmocninu ze dvou Pro zbyle bunky sousedıcı hranou jevelikost vzdalenosti rovna velikosti pixelu Po nalezenı nejstrmejsıho smeruodtoku je hodnota ulozena v podobe bitove hodnoty reprezentujıcı danysmer Pred pouzitım nastroje Flow Direction se obvykle zpracuje vstupnırastr pomocı nastroje Sink Tento algoritmus zaplnı bezodtoke oblasti rastrunejnizsı hodnotou z okolı a do teto nejnizsı sousednı bunky pak posle voduPote jiz nemuze dojıt k situaci kdy vsechny sousednı bunky k dane buncemajı vyssı hodnoty vysek a nedochazelo by tedy k odtokuVysledny rastr nemusı obsahovat pouze bunky s hodnotami 202127 [4]Jestlize nastane situace kdy ma vıce sousednıch bunek nejnizsı hodnotuvysek pak je vysledna hodnota souctem vsech smeru Napr hodnota maximalnıhosklonu bude stejna pro sousednı bunku vlevo a nahore odtok tedy budesmerem na zapad (hodnota = 16) a na sever (hodnota = 64) vysledna hod-nota bude souctem 16 a 64 tedy 84

5

4 Popis algoritmu MDinfin

41 Obecny princip MDinfinObecny postup je prevzat z [1] Stejne jako v prıpade algoritmu Dinfin bylyzavedeny trojuhelnıkove plosky pro vypocet lokalnıho sklonu a smeru pro kazdoutrojuhelnıkovou plosku Okolo stredoveho boduM bylo vytvoreno osm trojuhelnıkuviz obrazek 3 Kazdy se zbyvajıcımi dvema vrcholy P1 P2 ve dvou sousedıcıchbunkach Pro kazdy z techto trojuhelnıku je vypocten smer nejvetsıho sklonuPokud oznacıme vysky bodu M P1 P2 jako hM hP1 hP2 rozdıly vysek sevypoctou takto

z1 = hP1 minus hM z2 = hP2 minus hM (1)

Obdobne se vypoctou rozdıly v x-ovych a y-ovych souradnicıch Po vypocturozdılu jednotlivych souradnic je vypocten normalovy vektor

n =

nx

ny

nz

=

z1y2 minus z2y1z1x2 minus z2x1y1x2 minus y2x1

(2)

Smer odtoku d a sklon s na trojuhelnıkove plose se vypocte pomocı rovnice3 Hodnota nula pro d oznacuje smer osy y a hodnota 3π2 oznacuje smerosy x

d =

0 nx = 0 ny ge 0

π nx = 0 ny lt 0

π2minus arctan(

ny

nx

) nx gt 0

3π2minus arctan(

ny

nx

) nx lt 0

(3)

s = minus tan

(arccos

(nzradic

n2x + n2

y + n2z

))(4)

Jestlize nejvetsı sklon od bodu M je mimo rozpetı 0-45 (π4 radian) jepouzit sklon strmejsı k jednomu z bodu P1 P2 a zaroven i sklon je spoctenk tomuto bodu V prıpade ze oba sousednı body jsou vyse polozeny nez bodM smer nenı pro tento trojuhelnık uvazovan Po spoctenı vsech osmi smerua sklonu pro jednotlive plosky jsou tyto smery povazovany za lokalne ne-jstrmejsı pro kazdy trojuhelnık v rozsahu 45 Smery vedoucı prımo do bodu

6

P1 nebo P2 tedy ty kde d = 0 nebo d = π4 jsou uvazovany pouze vprıpade kdy obe vedlejsı sousednı bunky majı smer k bodu P1 nebo P2Tato situace je znazornena na obrazku 2

Obrazek 2 Ukazka urcenı smeru odtoku z bunky [1]

Prvnı prıpad je smer mırıcı mezi bunky 5 a 6 Druhy prıpad je smer kteryvede prımo do bunky 3 Tato situace nastane jestlize pro trojuhelnık M43vyjde lokalnı smer d = π4 a pro trojuhelnık M32 smer vyjde d = 0Pote co je smer odtoku pro bunku vypocten je celkovy odtok rozdelendo vsech vyslednych smeru na zaklade sklonu Resenı teto problematiky jevıce popsano v sekci 42 Pro smery mırıcı mezi body P1 a P2 je odtokrozdelen do dvou bunek na zaklade nevejtsıho sklonu Pomer odtoku do buneks body P1 a P2 bude v tomto poradı α245 a α145

Obrazek 3 Trojuhelnıkove plosky [1]

7

42 Technicke resenı MDinfinVyse jiz bylo zmıneno ze algoritmus je napsan v jazyce Python Algoritmusje rozdelen do dvou skriptu Prvnı z nich obsahuje funkce a druhy je hlavnıVstupem do modelu je rastr digitalnıho modelu terenu a vystupnı adresardo ktereho se ulozı finalnı rastr smeru odtoku viz obr 4 Po nactenı rastruze vstupnıch parametru je tento rastr preveden na matici NumPy pomocıfunkce

arcpy RasterToNumPyArray ( InputRaster )

NumPy [5] je rozsırenı programovacıho jazyka Python je to balıcek uzıvanypro vedecke vypocty Umoznuje podporu velkych multi-dimenzionalnıch polıa matic spolu s velkou knihovnou matematickych funkcı pro praci s temitopoli

Algoritmus cyklem projızdı vsechny prvky matice a u tech ktere majı hod-notu ruznou od NoData nalezne okolı Hledanı okolı bunky provadı funkceneighbors ta je definovana takto

def ne ighbors ( i j array x y ) return nb1 nb2 nb3 nb4 nb5 nb6 nb7 nb8

Vstupem funkce je pozice v matici dale cela matice a jejı rozmery Funkceneighbors vypocıta hodnoty vysek sousednıch osmi bunek a vratı je na vystup

Obrazek 4 Dialogove okno nastroje MDinfin

Vystup z funkce neighbors slouzı jako jeden z vstupnıch parametru pro dalsıfunkci

8

Funkce byla pojmenovana dir slope jelikoz jejım vystupem je smer odtokua sklon tohoto smeru

def d i r s l o p e ( pointM nbrs vpix sp ix ) return d i r e c t i o n s l ope

Pro kazdy trojuhelnık byla spoctena hodnota d viz vzorec 3 Hodnota s bylapo spatnych a nelogickych vysledcıch pocıtana podle jineho vzorce ktery jizdaval spravne vysledky

s0 =

radicz212y21

+z22y22

(5)

Vzorec se lisı pro kazdy trojuhelnıcek uvedeny je pro vypocet sklonu kdy sousednıbunka je severozapadnı a severnı Tımto postupem bylo zbytecne pocıtatz-tovou slozku vekotoru n vzorec 2 Byly osetreny prıpady kdy sousednıbunky aktualnıho pocıtaneho trojuhelnıku jsou obe vyse polozene nebo obemimo rastr (NoData) Dalsı prıpad nastane jestlize je jeden bod vne rastra druhy v rastru lezı Smer je potom urcen prımo do toho bodu ktery nalezırastru Taktez i sklon je pocıtan pouze mezi tımto bodem a bodem M Lokalnı smer d v kazde plosce po vypoctenı nesmı prekrocit 45 V situacize tuto hodnotu prekrocı je smeru prirazena hodnota 0 nebo 45 v zavislostina vzajemnem porovnanı vysek bodu v trojuhelnıku Takto jsou zpracovanyvsechny plosky a je zjisteno zda-li do kazdeho trojuhelnıku nastava smerodtoku nebo ne Na konci funkce dir slope se kontroluje prıpad kdy smersousednıch trojuhelnıku odkazuje presne do stejneho bodu tedy hodnotysmeru musı byt pro prvnı trojuhelnık d = 45 a pro nasledujıcı sousednıtrojuhelnık d = 0 Vystupem funkce jsou dva vektory o osmi prvcıch smera sklon pro kazdou plosku

Dalsı fazı vypoctu je zjistenı pomeru vody ktera potece do jednotlivychsmeru K vypoctu pomeru byl pouzit tento vzorec [2]

fi =sxi8sum

j=1

sxj

(6)

kde s vyznacuje sklon vypocteneho smeru konkretnı trojuhelnıkove ploskya x je promenny exponent Pokud by byl exponent zvolen 1 bude vyslednasıtrsquo obdobna jako pri pouzitı MD8 algoritmu Pri zvetsovanı exponentu xk nekonecnu bude sıtrsquo stejna jako pri pouzitı D8 metody Vychozı hodnotaexponentu byla zvolena x = 4 coz je kompromis mezi obema variantami

9

Zmena exponentu se v soucasne podobe neprojevı na vyslednem rastru je-likoz vysledek prezentuje pouze smer odtoku a ne procentualnı cast Tohotopomeru bude vyuzito az pri spojenı skriptu s 2D modelem SMODERP

V dalsı casti vypoctu je rozdelen jiz zjisteny pomer z celkoveho odtokudo dvou prıpadne pouze do jedne bunky v zavislosti na smeru odtoku dVe vysledku je vypocten vektor osmi cısel kde kazda hodnota od 0 do 1prestavuje jiz procentualnı pomer z celkoveho odtoku do kazde sousednıbunky

Pro vyslednou reprezentaci smeru odtoku na vystup byl pro kazdou bunkuvytvoren vektor obsahujıcı 1 a 0 rıkajıcı zda nastava ci nenastava odtokdo sousednı bunky Tento vektor byl preveden na celocıselnou hodnotu po-mocı funkce bool2int

def boo l 2 i n t ( x ) y = 0for i j in enumerate ( x )

i f j y += 1ltlt ireturn y

Funkce ma na vstupu vektor jedicek a nul Naprıklad pro vektor 00000111kdy voda tece na severozapad sever a severovychod se funkce chova taktoJe testovano jestli platı j = 1 tedy prvnıch pet nul vektoru funkce preskocıa pro prvnı jednicku se pricte k promenne y 20 v dalsım kroku 21 a v poslednım22 Operator vyjadruje totiz bitovy posun smerem doleva Vysledkem jena vystupu cıslo y = 1 + 2 + 4 = 7

Pro vsechny bunky byla vypoctena hodnota reprezentujıcı smer odtoku Tatohodnota se ulozı do matice a ta se nasledne prevede na vysledny rastr

f l o w d i r = arcpy NumPyArrayToRaster ( value LLcorner spix vpix rdquordquo )

value hodnota reprezentujıcı smer odtokuLLcorner souradnice leveho dolnıho rohuspix sırka pixeluvpix vyska pixelu

10

5 Vysledky

Algoritmus MDinfin byl testovan na skutecnych datech dvou pozemku u obcıNucice ve Stredoceskem kraji a Bykovice v kraji Jihomoravskem rastry jsouv prıloze 71 Oba dva rastry jsou o rozlisenı 5 metru Finalnı rastry jsouporovnavany s rastry vytvorenymi v prostredı ArcGIS nastrojem Flow Di-rection metodou D8

51 Realna data - Bykovice

Vysledne rastry Flow Direction pro uzemı Bykovice jsou uvedeny v prıloze72 Oba rastry byly pro hodnoty 202127 obarveny shodnou barvou kvulilepsı nazornosti a porovnatelnosti vysledku Rastr ktery obsahuje z celkovehopoctu 44807 bunek celkem 23655 bunek s hodnotami vysek po probehnutıalgoritmy dal nasledujıcı vysledky

FD D8 MDinfin1 3650 7372 666 9174 207 188 21 716 94 3732 791 8564 8818 1045128 9408 14983sum

23655 14983

Tabulka 1 Tabulka porovnanı obou algoritmu pro rastr Bykovic

FD je zkratka pro Flow Direction cili smer odtoku reprezentovany celocıselnouhodnotou Ostatnı hodnoty u vysledneho rastru na ktery byl pouzit algorit-mus MDinfin jsou v rozpetı 0246 V rozmezı hodnot smeru odtoku 246255se nevyskytujı zadne bunky Cas potrebny pro vykonanı skriptu byl v prıpadeD8 4 vteriny Pro algoritmus MDinfin byl cas 15 vterin

11

52 Realna data - Nucice

Vysledne rastry jsou uvedeny v prıloze 73 Opet bylo pouzito shodne obar-venı pro zakladnı smery u obou rastru Rastr Nucice obsahoval data na 82732bunkach z celkove poctu 125449 bunek Vysledky jsou pro prehlednost uve-deny v tabulce

FD D8 MDinfin1 12186 12332 12441 87034 16907 10278 9826 1642316 2516 28832 5010 241764 7788 366128 16058 25475sum

82732 55932

Tabulka 2 Tabulka porovnanı obou algoritmu pro rastr Nucic

Ostatnı hodnoty u vysledneho rastru na ktery byl pouzit algoritmusMDinfin jsou v rozpetı 0255 Cas potrebny pro vykonanı skriptu byl v prıpadeD8 6 vterin Pro algoritmus MDinfin byl cas 50 vterin

12

6 Zaver

Cılem projektu bylo vytvorit funkcnı skript obsahujıcı algoritmus pojmen-ovany MDinfin [1] ktery resı odtok do sousednıch bunek rastru Algoritmusbyl napsan v programovacım jazyce Python a testovan na realnych datechVysledky byly mırnym prekvapenım kdy zejmena hodnoty smeru 128 tedyseverovychodnıho se vyskytovaly ve vysledku velmi casto viz tabulky 1 a 2Predpokladem bylo ze se odtok rozlozı do vıce smeru a pocet bunek s hod-notami zakladnıch smeru 1248163264 a 128 bude mene nez v prıpade al-goritmu D8 K rozkladu do vıce smeru sice doslo ale pocet nekterych bunekse zakladnımi smery byl vetsı u algoritmu MDinfin

Co se tyce delky doby behu algoritmu je algoritmus MDinfin pomalejsı viz casyv kapitole 5 nez D8 z nekolika zrejmych duvodu Predevsım algoritmus D8provadı mnohem mene pocetnıch operacı z duvodu jeho mensı slozitostiviz 3 Dalsım duvodem je take rozdıl v jazyce ve kterem jsou oba algo-ritmy napsany D8 je napsan v programovacım jazyce C++ ktery na vetsıchdatech je mnohonasobne rychlejsı nez Python Prepsanım algoritmu MDinfindo jazyka C++ by mohla byt cesta k budoucımu zvysenı rychlosti pracealgoritmu

13

Reference

[1] SEIBERT Jan McGlynn BL A new triangular multiple flow di-rection algortihm for computing upslope areas from gridded digi-tal elevation models [online] [cit 13 5 2013] Dostupne ke stazenız URL lthttpciteseerxistpsueduviewdocdownloaddoi=101179977amprep=rep1amptype=pdfgt

[2] HOLMGREN Peter Multiple direction algortihms for runoff modellingin grid based elevation models An empirical evaluation [online] [cit13 5 2013] Dostupny z URL ltftpwwwlwrkthseCommonUllaMFor_Imran[1994]20holmgren20-20multiple20flow

20direction20algorithms20for20runoff20modelling20in

20grid20based20elevation20modelspdf gt

[3] ESRI ESRI WebHelp - How Flow Direction works [online] [cit13 5 2013] Dostupne z URL lthttphelparcgiscomenarcgisdesktop100helpindexhtml009z00000063000000

htmgt

[4] ESRI ESRI Webhelp - Flow Direction (Spatial Analyst) [online][cit 13 5 2013] Dostupne z URL lthttphelparcgiscomenarcgisdesktop100helpindexhtml009z00000052000000

htmgt

[5] WIKIPEDIA NumPy [online] [cit 13 5 2013] Dostupne z URLlthttpenwikipediaorgwikiNumPygt

[6] INFORMIT Working with operators [online] [cit 13 5 2013] Dos-tupne z URL lthttpwwwinformitcomarticlesarticleaspxp=2002831ampseqNum=6gt

14

7 Prılohy

71 Bykovice a Nucice vstupnı DMT rastry

Obrazek 5 DMT Bykovice

Obrazek 6 DMT Nucice

15

72 Bykovice vysledky

Obrazek 7 Flow Direction D8

Obrazek 8 Flow Direction MDinfin

16

73 Nucice vysledky

Obrazek 9 Flow Direction D8

Obrazek 10 Flow Direction MDinfin

17

Page 24: pro zac ate cn kygeo.fsv.cvut.cz/gdata/2013/pin2/e/dokumentace/... · 2013-06-05 · CESK E VYSOK E U CEN I TECHNICKE V PRAZE FAKULTA STAVEBN I OBOR GEODEZIE A KARTOGRAFIE Dokumentace

Zde nastal problem s prıstupem k atributum Obecne nesmı nazvy atri-butovych sloupcu obsahovat mezery K hodnotam je pristupovano pres jed-notlive radky s parametrem nazev sloupce

rows= arcpySearchCursor(layer)

for row in rows

value=rownazev_sloupce

Pripojena tabulka ovsem mela v nazvech sloupcu mezeru K takto pojmeno-vanemu sloupci muselo byt pristupovano prıkazem getValue

rows= arcpySearchCursor(layer)

for row in rows

value=rowgetValue(rsquonazev tabulky$nazev sloupcersquo)

32 Doba behu tvorby gridu

Doba behu nastroje pro tvorbu gridu je znepokolive dlouha Bylo prove-deno merenı casu behu jednotlivych castı kodu funkcı time z modulu timeVysledky ukazaly ze nejdele trva vytvarenı novych vrstev Vrstva se muzevytvaret az 20 sekund Snaha o optimalizaci donutila nahradit vytvarenı vrs-tev s minimalnım ohranicujıcım obdelnıkem sekvencnım ukladanım souradniclomovych bodu polygonu z nichz pak funkcemi min a max byly tyto hodnotyzıskany Prubeh se tak urychlil o desıtky sekund (v jednom prubehu cyklupriblizne o 15 sekund) Dalsı moznostı bylo vyuzıt prostoroveho indexu datTato moznost nebyla vyuzita protoze ArcGIS pouzıva k prostorovemu in-dexovanı pravidelny grid Zıskanı MBR2 nebylo nalezeno Vyuzitı indexu byovsem problem neresilo Jak jiz bylo zmıneno nejdele trva vytvarenı novychvrstev Bohuzel funkce GridIndexFeatures cartography pro vytvorenı griduneumı pracovat se selektovanymi daty Tedy v kazdem cyklu musı byt ulozenapolygonova vrstva tvorıcı 1 sekci Pote mohla byt vytvorena vrstva tvorıcıgrid Tedy v kazdem prubehu cyklu jsou vytvareny 2 nove vrstvy Jelikozautor neprisel na zpusob jine optimalizace je nastroj pomaly Pro zadanydataset s 58mi povodımi jeho cinnost probıha desıtky minut

33 Moznosti rozsırenı

Do skriptu by se dal zakomponovat export seznamu mapovych listu pro kazdepovodı V soucasne verzi je tvoren exportem atributove tabulky

2minimum bounding rectangle - minimalnı ohranicujıcı obdelnık

11

4 Zaver

Byly vytvoreny nastroje pro automatizaci tvorby Atlasu pro mapy eroznıhosmyvu a transportu splavenin Tvorba Atlasu probıha v nekolika krocıchVizualizovane prvku jsou generalizovany Dale je vytvoren Grid ktery jepouzit jako indexova vrstva pro funkci Data Driven Pages Tou jsou vy-tvoreny jednotlive mapove listy Pomocı dynamickych prvku je pak vytvorenvzhled ktery se menı se zmenou mapoveho listu Nedostatkem je rychlostnastroje pro tvorbu gridu Presto ze je nastroj pomaly je zcela funkcnı Vprıpade potreby dalsıho rozsırenı bude ale vhodne vysledky nacıtat do novehonastroje Vzorovy vytisk vysledneho atlasu je prilozen Vzhledem k tomu zezpracovavana data jsou rozsahla a podlehajı autorskemu zakonu je vytvorenjen vzorovy vytisk z 6ti povodı Nastroje jsou psany v jazyce Python 26 proArcGIS 100 Pri praci byla vyuzıvana predevsım online napoveda ArcGISa diskuznı programatorska fora Kompletnı zdrojovy kod je ke stazenı nastrankach predmetu PIN2

12

5 Prılohy

51 Vysledny log tvorby gridu

Executing Grid

JAtlasvzorektemp_selectpovodi_vzorekgdbpokusne_povodi

70000 25 30 JAtlasvzorektemp_selectpovodi_vzorekgdbgrid70

Start Time Wed May 15 020551 2013

Running script Script2

Output folder JAtlasvzorektemp_selectpovodi_vzorekgdb

_____________________________________________________________________

count of basin polygon to process 6

_____________________________________________________________________

RUN 1

count of basins in 1 section 3

Their ID

ID 1

ID 3

ID 6

_____________________________________________________________________

count of basin polygon to process 3

_____________________________________________________________________

RUN 2

count of basins in 2 section 1

Their ID

ID 2

_____________________________________________________________________

count of basin polygon to process 2

_____________________________________________________________________

RUN 3

count of basins in 3 section 2

Their ID

ID 4

ID 5

----- RESULT -----

Number of sections 3

Number of map sheets

in section 1 13

in section 2 1

in section 3 2

Completed script Grid

Succeeded at Wed May 15 021359 2013 (Elapsed Time 8 minutes 8 seconds

13

52 Vysledny log generalizace

Executing generalization JAtlasvzorek2011_NAZV_nadrze2011_watemsedem

NAZV_tokyVT28_finshp

JAtlasvzorek2011_NAZV_nadrze2011_watemsedem28_vypocet

projectriversedimentxlsxprojectriversediment$

Start Time Wed May 15 075624 2013

Running script generalization

Category created

Total count of river parts 2879

Count of category 1 2428

Count of category 2 118

Count of category 3 68

Count of category 4 20

Count of category 5 245

Completed script generalization

Succeeded at Wed May 15 075638 2013 (Elapsed Time 1400 seconds)

14

CESKE VYSOKE UCENI TECHNICKE V PRAZE

FAKULTA STAVEBNI

OBOR GEODEZIE A KARTOGRAFIE

Dokumentace k projektu informatika 2

Stanovenı smeru odtokuna rastrovem digitalnım modelu

a implementace algoritmudo prostredı ArcGIS

BC JAN ZAJICEK

5 cervna 2013

Obsah

Obsah 1

1 Uvod 2

2 Nejbeznejsı existujıcı algoritmy 3

3 Flow Direction D8 431 Obecny princip D8 432 Popis algoritmu D8 5

4 Popis algoritmu MDinfin 641 Obecny princip MDinfin 642 Technicke resenı MDinfin 8

5 Vysledky 1151 Realna data - Bykovice 1152 Realna data - Nucice 12

6 Zaver 13

Reference 14

7 Prılohy 1571 Bykovice a Nucice vstupnı DMT rastry 1572 Bykovice vysledky 1673 Nucice vysledky 17

1

1 Uvod

Tato dokumentace byla zpracovana v ramci predmetu Projekt Informatika 2Semestralnı prace bude pouzita jako z jedna castı autorovi diplomove praces nazvem SMODERP 2D rozsırenı resıcı vztahy soustredeneho a plosnehoodtoku na danem uzemı Duvodem zpracovanı tohoto tematu byla potrebapouzitı v diplomove praci vıce nez jednoho algoritmu pro urcenı smeruodtoku v prostredı ArcGIS V soucasne dobe ArcGIS vyuzıva algoritmusD8 viz kapitola 3 jako jediny algoritmus pro vypocet smeru odtoku Tentoalgoritmus je soucastı Hydrology tools Nastroje ze skupiny Hydrology sepouzıvajı k modelovanı chovanı toku vody na povrchu Nejbeznejsı pouzıvanadigitalnı data povrchu Zeme jsou rastry digitalnı modelu terenu DMT slozenez jednotlivych bunek pixelu Tyto DMT rastry jsou pouzity jako vstupypro ruzne charakteristiky povrchu DMT rastr je souvisly povrch obvykleodkazujıcı na povrch Zeme Presnost dat je dana rozlisenım rastru taktezvzdalenostı mezi body rastru Informace o tvaru zemskeho povrchu je uzitecnapro mnoho oboru jako je napr zemedelstvı lesnictvı zivotnı prostredı neboregionalnı planovanı Tyto obory vyzadujı pochopenı jak voda tece v ramciuzemı a jak zmeny na tomto uzemı nasledne ovlivnı jejı tok

Cılem projektu bylo naprogramovat algoritmus ktery v roce 2007 publiko-vali Jan Seibert a Brian L McGlynn s nazvem MDinfin [1] Tento algoritmusje vylepsenım stavajıcıch algoritmu pro resenı urcenı smeru odtoku na ras-tru viz kapitola 2 Pro overenı spravnosti vysledku byla pouzita realnadata dvou pozemku u obcı Bykovice a Nucice Testovanı probıhalo na ras-trech o rozlisenı 5 metru Algoritmus byl naprogramovan v jazyce Pythonv prostredı NetBeans IDE 69 Pro spustenı v ArcGISu je potreba pridatdo prostredı vytvoreny toolbox upravit aktualnı cestu ke skriptu mainpya tento model nasledne spustit Vstupem modelu je rastr DMT a vystupnıadresar do ktereho se po dobehnutı modelu ulozı vysledny rastr s hodnotamismeru odtoku 1255 Algoritmus MDinfin je testovan na verzi ArcGIS 100Na nejnovejsı verzi ArcGIS 101 ktera vysla v cervnu 2012 nenı overenakompatibilita algoritmu v dusledku nefunkcnosti vıce nez jedne verze tohotoprogramu na jednom pocıtaci

2

2 Nejbeznejsı existujıcı algoritmy

Existujı tri nejbeznejsı algoritmy kazdy odlisne resıcı problematiku odtokuvody z rastru do sousednıch bunek Prvnım z nich je algoritmus D8 z roku1984 Algoritmus je podrobne popsan v nasledujıcı kapitole 3 Jelikoz odtoknastava vzdy jen do jedne sousednı bunky dochazı casto ke koncentracivodnıch sıtı a sıtrsquo odtoku pak neodpovıda skutecnosti Na druhou stranuje jeho vyhodou jeho jednoduchost a fakt ze nedochazı k nechtene disperzijako je tomu u druheho algoritmu

Druhym algoritmem je MD8 neboli multiple flow direction algorithm MD8algoritmem je voda odvadena do vsech nıze polozenych sousednıch buneka pomer vody je rozdelen procentualne podle sklonu Ve vysledku ma algo-ritmus tendenci vytvaret vıce realisticke prostorove sıte toku nez D8 tımze nedochazı k takove koncentraci vody v sıti U D8 ma mnohem vetsıvliv maly rozdıl vysek mezi sousednımi bunkami na to ktera bunka prijmeveskerou vodu Pouzitım MD8 tyto male vyskove rozdıly nemajı zdalekatakovy vliv jelikoz je mnozstvı vody rozdeleno pomerem mezi tyto bunkyNejvetsı nevyhodou tohoto algoritmu je jeho prılisna disperze na konver-gentnıch svazıch v dusledku odtoku do vsech nıze polozenych bunek

V roce 1997 byl navrzen algoritmus pojmenovany Dinfin Davidem G Tar-botonem z americke univerzity v Utahu Byl navrzen prıstup ktery je zalozenna osmi trojuhelnıkovych ploskach viz obrazek 3 Dıky tomuto postupu jsouodstraneny limitace v podobe moznosti pouze osmi smeru odtoku z bunkyProto je algoritmus pojmenovan Dinfin jelikoz muze nastat nekonecne moznostıvysledneho smeru odtoku Tento prıstup umoznuje pouze jeden smer odtokurozdeleny mezi jednu nebo dve bunky v zavislosti na smeru odtoku

Poslednı dva zmınene algoritmy MD8 a Dinfinmajı oproti D8 nevyhodu ve vetsıcasove narocnosti vypoctu V kapitole 4 je popsan algoritmus MDinfin kteryvyuzıva vyhody MD8 algoritmu za pouzitı trojuhelnıkovych plosek obdobnejako Dinfin algoritmus

3

3 Flow Direction D8

Pro pochopenı problematiky a zjevnost rozdılu mezi algoritmy je vhodneuvest jak funguje nastroj ktery pouzıva ArcGIS Zaklad algoritmu MDinfino nemz pojednava tato dokumentace je zalozen na podobnych postupech

31 Obecny princip D8

Princip nastroje urcenı smeru odtoku (Flow Direction) ktery pouzıva prostredıArcGIS je nasledujıcı Tento nastroj (tool) vezme vstupnı rastr digitalnıhomodelu terenu neboli vyskovy rastr Provede vypocet jehoz vystupem jerastr ktery v kazde bunce rastru obsahuje hodnotu urcujıcı smer odtokuz teto bunky Hodnot je osm podle osmi sousednıch bunek do kterych muzeodtekat voda viz obrazek 1 Prave podle osmi smeru odtoku se tento prıstupnazyva D8 (eight-direction approach)

Obrazek 1 Flow Direction D8 [3]

4

32 Popis algoritmu D8

Samotny vypocet algoritmu je v zasade primitivnı Pro vsechny sousednıbunky se vypocte maximalnı sklon [3]

maximalnı sklon = rozdıl vysek vzdalenost 100

Rozdıl vysek je rozdıl vysky v aktualnım bode a konkretnı sousednı bunkyVzdalenost je vypoctena mezi stredy bunek a lisı se v zavislosti na polozesousednı bunky Pro bunky sousedıcı vrcholem je hodnota velikosti pixeluprenasobena o odmocninu ze dvou Pro zbyle bunky sousedıcı hranou jevelikost vzdalenosti rovna velikosti pixelu Po nalezenı nejstrmejsıho smeruodtoku je hodnota ulozena v podobe bitove hodnoty reprezentujıcı danysmer Pred pouzitım nastroje Flow Direction se obvykle zpracuje vstupnırastr pomocı nastroje Sink Tento algoritmus zaplnı bezodtoke oblasti rastrunejnizsı hodnotou z okolı a do teto nejnizsı sousednı bunky pak posle voduPote jiz nemuze dojıt k situaci kdy vsechny sousednı bunky k dane buncemajı vyssı hodnoty vysek a nedochazelo by tedy k odtokuVysledny rastr nemusı obsahovat pouze bunky s hodnotami 202127 [4]Jestlize nastane situace kdy ma vıce sousednıch bunek nejnizsı hodnotuvysek pak je vysledna hodnota souctem vsech smeru Napr hodnota maximalnıhosklonu bude stejna pro sousednı bunku vlevo a nahore odtok tedy budesmerem na zapad (hodnota = 16) a na sever (hodnota = 64) vysledna hod-nota bude souctem 16 a 64 tedy 84

5

4 Popis algoritmu MDinfin

41 Obecny princip MDinfinObecny postup je prevzat z [1] Stejne jako v prıpade algoritmu Dinfin bylyzavedeny trojuhelnıkove plosky pro vypocet lokalnıho sklonu a smeru pro kazdoutrojuhelnıkovou plosku Okolo stredoveho boduM bylo vytvoreno osm trojuhelnıkuviz obrazek 3 Kazdy se zbyvajıcımi dvema vrcholy P1 P2 ve dvou sousedıcıchbunkach Pro kazdy z techto trojuhelnıku je vypocten smer nejvetsıho sklonuPokud oznacıme vysky bodu M P1 P2 jako hM hP1 hP2 rozdıly vysek sevypoctou takto

z1 = hP1 minus hM z2 = hP2 minus hM (1)

Obdobne se vypoctou rozdıly v x-ovych a y-ovych souradnicıch Po vypocturozdılu jednotlivych souradnic je vypocten normalovy vektor

n =

nx

ny

nz

=

z1y2 minus z2y1z1x2 minus z2x1y1x2 minus y2x1

(2)

Smer odtoku d a sklon s na trojuhelnıkove plose se vypocte pomocı rovnice3 Hodnota nula pro d oznacuje smer osy y a hodnota 3π2 oznacuje smerosy x

d =

0 nx = 0 ny ge 0

π nx = 0 ny lt 0

π2minus arctan(

ny

nx

) nx gt 0

3π2minus arctan(

ny

nx

) nx lt 0

(3)

s = minus tan

(arccos

(nzradic

n2x + n2

y + n2z

))(4)

Jestlize nejvetsı sklon od bodu M je mimo rozpetı 0-45 (π4 radian) jepouzit sklon strmejsı k jednomu z bodu P1 P2 a zaroven i sklon je spoctenk tomuto bodu V prıpade ze oba sousednı body jsou vyse polozeny nez bodM smer nenı pro tento trojuhelnık uvazovan Po spoctenı vsech osmi smerua sklonu pro jednotlive plosky jsou tyto smery povazovany za lokalne ne-jstrmejsı pro kazdy trojuhelnık v rozsahu 45 Smery vedoucı prımo do bodu

6

P1 nebo P2 tedy ty kde d = 0 nebo d = π4 jsou uvazovany pouze vprıpade kdy obe vedlejsı sousednı bunky majı smer k bodu P1 nebo P2Tato situace je znazornena na obrazku 2

Obrazek 2 Ukazka urcenı smeru odtoku z bunky [1]

Prvnı prıpad je smer mırıcı mezi bunky 5 a 6 Druhy prıpad je smer kteryvede prımo do bunky 3 Tato situace nastane jestlize pro trojuhelnık M43vyjde lokalnı smer d = π4 a pro trojuhelnık M32 smer vyjde d = 0Pote co je smer odtoku pro bunku vypocten je celkovy odtok rozdelendo vsech vyslednych smeru na zaklade sklonu Resenı teto problematiky jevıce popsano v sekci 42 Pro smery mırıcı mezi body P1 a P2 je odtokrozdelen do dvou bunek na zaklade nevejtsıho sklonu Pomer odtoku do buneks body P1 a P2 bude v tomto poradı α245 a α145

Obrazek 3 Trojuhelnıkove plosky [1]

7

42 Technicke resenı MDinfinVyse jiz bylo zmıneno ze algoritmus je napsan v jazyce Python Algoritmusje rozdelen do dvou skriptu Prvnı z nich obsahuje funkce a druhy je hlavnıVstupem do modelu je rastr digitalnıho modelu terenu a vystupnı adresardo ktereho se ulozı finalnı rastr smeru odtoku viz obr 4 Po nactenı rastruze vstupnıch parametru je tento rastr preveden na matici NumPy pomocıfunkce

arcpy RasterToNumPyArray ( InputRaster )

NumPy [5] je rozsırenı programovacıho jazyka Python je to balıcek uzıvanypro vedecke vypocty Umoznuje podporu velkych multi-dimenzionalnıch polıa matic spolu s velkou knihovnou matematickych funkcı pro praci s temitopoli

Algoritmus cyklem projızdı vsechny prvky matice a u tech ktere majı hod-notu ruznou od NoData nalezne okolı Hledanı okolı bunky provadı funkceneighbors ta je definovana takto

def ne ighbors ( i j array x y ) return nb1 nb2 nb3 nb4 nb5 nb6 nb7 nb8

Vstupem funkce je pozice v matici dale cela matice a jejı rozmery Funkceneighbors vypocıta hodnoty vysek sousednıch osmi bunek a vratı je na vystup

Obrazek 4 Dialogove okno nastroje MDinfin

Vystup z funkce neighbors slouzı jako jeden z vstupnıch parametru pro dalsıfunkci

8

Funkce byla pojmenovana dir slope jelikoz jejım vystupem je smer odtokua sklon tohoto smeru

def d i r s l o p e ( pointM nbrs vpix sp ix ) return d i r e c t i o n s l ope

Pro kazdy trojuhelnık byla spoctena hodnota d viz vzorec 3 Hodnota s bylapo spatnych a nelogickych vysledcıch pocıtana podle jineho vzorce ktery jizdaval spravne vysledky

s0 =

radicz212y21

+z22y22

(5)

Vzorec se lisı pro kazdy trojuhelnıcek uvedeny je pro vypocet sklonu kdy sousednıbunka je severozapadnı a severnı Tımto postupem bylo zbytecne pocıtatz-tovou slozku vekotoru n vzorec 2 Byly osetreny prıpady kdy sousednıbunky aktualnıho pocıtaneho trojuhelnıku jsou obe vyse polozene nebo obemimo rastr (NoData) Dalsı prıpad nastane jestlize je jeden bod vne rastra druhy v rastru lezı Smer je potom urcen prımo do toho bodu ktery nalezırastru Taktez i sklon je pocıtan pouze mezi tımto bodem a bodem M Lokalnı smer d v kazde plosce po vypoctenı nesmı prekrocit 45 V situacize tuto hodnotu prekrocı je smeru prirazena hodnota 0 nebo 45 v zavislostina vzajemnem porovnanı vysek bodu v trojuhelnıku Takto jsou zpracovanyvsechny plosky a je zjisteno zda-li do kazdeho trojuhelnıku nastava smerodtoku nebo ne Na konci funkce dir slope se kontroluje prıpad kdy smersousednıch trojuhelnıku odkazuje presne do stejneho bodu tedy hodnotysmeru musı byt pro prvnı trojuhelnık d = 45 a pro nasledujıcı sousednıtrojuhelnık d = 0 Vystupem funkce jsou dva vektory o osmi prvcıch smera sklon pro kazdou plosku

Dalsı fazı vypoctu je zjistenı pomeru vody ktera potece do jednotlivychsmeru K vypoctu pomeru byl pouzit tento vzorec [2]

fi =sxi8sum

j=1

sxj

(6)

kde s vyznacuje sklon vypocteneho smeru konkretnı trojuhelnıkove ploskya x je promenny exponent Pokud by byl exponent zvolen 1 bude vyslednasıtrsquo obdobna jako pri pouzitı MD8 algoritmu Pri zvetsovanı exponentu xk nekonecnu bude sıtrsquo stejna jako pri pouzitı D8 metody Vychozı hodnotaexponentu byla zvolena x = 4 coz je kompromis mezi obema variantami

9

Zmena exponentu se v soucasne podobe neprojevı na vyslednem rastru je-likoz vysledek prezentuje pouze smer odtoku a ne procentualnı cast Tohotopomeru bude vyuzito az pri spojenı skriptu s 2D modelem SMODERP

V dalsı casti vypoctu je rozdelen jiz zjisteny pomer z celkoveho odtokudo dvou prıpadne pouze do jedne bunky v zavislosti na smeru odtoku dVe vysledku je vypocten vektor osmi cısel kde kazda hodnota od 0 do 1prestavuje jiz procentualnı pomer z celkoveho odtoku do kazde sousednıbunky

Pro vyslednou reprezentaci smeru odtoku na vystup byl pro kazdou bunkuvytvoren vektor obsahujıcı 1 a 0 rıkajıcı zda nastava ci nenastava odtokdo sousednı bunky Tento vektor byl preveden na celocıselnou hodnotu po-mocı funkce bool2int

def boo l 2 i n t ( x ) y = 0for i j in enumerate ( x )

i f j y += 1ltlt ireturn y

Funkce ma na vstupu vektor jedicek a nul Naprıklad pro vektor 00000111kdy voda tece na severozapad sever a severovychod se funkce chova taktoJe testovano jestli platı j = 1 tedy prvnıch pet nul vektoru funkce preskocıa pro prvnı jednicku se pricte k promenne y 20 v dalsım kroku 21 a v poslednım22 Operator vyjadruje totiz bitovy posun smerem doleva Vysledkem jena vystupu cıslo y = 1 + 2 + 4 = 7

Pro vsechny bunky byla vypoctena hodnota reprezentujıcı smer odtoku Tatohodnota se ulozı do matice a ta se nasledne prevede na vysledny rastr

f l o w d i r = arcpy NumPyArrayToRaster ( value LLcorner spix vpix rdquordquo )

value hodnota reprezentujıcı smer odtokuLLcorner souradnice leveho dolnıho rohuspix sırka pixeluvpix vyska pixelu

10

5 Vysledky

Algoritmus MDinfin byl testovan na skutecnych datech dvou pozemku u obcıNucice ve Stredoceskem kraji a Bykovice v kraji Jihomoravskem rastry jsouv prıloze 71 Oba dva rastry jsou o rozlisenı 5 metru Finalnı rastry jsouporovnavany s rastry vytvorenymi v prostredı ArcGIS nastrojem Flow Di-rection metodou D8

51 Realna data - Bykovice

Vysledne rastry Flow Direction pro uzemı Bykovice jsou uvedeny v prıloze72 Oba rastry byly pro hodnoty 202127 obarveny shodnou barvou kvulilepsı nazornosti a porovnatelnosti vysledku Rastr ktery obsahuje z celkovehopoctu 44807 bunek celkem 23655 bunek s hodnotami vysek po probehnutıalgoritmy dal nasledujıcı vysledky

FD D8 MDinfin1 3650 7372 666 9174 207 188 21 716 94 3732 791 8564 8818 1045128 9408 14983sum

23655 14983

Tabulka 1 Tabulka porovnanı obou algoritmu pro rastr Bykovic

FD je zkratka pro Flow Direction cili smer odtoku reprezentovany celocıselnouhodnotou Ostatnı hodnoty u vysledneho rastru na ktery byl pouzit algorit-mus MDinfin jsou v rozpetı 0246 V rozmezı hodnot smeru odtoku 246255se nevyskytujı zadne bunky Cas potrebny pro vykonanı skriptu byl v prıpadeD8 4 vteriny Pro algoritmus MDinfin byl cas 15 vterin

11

52 Realna data - Nucice

Vysledne rastry jsou uvedeny v prıloze 73 Opet bylo pouzito shodne obar-venı pro zakladnı smery u obou rastru Rastr Nucice obsahoval data na 82732bunkach z celkove poctu 125449 bunek Vysledky jsou pro prehlednost uve-deny v tabulce

FD D8 MDinfin1 12186 12332 12441 87034 16907 10278 9826 1642316 2516 28832 5010 241764 7788 366128 16058 25475sum

82732 55932

Tabulka 2 Tabulka porovnanı obou algoritmu pro rastr Nucic

Ostatnı hodnoty u vysledneho rastru na ktery byl pouzit algoritmusMDinfin jsou v rozpetı 0255 Cas potrebny pro vykonanı skriptu byl v prıpadeD8 6 vterin Pro algoritmus MDinfin byl cas 50 vterin

12

6 Zaver

Cılem projektu bylo vytvorit funkcnı skript obsahujıcı algoritmus pojmen-ovany MDinfin [1] ktery resı odtok do sousednıch bunek rastru Algoritmusbyl napsan v programovacım jazyce Python a testovan na realnych datechVysledky byly mırnym prekvapenım kdy zejmena hodnoty smeru 128 tedyseverovychodnıho se vyskytovaly ve vysledku velmi casto viz tabulky 1 a 2Predpokladem bylo ze se odtok rozlozı do vıce smeru a pocet bunek s hod-notami zakladnıch smeru 1248163264 a 128 bude mene nez v prıpade al-goritmu D8 K rozkladu do vıce smeru sice doslo ale pocet nekterych bunekse zakladnımi smery byl vetsı u algoritmu MDinfin

Co se tyce delky doby behu algoritmu je algoritmus MDinfin pomalejsı viz casyv kapitole 5 nez D8 z nekolika zrejmych duvodu Predevsım algoritmus D8provadı mnohem mene pocetnıch operacı z duvodu jeho mensı slozitostiviz 3 Dalsım duvodem je take rozdıl v jazyce ve kterem jsou oba algo-ritmy napsany D8 je napsan v programovacım jazyce C++ ktery na vetsıchdatech je mnohonasobne rychlejsı nez Python Prepsanım algoritmu MDinfindo jazyka C++ by mohla byt cesta k budoucımu zvysenı rychlosti pracealgoritmu

13

Reference

[1] SEIBERT Jan McGlynn BL A new triangular multiple flow di-rection algortihm for computing upslope areas from gridded digi-tal elevation models [online] [cit 13 5 2013] Dostupne ke stazenız URL lthttpciteseerxistpsueduviewdocdownloaddoi=101179977amprep=rep1amptype=pdfgt

[2] HOLMGREN Peter Multiple direction algortihms for runoff modellingin grid based elevation models An empirical evaluation [online] [cit13 5 2013] Dostupny z URL ltftpwwwlwrkthseCommonUllaMFor_Imran[1994]20holmgren20-20multiple20flow

20direction20algorithms20for20runoff20modelling20in

20grid20based20elevation20modelspdf gt

[3] ESRI ESRI WebHelp - How Flow Direction works [online] [cit13 5 2013] Dostupne z URL lthttphelparcgiscomenarcgisdesktop100helpindexhtml009z00000063000000

htmgt

[4] ESRI ESRI Webhelp - Flow Direction (Spatial Analyst) [online][cit 13 5 2013] Dostupne z URL lthttphelparcgiscomenarcgisdesktop100helpindexhtml009z00000052000000

htmgt

[5] WIKIPEDIA NumPy [online] [cit 13 5 2013] Dostupne z URLlthttpenwikipediaorgwikiNumPygt

[6] INFORMIT Working with operators [online] [cit 13 5 2013] Dos-tupne z URL lthttpwwwinformitcomarticlesarticleaspxp=2002831ampseqNum=6gt

14

7 Prılohy

71 Bykovice a Nucice vstupnı DMT rastry

Obrazek 5 DMT Bykovice

Obrazek 6 DMT Nucice

15

72 Bykovice vysledky

Obrazek 7 Flow Direction D8

Obrazek 8 Flow Direction MDinfin

16

73 Nucice vysledky

Obrazek 9 Flow Direction D8

Obrazek 10 Flow Direction MDinfin

17

Page 25: pro zac ate cn kygeo.fsv.cvut.cz/gdata/2013/pin2/e/dokumentace/... · 2013-06-05 · CESK E VYSOK E U CEN I TECHNICKE V PRAZE FAKULTA STAVEBN I OBOR GEODEZIE A KARTOGRAFIE Dokumentace

4 Zaver

Byly vytvoreny nastroje pro automatizaci tvorby Atlasu pro mapy eroznıhosmyvu a transportu splavenin Tvorba Atlasu probıha v nekolika krocıchVizualizovane prvku jsou generalizovany Dale je vytvoren Grid ktery jepouzit jako indexova vrstva pro funkci Data Driven Pages Tou jsou vy-tvoreny jednotlive mapove listy Pomocı dynamickych prvku je pak vytvorenvzhled ktery se menı se zmenou mapoveho listu Nedostatkem je rychlostnastroje pro tvorbu gridu Presto ze je nastroj pomaly je zcela funkcnı Vprıpade potreby dalsıho rozsırenı bude ale vhodne vysledky nacıtat do novehonastroje Vzorovy vytisk vysledneho atlasu je prilozen Vzhledem k tomu zezpracovavana data jsou rozsahla a podlehajı autorskemu zakonu je vytvorenjen vzorovy vytisk z 6ti povodı Nastroje jsou psany v jazyce Python 26 proArcGIS 100 Pri praci byla vyuzıvana predevsım online napoveda ArcGISa diskuznı programatorska fora Kompletnı zdrojovy kod je ke stazenı nastrankach predmetu PIN2

12

5 Prılohy

51 Vysledny log tvorby gridu

Executing Grid

JAtlasvzorektemp_selectpovodi_vzorekgdbpokusne_povodi

70000 25 30 JAtlasvzorektemp_selectpovodi_vzorekgdbgrid70

Start Time Wed May 15 020551 2013

Running script Script2

Output folder JAtlasvzorektemp_selectpovodi_vzorekgdb

_____________________________________________________________________

count of basin polygon to process 6

_____________________________________________________________________

RUN 1

count of basins in 1 section 3

Their ID

ID 1

ID 3

ID 6

_____________________________________________________________________

count of basin polygon to process 3

_____________________________________________________________________

RUN 2

count of basins in 2 section 1

Their ID

ID 2

_____________________________________________________________________

count of basin polygon to process 2

_____________________________________________________________________

RUN 3

count of basins in 3 section 2

Their ID

ID 4

ID 5

----- RESULT -----

Number of sections 3

Number of map sheets

in section 1 13

in section 2 1

in section 3 2

Completed script Grid

Succeeded at Wed May 15 021359 2013 (Elapsed Time 8 minutes 8 seconds

13

52 Vysledny log generalizace

Executing generalization JAtlasvzorek2011_NAZV_nadrze2011_watemsedem

NAZV_tokyVT28_finshp

JAtlasvzorek2011_NAZV_nadrze2011_watemsedem28_vypocet

projectriversedimentxlsxprojectriversediment$

Start Time Wed May 15 075624 2013

Running script generalization

Category created

Total count of river parts 2879

Count of category 1 2428

Count of category 2 118

Count of category 3 68

Count of category 4 20

Count of category 5 245

Completed script generalization

Succeeded at Wed May 15 075638 2013 (Elapsed Time 1400 seconds)

14

CESKE VYSOKE UCENI TECHNICKE V PRAZE

FAKULTA STAVEBNI

OBOR GEODEZIE A KARTOGRAFIE

Dokumentace k projektu informatika 2

Stanovenı smeru odtokuna rastrovem digitalnım modelu

a implementace algoritmudo prostredı ArcGIS

BC JAN ZAJICEK

5 cervna 2013

Obsah

Obsah 1

1 Uvod 2

2 Nejbeznejsı existujıcı algoritmy 3

3 Flow Direction D8 431 Obecny princip D8 432 Popis algoritmu D8 5

4 Popis algoritmu MDinfin 641 Obecny princip MDinfin 642 Technicke resenı MDinfin 8

5 Vysledky 1151 Realna data - Bykovice 1152 Realna data - Nucice 12

6 Zaver 13

Reference 14

7 Prılohy 1571 Bykovice a Nucice vstupnı DMT rastry 1572 Bykovice vysledky 1673 Nucice vysledky 17

1

1 Uvod

Tato dokumentace byla zpracovana v ramci predmetu Projekt Informatika 2Semestralnı prace bude pouzita jako z jedna castı autorovi diplomove praces nazvem SMODERP 2D rozsırenı resıcı vztahy soustredeneho a plosnehoodtoku na danem uzemı Duvodem zpracovanı tohoto tematu byla potrebapouzitı v diplomove praci vıce nez jednoho algoritmu pro urcenı smeruodtoku v prostredı ArcGIS V soucasne dobe ArcGIS vyuzıva algoritmusD8 viz kapitola 3 jako jediny algoritmus pro vypocet smeru odtoku Tentoalgoritmus je soucastı Hydrology tools Nastroje ze skupiny Hydrology sepouzıvajı k modelovanı chovanı toku vody na povrchu Nejbeznejsı pouzıvanadigitalnı data povrchu Zeme jsou rastry digitalnı modelu terenu DMT slozenez jednotlivych bunek pixelu Tyto DMT rastry jsou pouzity jako vstupypro ruzne charakteristiky povrchu DMT rastr je souvisly povrch obvykleodkazujıcı na povrch Zeme Presnost dat je dana rozlisenım rastru taktezvzdalenostı mezi body rastru Informace o tvaru zemskeho povrchu je uzitecnapro mnoho oboru jako je napr zemedelstvı lesnictvı zivotnı prostredı neboregionalnı planovanı Tyto obory vyzadujı pochopenı jak voda tece v ramciuzemı a jak zmeny na tomto uzemı nasledne ovlivnı jejı tok

Cılem projektu bylo naprogramovat algoritmus ktery v roce 2007 publiko-vali Jan Seibert a Brian L McGlynn s nazvem MDinfin [1] Tento algoritmusje vylepsenım stavajıcıch algoritmu pro resenı urcenı smeru odtoku na ras-tru viz kapitola 2 Pro overenı spravnosti vysledku byla pouzita realnadata dvou pozemku u obcı Bykovice a Nucice Testovanı probıhalo na ras-trech o rozlisenı 5 metru Algoritmus byl naprogramovan v jazyce Pythonv prostredı NetBeans IDE 69 Pro spustenı v ArcGISu je potreba pridatdo prostredı vytvoreny toolbox upravit aktualnı cestu ke skriptu mainpya tento model nasledne spustit Vstupem modelu je rastr DMT a vystupnıadresar do ktereho se po dobehnutı modelu ulozı vysledny rastr s hodnotamismeru odtoku 1255 Algoritmus MDinfin je testovan na verzi ArcGIS 100Na nejnovejsı verzi ArcGIS 101 ktera vysla v cervnu 2012 nenı overenakompatibilita algoritmu v dusledku nefunkcnosti vıce nez jedne verze tohotoprogramu na jednom pocıtaci

2

2 Nejbeznejsı existujıcı algoritmy

Existujı tri nejbeznejsı algoritmy kazdy odlisne resıcı problematiku odtokuvody z rastru do sousednıch bunek Prvnım z nich je algoritmus D8 z roku1984 Algoritmus je podrobne popsan v nasledujıcı kapitole 3 Jelikoz odtoknastava vzdy jen do jedne sousednı bunky dochazı casto ke koncentracivodnıch sıtı a sıtrsquo odtoku pak neodpovıda skutecnosti Na druhou stranuje jeho vyhodou jeho jednoduchost a fakt ze nedochazı k nechtene disperzijako je tomu u druheho algoritmu

Druhym algoritmem je MD8 neboli multiple flow direction algorithm MD8algoritmem je voda odvadena do vsech nıze polozenych sousednıch buneka pomer vody je rozdelen procentualne podle sklonu Ve vysledku ma algo-ritmus tendenci vytvaret vıce realisticke prostorove sıte toku nez D8 tımze nedochazı k takove koncentraci vody v sıti U D8 ma mnohem vetsıvliv maly rozdıl vysek mezi sousednımi bunkami na to ktera bunka prijmeveskerou vodu Pouzitım MD8 tyto male vyskove rozdıly nemajı zdalekatakovy vliv jelikoz je mnozstvı vody rozdeleno pomerem mezi tyto bunkyNejvetsı nevyhodou tohoto algoritmu je jeho prılisna disperze na konver-gentnıch svazıch v dusledku odtoku do vsech nıze polozenych bunek

V roce 1997 byl navrzen algoritmus pojmenovany Dinfin Davidem G Tar-botonem z americke univerzity v Utahu Byl navrzen prıstup ktery je zalozenna osmi trojuhelnıkovych ploskach viz obrazek 3 Dıky tomuto postupu jsouodstraneny limitace v podobe moznosti pouze osmi smeru odtoku z bunkyProto je algoritmus pojmenovan Dinfin jelikoz muze nastat nekonecne moznostıvysledneho smeru odtoku Tento prıstup umoznuje pouze jeden smer odtokurozdeleny mezi jednu nebo dve bunky v zavislosti na smeru odtoku

Poslednı dva zmınene algoritmy MD8 a Dinfinmajı oproti D8 nevyhodu ve vetsıcasove narocnosti vypoctu V kapitole 4 je popsan algoritmus MDinfin kteryvyuzıva vyhody MD8 algoritmu za pouzitı trojuhelnıkovych plosek obdobnejako Dinfin algoritmus

3

3 Flow Direction D8

Pro pochopenı problematiky a zjevnost rozdılu mezi algoritmy je vhodneuvest jak funguje nastroj ktery pouzıva ArcGIS Zaklad algoritmu MDinfino nemz pojednava tato dokumentace je zalozen na podobnych postupech

31 Obecny princip D8

Princip nastroje urcenı smeru odtoku (Flow Direction) ktery pouzıva prostredıArcGIS je nasledujıcı Tento nastroj (tool) vezme vstupnı rastr digitalnıhomodelu terenu neboli vyskovy rastr Provede vypocet jehoz vystupem jerastr ktery v kazde bunce rastru obsahuje hodnotu urcujıcı smer odtokuz teto bunky Hodnot je osm podle osmi sousednıch bunek do kterych muzeodtekat voda viz obrazek 1 Prave podle osmi smeru odtoku se tento prıstupnazyva D8 (eight-direction approach)

Obrazek 1 Flow Direction D8 [3]

4

32 Popis algoritmu D8

Samotny vypocet algoritmu je v zasade primitivnı Pro vsechny sousednıbunky se vypocte maximalnı sklon [3]

maximalnı sklon = rozdıl vysek vzdalenost 100

Rozdıl vysek je rozdıl vysky v aktualnım bode a konkretnı sousednı bunkyVzdalenost je vypoctena mezi stredy bunek a lisı se v zavislosti na polozesousednı bunky Pro bunky sousedıcı vrcholem je hodnota velikosti pixeluprenasobena o odmocninu ze dvou Pro zbyle bunky sousedıcı hranou jevelikost vzdalenosti rovna velikosti pixelu Po nalezenı nejstrmejsıho smeruodtoku je hodnota ulozena v podobe bitove hodnoty reprezentujıcı danysmer Pred pouzitım nastroje Flow Direction se obvykle zpracuje vstupnırastr pomocı nastroje Sink Tento algoritmus zaplnı bezodtoke oblasti rastrunejnizsı hodnotou z okolı a do teto nejnizsı sousednı bunky pak posle voduPote jiz nemuze dojıt k situaci kdy vsechny sousednı bunky k dane buncemajı vyssı hodnoty vysek a nedochazelo by tedy k odtokuVysledny rastr nemusı obsahovat pouze bunky s hodnotami 202127 [4]Jestlize nastane situace kdy ma vıce sousednıch bunek nejnizsı hodnotuvysek pak je vysledna hodnota souctem vsech smeru Napr hodnota maximalnıhosklonu bude stejna pro sousednı bunku vlevo a nahore odtok tedy budesmerem na zapad (hodnota = 16) a na sever (hodnota = 64) vysledna hod-nota bude souctem 16 a 64 tedy 84

5

4 Popis algoritmu MDinfin

41 Obecny princip MDinfinObecny postup je prevzat z [1] Stejne jako v prıpade algoritmu Dinfin bylyzavedeny trojuhelnıkove plosky pro vypocet lokalnıho sklonu a smeru pro kazdoutrojuhelnıkovou plosku Okolo stredoveho boduM bylo vytvoreno osm trojuhelnıkuviz obrazek 3 Kazdy se zbyvajıcımi dvema vrcholy P1 P2 ve dvou sousedıcıchbunkach Pro kazdy z techto trojuhelnıku je vypocten smer nejvetsıho sklonuPokud oznacıme vysky bodu M P1 P2 jako hM hP1 hP2 rozdıly vysek sevypoctou takto

z1 = hP1 minus hM z2 = hP2 minus hM (1)

Obdobne se vypoctou rozdıly v x-ovych a y-ovych souradnicıch Po vypocturozdılu jednotlivych souradnic je vypocten normalovy vektor

n =

nx

ny

nz

=

z1y2 minus z2y1z1x2 minus z2x1y1x2 minus y2x1

(2)

Smer odtoku d a sklon s na trojuhelnıkove plose se vypocte pomocı rovnice3 Hodnota nula pro d oznacuje smer osy y a hodnota 3π2 oznacuje smerosy x

d =

0 nx = 0 ny ge 0

π nx = 0 ny lt 0

π2minus arctan(

ny

nx

) nx gt 0

3π2minus arctan(

ny

nx

) nx lt 0

(3)

s = minus tan

(arccos

(nzradic

n2x + n2

y + n2z

))(4)

Jestlize nejvetsı sklon od bodu M je mimo rozpetı 0-45 (π4 radian) jepouzit sklon strmejsı k jednomu z bodu P1 P2 a zaroven i sklon je spoctenk tomuto bodu V prıpade ze oba sousednı body jsou vyse polozeny nez bodM smer nenı pro tento trojuhelnık uvazovan Po spoctenı vsech osmi smerua sklonu pro jednotlive plosky jsou tyto smery povazovany za lokalne ne-jstrmejsı pro kazdy trojuhelnık v rozsahu 45 Smery vedoucı prımo do bodu

6

P1 nebo P2 tedy ty kde d = 0 nebo d = π4 jsou uvazovany pouze vprıpade kdy obe vedlejsı sousednı bunky majı smer k bodu P1 nebo P2Tato situace je znazornena na obrazku 2

Obrazek 2 Ukazka urcenı smeru odtoku z bunky [1]

Prvnı prıpad je smer mırıcı mezi bunky 5 a 6 Druhy prıpad je smer kteryvede prımo do bunky 3 Tato situace nastane jestlize pro trojuhelnık M43vyjde lokalnı smer d = π4 a pro trojuhelnık M32 smer vyjde d = 0Pote co je smer odtoku pro bunku vypocten je celkovy odtok rozdelendo vsech vyslednych smeru na zaklade sklonu Resenı teto problematiky jevıce popsano v sekci 42 Pro smery mırıcı mezi body P1 a P2 je odtokrozdelen do dvou bunek na zaklade nevejtsıho sklonu Pomer odtoku do buneks body P1 a P2 bude v tomto poradı α245 a α145

Obrazek 3 Trojuhelnıkove plosky [1]

7

42 Technicke resenı MDinfinVyse jiz bylo zmıneno ze algoritmus je napsan v jazyce Python Algoritmusje rozdelen do dvou skriptu Prvnı z nich obsahuje funkce a druhy je hlavnıVstupem do modelu je rastr digitalnıho modelu terenu a vystupnı adresardo ktereho se ulozı finalnı rastr smeru odtoku viz obr 4 Po nactenı rastruze vstupnıch parametru je tento rastr preveden na matici NumPy pomocıfunkce

arcpy RasterToNumPyArray ( InputRaster )

NumPy [5] je rozsırenı programovacıho jazyka Python je to balıcek uzıvanypro vedecke vypocty Umoznuje podporu velkych multi-dimenzionalnıch polıa matic spolu s velkou knihovnou matematickych funkcı pro praci s temitopoli

Algoritmus cyklem projızdı vsechny prvky matice a u tech ktere majı hod-notu ruznou od NoData nalezne okolı Hledanı okolı bunky provadı funkceneighbors ta je definovana takto

def ne ighbors ( i j array x y ) return nb1 nb2 nb3 nb4 nb5 nb6 nb7 nb8

Vstupem funkce je pozice v matici dale cela matice a jejı rozmery Funkceneighbors vypocıta hodnoty vysek sousednıch osmi bunek a vratı je na vystup

Obrazek 4 Dialogove okno nastroje MDinfin

Vystup z funkce neighbors slouzı jako jeden z vstupnıch parametru pro dalsıfunkci

8

Funkce byla pojmenovana dir slope jelikoz jejım vystupem je smer odtokua sklon tohoto smeru

def d i r s l o p e ( pointM nbrs vpix sp ix ) return d i r e c t i o n s l ope

Pro kazdy trojuhelnık byla spoctena hodnota d viz vzorec 3 Hodnota s bylapo spatnych a nelogickych vysledcıch pocıtana podle jineho vzorce ktery jizdaval spravne vysledky

s0 =

radicz212y21

+z22y22

(5)

Vzorec se lisı pro kazdy trojuhelnıcek uvedeny je pro vypocet sklonu kdy sousednıbunka je severozapadnı a severnı Tımto postupem bylo zbytecne pocıtatz-tovou slozku vekotoru n vzorec 2 Byly osetreny prıpady kdy sousednıbunky aktualnıho pocıtaneho trojuhelnıku jsou obe vyse polozene nebo obemimo rastr (NoData) Dalsı prıpad nastane jestlize je jeden bod vne rastra druhy v rastru lezı Smer je potom urcen prımo do toho bodu ktery nalezırastru Taktez i sklon je pocıtan pouze mezi tımto bodem a bodem M Lokalnı smer d v kazde plosce po vypoctenı nesmı prekrocit 45 V situacize tuto hodnotu prekrocı je smeru prirazena hodnota 0 nebo 45 v zavislostina vzajemnem porovnanı vysek bodu v trojuhelnıku Takto jsou zpracovanyvsechny plosky a je zjisteno zda-li do kazdeho trojuhelnıku nastava smerodtoku nebo ne Na konci funkce dir slope se kontroluje prıpad kdy smersousednıch trojuhelnıku odkazuje presne do stejneho bodu tedy hodnotysmeru musı byt pro prvnı trojuhelnık d = 45 a pro nasledujıcı sousednıtrojuhelnık d = 0 Vystupem funkce jsou dva vektory o osmi prvcıch smera sklon pro kazdou plosku

Dalsı fazı vypoctu je zjistenı pomeru vody ktera potece do jednotlivychsmeru K vypoctu pomeru byl pouzit tento vzorec [2]

fi =sxi8sum

j=1

sxj

(6)

kde s vyznacuje sklon vypocteneho smeru konkretnı trojuhelnıkove ploskya x je promenny exponent Pokud by byl exponent zvolen 1 bude vyslednasıtrsquo obdobna jako pri pouzitı MD8 algoritmu Pri zvetsovanı exponentu xk nekonecnu bude sıtrsquo stejna jako pri pouzitı D8 metody Vychozı hodnotaexponentu byla zvolena x = 4 coz je kompromis mezi obema variantami

9

Zmena exponentu se v soucasne podobe neprojevı na vyslednem rastru je-likoz vysledek prezentuje pouze smer odtoku a ne procentualnı cast Tohotopomeru bude vyuzito az pri spojenı skriptu s 2D modelem SMODERP

V dalsı casti vypoctu je rozdelen jiz zjisteny pomer z celkoveho odtokudo dvou prıpadne pouze do jedne bunky v zavislosti na smeru odtoku dVe vysledku je vypocten vektor osmi cısel kde kazda hodnota od 0 do 1prestavuje jiz procentualnı pomer z celkoveho odtoku do kazde sousednıbunky

Pro vyslednou reprezentaci smeru odtoku na vystup byl pro kazdou bunkuvytvoren vektor obsahujıcı 1 a 0 rıkajıcı zda nastava ci nenastava odtokdo sousednı bunky Tento vektor byl preveden na celocıselnou hodnotu po-mocı funkce bool2int

def boo l 2 i n t ( x ) y = 0for i j in enumerate ( x )

i f j y += 1ltlt ireturn y

Funkce ma na vstupu vektor jedicek a nul Naprıklad pro vektor 00000111kdy voda tece na severozapad sever a severovychod se funkce chova taktoJe testovano jestli platı j = 1 tedy prvnıch pet nul vektoru funkce preskocıa pro prvnı jednicku se pricte k promenne y 20 v dalsım kroku 21 a v poslednım22 Operator vyjadruje totiz bitovy posun smerem doleva Vysledkem jena vystupu cıslo y = 1 + 2 + 4 = 7

Pro vsechny bunky byla vypoctena hodnota reprezentujıcı smer odtoku Tatohodnota se ulozı do matice a ta se nasledne prevede na vysledny rastr

f l o w d i r = arcpy NumPyArrayToRaster ( value LLcorner spix vpix rdquordquo )

value hodnota reprezentujıcı smer odtokuLLcorner souradnice leveho dolnıho rohuspix sırka pixeluvpix vyska pixelu

10

5 Vysledky

Algoritmus MDinfin byl testovan na skutecnych datech dvou pozemku u obcıNucice ve Stredoceskem kraji a Bykovice v kraji Jihomoravskem rastry jsouv prıloze 71 Oba dva rastry jsou o rozlisenı 5 metru Finalnı rastry jsouporovnavany s rastry vytvorenymi v prostredı ArcGIS nastrojem Flow Di-rection metodou D8

51 Realna data - Bykovice

Vysledne rastry Flow Direction pro uzemı Bykovice jsou uvedeny v prıloze72 Oba rastry byly pro hodnoty 202127 obarveny shodnou barvou kvulilepsı nazornosti a porovnatelnosti vysledku Rastr ktery obsahuje z celkovehopoctu 44807 bunek celkem 23655 bunek s hodnotami vysek po probehnutıalgoritmy dal nasledujıcı vysledky

FD D8 MDinfin1 3650 7372 666 9174 207 188 21 716 94 3732 791 8564 8818 1045128 9408 14983sum

23655 14983

Tabulka 1 Tabulka porovnanı obou algoritmu pro rastr Bykovic

FD je zkratka pro Flow Direction cili smer odtoku reprezentovany celocıselnouhodnotou Ostatnı hodnoty u vysledneho rastru na ktery byl pouzit algorit-mus MDinfin jsou v rozpetı 0246 V rozmezı hodnot smeru odtoku 246255se nevyskytujı zadne bunky Cas potrebny pro vykonanı skriptu byl v prıpadeD8 4 vteriny Pro algoritmus MDinfin byl cas 15 vterin

11

52 Realna data - Nucice

Vysledne rastry jsou uvedeny v prıloze 73 Opet bylo pouzito shodne obar-venı pro zakladnı smery u obou rastru Rastr Nucice obsahoval data na 82732bunkach z celkove poctu 125449 bunek Vysledky jsou pro prehlednost uve-deny v tabulce

FD D8 MDinfin1 12186 12332 12441 87034 16907 10278 9826 1642316 2516 28832 5010 241764 7788 366128 16058 25475sum

82732 55932

Tabulka 2 Tabulka porovnanı obou algoritmu pro rastr Nucic

Ostatnı hodnoty u vysledneho rastru na ktery byl pouzit algoritmusMDinfin jsou v rozpetı 0255 Cas potrebny pro vykonanı skriptu byl v prıpadeD8 6 vterin Pro algoritmus MDinfin byl cas 50 vterin

12

6 Zaver

Cılem projektu bylo vytvorit funkcnı skript obsahujıcı algoritmus pojmen-ovany MDinfin [1] ktery resı odtok do sousednıch bunek rastru Algoritmusbyl napsan v programovacım jazyce Python a testovan na realnych datechVysledky byly mırnym prekvapenım kdy zejmena hodnoty smeru 128 tedyseverovychodnıho se vyskytovaly ve vysledku velmi casto viz tabulky 1 a 2Predpokladem bylo ze se odtok rozlozı do vıce smeru a pocet bunek s hod-notami zakladnıch smeru 1248163264 a 128 bude mene nez v prıpade al-goritmu D8 K rozkladu do vıce smeru sice doslo ale pocet nekterych bunekse zakladnımi smery byl vetsı u algoritmu MDinfin

Co se tyce delky doby behu algoritmu je algoritmus MDinfin pomalejsı viz casyv kapitole 5 nez D8 z nekolika zrejmych duvodu Predevsım algoritmus D8provadı mnohem mene pocetnıch operacı z duvodu jeho mensı slozitostiviz 3 Dalsım duvodem je take rozdıl v jazyce ve kterem jsou oba algo-ritmy napsany D8 je napsan v programovacım jazyce C++ ktery na vetsıchdatech je mnohonasobne rychlejsı nez Python Prepsanım algoritmu MDinfindo jazyka C++ by mohla byt cesta k budoucımu zvysenı rychlosti pracealgoritmu

13

Reference

[1] SEIBERT Jan McGlynn BL A new triangular multiple flow di-rection algortihm for computing upslope areas from gridded digi-tal elevation models [online] [cit 13 5 2013] Dostupne ke stazenız URL lthttpciteseerxistpsueduviewdocdownloaddoi=101179977amprep=rep1amptype=pdfgt

[2] HOLMGREN Peter Multiple direction algortihms for runoff modellingin grid based elevation models An empirical evaluation [online] [cit13 5 2013] Dostupny z URL ltftpwwwlwrkthseCommonUllaMFor_Imran[1994]20holmgren20-20multiple20flow

20direction20algorithms20for20runoff20modelling20in

20grid20based20elevation20modelspdf gt

[3] ESRI ESRI WebHelp - How Flow Direction works [online] [cit13 5 2013] Dostupne z URL lthttphelparcgiscomenarcgisdesktop100helpindexhtml009z00000063000000

htmgt

[4] ESRI ESRI Webhelp - Flow Direction (Spatial Analyst) [online][cit 13 5 2013] Dostupne z URL lthttphelparcgiscomenarcgisdesktop100helpindexhtml009z00000052000000

htmgt

[5] WIKIPEDIA NumPy [online] [cit 13 5 2013] Dostupne z URLlthttpenwikipediaorgwikiNumPygt

[6] INFORMIT Working with operators [online] [cit 13 5 2013] Dos-tupne z URL lthttpwwwinformitcomarticlesarticleaspxp=2002831ampseqNum=6gt

14

7 Prılohy

71 Bykovice a Nucice vstupnı DMT rastry

Obrazek 5 DMT Bykovice

Obrazek 6 DMT Nucice

15

72 Bykovice vysledky

Obrazek 7 Flow Direction D8

Obrazek 8 Flow Direction MDinfin

16

73 Nucice vysledky

Obrazek 9 Flow Direction D8

Obrazek 10 Flow Direction MDinfin

17

Page 26: pro zac ate cn kygeo.fsv.cvut.cz/gdata/2013/pin2/e/dokumentace/... · 2013-06-05 · CESK E VYSOK E U CEN I TECHNICKE V PRAZE FAKULTA STAVEBN I OBOR GEODEZIE A KARTOGRAFIE Dokumentace

5 Prılohy

51 Vysledny log tvorby gridu

Executing Grid

JAtlasvzorektemp_selectpovodi_vzorekgdbpokusne_povodi

70000 25 30 JAtlasvzorektemp_selectpovodi_vzorekgdbgrid70

Start Time Wed May 15 020551 2013

Running script Script2

Output folder JAtlasvzorektemp_selectpovodi_vzorekgdb

_____________________________________________________________________

count of basin polygon to process 6

_____________________________________________________________________

RUN 1

count of basins in 1 section 3

Their ID

ID 1

ID 3

ID 6

_____________________________________________________________________

count of basin polygon to process 3

_____________________________________________________________________

RUN 2

count of basins in 2 section 1

Their ID

ID 2

_____________________________________________________________________

count of basin polygon to process 2

_____________________________________________________________________

RUN 3

count of basins in 3 section 2

Their ID

ID 4

ID 5

----- RESULT -----

Number of sections 3

Number of map sheets

in section 1 13

in section 2 1

in section 3 2

Completed script Grid

Succeeded at Wed May 15 021359 2013 (Elapsed Time 8 minutes 8 seconds

13

52 Vysledny log generalizace

Executing generalization JAtlasvzorek2011_NAZV_nadrze2011_watemsedem

NAZV_tokyVT28_finshp

JAtlasvzorek2011_NAZV_nadrze2011_watemsedem28_vypocet

projectriversedimentxlsxprojectriversediment$

Start Time Wed May 15 075624 2013

Running script generalization

Category created

Total count of river parts 2879

Count of category 1 2428

Count of category 2 118

Count of category 3 68

Count of category 4 20

Count of category 5 245

Completed script generalization

Succeeded at Wed May 15 075638 2013 (Elapsed Time 1400 seconds)

14

CESKE VYSOKE UCENI TECHNICKE V PRAZE

FAKULTA STAVEBNI

OBOR GEODEZIE A KARTOGRAFIE

Dokumentace k projektu informatika 2

Stanovenı smeru odtokuna rastrovem digitalnım modelu

a implementace algoritmudo prostredı ArcGIS

BC JAN ZAJICEK

5 cervna 2013

Obsah

Obsah 1

1 Uvod 2

2 Nejbeznejsı existujıcı algoritmy 3

3 Flow Direction D8 431 Obecny princip D8 432 Popis algoritmu D8 5

4 Popis algoritmu MDinfin 641 Obecny princip MDinfin 642 Technicke resenı MDinfin 8

5 Vysledky 1151 Realna data - Bykovice 1152 Realna data - Nucice 12

6 Zaver 13

Reference 14

7 Prılohy 1571 Bykovice a Nucice vstupnı DMT rastry 1572 Bykovice vysledky 1673 Nucice vysledky 17

1

1 Uvod

Tato dokumentace byla zpracovana v ramci predmetu Projekt Informatika 2Semestralnı prace bude pouzita jako z jedna castı autorovi diplomove praces nazvem SMODERP 2D rozsırenı resıcı vztahy soustredeneho a plosnehoodtoku na danem uzemı Duvodem zpracovanı tohoto tematu byla potrebapouzitı v diplomove praci vıce nez jednoho algoritmu pro urcenı smeruodtoku v prostredı ArcGIS V soucasne dobe ArcGIS vyuzıva algoritmusD8 viz kapitola 3 jako jediny algoritmus pro vypocet smeru odtoku Tentoalgoritmus je soucastı Hydrology tools Nastroje ze skupiny Hydrology sepouzıvajı k modelovanı chovanı toku vody na povrchu Nejbeznejsı pouzıvanadigitalnı data povrchu Zeme jsou rastry digitalnı modelu terenu DMT slozenez jednotlivych bunek pixelu Tyto DMT rastry jsou pouzity jako vstupypro ruzne charakteristiky povrchu DMT rastr je souvisly povrch obvykleodkazujıcı na povrch Zeme Presnost dat je dana rozlisenım rastru taktezvzdalenostı mezi body rastru Informace o tvaru zemskeho povrchu je uzitecnapro mnoho oboru jako je napr zemedelstvı lesnictvı zivotnı prostredı neboregionalnı planovanı Tyto obory vyzadujı pochopenı jak voda tece v ramciuzemı a jak zmeny na tomto uzemı nasledne ovlivnı jejı tok

Cılem projektu bylo naprogramovat algoritmus ktery v roce 2007 publiko-vali Jan Seibert a Brian L McGlynn s nazvem MDinfin [1] Tento algoritmusje vylepsenım stavajıcıch algoritmu pro resenı urcenı smeru odtoku na ras-tru viz kapitola 2 Pro overenı spravnosti vysledku byla pouzita realnadata dvou pozemku u obcı Bykovice a Nucice Testovanı probıhalo na ras-trech o rozlisenı 5 metru Algoritmus byl naprogramovan v jazyce Pythonv prostredı NetBeans IDE 69 Pro spustenı v ArcGISu je potreba pridatdo prostredı vytvoreny toolbox upravit aktualnı cestu ke skriptu mainpya tento model nasledne spustit Vstupem modelu je rastr DMT a vystupnıadresar do ktereho se po dobehnutı modelu ulozı vysledny rastr s hodnotamismeru odtoku 1255 Algoritmus MDinfin je testovan na verzi ArcGIS 100Na nejnovejsı verzi ArcGIS 101 ktera vysla v cervnu 2012 nenı overenakompatibilita algoritmu v dusledku nefunkcnosti vıce nez jedne verze tohotoprogramu na jednom pocıtaci

2

2 Nejbeznejsı existujıcı algoritmy

Existujı tri nejbeznejsı algoritmy kazdy odlisne resıcı problematiku odtokuvody z rastru do sousednıch bunek Prvnım z nich je algoritmus D8 z roku1984 Algoritmus je podrobne popsan v nasledujıcı kapitole 3 Jelikoz odtoknastava vzdy jen do jedne sousednı bunky dochazı casto ke koncentracivodnıch sıtı a sıtrsquo odtoku pak neodpovıda skutecnosti Na druhou stranuje jeho vyhodou jeho jednoduchost a fakt ze nedochazı k nechtene disperzijako je tomu u druheho algoritmu

Druhym algoritmem je MD8 neboli multiple flow direction algorithm MD8algoritmem je voda odvadena do vsech nıze polozenych sousednıch buneka pomer vody je rozdelen procentualne podle sklonu Ve vysledku ma algo-ritmus tendenci vytvaret vıce realisticke prostorove sıte toku nez D8 tımze nedochazı k takove koncentraci vody v sıti U D8 ma mnohem vetsıvliv maly rozdıl vysek mezi sousednımi bunkami na to ktera bunka prijmeveskerou vodu Pouzitım MD8 tyto male vyskove rozdıly nemajı zdalekatakovy vliv jelikoz je mnozstvı vody rozdeleno pomerem mezi tyto bunkyNejvetsı nevyhodou tohoto algoritmu je jeho prılisna disperze na konver-gentnıch svazıch v dusledku odtoku do vsech nıze polozenych bunek

V roce 1997 byl navrzen algoritmus pojmenovany Dinfin Davidem G Tar-botonem z americke univerzity v Utahu Byl navrzen prıstup ktery je zalozenna osmi trojuhelnıkovych ploskach viz obrazek 3 Dıky tomuto postupu jsouodstraneny limitace v podobe moznosti pouze osmi smeru odtoku z bunkyProto je algoritmus pojmenovan Dinfin jelikoz muze nastat nekonecne moznostıvysledneho smeru odtoku Tento prıstup umoznuje pouze jeden smer odtokurozdeleny mezi jednu nebo dve bunky v zavislosti na smeru odtoku

Poslednı dva zmınene algoritmy MD8 a Dinfinmajı oproti D8 nevyhodu ve vetsıcasove narocnosti vypoctu V kapitole 4 je popsan algoritmus MDinfin kteryvyuzıva vyhody MD8 algoritmu za pouzitı trojuhelnıkovych plosek obdobnejako Dinfin algoritmus

3

3 Flow Direction D8

Pro pochopenı problematiky a zjevnost rozdılu mezi algoritmy je vhodneuvest jak funguje nastroj ktery pouzıva ArcGIS Zaklad algoritmu MDinfino nemz pojednava tato dokumentace je zalozen na podobnych postupech

31 Obecny princip D8

Princip nastroje urcenı smeru odtoku (Flow Direction) ktery pouzıva prostredıArcGIS je nasledujıcı Tento nastroj (tool) vezme vstupnı rastr digitalnıhomodelu terenu neboli vyskovy rastr Provede vypocet jehoz vystupem jerastr ktery v kazde bunce rastru obsahuje hodnotu urcujıcı smer odtokuz teto bunky Hodnot je osm podle osmi sousednıch bunek do kterych muzeodtekat voda viz obrazek 1 Prave podle osmi smeru odtoku se tento prıstupnazyva D8 (eight-direction approach)

Obrazek 1 Flow Direction D8 [3]

4

32 Popis algoritmu D8

Samotny vypocet algoritmu je v zasade primitivnı Pro vsechny sousednıbunky se vypocte maximalnı sklon [3]

maximalnı sklon = rozdıl vysek vzdalenost 100

Rozdıl vysek je rozdıl vysky v aktualnım bode a konkretnı sousednı bunkyVzdalenost je vypoctena mezi stredy bunek a lisı se v zavislosti na polozesousednı bunky Pro bunky sousedıcı vrcholem je hodnota velikosti pixeluprenasobena o odmocninu ze dvou Pro zbyle bunky sousedıcı hranou jevelikost vzdalenosti rovna velikosti pixelu Po nalezenı nejstrmejsıho smeruodtoku je hodnota ulozena v podobe bitove hodnoty reprezentujıcı danysmer Pred pouzitım nastroje Flow Direction se obvykle zpracuje vstupnırastr pomocı nastroje Sink Tento algoritmus zaplnı bezodtoke oblasti rastrunejnizsı hodnotou z okolı a do teto nejnizsı sousednı bunky pak posle voduPote jiz nemuze dojıt k situaci kdy vsechny sousednı bunky k dane buncemajı vyssı hodnoty vysek a nedochazelo by tedy k odtokuVysledny rastr nemusı obsahovat pouze bunky s hodnotami 202127 [4]Jestlize nastane situace kdy ma vıce sousednıch bunek nejnizsı hodnotuvysek pak je vysledna hodnota souctem vsech smeru Napr hodnota maximalnıhosklonu bude stejna pro sousednı bunku vlevo a nahore odtok tedy budesmerem na zapad (hodnota = 16) a na sever (hodnota = 64) vysledna hod-nota bude souctem 16 a 64 tedy 84

5

4 Popis algoritmu MDinfin

41 Obecny princip MDinfinObecny postup je prevzat z [1] Stejne jako v prıpade algoritmu Dinfin bylyzavedeny trojuhelnıkove plosky pro vypocet lokalnıho sklonu a smeru pro kazdoutrojuhelnıkovou plosku Okolo stredoveho boduM bylo vytvoreno osm trojuhelnıkuviz obrazek 3 Kazdy se zbyvajıcımi dvema vrcholy P1 P2 ve dvou sousedıcıchbunkach Pro kazdy z techto trojuhelnıku je vypocten smer nejvetsıho sklonuPokud oznacıme vysky bodu M P1 P2 jako hM hP1 hP2 rozdıly vysek sevypoctou takto

z1 = hP1 minus hM z2 = hP2 minus hM (1)

Obdobne se vypoctou rozdıly v x-ovych a y-ovych souradnicıch Po vypocturozdılu jednotlivych souradnic je vypocten normalovy vektor

n =

nx

ny

nz

=

z1y2 minus z2y1z1x2 minus z2x1y1x2 minus y2x1

(2)

Smer odtoku d a sklon s na trojuhelnıkove plose se vypocte pomocı rovnice3 Hodnota nula pro d oznacuje smer osy y a hodnota 3π2 oznacuje smerosy x

d =

0 nx = 0 ny ge 0

π nx = 0 ny lt 0

π2minus arctan(

ny

nx

) nx gt 0

3π2minus arctan(

ny

nx

) nx lt 0

(3)

s = minus tan

(arccos

(nzradic

n2x + n2

y + n2z

))(4)

Jestlize nejvetsı sklon od bodu M je mimo rozpetı 0-45 (π4 radian) jepouzit sklon strmejsı k jednomu z bodu P1 P2 a zaroven i sklon je spoctenk tomuto bodu V prıpade ze oba sousednı body jsou vyse polozeny nez bodM smer nenı pro tento trojuhelnık uvazovan Po spoctenı vsech osmi smerua sklonu pro jednotlive plosky jsou tyto smery povazovany za lokalne ne-jstrmejsı pro kazdy trojuhelnık v rozsahu 45 Smery vedoucı prımo do bodu

6

P1 nebo P2 tedy ty kde d = 0 nebo d = π4 jsou uvazovany pouze vprıpade kdy obe vedlejsı sousednı bunky majı smer k bodu P1 nebo P2Tato situace je znazornena na obrazku 2

Obrazek 2 Ukazka urcenı smeru odtoku z bunky [1]

Prvnı prıpad je smer mırıcı mezi bunky 5 a 6 Druhy prıpad je smer kteryvede prımo do bunky 3 Tato situace nastane jestlize pro trojuhelnık M43vyjde lokalnı smer d = π4 a pro trojuhelnık M32 smer vyjde d = 0Pote co je smer odtoku pro bunku vypocten je celkovy odtok rozdelendo vsech vyslednych smeru na zaklade sklonu Resenı teto problematiky jevıce popsano v sekci 42 Pro smery mırıcı mezi body P1 a P2 je odtokrozdelen do dvou bunek na zaklade nevejtsıho sklonu Pomer odtoku do buneks body P1 a P2 bude v tomto poradı α245 a α145

Obrazek 3 Trojuhelnıkove plosky [1]

7

42 Technicke resenı MDinfinVyse jiz bylo zmıneno ze algoritmus je napsan v jazyce Python Algoritmusje rozdelen do dvou skriptu Prvnı z nich obsahuje funkce a druhy je hlavnıVstupem do modelu je rastr digitalnıho modelu terenu a vystupnı adresardo ktereho se ulozı finalnı rastr smeru odtoku viz obr 4 Po nactenı rastruze vstupnıch parametru je tento rastr preveden na matici NumPy pomocıfunkce

arcpy RasterToNumPyArray ( InputRaster )

NumPy [5] je rozsırenı programovacıho jazyka Python je to balıcek uzıvanypro vedecke vypocty Umoznuje podporu velkych multi-dimenzionalnıch polıa matic spolu s velkou knihovnou matematickych funkcı pro praci s temitopoli

Algoritmus cyklem projızdı vsechny prvky matice a u tech ktere majı hod-notu ruznou od NoData nalezne okolı Hledanı okolı bunky provadı funkceneighbors ta je definovana takto

def ne ighbors ( i j array x y ) return nb1 nb2 nb3 nb4 nb5 nb6 nb7 nb8

Vstupem funkce je pozice v matici dale cela matice a jejı rozmery Funkceneighbors vypocıta hodnoty vysek sousednıch osmi bunek a vratı je na vystup

Obrazek 4 Dialogove okno nastroje MDinfin

Vystup z funkce neighbors slouzı jako jeden z vstupnıch parametru pro dalsıfunkci

8

Funkce byla pojmenovana dir slope jelikoz jejım vystupem je smer odtokua sklon tohoto smeru

def d i r s l o p e ( pointM nbrs vpix sp ix ) return d i r e c t i o n s l ope

Pro kazdy trojuhelnık byla spoctena hodnota d viz vzorec 3 Hodnota s bylapo spatnych a nelogickych vysledcıch pocıtana podle jineho vzorce ktery jizdaval spravne vysledky

s0 =

radicz212y21

+z22y22

(5)

Vzorec se lisı pro kazdy trojuhelnıcek uvedeny je pro vypocet sklonu kdy sousednıbunka je severozapadnı a severnı Tımto postupem bylo zbytecne pocıtatz-tovou slozku vekotoru n vzorec 2 Byly osetreny prıpady kdy sousednıbunky aktualnıho pocıtaneho trojuhelnıku jsou obe vyse polozene nebo obemimo rastr (NoData) Dalsı prıpad nastane jestlize je jeden bod vne rastra druhy v rastru lezı Smer je potom urcen prımo do toho bodu ktery nalezırastru Taktez i sklon je pocıtan pouze mezi tımto bodem a bodem M Lokalnı smer d v kazde plosce po vypoctenı nesmı prekrocit 45 V situacize tuto hodnotu prekrocı je smeru prirazena hodnota 0 nebo 45 v zavislostina vzajemnem porovnanı vysek bodu v trojuhelnıku Takto jsou zpracovanyvsechny plosky a je zjisteno zda-li do kazdeho trojuhelnıku nastava smerodtoku nebo ne Na konci funkce dir slope se kontroluje prıpad kdy smersousednıch trojuhelnıku odkazuje presne do stejneho bodu tedy hodnotysmeru musı byt pro prvnı trojuhelnık d = 45 a pro nasledujıcı sousednıtrojuhelnık d = 0 Vystupem funkce jsou dva vektory o osmi prvcıch smera sklon pro kazdou plosku

Dalsı fazı vypoctu je zjistenı pomeru vody ktera potece do jednotlivychsmeru K vypoctu pomeru byl pouzit tento vzorec [2]

fi =sxi8sum

j=1

sxj

(6)

kde s vyznacuje sklon vypocteneho smeru konkretnı trojuhelnıkove ploskya x je promenny exponent Pokud by byl exponent zvolen 1 bude vyslednasıtrsquo obdobna jako pri pouzitı MD8 algoritmu Pri zvetsovanı exponentu xk nekonecnu bude sıtrsquo stejna jako pri pouzitı D8 metody Vychozı hodnotaexponentu byla zvolena x = 4 coz je kompromis mezi obema variantami

9

Zmena exponentu se v soucasne podobe neprojevı na vyslednem rastru je-likoz vysledek prezentuje pouze smer odtoku a ne procentualnı cast Tohotopomeru bude vyuzito az pri spojenı skriptu s 2D modelem SMODERP

V dalsı casti vypoctu je rozdelen jiz zjisteny pomer z celkoveho odtokudo dvou prıpadne pouze do jedne bunky v zavislosti na smeru odtoku dVe vysledku je vypocten vektor osmi cısel kde kazda hodnota od 0 do 1prestavuje jiz procentualnı pomer z celkoveho odtoku do kazde sousednıbunky

Pro vyslednou reprezentaci smeru odtoku na vystup byl pro kazdou bunkuvytvoren vektor obsahujıcı 1 a 0 rıkajıcı zda nastava ci nenastava odtokdo sousednı bunky Tento vektor byl preveden na celocıselnou hodnotu po-mocı funkce bool2int

def boo l 2 i n t ( x ) y = 0for i j in enumerate ( x )

i f j y += 1ltlt ireturn y

Funkce ma na vstupu vektor jedicek a nul Naprıklad pro vektor 00000111kdy voda tece na severozapad sever a severovychod se funkce chova taktoJe testovano jestli platı j = 1 tedy prvnıch pet nul vektoru funkce preskocıa pro prvnı jednicku se pricte k promenne y 20 v dalsım kroku 21 a v poslednım22 Operator vyjadruje totiz bitovy posun smerem doleva Vysledkem jena vystupu cıslo y = 1 + 2 + 4 = 7

Pro vsechny bunky byla vypoctena hodnota reprezentujıcı smer odtoku Tatohodnota se ulozı do matice a ta se nasledne prevede na vysledny rastr

f l o w d i r = arcpy NumPyArrayToRaster ( value LLcorner spix vpix rdquordquo )

value hodnota reprezentujıcı smer odtokuLLcorner souradnice leveho dolnıho rohuspix sırka pixeluvpix vyska pixelu

10

5 Vysledky

Algoritmus MDinfin byl testovan na skutecnych datech dvou pozemku u obcıNucice ve Stredoceskem kraji a Bykovice v kraji Jihomoravskem rastry jsouv prıloze 71 Oba dva rastry jsou o rozlisenı 5 metru Finalnı rastry jsouporovnavany s rastry vytvorenymi v prostredı ArcGIS nastrojem Flow Di-rection metodou D8

51 Realna data - Bykovice

Vysledne rastry Flow Direction pro uzemı Bykovice jsou uvedeny v prıloze72 Oba rastry byly pro hodnoty 202127 obarveny shodnou barvou kvulilepsı nazornosti a porovnatelnosti vysledku Rastr ktery obsahuje z celkovehopoctu 44807 bunek celkem 23655 bunek s hodnotami vysek po probehnutıalgoritmy dal nasledujıcı vysledky

FD D8 MDinfin1 3650 7372 666 9174 207 188 21 716 94 3732 791 8564 8818 1045128 9408 14983sum

23655 14983

Tabulka 1 Tabulka porovnanı obou algoritmu pro rastr Bykovic

FD je zkratka pro Flow Direction cili smer odtoku reprezentovany celocıselnouhodnotou Ostatnı hodnoty u vysledneho rastru na ktery byl pouzit algorit-mus MDinfin jsou v rozpetı 0246 V rozmezı hodnot smeru odtoku 246255se nevyskytujı zadne bunky Cas potrebny pro vykonanı skriptu byl v prıpadeD8 4 vteriny Pro algoritmus MDinfin byl cas 15 vterin

11

52 Realna data - Nucice

Vysledne rastry jsou uvedeny v prıloze 73 Opet bylo pouzito shodne obar-venı pro zakladnı smery u obou rastru Rastr Nucice obsahoval data na 82732bunkach z celkove poctu 125449 bunek Vysledky jsou pro prehlednost uve-deny v tabulce

FD D8 MDinfin1 12186 12332 12441 87034 16907 10278 9826 1642316 2516 28832 5010 241764 7788 366128 16058 25475sum

82732 55932

Tabulka 2 Tabulka porovnanı obou algoritmu pro rastr Nucic

Ostatnı hodnoty u vysledneho rastru na ktery byl pouzit algoritmusMDinfin jsou v rozpetı 0255 Cas potrebny pro vykonanı skriptu byl v prıpadeD8 6 vterin Pro algoritmus MDinfin byl cas 50 vterin

12

6 Zaver

Cılem projektu bylo vytvorit funkcnı skript obsahujıcı algoritmus pojmen-ovany MDinfin [1] ktery resı odtok do sousednıch bunek rastru Algoritmusbyl napsan v programovacım jazyce Python a testovan na realnych datechVysledky byly mırnym prekvapenım kdy zejmena hodnoty smeru 128 tedyseverovychodnıho se vyskytovaly ve vysledku velmi casto viz tabulky 1 a 2Predpokladem bylo ze se odtok rozlozı do vıce smeru a pocet bunek s hod-notami zakladnıch smeru 1248163264 a 128 bude mene nez v prıpade al-goritmu D8 K rozkladu do vıce smeru sice doslo ale pocet nekterych bunekse zakladnımi smery byl vetsı u algoritmu MDinfin

Co se tyce delky doby behu algoritmu je algoritmus MDinfin pomalejsı viz casyv kapitole 5 nez D8 z nekolika zrejmych duvodu Predevsım algoritmus D8provadı mnohem mene pocetnıch operacı z duvodu jeho mensı slozitostiviz 3 Dalsım duvodem je take rozdıl v jazyce ve kterem jsou oba algo-ritmy napsany D8 je napsan v programovacım jazyce C++ ktery na vetsıchdatech je mnohonasobne rychlejsı nez Python Prepsanım algoritmu MDinfindo jazyka C++ by mohla byt cesta k budoucımu zvysenı rychlosti pracealgoritmu

13

Reference

[1] SEIBERT Jan McGlynn BL A new triangular multiple flow di-rection algortihm for computing upslope areas from gridded digi-tal elevation models [online] [cit 13 5 2013] Dostupne ke stazenız URL lthttpciteseerxistpsueduviewdocdownloaddoi=101179977amprep=rep1amptype=pdfgt

[2] HOLMGREN Peter Multiple direction algortihms for runoff modellingin grid based elevation models An empirical evaluation [online] [cit13 5 2013] Dostupny z URL ltftpwwwlwrkthseCommonUllaMFor_Imran[1994]20holmgren20-20multiple20flow

20direction20algorithms20for20runoff20modelling20in

20grid20based20elevation20modelspdf gt

[3] ESRI ESRI WebHelp - How Flow Direction works [online] [cit13 5 2013] Dostupne z URL lthttphelparcgiscomenarcgisdesktop100helpindexhtml009z00000063000000

htmgt

[4] ESRI ESRI Webhelp - Flow Direction (Spatial Analyst) [online][cit 13 5 2013] Dostupne z URL lthttphelparcgiscomenarcgisdesktop100helpindexhtml009z00000052000000

htmgt

[5] WIKIPEDIA NumPy [online] [cit 13 5 2013] Dostupne z URLlthttpenwikipediaorgwikiNumPygt

[6] INFORMIT Working with operators [online] [cit 13 5 2013] Dos-tupne z URL lthttpwwwinformitcomarticlesarticleaspxp=2002831ampseqNum=6gt

14

7 Prılohy

71 Bykovice a Nucice vstupnı DMT rastry

Obrazek 5 DMT Bykovice

Obrazek 6 DMT Nucice

15

72 Bykovice vysledky

Obrazek 7 Flow Direction D8

Obrazek 8 Flow Direction MDinfin

16

73 Nucice vysledky

Obrazek 9 Flow Direction D8

Obrazek 10 Flow Direction MDinfin

17

Page 27: pro zac ate cn kygeo.fsv.cvut.cz/gdata/2013/pin2/e/dokumentace/... · 2013-06-05 · CESK E VYSOK E U CEN I TECHNICKE V PRAZE FAKULTA STAVEBN I OBOR GEODEZIE A KARTOGRAFIE Dokumentace

52 Vysledny log generalizace

Executing generalization JAtlasvzorek2011_NAZV_nadrze2011_watemsedem

NAZV_tokyVT28_finshp

JAtlasvzorek2011_NAZV_nadrze2011_watemsedem28_vypocet

projectriversedimentxlsxprojectriversediment$

Start Time Wed May 15 075624 2013

Running script generalization

Category created

Total count of river parts 2879

Count of category 1 2428

Count of category 2 118

Count of category 3 68

Count of category 4 20

Count of category 5 245

Completed script generalization

Succeeded at Wed May 15 075638 2013 (Elapsed Time 1400 seconds)

14

CESKE VYSOKE UCENI TECHNICKE V PRAZE

FAKULTA STAVEBNI

OBOR GEODEZIE A KARTOGRAFIE

Dokumentace k projektu informatika 2

Stanovenı smeru odtokuna rastrovem digitalnım modelu

a implementace algoritmudo prostredı ArcGIS

BC JAN ZAJICEK

5 cervna 2013

Obsah

Obsah 1

1 Uvod 2

2 Nejbeznejsı existujıcı algoritmy 3

3 Flow Direction D8 431 Obecny princip D8 432 Popis algoritmu D8 5

4 Popis algoritmu MDinfin 641 Obecny princip MDinfin 642 Technicke resenı MDinfin 8

5 Vysledky 1151 Realna data - Bykovice 1152 Realna data - Nucice 12

6 Zaver 13

Reference 14

7 Prılohy 1571 Bykovice a Nucice vstupnı DMT rastry 1572 Bykovice vysledky 1673 Nucice vysledky 17

1

1 Uvod

Tato dokumentace byla zpracovana v ramci predmetu Projekt Informatika 2Semestralnı prace bude pouzita jako z jedna castı autorovi diplomove praces nazvem SMODERP 2D rozsırenı resıcı vztahy soustredeneho a plosnehoodtoku na danem uzemı Duvodem zpracovanı tohoto tematu byla potrebapouzitı v diplomove praci vıce nez jednoho algoritmu pro urcenı smeruodtoku v prostredı ArcGIS V soucasne dobe ArcGIS vyuzıva algoritmusD8 viz kapitola 3 jako jediny algoritmus pro vypocet smeru odtoku Tentoalgoritmus je soucastı Hydrology tools Nastroje ze skupiny Hydrology sepouzıvajı k modelovanı chovanı toku vody na povrchu Nejbeznejsı pouzıvanadigitalnı data povrchu Zeme jsou rastry digitalnı modelu terenu DMT slozenez jednotlivych bunek pixelu Tyto DMT rastry jsou pouzity jako vstupypro ruzne charakteristiky povrchu DMT rastr je souvisly povrch obvykleodkazujıcı na povrch Zeme Presnost dat je dana rozlisenım rastru taktezvzdalenostı mezi body rastru Informace o tvaru zemskeho povrchu je uzitecnapro mnoho oboru jako je napr zemedelstvı lesnictvı zivotnı prostredı neboregionalnı planovanı Tyto obory vyzadujı pochopenı jak voda tece v ramciuzemı a jak zmeny na tomto uzemı nasledne ovlivnı jejı tok

Cılem projektu bylo naprogramovat algoritmus ktery v roce 2007 publiko-vali Jan Seibert a Brian L McGlynn s nazvem MDinfin [1] Tento algoritmusje vylepsenım stavajıcıch algoritmu pro resenı urcenı smeru odtoku na ras-tru viz kapitola 2 Pro overenı spravnosti vysledku byla pouzita realnadata dvou pozemku u obcı Bykovice a Nucice Testovanı probıhalo na ras-trech o rozlisenı 5 metru Algoritmus byl naprogramovan v jazyce Pythonv prostredı NetBeans IDE 69 Pro spustenı v ArcGISu je potreba pridatdo prostredı vytvoreny toolbox upravit aktualnı cestu ke skriptu mainpya tento model nasledne spustit Vstupem modelu je rastr DMT a vystupnıadresar do ktereho se po dobehnutı modelu ulozı vysledny rastr s hodnotamismeru odtoku 1255 Algoritmus MDinfin je testovan na verzi ArcGIS 100Na nejnovejsı verzi ArcGIS 101 ktera vysla v cervnu 2012 nenı overenakompatibilita algoritmu v dusledku nefunkcnosti vıce nez jedne verze tohotoprogramu na jednom pocıtaci

2

2 Nejbeznejsı existujıcı algoritmy

Existujı tri nejbeznejsı algoritmy kazdy odlisne resıcı problematiku odtokuvody z rastru do sousednıch bunek Prvnım z nich je algoritmus D8 z roku1984 Algoritmus je podrobne popsan v nasledujıcı kapitole 3 Jelikoz odtoknastava vzdy jen do jedne sousednı bunky dochazı casto ke koncentracivodnıch sıtı a sıtrsquo odtoku pak neodpovıda skutecnosti Na druhou stranuje jeho vyhodou jeho jednoduchost a fakt ze nedochazı k nechtene disperzijako je tomu u druheho algoritmu

Druhym algoritmem je MD8 neboli multiple flow direction algorithm MD8algoritmem je voda odvadena do vsech nıze polozenych sousednıch buneka pomer vody je rozdelen procentualne podle sklonu Ve vysledku ma algo-ritmus tendenci vytvaret vıce realisticke prostorove sıte toku nez D8 tımze nedochazı k takove koncentraci vody v sıti U D8 ma mnohem vetsıvliv maly rozdıl vysek mezi sousednımi bunkami na to ktera bunka prijmeveskerou vodu Pouzitım MD8 tyto male vyskove rozdıly nemajı zdalekatakovy vliv jelikoz je mnozstvı vody rozdeleno pomerem mezi tyto bunkyNejvetsı nevyhodou tohoto algoritmu je jeho prılisna disperze na konver-gentnıch svazıch v dusledku odtoku do vsech nıze polozenych bunek

V roce 1997 byl navrzen algoritmus pojmenovany Dinfin Davidem G Tar-botonem z americke univerzity v Utahu Byl navrzen prıstup ktery je zalozenna osmi trojuhelnıkovych ploskach viz obrazek 3 Dıky tomuto postupu jsouodstraneny limitace v podobe moznosti pouze osmi smeru odtoku z bunkyProto je algoritmus pojmenovan Dinfin jelikoz muze nastat nekonecne moznostıvysledneho smeru odtoku Tento prıstup umoznuje pouze jeden smer odtokurozdeleny mezi jednu nebo dve bunky v zavislosti na smeru odtoku

Poslednı dva zmınene algoritmy MD8 a Dinfinmajı oproti D8 nevyhodu ve vetsıcasove narocnosti vypoctu V kapitole 4 je popsan algoritmus MDinfin kteryvyuzıva vyhody MD8 algoritmu za pouzitı trojuhelnıkovych plosek obdobnejako Dinfin algoritmus

3

3 Flow Direction D8

Pro pochopenı problematiky a zjevnost rozdılu mezi algoritmy je vhodneuvest jak funguje nastroj ktery pouzıva ArcGIS Zaklad algoritmu MDinfino nemz pojednava tato dokumentace je zalozen na podobnych postupech

31 Obecny princip D8

Princip nastroje urcenı smeru odtoku (Flow Direction) ktery pouzıva prostredıArcGIS je nasledujıcı Tento nastroj (tool) vezme vstupnı rastr digitalnıhomodelu terenu neboli vyskovy rastr Provede vypocet jehoz vystupem jerastr ktery v kazde bunce rastru obsahuje hodnotu urcujıcı smer odtokuz teto bunky Hodnot je osm podle osmi sousednıch bunek do kterych muzeodtekat voda viz obrazek 1 Prave podle osmi smeru odtoku se tento prıstupnazyva D8 (eight-direction approach)

Obrazek 1 Flow Direction D8 [3]

4

32 Popis algoritmu D8

Samotny vypocet algoritmu je v zasade primitivnı Pro vsechny sousednıbunky se vypocte maximalnı sklon [3]

maximalnı sklon = rozdıl vysek vzdalenost 100

Rozdıl vysek je rozdıl vysky v aktualnım bode a konkretnı sousednı bunkyVzdalenost je vypoctena mezi stredy bunek a lisı se v zavislosti na polozesousednı bunky Pro bunky sousedıcı vrcholem je hodnota velikosti pixeluprenasobena o odmocninu ze dvou Pro zbyle bunky sousedıcı hranou jevelikost vzdalenosti rovna velikosti pixelu Po nalezenı nejstrmejsıho smeruodtoku je hodnota ulozena v podobe bitove hodnoty reprezentujıcı danysmer Pred pouzitım nastroje Flow Direction se obvykle zpracuje vstupnırastr pomocı nastroje Sink Tento algoritmus zaplnı bezodtoke oblasti rastrunejnizsı hodnotou z okolı a do teto nejnizsı sousednı bunky pak posle voduPote jiz nemuze dojıt k situaci kdy vsechny sousednı bunky k dane buncemajı vyssı hodnoty vysek a nedochazelo by tedy k odtokuVysledny rastr nemusı obsahovat pouze bunky s hodnotami 202127 [4]Jestlize nastane situace kdy ma vıce sousednıch bunek nejnizsı hodnotuvysek pak je vysledna hodnota souctem vsech smeru Napr hodnota maximalnıhosklonu bude stejna pro sousednı bunku vlevo a nahore odtok tedy budesmerem na zapad (hodnota = 16) a na sever (hodnota = 64) vysledna hod-nota bude souctem 16 a 64 tedy 84

5

4 Popis algoritmu MDinfin

41 Obecny princip MDinfinObecny postup je prevzat z [1] Stejne jako v prıpade algoritmu Dinfin bylyzavedeny trojuhelnıkove plosky pro vypocet lokalnıho sklonu a smeru pro kazdoutrojuhelnıkovou plosku Okolo stredoveho boduM bylo vytvoreno osm trojuhelnıkuviz obrazek 3 Kazdy se zbyvajıcımi dvema vrcholy P1 P2 ve dvou sousedıcıchbunkach Pro kazdy z techto trojuhelnıku je vypocten smer nejvetsıho sklonuPokud oznacıme vysky bodu M P1 P2 jako hM hP1 hP2 rozdıly vysek sevypoctou takto

z1 = hP1 minus hM z2 = hP2 minus hM (1)

Obdobne se vypoctou rozdıly v x-ovych a y-ovych souradnicıch Po vypocturozdılu jednotlivych souradnic je vypocten normalovy vektor

n =

nx

ny

nz

=

z1y2 minus z2y1z1x2 minus z2x1y1x2 minus y2x1

(2)

Smer odtoku d a sklon s na trojuhelnıkove plose se vypocte pomocı rovnice3 Hodnota nula pro d oznacuje smer osy y a hodnota 3π2 oznacuje smerosy x

d =

0 nx = 0 ny ge 0

π nx = 0 ny lt 0

π2minus arctan(

ny

nx

) nx gt 0

3π2minus arctan(

ny

nx

) nx lt 0

(3)

s = minus tan

(arccos

(nzradic

n2x + n2

y + n2z

))(4)

Jestlize nejvetsı sklon od bodu M je mimo rozpetı 0-45 (π4 radian) jepouzit sklon strmejsı k jednomu z bodu P1 P2 a zaroven i sklon je spoctenk tomuto bodu V prıpade ze oba sousednı body jsou vyse polozeny nez bodM smer nenı pro tento trojuhelnık uvazovan Po spoctenı vsech osmi smerua sklonu pro jednotlive plosky jsou tyto smery povazovany za lokalne ne-jstrmejsı pro kazdy trojuhelnık v rozsahu 45 Smery vedoucı prımo do bodu

6

P1 nebo P2 tedy ty kde d = 0 nebo d = π4 jsou uvazovany pouze vprıpade kdy obe vedlejsı sousednı bunky majı smer k bodu P1 nebo P2Tato situace je znazornena na obrazku 2

Obrazek 2 Ukazka urcenı smeru odtoku z bunky [1]

Prvnı prıpad je smer mırıcı mezi bunky 5 a 6 Druhy prıpad je smer kteryvede prımo do bunky 3 Tato situace nastane jestlize pro trojuhelnık M43vyjde lokalnı smer d = π4 a pro trojuhelnık M32 smer vyjde d = 0Pote co je smer odtoku pro bunku vypocten je celkovy odtok rozdelendo vsech vyslednych smeru na zaklade sklonu Resenı teto problematiky jevıce popsano v sekci 42 Pro smery mırıcı mezi body P1 a P2 je odtokrozdelen do dvou bunek na zaklade nevejtsıho sklonu Pomer odtoku do buneks body P1 a P2 bude v tomto poradı α245 a α145

Obrazek 3 Trojuhelnıkove plosky [1]

7

42 Technicke resenı MDinfinVyse jiz bylo zmıneno ze algoritmus je napsan v jazyce Python Algoritmusje rozdelen do dvou skriptu Prvnı z nich obsahuje funkce a druhy je hlavnıVstupem do modelu je rastr digitalnıho modelu terenu a vystupnı adresardo ktereho se ulozı finalnı rastr smeru odtoku viz obr 4 Po nactenı rastruze vstupnıch parametru je tento rastr preveden na matici NumPy pomocıfunkce

arcpy RasterToNumPyArray ( InputRaster )

NumPy [5] je rozsırenı programovacıho jazyka Python je to balıcek uzıvanypro vedecke vypocty Umoznuje podporu velkych multi-dimenzionalnıch polıa matic spolu s velkou knihovnou matematickych funkcı pro praci s temitopoli

Algoritmus cyklem projızdı vsechny prvky matice a u tech ktere majı hod-notu ruznou od NoData nalezne okolı Hledanı okolı bunky provadı funkceneighbors ta je definovana takto

def ne ighbors ( i j array x y ) return nb1 nb2 nb3 nb4 nb5 nb6 nb7 nb8

Vstupem funkce je pozice v matici dale cela matice a jejı rozmery Funkceneighbors vypocıta hodnoty vysek sousednıch osmi bunek a vratı je na vystup

Obrazek 4 Dialogove okno nastroje MDinfin

Vystup z funkce neighbors slouzı jako jeden z vstupnıch parametru pro dalsıfunkci

8

Funkce byla pojmenovana dir slope jelikoz jejım vystupem je smer odtokua sklon tohoto smeru

def d i r s l o p e ( pointM nbrs vpix sp ix ) return d i r e c t i o n s l ope

Pro kazdy trojuhelnık byla spoctena hodnota d viz vzorec 3 Hodnota s bylapo spatnych a nelogickych vysledcıch pocıtana podle jineho vzorce ktery jizdaval spravne vysledky

s0 =

radicz212y21

+z22y22

(5)

Vzorec se lisı pro kazdy trojuhelnıcek uvedeny je pro vypocet sklonu kdy sousednıbunka je severozapadnı a severnı Tımto postupem bylo zbytecne pocıtatz-tovou slozku vekotoru n vzorec 2 Byly osetreny prıpady kdy sousednıbunky aktualnıho pocıtaneho trojuhelnıku jsou obe vyse polozene nebo obemimo rastr (NoData) Dalsı prıpad nastane jestlize je jeden bod vne rastra druhy v rastru lezı Smer je potom urcen prımo do toho bodu ktery nalezırastru Taktez i sklon je pocıtan pouze mezi tımto bodem a bodem M Lokalnı smer d v kazde plosce po vypoctenı nesmı prekrocit 45 V situacize tuto hodnotu prekrocı je smeru prirazena hodnota 0 nebo 45 v zavislostina vzajemnem porovnanı vysek bodu v trojuhelnıku Takto jsou zpracovanyvsechny plosky a je zjisteno zda-li do kazdeho trojuhelnıku nastava smerodtoku nebo ne Na konci funkce dir slope se kontroluje prıpad kdy smersousednıch trojuhelnıku odkazuje presne do stejneho bodu tedy hodnotysmeru musı byt pro prvnı trojuhelnık d = 45 a pro nasledujıcı sousednıtrojuhelnık d = 0 Vystupem funkce jsou dva vektory o osmi prvcıch smera sklon pro kazdou plosku

Dalsı fazı vypoctu je zjistenı pomeru vody ktera potece do jednotlivychsmeru K vypoctu pomeru byl pouzit tento vzorec [2]

fi =sxi8sum

j=1

sxj

(6)

kde s vyznacuje sklon vypocteneho smeru konkretnı trojuhelnıkove ploskya x je promenny exponent Pokud by byl exponent zvolen 1 bude vyslednasıtrsquo obdobna jako pri pouzitı MD8 algoritmu Pri zvetsovanı exponentu xk nekonecnu bude sıtrsquo stejna jako pri pouzitı D8 metody Vychozı hodnotaexponentu byla zvolena x = 4 coz je kompromis mezi obema variantami

9

Zmena exponentu se v soucasne podobe neprojevı na vyslednem rastru je-likoz vysledek prezentuje pouze smer odtoku a ne procentualnı cast Tohotopomeru bude vyuzito az pri spojenı skriptu s 2D modelem SMODERP

V dalsı casti vypoctu je rozdelen jiz zjisteny pomer z celkoveho odtokudo dvou prıpadne pouze do jedne bunky v zavislosti na smeru odtoku dVe vysledku je vypocten vektor osmi cısel kde kazda hodnota od 0 do 1prestavuje jiz procentualnı pomer z celkoveho odtoku do kazde sousednıbunky

Pro vyslednou reprezentaci smeru odtoku na vystup byl pro kazdou bunkuvytvoren vektor obsahujıcı 1 a 0 rıkajıcı zda nastava ci nenastava odtokdo sousednı bunky Tento vektor byl preveden na celocıselnou hodnotu po-mocı funkce bool2int

def boo l 2 i n t ( x ) y = 0for i j in enumerate ( x )

i f j y += 1ltlt ireturn y

Funkce ma na vstupu vektor jedicek a nul Naprıklad pro vektor 00000111kdy voda tece na severozapad sever a severovychod se funkce chova taktoJe testovano jestli platı j = 1 tedy prvnıch pet nul vektoru funkce preskocıa pro prvnı jednicku se pricte k promenne y 20 v dalsım kroku 21 a v poslednım22 Operator vyjadruje totiz bitovy posun smerem doleva Vysledkem jena vystupu cıslo y = 1 + 2 + 4 = 7

Pro vsechny bunky byla vypoctena hodnota reprezentujıcı smer odtoku Tatohodnota se ulozı do matice a ta se nasledne prevede na vysledny rastr

f l o w d i r = arcpy NumPyArrayToRaster ( value LLcorner spix vpix rdquordquo )

value hodnota reprezentujıcı smer odtokuLLcorner souradnice leveho dolnıho rohuspix sırka pixeluvpix vyska pixelu

10

5 Vysledky

Algoritmus MDinfin byl testovan na skutecnych datech dvou pozemku u obcıNucice ve Stredoceskem kraji a Bykovice v kraji Jihomoravskem rastry jsouv prıloze 71 Oba dva rastry jsou o rozlisenı 5 metru Finalnı rastry jsouporovnavany s rastry vytvorenymi v prostredı ArcGIS nastrojem Flow Di-rection metodou D8

51 Realna data - Bykovice

Vysledne rastry Flow Direction pro uzemı Bykovice jsou uvedeny v prıloze72 Oba rastry byly pro hodnoty 202127 obarveny shodnou barvou kvulilepsı nazornosti a porovnatelnosti vysledku Rastr ktery obsahuje z celkovehopoctu 44807 bunek celkem 23655 bunek s hodnotami vysek po probehnutıalgoritmy dal nasledujıcı vysledky

FD D8 MDinfin1 3650 7372 666 9174 207 188 21 716 94 3732 791 8564 8818 1045128 9408 14983sum

23655 14983

Tabulka 1 Tabulka porovnanı obou algoritmu pro rastr Bykovic

FD je zkratka pro Flow Direction cili smer odtoku reprezentovany celocıselnouhodnotou Ostatnı hodnoty u vysledneho rastru na ktery byl pouzit algorit-mus MDinfin jsou v rozpetı 0246 V rozmezı hodnot smeru odtoku 246255se nevyskytujı zadne bunky Cas potrebny pro vykonanı skriptu byl v prıpadeD8 4 vteriny Pro algoritmus MDinfin byl cas 15 vterin

11

52 Realna data - Nucice

Vysledne rastry jsou uvedeny v prıloze 73 Opet bylo pouzito shodne obar-venı pro zakladnı smery u obou rastru Rastr Nucice obsahoval data na 82732bunkach z celkove poctu 125449 bunek Vysledky jsou pro prehlednost uve-deny v tabulce

FD D8 MDinfin1 12186 12332 12441 87034 16907 10278 9826 1642316 2516 28832 5010 241764 7788 366128 16058 25475sum

82732 55932

Tabulka 2 Tabulka porovnanı obou algoritmu pro rastr Nucic

Ostatnı hodnoty u vysledneho rastru na ktery byl pouzit algoritmusMDinfin jsou v rozpetı 0255 Cas potrebny pro vykonanı skriptu byl v prıpadeD8 6 vterin Pro algoritmus MDinfin byl cas 50 vterin

12

6 Zaver

Cılem projektu bylo vytvorit funkcnı skript obsahujıcı algoritmus pojmen-ovany MDinfin [1] ktery resı odtok do sousednıch bunek rastru Algoritmusbyl napsan v programovacım jazyce Python a testovan na realnych datechVysledky byly mırnym prekvapenım kdy zejmena hodnoty smeru 128 tedyseverovychodnıho se vyskytovaly ve vysledku velmi casto viz tabulky 1 a 2Predpokladem bylo ze se odtok rozlozı do vıce smeru a pocet bunek s hod-notami zakladnıch smeru 1248163264 a 128 bude mene nez v prıpade al-goritmu D8 K rozkladu do vıce smeru sice doslo ale pocet nekterych bunekse zakladnımi smery byl vetsı u algoritmu MDinfin

Co se tyce delky doby behu algoritmu je algoritmus MDinfin pomalejsı viz casyv kapitole 5 nez D8 z nekolika zrejmych duvodu Predevsım algoritmus D8provadı mnohem mene pocetnıch operacı z duvodu jeho mensı slozitostiviz 3 Dalsım duvodem je take rozdıl v jazyce ve kterem jsou oba algo-ritmy napsany D8 je napsan v programovacım jazyce C++ ktery na vetsıchdatech je mnohonasobne rychlejsı nez Python Prepsanım algoritmu MDinfindo jazyka C++ by mohla byt cesta k budoucımu zvysenı rychlosti pracealgoritmu

13

Reference

[1] SEIBERT Jan McGlynn BL A new triangular multiple flow di-rection algortihm for computing upslope areas from gridded digi-tal elevation models [online] [cit 13 5 2013] Dostupne ke stazenız URL lthttpciteseerxistpsueduviewdocdownloaddoi=101179977amprep=rep1amptype=pdfgt

[2] HOLMGREN Peter Multiple direction algortihms for runoff modellingin grid based elevation models An empirical evaluation [online] [cit13 5 2013] Dostupny z URL ltftpwwwlwrkthseCommonUllaMFor_Imran[1994]20holmgren20-20multiple20flow

20direction20algorithms20for20runoff20modelling20in

20grid20based20elevation20modelspdf gt

[3] ESRI ESRI WebHelp - How Flow Direction works [online] [cit13 5 2013] Dostupne z URL lthttphelparcgiscomenarcgisdesktop100helpindexhtml009z00000063000000

htmgt

[4] ESRI ESRI Webhelp - Flow Direction (Spatial Analyst) [online][cit 13 5 2013] Dostupne z URL lthttphelparcgiscomenarcgisdesktop100helpindexhtml009z00000052000000

htmgt

[5] WIKIPEDIA NumPy [online] [cit 13 5 2013] Dostupne z URLlthttpenwikipediaorgwikiNumPygt

[6] INFORMIT Working with operators [online] [cit 13 5 2013] Dos-tupne z URL lthttpwwwinformitcomarticlesarticleaspxp=2002831ampseqNum=6gt

14

7 Prılohy

71 Bykovice a Nucice vstupnı DMT rastry

Obrazek 5 DMT Bykovice

Obrazek 6 DMT Nucice

15

72 Bykovice vysledky

Obrazek 7 Flow Direction D8

Obrazek 8 Flow Direction MDinfin

16

73 Nucice vysledky

Obrazek 9 Flow Direction D8

Obrazek 10 Flow Direction MDinfin

17

Page 28: pro zac ate cn kygeo.fsv.cvut.cz/gdata/2013/pin2/e/dokumentace/... · 2013-06-05 · CESK E VYSOK E U CEN I TECHNICKE V PRAZE FAKULTA STAVEBN I OBOR GEODEZIE A KARTOGRAFIE Dokumentace

CESKE VYSOKE UCENI TECHNICKE V PRAZE

FAKULTA STAVEBNI

OBOR GEODEZIE A KARTOGRAFIE

Dokumentace k projektu informatika 2

Stanovenı smeru odtokuna rastrovem digitalnım modelu

a implementace algoritmudo prostredı ArcGIS

BC JAN ZAJICEK

5 cervna 2013

Obsah

Obsah 1

1 Uvod 2

2 Nejbeznejsı existujıcı algoritmy 3

3 Flow Direction D8 431 Obecny princip D8 432 Popis algoritmu D8 5

4 Popis algoritmu MDinfin 641 Obecny princip MDinfin 642 Technicke resenı MDinfin 8

5 Vysledky 1151 Realna data - Bykovice 1152 Realna data - Nucice 12

6 Zaver 13

Reference 14

7 Prılohy 1571 Bykovice a Nucice vstupnı DMT rastry 1572 Bykovice vysledky 1673 Nucice vysledky 17

1

1 Uvod

Tato dokumentace byla zpracovana v ramci predmetu Projekt Informatika 2Semestralnı prace bude pouzita jako z jedna castı autorovi diplomove praces nazvem SMODERP 2D rozsırenı resıcı vztahy soustredeneho a plosnehoodtoku na danem uzemı Duvodem zpracovanı tohoto tematu byla potrebapouzitı v diplomove praci vıce nez jednoho algoritmu pro urcenı smeruodtoku v prostredı ArcGIS V soucasne dobe ArcGIS vyuzıva algoritmusD8 viz kapitola 3 jako jediny algoritmus pro vypocet smeru odtoku Tentoalgoritmus je soucastı Hydrology tools Nastroje ze skupiny Hydrology sepouzıvajı k modelovanı chovanı toku vody na povrchu Nejbeznejsı pouzıvanadigitalnı data povrchu Zeme jsou rastry digitalnı modelu terenu DMT slozenez jednotlivych bunek pixelu Tyto DMT rastry jsou pouzity jako vstupypro ruzne charakteristiky povrchu DMT rastr je souvisly povrch obvykleodkazujıcı na povrch Zeme Presnost dat je dana rozlisenım rastru taktezvzdalenostı mezi body rastru Informace o tvaru zemskeho povrchu je uzitecnapro mnoho oboru jako je napr zemedelstvı lesnictvı zivotnı prostredı neboregionalnı planovanı Tyto obory vyzadujı pochopenı jak voda tece v ramciuzemı a jak zmeny na tomto uzemı nasledne ovlivnı jejı tok

Cılem projektu bylo naprogramovat algoritmus ktery v roce 2007 publiko-vali Jan Seibert a Brian L McGlynn s nazvem MDinfin [1] Tento algoritmusje vylepsenım stavajıcıch algoritmu pro resenı urcenı smeru odtoku na ras-tru viz kapitola 2 Pro overenı spravnosti vysledku byla pouzita realnadata dvou pozemku u obcı Bykovice a Nucice Testovanı probıhalo na ras-trech o rozlisenı 5 metru Algoritmus byl naprogramovan v jazyce Pythonv prostredı NetBeans IDE 69 Pro spustenı v ArcGISu je potreba pridatdo prostredı vytvoreny toolbox upravit aktualnı cestu ke skriptu mainpya tento model nasledne spustit Vstupem modelu je rastr DMT a vystupnıadresar do ktereho se po dobehnutı modelu ulozı vysledny rastr s hodnotamismeru odtoku 1255 Algoritmus MDinfin je testovan na verzi ArcGIS 100Na nejnovejsı verzi ArcGIS 101 ktera vysla v cervnu 2012 nenı overenakompatibilita algoritmu v dusledku nefunkcnosti vıce nez jedne verze tohotoprogramu na jednom pocıtaci

2

2 Nejbeznejsı existujıcı algoritmy

Existujı tri nejbeznejsı algoritmy kazdy odlisne resıcı problematiku odtokuvody z rastru do sousednıch bunek Prvnım z nich je algoritmus D8 z roku1984 Algoritmus je podrobne popsan v nasledujıcı kapitole 3 Jelikoz odtoknastava vzdy jen do jedne sousednı bunky dochazı casto ke koncentracivodnıch sıtı a sıtrsquo odtoku pak neodpovıda skutecnosti Na druhou stranuje jeho vyhodou jeho jednoduchost a fakt ze nedochazı k nechtene disperzijako je tomu u druheho algoritmu

Druhym algoritmem je MD8 neboli multiple flow direction algorithm MD8algoritmem je voda odvadena do vsech nıze polozenych sousednıch buneka pomer vody je rozdelen procentualne podle sklonu Ve vysledku ma algo-ritmus tendenci vytvaret vıce realisticke prostorove sıte toku nez D8 tımze nedochazı k takove koncentraci vody v sıti U D8 ma mnohem vetsıvliv maly rozdıl vysek mezi sousednımi bunkami na to ktera bunka prijmeveskerou vodu Pouzitım MD8 tyto male vyskove rozdıly nemajı zdalekatakovy vliv jelikoz je mnozstvı vody rozdeleno pomerem mezi tyto bunkyNejvetsı nevyhodou tohoto algoritmu je jeho prılisna disperze na konver-gentnıch svazıch v dusledku odtoku do vsech nıze polozenych bunek

V roce 1997 byl navrzen algoritmus pojmenovany Dinfin Davidem G Tar-botonem z americke univerzity v Utahu Byl navrzen prıstup ktery je zalozenna osmi trojuhelnıkovych ploskach viz obrazek 3 Dıky tomuto postupu jsouodstraneny limitace v podobe moznosti pouze osmi smeru odtoku z bunkyProto je algoritmus pojmenovan Dinfin jelikoz muze nastat nekonecne moznostıvysledneho smeru odtoku Tento prıstup umoznuje pouze jeden smer odtokurozdeleny mezi jednu nebo dve bunky v zavislosti na smeru odtoku

Poslednı dva zmınene algoritmy MD8 a Dinfinmajı oproti D8 nevyhodu ve vetsıcasove narocnosti vypoctu V kapitole 4 je popsan algoritmus MDinfin kteryvyuzıva vyhody MD8 algoritmu za pouzitı trojuhelnıkovych plosek obdobnejako Dinfin algoritmus

3

3 Flow Direction D8

Pro pochopenı problematiky a zjevnost rozdılu mezi algoritmy je vhodneuvest jak funguje nastroj ktery pouzıva ArcGIS Zaklad algoritmu MDinfino nemz pojednava tato dokumentace je zalozen na podobnych postupech

31 Obecny princip D8

Princip nastroje urcenı smeru odtoku (Flow Direction) ktery pouzıva prostredıArcGIS je nasledujıcı Tento nastroj (tool) vezme vstupnı rastr digitalnıhomodelu terenu neboli vyskovy rastr Provede vypocet jehoz vystupem jerastr ktery v kazde bunce rastru obsahuje hodnotu urcujıcı smer odtokuz teto bunky Hodnot je osm podle osmi sousednıch bunek do kterych muzeodtekat voda viz obrazek 1 Prave podle osmi smeru odtoku se tento prıstupnazyva D8 (eight-direction approach)

Obrazek 1 Flow Direction D8 [3]

4

32 Popis algoritmu D8

Samotny vypocet algoritmu je v zasade primitivnı Pro vsechny sousednıbunky se vypocte maximalnı sklon [3]

maximalnı sklon = rozdıl vysek vzdalenost 100

Rozdıl vysek je rozdıl vysky v aktualnım bode a konkretnı sousednı bunkyVzdalenost je vypoctena mezi stredy bunek a lisı se v zavislosti na polozesousednı bunky Pro bunky sousedıcı vrcholem je hodnota velikosti pixeluprenasobena o odmocninu ze dvou Pro zbyle bunky sousedıcı hranou jevelikost vzdalenosti rovna velikosti pixelu Po nalezenı nejstrmejsıho smeruodtoku je hodnota ulozena v podobe bitove hodnoty reprezentujıcı danysmer Pred pouzitım nastroje Flow Direction se obvykle zpracuje vstupnırastr pomocı nastroje Sink Tento algoritmus zaplnı bezodtoke oblasti rastrunejnizsı hodnotou z okolı a do teto nejnizsı sousednı bunky pak posle voduPote jiz nemuze dojıt k situaci kdy vsechny sousednı bunky k dane buncemajı vyssı hodnoty vysek a nedochazelo by tedy k odtokuVysledny rastr nemusı obsahovat pouze bunky s hodnotami 202127 [4]Jestlize nastane situace kdy ma vıce sousednıch bunek nejnizsı hodnotuvysek pak je vysledna hodnota souctem vsech smeru Napr hodnota maximalnıhosklonu bude stejna pro sousednı bunku vlevo a nahore odtok tedy budesmerem na zapad (hodnota = 16) a na sever (hodnota = 64) vysledna hod-nota bude souctem 16 a 64 tedy 84

5

4 Popis algoritmu MDinfin

41 Obecny princip MDinfinObecny postup je prevzat z [1] Stejne jako v prıpade algoritmu Dinfin bylyzavedeny trojuhelnıkove plosky pro vypocet lokalnıho sklonu a smeru pro kazdoutrojuhelnıkovou plosku Okolo stredoveho boduM bylo vytvoreno osm trojuhelnıkuviz obrazek 3 Kazdy se zbyvajıcımi dvema vrcholy P1 P2 ve dvou sousedıcıchbunkach Pro kazdy z techto trojuhelnıku je vypocten smer nejvetsıho sklonuPokud oznacıme vysky bodu M P1 P2 jako hM hP1 hP2 rozdıly vysek sevypoctou takto

z1 = hP1 minus hM z2 = hP2 minus hM (1)

Obdobne se vypoctou rozdıly v x-ovych a y-ovych souradnicıch Po vypocturozdılu jednotlivych souradnic je vypocten normalovy vektor

n =

nx

ny

nz

=

z1y2 minus z2y1z1x2 minus z2x1y1x2 minus y2x1

(2)

Smer odtoku d a sklon s na trojuhelnıkove plose se vypocte pomocı rovnice3 Hodnota nula pro d oznacuje smer osy y a hodnota 3π2 oznacuje smerosy x

d =

0 nx = 0 ny ge 0

π nx = 0 ny lt 0

π2minus arctan(

ny

nx

) nx gt 0

3π2minus arctan(

ny

nx

) nx lt 0

(3)

s = minus tan

(arccos

(nzradic

n2x + n2

y + n2z

))(4)

Jestlize nejvetsı sklon od bodu M je mimo rozpetı 0-45 (π4 radian) jepouzit sklon strmejsı k jednomu z bodu P1 P2 a zaroven i sklon je spoctenk tomuto bodu V prıpade ze oba sousednı body jsou vyse polozeny nez bodM smer nenı pro tento trojuhelnık uvazovan Po spoctenı vsech osmi smerua sklonu pro jednotlive plosky jsou tyto smery povazovany za lokalne ne-jstrmejsı pro kazdy trojuhelnık v rozsahu 45 Smery vedoucı prımo do bodu

6

P1 nebo P2 tedy ty kde d = 0 nebo d = π4 jsou uvazovany pouze vprıpade kdy obe vedlejsı sousednı bunky majı smer k bodu P1 nebo P2Tato situace je znazornena na obrazku 2

Obrazek 2 Ukazka urcenı smeru odtoku z bunky [1]

Prvnı prıpad je smer mırıcı mezi bunky 5 a 6 Druhy prıpad je smer kteryvede prımo do bunky 3 Tato situace nastane jestlize pro trojuhelnık M43vyjde lokalnı smer d = π4 a pro trojuhelnık M32 smer vyjde d = 0Pote co je smer odtoku pro bunku vypocten je celkovy odtok rozdelendo vsech vyslednych smeru na zaklade sklonu Resenı teto problematiky jevıce popsano v sekci 42 Pro smery mırıcı mezi body P1 a P2 je odtokrozdelen do dvou bunek na zaklade nevejtsıho sklonu Pomer odtoku do buneks body P1 a P2 bude v tomto poradı α245 a α145

Obrazek 3 Trojuhelnıkove plosky [1]

7

42 Technicke resenı MDinfinVyse jiz bylo zmıneno ze algoritmus je napsan v jazyce Python Algoritmusje rozdelen do dvou skriptu Prvnı z nich obsahuje funkce a druhy je hlavnıVstupem do modelu je rastr digitalnıho modelu terenu a vystupnı adresardo ktereho se ulozı finalnı rastr smeru odtoku viz obr 4 Po nactenı rastruze vstupnıch parametru je tento rastr preveden na matici NumPy pomocıfunkce

arcpy RasterToNumPyArray ( InputRaster )

NumPy [5] je rozsırenı programovacıho jazyka Python je to balıcek uzıvanypro vedecke vypocty Umoznuje podporu velkych multi-dimenzionalnıch polıa matic spolu s velkou knihovnou matematickych funkcı pro praci s temitopoli

Algoritmus cyklem projızdı vsechny prvky matice a u tech ktere majı hod-notu ruznou od NoData nalezne okolı Hledanı okolı bunky provadı funkceneighbors ta je definovana takto

def ne ighbors ( i j array x y ) return nb1 nb2 nb3 nb4 nb5 nb6 nb7 nb8

Vstupem funkce je pozice v matici dale cela matice a jejı rozmery Funkceneighbors vypocıta hodnoty vysek sousednıch osmi bunek a vratı je na vystup

Obrazek 4 Dialogove okno nastroje MDinfin

Vystup z funkce neighbors slouzı jako jeden z vstupnıch parametru pro dalsıfunkci

8

Funkce byla pojmenovana dir slope jelikoz jejım vystupem je smer odtokua sklon tohoto smeru

def d i r s l o p e ( pointM nbrs vpix sp ix ) return d i r e c t i o n s l ope

Pro kazdy trojuhelnık byla spoctena hodnota d viz vzorec 3 Hodnota s bylapo spatnych a nelogickych vysledcıch pocıtana podle jineho vzorce ktery jizdaval spravne vysledky

s0 =

radicz212y21

+z22y22

(5)

Vzorec se lisı pro kazdy trojuhelnıcek uvedeny je pro vypocet sklonu kdy sousednıbunka je severozapadnı a severnı Tımto postupem bylo zbytecne pocıtatz-tovou slozku vekotoru n vzorec 2 Byly osetreny prıpady kdy sousednıbunky aktualnıho pocıtaneho trojuhelnıku jsou obe vyse polozene nebo obemimo rastr (NoData) Dalsı prıpad nastane jestlize je jeden bod vne rastra druhy v rastru lezı Smer je potom urcen prımo do toho bodu ktery nalezırastru Taktez i sklon je pocıtan pouze mezi tımto bodem a bodem M Lokalnı smer d v kazde plosce po vypoctenı nesmı prekrocit 45 V situacize tuto hodnotu prekrocı je smeru prirazena hodnota 0 nebo 45 v zavislostina vzajemnem porovnanı vysek bodu v trojuhelnıku Takto jsou zpracovanyvsechny plosky a je zjisteno zda-li do kazdeho trojuhelnıku nastava smerodtoku nebo ne Na konci funkce dir slope se kontroluje prıpad kdy smersousednıch trojuhelnıku odkazuje presne do stejneho bodu tedy hodnotysmeru musı byt pro prvnı trojuhelnık d = 45 a pro nasledujıcı sousednıtrojuhelnık d = 0 Vystupem funkce jsou dva vektory o osmi prvcıch smera sklon pro kazdou plosku

Dalsı fazı vypoctu je zjistenı pomeru vody ktera potece do jednotlivychsmeru K vypoctu pomeru byl pouzit tento vzorec [2]

fi =sxi8sum

j=1

sxj

(6)

kde s vyznacuje sklon vypocteneho smeru konkretnı trojuhelnıkove ploskya x je promenny exponent Pokud by byl exponent zvolen 1 bude vyslednasıtrsquo obdobna jako pri pouzitı MD8 algoritmu Pri zvetsovanı exponentu xk nekonecnu bude sıtrsquo stejna jako pri pouzitı D8 metody Vychozı hodnotaexponentu byla zvolena x = 4 coz je kompromis mezi obema variantami

9

Zmena exponentu se v soucasne podobe neprojevı na vyslednem rastru je-likoz vysledek prezentuje pouze smer odtoku a ne procentualnı cast Tohotopomeru bude vyuzito az pri spojenı skriptu s 2D modelem SMODERP

V dalsı casti vypoctu je rozdelen jiz zjisteny pomer z celkoveho odtokudo dvou prıpadne pouze do jedne bunky v zavislosti na smeru odtoku dVe vysledku je vypocten vektor osmi cısel kde kazda hodnota od 0 do 1prestavuje jiz procentualnı pomer z celkoveho odtoku do kazde sousednıbunky

Pro vyslednou reprezentaci smeru odtoku na vystup byl pro kazdou bunkuvytvoren vektor obsahujıcı 1 a 0 rıkajıcı zda nastava ci nenastava odtokdo sousednı bunky Tento vektor byl preveden na celocıselnou hodnotu po-mocı funkce bool2int

def boo l 2 i n t ( x ) y = 0for i j in enumerate ( x )

i f j y += 1ltlt ireturn y

Funkce ma na vstupu vektor jedicek a nul Naprıklad pro vektor 00000111kdy voda tece na severozapad sever a severovychod se funkce chova taktoJe testovano jestli platı j = 1 tedy prvnıch pet nul vektoru funkce preskocıa pro prvnı jednicku se pricte k promenne y 20 v dalsım kroku 21 a v poslednım22 Operator vyjadruje totiz bitovy posun smerem doleva Vysledkem jena vystupu cıslo y = 1 + 2 + 4 = 7

Pro vsechny bunky byla vypoctena hodnota reprezentujıcı smer odtoku Tatohodnota se ulozı do matice a ta se nasledne prevede na vysledny rastr

f l o w d i r = arcpy NumPyArrayToRaster ( value LLcorner spix vpix rdquordquo )

value hodnota reprezentujıcı smer odtokuLLcorner souradnice leveho dolnıho rohuspix sırka pixeluvpix vyska pixelu

10

5 Vysledky

Algoritmus MDinfin byl testovan na skutecnych datech dvou pozemku u obcıNucice ve Stredoceskem kraji a Bykovice v kraji Jihomoravskem rastry jsouv prıloze 71 Oba dva rastry jsou o rozlisenı 5 metru Finalnı rastry jsouporovnavany s rastry vytvorenymi v prostredı ArcGIS nastrojem Flow Di-rection metodou D8

51 Realna data - Bykovice

Vysledne rastry Flow Direction pro uzemı Bykovice jsou uvedeny v prıloze72 Oba rastry byly pro hodnoty 202127 obarveny shodnou barvou kvulilepsı nazornosti a porovnatelnosti vysledku Rastr ktery obsahuje z celkovehopoctu 44807 bunek celkem 23655 bunek s hodnotami vysek po probehnutıalgoritmy dal nasledujıcı vysledky

FD D8 MDinfin1 3650 7372 666 9174 207 188 21 716 94 3732 791 8564 8818 1045128 9408 14983sum

23655 14983

Tabulka 1 Tabulka porovnanı obou algoritmu pro rastr Bykovic

FD je zkratka pro Flow Direction cili smer odtoku reprezentovany celocıselnouhodnotou Ostatnı hodnoty u vysledneho rastru na ktery byl pouzit algorit-mus MDinfin jsou v rozpetı 0246 V rozmezı hodnot smeru odtoku 246255se nevyskytujı zadne bunky Cas potrebny pro vykonanı skriptu byl v prıpadeD8 4 vteriny Pro algoritmus MDinfin byl cas 15 vterin

11

52 Realna data - Nucice

Vysledne rastry jsou uvedeny v prıloze 73 Opet bylo pouzito shodne obar-venı pro zakladnı smery u obou rastru Rastr Nucice obsahoval data na 82732bunkach z celkove poctu 125449 bunek Vysledky jsou pro prehlednost uve-deny v tabulce

FD D8 MDinfin1 12186 12332 12441 87034 16907 10278 9826 1642316 2516 28832 5010 241764 7788 366128 16058 25475sum

82732 55932

Tabulka 2 Tabulka porovnanı obou algoritmu pro rastr Nucic

Ostatnı hodnoty u vysledneho rastru na ktery byl pouzit algoritmusMDinfin jsou v rozpetı 0255 Cas potrebny pro vykonanı skriptu byl v prıpadeD8 6 vterin Pro algoritmus MDinfin byl cas 50 vterin

12

6 Zaver

Cılem projektu bylo vytvorit funkcnı skript obsahujıcı algoritmus pojmen-ovany MDinfin [1] ktery resı odtok do sousednıch bunek rastru Algoritmusbyl napsan v programovacım jazyce Python a testovan na realnych datechVysledky byly mırnym prekvapenım kdy zejmena hodnoty smeru 128 tedyseverovychodnıho se vyskytovaly ve vysledku velmi casto viz tabulky 1 a 2Predpokladem bylo ze se odtok rozlozı do vıce smeru a pocet bunek s hod-notami zakladnıch smeru 1248163264 a 128 bude mene nez v prıpade al-goritmu D8 K rozkladu do vıce smeru sice doslo ale pocet nekterych bunekse zakladnımi smery byl vetsı u algoritmu MDinfin

Co se tyce delky doby behu algoritmu je algoritmus MDinfin pomalejsı viz casyv kapitole 5 nez D8 z nekolika zrejmych duvodu Predevsım algoritmus D8provadı mnohem mene pocetnıch operacı z duvodu jeho mensı slozitostiviz 3 Dalsım duvodem je take rozdıl v jazyce ve kterem jsou oba algo-ritmy napsany D8 je napsan v programovacım jazyce C++ ktery na vetsıchdatech je mnohonasobne rychlejsı nez Python Prepsanım algoritmu MDinfindo jazyka C++ by mohla byt cesta k budoucımu zvysenı rychlosti pracealgoritmu

13

Reference

[1] SEIBERT Jan McGlynn BL A new triangular multiple flow di-rection algortihm for computing upslope areas from gridded digi-tal elevation models [online] [cit 13 5 2013] Dostupne ke stazenız URL lthttpciteseerxistpsueduviewdocdownloaddoi=101179977amprep=rep1amptype=pdfgt

[2] HOLMGREN Peter Multiple direction algortihms for runoff modellingin grid based elevation models An empirical evaluation [online] [cit13 5 2013] Dostupny z URL ltftpwwwlwrkthseCommonUllaMFor_Imran[1994]20holmgren20-20multiple20flow

20direction20algorithms20for20runoff20modelling20in

20grid20based20elevation20modelspdf gt

[3] ESRI ESRI WebHelp - How Flow Direction works [online] [cit13 5 2013] Dostupne z URL lthttphelparcgiscomenarcgisdesktop100helpindexhtml009z00000063000000

htmgt

[4] ESRI ESRI Webhelp - Flow Direction (Spatial Analyst) [online][cit 13 5 2013] Dostupne z URL lthttphelparcgiscomenarcgisdesktop100helpindexhtml009z00000052000000

htmgt

[5] WIKIPEDIA NumPy [online] [cit 13 5 2013] Dostupne z URLlthttpenwikipediaorgwikiNumPygt

[6] INFORMIT Working with operators [online] [cit 13 5 2013] Dos-tupne z URL lthttpwwwinformitcomarticlesarticleaspxp=2002831ampseqNum=6gt

14

7 Prılohy

71 Bykovice a Nucice vstupnı DMT rastry

Obrazek 5 DMT Bykovice

Obrazek 6 DMT Nucice

15

72 Bykovice vysledky

Obrazek 7 Flow Direction D8

Obrazek 8 Flow Direction MDinfin

16

73 Nucice vysledky

Obrazek 9 Flow Direction D8

Obrazek 10 Flow Direction MDinfin

17

Page 29: pro zac ate cn kygeo.fsv.cvut.cz/gdata/2013/pin2/e/dokumentace/... · 2013-06-05 · CESK E VYSOK E U CEN I TECHNICKE V PRAZE FAKULTA STAVEBN I OBOR GEODEZIE A KARTOGRAFIE Dokumentace

Obsah

Obsah 1

1 Uvod 2

2 Nejbeznejsı existujıcı algoritmy 3

3 Flow Direction D8 431 Obecny princip D8 432 Popis algoritmu D8 5

4 Popis algoritmu MDinfin 641 Obecny princip MDinfin 642 Technicke resenı MDinfin 8

5 Vysledky 1151 Realna data - Bykovice 1152 Realna data - Nucice 12

6 Zaver 13

Reference 14

7 Prılohy 1571 Bykovice a Nucice vstupnı DMT rastry 1572 Bykovice vysledky 1673 Nucice vysledky 17

1

1 Uvod

Tato dokumentace byla zpracovana v ramci predmetu Projekt Informatika 2Semestralnı prace bude pouzita jako z jedna castı autorovi diplomove praces nazvem SMODERP 2D rozsırenı resıcı vztahy soustredeneho a plosnehoodtoku na danem uzemı Duvodem zpracovanı tohoto tematu byla potrebapouzitı v diplomove praci vıce nez jednoho algoritmu pro urcenı smeruodtoku v prostredı ArcGIS V soucasne dobe ArcGIS vyuzıva algoritmusD8 viz kapitola 3 jako jediny algoritmus pro vypocet smeru odtoku Tentoalgoritmus je soucastı Hydrology tools Nastroje ze skupiny Hydrology sepouzıvajı k modelovanı chovanı toku vody na povrchu Nejbeznejsı pouzıvanadigitalnı data povrchu Zeme jsou rastry digitalnı modelu terenu DMT slozenez jednotlivych bunek pixelu Tyto DMT rastry jsou pouzity jako vstupypro ruzne charakteristiky povrchu DMT rastr je souvisly povrch obvykleodkazujıcı na povrch Zeme Presnost dat je dana rozlisenım rastru taktezvzdalenostı mezi body rastru Informace o tvaru zemskeho povrchu je uzitecnapro mnoho oboru jako je napr zemedelstvı lesnictvı zivotnı prostredı neboregionalnı planovanı Tyto obory vyzadujı pochopenı jak voda tece v ramciuzemı a jak zmeny na tomto uzemı nasledne ovlivnı jejı tok

Cılem projektu bylo naprogramovat algoritmus ktery v roce 2007 publiko-vali Jan Seibert a Brian L McGlynn s nazvem MDinfin [1] Tento algoritmusje vylepsenım stavajıcıch algoritmu pro resenı urcenı smeru odtoku na ras-tru viz kapitola 2 Pro overenı spravnosti vysledku byla pouzita realnadata dvou pozemku u obcı Bykovice a Nucice Testovanı probıhalo na ras-trech o rozlisenı 5 metru Algoritmus byl naprogramovan v jazyce Pythonv prostredı NetBeans IDE 69 Pro spustenı v ArcGISu je potreba pridatdo prostredı vytvoreny toolbox upravit aktualnı cestu ke skriptu mainpya tento model nasledne spustit Vstupem modelu je rastr DMT a vystupnıadresar do ktereho se po dobehnutı modelu ulozı vysledny rastr s hodnotamismeru odtoku 1255 Algoritmus MDinfin je testovan na verzi ArcGIS 100Na nejnovejsı verzi ArcGIS 101 ktera vysla v cervnu 2012 nenı overenakompatibilita algoritmu v dusledku nefunkcnosti vıce nez jedne verze tohotoprogramu na jednom pocıtaci

2

2 Nejbeznejsı existujıcı algoritmy

Existujı tri nejbeznejsı algoritmy kazdy odlisne resıcı problematiku odtokuvody z rastru do sousednıch bunek Prvnım z nich je algoritmus D8 z roku1984 Algoritmus je podrobne popsan v nasledujıcı kapitole 3 Jelikoz odtoknastava vzdy jen do jedne sousednı bunky dochazı casto ke koncentracivodnıch sıtı a sıtrsquo odtoku pak neodpovıda skutecnosti Na druhou stranuje jeho vyhodou jeho jednoduchost a fakt ze nedochazı k nechtene disperzijako je tomu u druheho algoritmu

Druhym algoritmem je MD8 neboli multiple flow direction algorithm MD8algoritmem je voda odvadena do vsech nıze polozenych sousednıch buneka pomer vody je rozdelen procentualne podle sklonu Ve vysledku ma algo-ritmus tendenci vytvaret vıce realisticke prostorove sıte toku nez D8 tımze nedochazı k takove koncentraci vody v sıti U D8 ma mnohem vetsıvliv maly rozdıl vysek mezi sousednımi bunkami na to ktera bunka prijmeveskerou vodu Pouzitım MD8 tyto male vyskove rozdıly nemajı zdalekatakovy vliv jelikoz je mnozstvı vody rozdeleno pomerem mezi tyto bunkyNejvetsı nevyhodou tohoto algoritmu je jeho prılisna disperze na konver-gentnıch svazıch v dusledku odtoku do vsech nıze polozenych bunek

V roce 1997 byl navrzen algoritmus pojmenovany Dinfin Davidem G Tar-botonem z americke univerzity v Utahu Byl navrzen prıstup ktery je zalozenna osmi trojuhelnıkovych ploskach viz obrazek 3 Dıky tomuto postupu jsouodstraneny limitace v podobe moznosti pouze osmi smeru odtoku z bunkyProto je algoritmus pojmenovan Dinfin jelikoz muze nastat nekonecne moznostıvysledneho smeru odtoku Tento prıstup umoznuje pouze jeden smer odtokurozdeleny mezi jednu nebo dve bunky v zavislosti na smeru odtoku

Poslednı dva zmınene algoritmy MD8 a Dinfinmajı oproti D8 nevyhodu ve vetsıcasove narocnosti vypoctu V kapitole 4 je popsan algoritmus MDinfin kteryvyuzıva vyhody MD8 algoritmu za pouzitı trojuhelnıkovych plosek obdobnejako Dinfin algoritmus

3

3 Flow Direction D8

Pro pochopenı problematiky a zjevnost rozdılu mezi algoritmy je vhodneuvest jak funguje nastroj ktery pouzıva ArcGIS Zaklad algoritmu MDinfino nemz pojednava tato dokumentace je zalozen na podobnych postupech

31 Obecny princip D8

Princip nastroje urcenı smeru odtoku (Flow Direction) ktery pouzıva prostredıArcGIS je nasledujıcı Tento nastroj (tool) vezme vstupnı rastr digitalnıhomodelu terenu neboli vyskovy rastr Provede vypocet jehoz vystupem jerastr ktery v kazde bunce rastru obsahuje hodnotu urcujıcı smer odtokuz teto bunky Hodnot je osm podle osmi sousednıch bunek do kterych muzeodtekat voda viz obrazek 1 Prave podle osmi smeru odtoku se tento prıstupnazyva D8 (eight-direction approach)

Obrazek 1 Flow Direction D8 [3]

4

32 Popis algoritmu D8

Samotny vypocet algoritmu je v zasade primitivnı Pro vsechny sousednıbunky se vypocte maximalnı sklon [3]

maximalnı sklon = rozdıl vysek vzdalenost 100

Rozdıl vysek je rozdıl vysky v aktualnım bode a konkretnı sousednı bunkyVzdalenost je vypoctena mezi stredy bunek a lisı se v zavislosti na polozesousednı bunky Pro bunky sousedıcı vrcholem je hodnota velikosti pixeluprenasobena o odmocninu ze dvou Pro zbyle bunky sousedıcı hranou jevelikost vzdalenosti rovna velikosti pixelu Po nalezenı nejstrmejsıho smeruodtoku je hodnota ulozena v podobe bitove hodnoty reprezentujıcı danysmer Pred pouzitım nastroje Flow Direction se obvykle zpracuje vstupnırastr pomocı nastroje Sink Tento algoritmus zaplnı bezodtoke oblasti rastrunejnizsı hodnotou z okolı a do teto nejnizsı sousednı bunky pak posle voduPote jiz nemuze dojıt k situaci kdy vsechny sousednı bunky k dane buncemajı vyssı hodnoty vysek a nedochazelo by tedy k odtokuVysledny rastr nemusı obsahovat pouze bunky s hodnotami 202127 [4]Jestlize nastane situace kdy ma vıce sousednıch bunek nejnizsı hodnotuvysek pak je vysledna hodnota souctem vsech smeru Napr hodnota maximalnıhosklonu bude stejna pro sousednı bunku vlevo a nahore odtok tedy budesmerem na zapad (hodnota = 16) a na sever (hodnota = 64) vysledna hod-nota bude souctem 16 a 64 tedy 84

5

4 Popis algoritmu MDinfin

41 Obecny princip MDinfinObecny postup je prevzat z [1] Stejne jako v prıpade algoritmu Dinfin bylyzavedeny trojuhelnıkove plosky pro vypocet lokalnıho sklonu a smeru pro kazdoutrojuhelnıkovou plosku Okolo stredoveho boduM bylo vytvoreno osm trojuhelnıkuviz obrazek 3 Kazdy se zbyvajıcımi dvema vrcholy P1 P2 ve dvou sousedıcıchbunkach Pro kazdy z techto trojuhelnıku je vypocten smer nejvetsıho sklonuPokud oznacıme vysky bodu M P1 P2 jako hM hP1 hP2 rozdıly vysek sevypoctou takto

z1 = hP1 minus hM z2 = hP2 minus hM (1)

Obdobne se vypoctou rozdıly v x-ovych a y-ovych souradnicıch Po vypocturozdılu jednotlivych souradnic je vypocten normalovy vektor

n =

nx

ny

nz

=

z1y2 minus z2y1z1x2 minus z2x1y1x2 minus y2x1

(2)

Smer odtoku d a sklon s na trojuhelnıkove plose se vypocte pomocı rovnice3 Hodnota nula pro d oznacuje smer osy y a hodnota 3π2 oznacuje smerosy x

d =

0 nx = 0 ny ge 0

π nx = 0 ny lt 0

π2minus arctan(

ny

nx

) nx gt 0

3π2minus arctan(

ny

nx

) nx lt 0

(3)

s = minus tan

(arccos

(nzradic

n2x + n2

y + n2z

))(4)

Jestlize nejvetsı sklon od bodu M je mimo rozpetı 0-45 (π4 radian) jepouzit sklon strmejsı k jednomu z bodu P1 P2 a zaroven i sklon je spoctenk tomuto bodu V prıpade ze oba sousednı body jsou vyse polozeny nez bodM smer nenı pro tento trojuhelnık uvazovan Po spoctenı vsech osmi smerua sklonu pro jednotlive plosky jsou tyto smery povazovany za lokalne ne-jstrmejsı pro kazdy trojuhelnık v rozsahu 45 Smery vedoucı prımo do bodu

6

P1 nebo P2 tedy ty kde d = 0 nebo d = π4 jsou uvazovany pouze vprıpade kdy obe vedlejsı sousednı bunky majı smer k bodu P1 nebo P2Tato situace je znazornena na obrazku 2

Obrazek 2 Ukazka urcenı smeru odtoku z bunky [1]

Prvnı prıpad je smer mırıcı mezi bunky 5 a 6 Druhy prıpad je smer kteryvede prımo do bunky 3 Tato situace nastane jestlize pro trojuhelnık M43vyjde lokalnı smer d = π4 a pro trojuhelnık M32 smer vyjde d = 0Pote co je smer odtoku pro bunku vypocten je celkovy odtok rozdelendo vsech vyslednych smeru na zaklade sklonu Resenı teto problematiky jevıce popsano v sekci 42 Pro smery mırıcı mezi body P1 a P2 je odtokrozdelen do dvou bunek na zaklade nevejtsıho sklonu Pomer odtoku do buneks body P1 a P2 bude v tomto poradı α245 a α145

Obrazek 3 Trojuhelnıkove plosky [1]

7

42 Technicke resenı MDinfinVyse jiz bylo zmıneno ze algoritmus je napsan v jazyce Python Algoritmusje rozdelen do dvou skriptu Prvnı z nich obsahuje funkce a druhy je hlavnıVstupem do modelu je rastr digitalnıho modelu terenu a vystupnı adresardo ktereho se ulozı finalnı rastr smeru odtoku viz obr 4 Po nactenı rastruze vstupnıch parametru je tento rastr preveden na matici NumPy pomocıfunkce

arcpy RasterToNumPyArray ( InputRaster )

NumPy [5] je rozsırenı programovacıho jazyka Python je to balıcek uzıvanypro vedecke vypocty Umoznuje podporu velkych multi-dimenzionalnıch polıa matic spolu s velkou knihovnou matematickych funkcı pro praci s temitopoli

Algoritmus cyklem projızdı vsechny prvky matice a u tech ktere majı hod-notu ruznou od NoData nalezne okolı Hledanı okolı bunky provadı funkceneighbors ta je definovana takto

def ne ighbors ( i j array x y ) return nb1 nb2 nb3 nb4 nb5 nb6 nb7 nb8

Vstupem funkce je pozice v matici dale cela matice a jejı rozmery Funkceneighbors vypocıta hodnoty vysek sousednıch osmi bunek a vratı je na vystup

Obrazek 4 Dialogove okno nastroje MDinfin

Vystup z funkce neighbors slouzı jako jeden z vstupnıch parametru pro dalsıfunkci

8

Funkce byla pojmenovana dir slope jelikoz jejım vystupem je smer odtokua sklon tohoto smeru

def d i r s l o p e ( pointM nbrs vpix sp ix ) return d i r e c t i o n s l ope

Pro kazdy trojuhelnık byla spoctena hodnota d viz vzorec 3 Hodnota s bylapo spatnych a nelogickych vysledcıch pocıtana podle jineho vzorce ktery jizdaval spravne vysledky

s0 =

radicz212y21

+z22y22

(5)

Vzorec se lisı pro kazdy trojuhelnıcek uvedeny je pro vypocet sklonu kdy sousednıbunka je severozapadnı a severnı Tımto postupem bylo zbytecne pocıtatz-tovou slozku vekotoru n vzorec 2 Byly osetreny prıpady kdy sousednıbunky aktualnıho pocıtaneho trojuhelnıku jsou obe vyse polozene nebo obemimo rastr (NoData) Dalsı prıpad nastane jestlize je jeden bod vne rastra druhy v rastru lezı Smer je potom urcen prımo do toho bodu ktery nalezırastru Taktez i sklon je pocıtan pouze mezi tımto bodem a bodem M Lokalnı smer d v kazde plosce po vypoctenı nesmı prekrocit 45 V situacize tuto hodnotu prekrocı je smeru prirazena hodnota 0 nebo 45 v zavislostina vzajemnem porovnanı vysek bodu v trojuhelnıku Takto jsou zpracovanyvsechny plosky a je zjisteno zda-li do kazdeho trojuhelnıku nastava smerodtoku nebo ne Na konci funkce dir slope se kontroluje prıpad kdy smersousednıch trojuhelnıku odkazuje presne do stejneho bodu tedy hodnotysmeru musı byt pro prvnı trojuhelnık d = 45 a pro nasledujıcı sousednıtrojuhelnık d = 0 Vystupem funkce jsou dva vektory o osmi prvcıch smera sklon pro kazdou plosku

Dalsı fazı vypoctu je zjistenı pomeru vody ktera potece do jednotlivychsmeru K vypoctu pomeru byl pouzit tento vzorec [2]

fi =sxi8sum

j=1

sxj

(6)

kde s vyznacuje sklon vypocteneho smeru konkretnı trojuhelnıkove ploskya x je promenny exponent Pokud by byl exponent zvolen 1 bude vyslednasıtrsquo obdobna jako pri pouzitı MD8 algoritmu Pri zvetsovanı exponentu xk nekonecnu bude sıtrsquo stejna jako pri pouzitı D8 metody Vychozı hodnotaexponentu byla zvolena x = 4 coz je kompromis mezi obema variantami

9

Zmena exponentu se v soucasne podobe neprojevı na vyslednem rastru je-likoz vysledek prezentuje pouze smer odtoku a ne procentualnı cast Tohotopomeru bude vyuzito az pri spojenı skriptu s 2D modelem SMODERP

V dalsı casti vypoctu je rozdelen jiz zjisteny pomer z celkoveho odtokudo dvou prıpadne pouze do jedne bunky v zavislosti na smeru odtoku dVe vysledku je vypocten vektor osmi cısel kde kazda hodnota od 0 do 1prestavuje jiz procentualnı pomer z celkoveho odtoku do kazde sousednıbunky

Pro vyslednou reprezentaci smeru odtoku na vystup byl pro kazdou bunkuvytvoren vektor obsahujıcı 1 a 0 rıkajıcı zda nastava ci nenastava odtokdo sousednı bunky Tento vektor byl preveden na celocıselnou hodnotu po-mocı funkce bool2int

def boo l 2 i n t ( x ) y = 0for i j in enumerate ( x )

i f j y += 1ltlt ireturn y

Funkce ma na vstupu vektor jedicek a nul Naprıklad pro vektor 00000111kdy voda tece na severozapad sever a severovychod se funkce chova taktoJe testovano jestli platı j = 1 tedy prvnıch pet nul vektoru funkce preskocıa pro prvnı jednicku se pricte k promenne y 20 v dalsım kroku 21 a v poslednım22 Operator vyjadruje totiz bitovy posun smerem doleva Vysledkem jena vystupu cıslo y = 1 + 2 + 4 = 7

Pro vsechny bunky byla vypoctena hodnota reprezentujıcı smer odtoku Tatohodnota se ulozı do matice a ta se nasledne prevede na vysledny rastr

f l o w d i r = arcpy NumPyArrayToRaster ( value LLcorner spix vpix rdquordquo )

value hodnota reprezentujıcı smer odtokuLLcorner souradnice leveho dolnıho rohuspix sırka pixeluvpix vyska pixelu

10

5 Vysledky

Algoritmus MDinfin byl testovan na skutecnych datech dvou pozemku u obcıNucice ve Stredoceskem kraji a Bykovice v kraji Jihomoravskem rastry jsouv prıloze 71 Oba dva rastry jsou o rozlisenı 5 metru Finalnı rastry jsouporovnavany s rastry vytvorenymi v prostredı ArcGIS nastrojem Flow Di-rection metodou D8

51 Realna data - Bykovice

Vysledne rastry Flow Direction pro uzemı Bykovice jsou uvedeny v prıloze72 Oba rastry byly pro hodnoty 202127 obarveny shodnou barvou kvulilepsı nazornosti a porovnatelnosti vysledku Rastr ktery obsahuje z celkovehopoctu 44807 bunek celkem 23655 bunek s hodnotami vysek po probehnutıalgoritmy dal nasledujıcı vysledky

FD D8 MDinfin1 3650 7372 666 9174 207 188 21 716 94 3732 791 8564 8818 1045128 9408 14983sum

23655 14983

Tabulka 1 Tabulka porovnanı obou algoritmu pro rastr Bykovic

FD je zkratka pro Flow Direction cili smer odtoku reprezentovany celocıselnouhodnotou Ostatnı hodnoty u vysledneho rastru na ktery byl pouzit algorit-mus MDinfin jsou v rozpetı 0246 V rozmezı hodnot smeru odtoku 246255se nevyskytujı zadne bunky Cas potrebny pro vykonanı skriptu byl v prıpadeD8 4 vteriny Pro algoritmus MDinfin byl cas 15 vterin

11

52 Realna data - Nucice

Vysledne rastry jsou uvedeny v prıloze 73 Opet bylo pouzito shodne obar-venı pro zakladnı smery u obou rastru Rastr Nucice obsahoval data na 82732bunkach z celkove poctu 125449 bunek Vysledky jsou pro prehlednost uve-deny v tabulce

FD D8 MDinfin1 12186 12332 12441 87034 16907 10278 9826 1642316 2516 28832 5010 241764 7788 366128 16058 25475sum

82732 55932

Tabulka 2 Tabulka porovnanı obou algoritmu pro rastr Nucic

Ostatnı hodnoty u vysledneho rastru na ktery byl pouzit algoritmusMDinfin jsou v rozpetı 0255 Cas potrebny pro vykonanı skriptu byl v prıpadeD8 6 vterin Pro algoritmus MDinfin byl cas 50 vterin

12

6 Zaver

Cılem projektu bylo vytvorit funkcnı skript obsahujıcı algoritmus pojmen-ovany MDinfin [1] ktery resı odtok do sousednıch bunek rastru Algoritmusbyl napsan v programovacım jazyce Python a testovan na realnych datechVysledky byly mırnym prekvapenım kdy zejmena hodnoty smeru 128 tedyseverovychodnıho se vyskytovaly ve vysledku velmi casto viz tabulky 1 a 2Predpokladem bylo ze se odtok rozlozı do vıce smeru a pocet bunek s hod-notami zakladnıch smeru 1248163264 a 128 bude mene nez v prıpade al-goritmu D8 K rozkladu do vıce smeru sice doslo ale pocet nekterych bunekse zakladnımi smery byl vetsı u algoritmu MDinfin

Co se tyce delky doby behu algoritmu je algoritmus MDinfin pomalejsı viz casyv kapitole 5 nez D8 z nekolika zrejmych duvodu Predevsım algoritmus D8provadı mnohem mene pocetnıch operacı z duvodu jeho mensı slozitostiviz 3 Dalsım duvodem je take rozdıl v jazyce ve kterem jsou oba algo-ritmy napsany D8 je napsan v programovacım jazyce C++ ktery na vetsıchdatech je mnohonasobne rychlejsı nez Python Prepsanım algoritmu MDinfindo jazyka C++ by mohla byt cesta k budoucımu zvysenı rychlosti pracealgoritmu

13

Reference

[1] SEIBERT Jan McGlynn BL A new triangular multiple flow di-rection algortihm for computing upslope areas from gridded digi-tal elevation models [online] [cit 13 5 2013] Dostupne ke stazenız URL lthttpciteseerxistpsueduviewdocdownloaddoi=101179977amprep=rep1amptype=pdfgt

[2] HOLMGREN Peter Multiple direction algortihms for runoff modellingin grid based elevation models An empirical evaluation [online] [cit13 5 2013] Dostupny z URL ltftpwwwlwrkthseCommonUllaMFor_Imran[1994]20holmgren20-20multiple20flow

20direction20algorithms20for20runoff20modelling20in

20grid20based20elevation20modelspdf gt

[3] ESRI ESRI WebHelp - How Flow Direction works [online] [cit13 5 2013] Dostupne z URL lthttphelparcgiscomenarcgisdesktop100helpindexhtml009z00000063000000

htmgt

[4] ESRI ESRI Webhelp - Flow Direction (Spatial Analyst) [online][cit 13 5 2013] Dostupne z URL lthttphelparcgiscomenarcgisdesktop100helpindexhtml009z00000052000000

htmgt

[5] WIKIPEDIA NumPy [online] [cit 13 5 2013] Dostupne z URLlthttpenwikipediaorgwikiNumPygt

[6] INFORMIT Working with operators [online] [cit 13 5 2013] Dos-tupne z URL lthttpwwwinformitcomarticlesarticleaspxp=2002831ampseqNum=6gt

14

7 Prılohy

71 Bykovice a Nucice vstupnı DMT rastry

Obrazek 5 DMT Bykovice

Obrazek 6 DMT Nucice

15

72 Bykovice vysledky

Obrazek 7 Flow Direction D8

Obrazek 8 Flow Direction MDinfin

16

73 Nucice vysledky

Obrazek 9 Flow Direction D8

Obrazek 10 Flow Direction MDinfin

17

Page 30: pro zac ate cn kygeo.fsv.cvut.cz/gdata/2013/pin2/e/dokumentace/... · 2013-06-05 · CESK E VYSOK E U CEN I TECHNICKE V PRAZE FAKULTA STAVEBN I OBOR GEODEZIE A KARTOGRAFIE Dokumentace

1 Uvod

Tato dokumentace byla zpracovana v ramci predmetu Projekt Informatika 2Semestralnı prace bude pouzita jako z jedna castı autorovi diplomove praces nazvem SMODERP 2D rozsırenı resıcı vztahy soustredeneho a plosnehoodtoku na danem uzemı Duvodem zpracovanı tohoto tematu byla potrebapouzitı v diplomove praci vıce nez jednoho algoritmu pro urcenı smeruodtoku v prostredı ArcGIS V soucasne dobe ArcGIS vyuzıva algoritmusD8 viz kapitola 3 jako jediny algoritmus pro vypocet smeru odtoku Tentoalgoritmus je soucastı Hydrology tools Nastroje ze skupiny Hydrology sepouzıvajı k modelovanı chovanı toku vody na povrchu Nejbeznejsı pouzıvanadigitalnı data povrchu Zeme jsou rastry digitalnı modelu terenu DMT slozenez jednotlivych bunek pixelu Tyto DMT rastry jsou pouzity jako vstupypro ruzne charakteristiky povrchu DMT rastr je souvisly povrch obvykleodkazujıcı na povrch Zeme Presnost dat je dana rozlisenım rastru taktezvzdalenostı mezi body rastru Informace o tvaru zemskeho povrchu je uzitecnapro mnoho oboru jako je napr zemedelstvı lesnictvı zivotnı prostredı neboregionalnı planovanı Tyto obory vyzadujı pochopenı jak voda tece v ramciuzemı a jak zmeny na tomto uzemı nasledne ovlivnı jejı tok

Cılem projektu bylo naprogramovat algoritmus ktery v roce 2007 publiko-vali Jan Seibert a Brian L McGlynn s nazvem MDinfin [1] Tento algoritmusje vylepsenım stavajıcıch algoritmu pro resenı urcenı smeru odtoku na ras-tru viz kapitola 2 Pro overenı spravnosti vysledku byla pouzita realnadata dvou pozemku u obcı Bykovice a Nucice Testovanı probıhalo na ras-trech o rozlisenı 5 metru Algoritmus byl naprogramovan v jazyce Pythonv prostredı NetBeans IDE 69 Pro spustenı v ArcGISu je potreba pridatdo prostredı vytvoreny toolbox upravit aktualnı cestu ke skriptu mainpya tento model nasledne spustit Vstupem modelu je rastr DMT a vystupnıadresar do ktereho se po dobehnutı modelu ulozı vysledny rastr s hodnotamismeru odtoku 1255 Algoritmus MDinfin je testovan na verzi ArcGIS 100Na nejnovejsı verzi ArcGIS 101 ktera vysla v cervnu 2012 nenı overenakompatibilita algoritmu v dusledku nefunkcnosti vıce nez jedne verze tohotoprogramu na jednom pocıtaci

2

2 Nejbeznejsı existujıcı algoritmy

Existujı tri nejbeznejsı algoritmy kazdy odlisne resıcı problematiku odtokuvody z rastru do sousednıch bunek Prvnım z nich je algoritmus D8 z roku1984 Algoritmus je podrobne popsan v nasledujıcı kapitole 3 Jelikoz odtoknastava vzdy jen do jedne sousednı bunky dochazı casto ke koncentracivodnıch sıtı a sıtrsquo odtoku pak neodpovıda skutecnosti Na druhou stranuje jeho vyhodou jeho jednoduchost a fakt ze nedochazı k nechtene disperzijako je tomu u druheho algoritmu

Druhym algoritmem je MD8 neboli multiple flow direction algorithm MD8algoritmem je voda odvadena do vsech nıze polozenych sousednıch buneka pomer vody je rozdelen procentualne podle sklonu Ve vysledku ma algo-ritmus tendenci vytvaret vıce realisticke prostorove sıte toku nez D8 tımze nedochazı k takove koncentraci vody v sıti U D8 ma mnohem vetsıvliv maly rozdıl vysek mezi sousednımi bunkami na to ktera bunka prijmeveskerou vodu Pouzitım MD8 tyto male vyskove rozdıly nemajı zdalekatakovy vliv jelikoz je mnozstvı vody rozdeleno pomerem mezi tyto bunkyNejvetsı nevyhodou tohoto algoritmu je jeho prılisna disperze na konver-gentnıch svazıch v dusledku odtoku do vsech nıze polozenych bunek

V roce 1997 byl navrzen algoritmus pojmenovany Dinfin Davidem G Tar-botonem z americke univerzity v Utahu Byl navrzen prıstup ktery je zalozenna osmi trojuhelnıkovych ploskach viz obrazek 3 Dıky tomuto postupu jsouodstraneny limitace v podobe moznosti pouze osmi smeru odtoku z bunkyProto je algoritmus pojmenovan Dinfin jelikoz muze nastat nekonecne moznostıvysledneho smeru odtoku Tento prıstup umoznuje pouze jeden smer odtokurozdeleny mezi jednu nebo dve bunky v zavislosti na smeru odtoku

Poslednı dva zmınene algoritmy MD8 a Dinfinmajı oproti D8 nevyhodu ve vetsıcasove narocnosti vypoctu V kapitole 4 je popsan algoritmus MDinfin kteryvyuzıva vyhody MD8 algoritmu za pouzitı trojuhelnıkovych plosek obdobnejako Dinfin algoritmus

3

3 Flow Direction D8

Pro pochopenı problematiky a zjevnost rozdılu mezi algoritmy je vhodneuvest jak funguje nastroj ktery pouzıva ArcGIS Zaklad algoritmu MDinfino nemz pojednava tato dokumentace je zalozen na podobnych postupech

31 Obecny princip D8

Princip nastroje urcenı smeru odtoku (Flow Direction) ktery pouzıva prostredıArcGIS je nasledujıcı Tento nastroj (tool) vezme vstupnı rastr digitalnıhomodelu terenu neboli vyskovy rastr Provede vypocet jehoz vystupem jerastr ktery v kazde bunce rastru obsahuje hodnotu urcujıcı smer odtokuz teto bunky Hodnot je osm podle osmi sousednıch bunek do kterych muzeodtekat voda viz obrazek 1 Prave podle osmi smeru odtoku se tento prıstupnazyva D8 (eight-direction approach)

Obrazek 1 Flow Direction D8 [3]

4

32 Popis algoritmu D8

Samotny vypocet algoritmu je v zasade primitivnı Pro vsechny sousednıbunky se vypocte maximalnı sklon [3]

maximalnı sklon = rozdıl vysek vzdalenost 100

Rozdıl vysek je rozdıl vysky v aktualnım bode a konkretnı sousednı bunkyVzdalenost je vypoctena mezi stredy bunek a lisı se v zavislosti na polozesousednı bunky Pro bunky sousedıcı vrcholem je hodnota velikosti pixeluprenasobena o odmocninu ze dvou Pro zbyle bunky sousedıcı hranou jevelikost vzdalenosti rovna velikosti pixelu Po nalezenı nejstrmejsıho smeruodtoku je hodnota ulozena v podobe bitove hodnoty reprezentujıcı danysmer Pred pouzitım nastroje Flow Direction se obvykle zpracuje vstupnırastr pomocı nastroje Sink Tento algoritmus zaplnı bezodtoke oblasti rastrunejnizsı hodnotou z okolı a do teto nejnizsı sousednı bunky pak posle voduPote jiz nemuze dojıt k situaci kdy vsechny sousednı bunky k dane buncemajı vyssı hodnoty vysek a nedochazelo by tedy k odtokuVysledny rastr nemusı obsahovat pouze bunky s hodnotami 202127 [4]Jestlize nastane situace kdy ma vıce sousednıch bunek nejnizsı hodnotuvysek pak je vysledna hodnota souctem vsech smeru Napr hodnota maximalnıhosklonu bude stejna pro sousednı bunku vlevo a nahore odtok tedy budesmerem na zapad (hodnota = 16) a na sever (hodnota = 64) vysledna hod-nota bude souctem 16 a 64 tedy 84

5

4 Popis algoritmu MDinfin

41 Obecny princip MDinfinObecny postup je prevzat z [1] Stejne jako v prıpade algoritmu Dinfin bylyzavedeny trojuhelnıkove plosky pro vypocet lokalnıho sklonu a smeru pro kazdoutrojuhelnıkovou plosku Okolo stredoveho boduM bylo vytvoreno osm trojuhelnıkuviz obrazek 3 Kazdy se zbyvajıcımi dvema vrcholy P1 P2 ve dvou sousedıcıchbunkach Pro kazdy z techto trojuhelnıku je vypocten smer nejvetsıho sklonuPokud oznacıme vysky bodu M P1 P2 jako hM hP1 hP2 rozdıly vysek sevypoctou takto

z1 = hP1 minus hM z2 = hP2 minus hM (1)

Obdobne se vypoctou rozdıly v x-ovych a y-ovych souradnicıch Po vypocturozdılu jednotlivych souradnic je vypocten normalovy vektor

n =

nx

ny

nz

=

z1y2 minus z2y1z1x2 minus z2x1y1x2 minus y2x1

(2)

Smer odtoku d a sklon s na trojuhelnıkove plose se vypocte pomocı rovnice3 Hodnota nula pro d oznacuje smer osy y a hodnota 3π2 oznacuje smerosy x

d =

0 nx = 0 ny ge 0

π nx = 0 ny lt 0

π2minus arctan(

ny

nx

) nx gt 0

3π2minus arctan(

ny

nx

) nx lt 0

(3)

s = minus tan

(arccos

(nzradic

n2x + n2

y + n2z

))(4)

Jestlize nejvetsı sklon od bodu M je mimo rozpetı 0-45 (π4 radian) jepouzit sklon strmejsı k jednomu z bodu P1 P2 a zaroven i sklon je spoctenk tomuto bodu V prıpade ze oba sousednı body jsou vyse polozeny nez bodM smer nenı pro tento trojuhelnık uvazovan Po spoctenı vsech osmi smerua sklonu pro jednotlive plosky jsou tyto smery povazovany za lokalne ne-jstrmejsı pro kazdy trojuhelnık v rozsahu 45 Smery vedoucı prımo do bodu

6

P1 nebo P2 tedy ty kde d = 0 nebo d = π4 jsou uvazovany pouze vprıpade kdy obe vedlejsı sousednı bunky majı smer k bodu P1 nebo P2Tato situace je znazornena na obrazku 2

Obrazek 2 Ukazka urcenı smeru odtoku z bunky [1]

Prvnı prıpad je smer mırıcı mezi bunky 5 a 6 Druhy prıpad je smer kteryvede prımo do bunky 3 Tato situace nastane jestlize pro trojuhelnık M43vyjde lokalnı smer d = π4 a pro trojuhelnık M32 smer vyjde d = 0Pote co je smer odtoku pro bunku vypocten je celkovy odtok rozdelendo vsech vyslednych smeru na zaklade sklonu Resenı teto problematiky jevıce popsano v sekci 42 Pro smery mırıcı mezi body P1 a P2 je odtokrozdelen do dvou bunek na zaklade nevejtsıho sklonu Pomer odtoku do buneks body P1 a P2 bude v tomto poradı α245 a α145

Obrazek 3 Trojuhelnıkove plosky [1]

7

42 Technicke resenı MDinfinVyse jiz bylo zmıneno ze algoritmus je napsan v jazyce Python Algoritmusje rozdelen do dvou skriptu Prvnı z nich obsahuje funkce a druhy je hlavnıVstupem do modelu je rastr digitalnıho modelu terenu a vystupnı adresardo ktereho se ulozı finalnı rastr smeru odtoku viz obr 4 Po nactenı rastruze vstupnıch parametru je tento rastr preveden na matici NumPy pomocıfunkce

arcpy RasterToNumPyArray ( InputRaster )

NumPy [5] je rozsırenı programovacıho jazyka Python je to balıcek uzıvanypro vedecke vypocty Umoznuje podporu velkych multi-dimenzionalnıch polıa matic spolu s velkou knihovnou matematickych funkcı pro praci s temitopoli

Algoritmus cyklem projızdı vsechny prvky matice a u tech ktere majı hod-notu ruznou od NoData nalezne okolı Hledanı okolı bunky provadı funkceneighbors ta je definovana takto

def ne ighbors ( i j array x y ) return nb1 nb2 nb3 nb4 nb5 nb6 nb7 nb8

Vstupem funkce je pozice v matici dale cela matice a jejı rozmery Funkceneighbors vypocıta hodnoty vysek sousednıch osmi bunek a vratı je na vystup

Obrazek 4 Dialogove okno nastroje MDinfin

Vystup z funkce neighbors slouzı jako jeden z vstupnıch parametru pro dalsıfunkci

8

Funkce byla pojmenovana dir slope jelikoz jejım vystupem je smer odtokua sklon tohoto smeru

def d i r s l o p e ( pointM nbrs vpix sp ix ) return d i r e c t i o n s l ope

Pro kazdy trojuhelnık byla spoctena hodnota d viz vzorec 3 Hodnota s bylapo spatnych a nelogickych vysledcıch pocıtana podle jineho vzorce ktery jizdaval spravne vysledky

s0 =

radicz212y21

+z22y22

(5)

Vzorec se lisı pro kazdy trojuhelnıcek uvedeny je pro vypocet sklonu kdy sousednıbunka je severozapadnı a severnı Tımto postupem bylo zbytecne pocıtatz-tovou slozku vekotoru n vzorec 2 Byly osetreny prıpady kdy sousednıbunky aktualnıho pocıtaneho trojuhelnıku jsou obe vyse polozene nebo obemimo rastr (NoData) Dalsı prıpad nastane jestlize je jeden bod vne rastra druhy v rastru lezı Smer je potom urcen prımo do toho bodu ktery nalezırastru Taktez i sklon je pocıtan pouze mezi tımto bodem a bodem M Lokalnı smer d v kazde plosce po vypoctenı nesmı prekrocit 45 V situacize tuto hodnotu prekrocı je smeru prirazena hodnota 0 nebo 45 v zavislostina vzajemnem porovnanı vysek bodu v trojuhelnıku Takto jsou zpracovanyvsechny plosky a je zjisteno zda-li do kazdeho trojuhelnıku nastava smerodtoku nebo ne Na konci funkce dir slope se kontroluje prıpad kdy smersousednıch trojuhelnıku odkazuje presne do stejneho bodu tedy hodnotysmeru musı byt pro prvnı trojuhelnık d = 45 a pro nasledujıcı sousednıtrojuhelnık d = 0 Vystupem funkce jsou dva vektory o osmi prvcıch smera sklon pro kazdou plosku

Dalsı fazı vypoctu je zjistenı pomeru vody ktera potece do jednotlivychsmeru K vypoctu pomeru byl pouzit tento vzorec [2]

fi =sxi8sum

j=1

sxj

(6)

kde s vyznacuje sklon vypocteneho smeru konkretnı trojuhelnıkove ploskya x je promenny exponent Pokud by byl exponent zvolen 1 bude vyslednasıtrsquo obdobna jako pri pouzitı MD8 algoritmu Pri zvetsovanı exponentu xk nekonecnu bude sıtrsquo stejna jako pri pouzitı D8 metody Vychozı hodnotaexponentu byla zvolena x = 4 coz je kompromis mezi obema variantami

9

Zmena exponentu se v soucasne podobe neprojevı na vyslednem rastru je-likoz vysledek prezentuje pouze smer odtoku a ne procentualnı cast Tohotopomeru bude vyuzito az pri spojenı skriptu s 2D modelem SMODERP

V dalsı casti vypoctu je rozdelen jiz zjisteny pomer z celkoveho odtokudo dvou prıpadne pouze do jedne bunky v zavislosti na smeru odtoku dVe vysledku je vypocten vektor osmi cısel kde kazda hodnota od 0 do 1prestavuje jiz procentualnı pomer z celkoveho odtoku do kazde sousednıbunky

Pro vyslednou reprezentaci smeru odtoku na vystup byl pro kazdou bunkuvytvoren vektor obsahujıcı 1 a 0 rıkajıcı zda nastava ci nenastava odtokdo sousednı bunky Tento vektor byl preveden na celocıselnou hodnotu po-mocı funkce bool2int

def boo l 2 i n t ( x ) y = 0for i j in enumerate ( x )

i f j y += 1ltlt ireturn y

Funkce ma na vstupu vektor jedicek a nul Naprıklad pro vektor 00000111kdy voda tece na severozapad sever a severovychod se funkce chova taktoJe testovano jestli platı j = 1 tedy prvnıch pet nul vektoru funkce preskocıa pro prvnı jednicku se pricte k promenne y 20 v dalsım kroku 21 a v poslednım22 Operator vyjadruje totiz bitovy posun smerem doleva Vysledkem jena vystupu cıslo y = 1 + 2 + 4 = 7

Pro vsechny bunky byla vypoctena hodnota reprezentujıcı smer odtoku Tatohodnota se ulozı do matice a ta se nasledne prevede na vysledny rastr

f l o w d i r = arcpy NumPyArrayToRaster ( value LLcorner spix vpix rdquordquo )

value hodnota reprezentujıcı smer odtokuLLcorner souradnice leveho dolnıho rohuspix sırka pixeluvpix vyska pixelu

10

5 Vysledky

Algoritmus MDinfin byl testovan na skutecnych datech dvou pozemku u obcıNucice ve Stredoceskem kraji a Bykovice v kraji Jihomoravskem rastry jsouv prıloze 71 Oba dva rastry jsou o rozlisenı 5 metru Finalnı rastry jsouporovnavany s rastry vytvorenymi v prostredı ArcGIS nastrojem Flow Di-rection metodou D8

51 Realna data - Bykovice

Vysledne rastry Flow Direction pro uzemı Bykovice jsou uvedeny v prıloze72 Oba rastry byly pro hodnoty 202127 obarveny shodnou barvou kvulilepsı nazornosti a porovnatelnosti vysledku Rastr ktery obsahuje z celkovehopoctu 44807 bunek celkem 23655 bunek s hodnotami vysek po probehnutıalgoritmy dal nasledujıcı vysledky

FD D8 MDinfin1 3650 7372 666 9174 207 188 21 716 94 3732 791 8564 8818 1045128 9408 14983sum

23655 14983

Tabulka 1 Tabulka porovnanı obou algoritmu pro rastr Bykovic

FD je zkratka pro Flow Direction cili smer odtoku reprezentovany celocıselnouhodnotou Ostatnı hodnoty u vysledneho rastru na ktery byl pouzit algorit-mus MDinfin jsou v rozpetı 0246 V rozmezı hodnot smeru odtoku 246255se nevyskytujı zadne bunky Cas potrebny pro vykonanı skriptu byl v prıpadeD8 4 vteriny Pro algoritmus MDinfin byl cas 15 vterin

11

52 Realna data - Nucice

Vysledne rastry jsou uvedeny v prıloze 73 Opet bylo pouzito shodne obar-venı pro zakladnı smery u obou rastru Rastr Nucice obsahoval data na 82732bunkach z celkove poctu 125449 bunek Vysledky jsou pro prehlednost uve-deny v tabulce

FD D8 MDinfin1 12186 12332 12441 87034 16907 10278 9826 1642316 2516 28832 5010 241764 7788 366128 16058 25475sum

82732 55932

Tabulka 2 Tabulka porovnanı obou algoritmu pro rastr Nucic

Ostatnı hodnoty u vysledneho rastru na ktery byl pouzit algoritmusMDinfin jsou v rozpetı 0255 Cas potrebny pro vykonanı skriptu byl v prıpadeD8 6 vterin Pro algoritmus MDinfin byl cas 50 vterin

12

6 Zaver

Cılem projektu bylo vytvorit funkcnı skript obsahujıcı algoritmus pojmen-ovany MDinfin [1] ktery resı odtok do sousednıch bunek rastru Algoritmusbyl napsan v programovacım jazyce Python a testovan na realnych datechVysledky byly mırnym prekvapenım kdy zejmena hodnoty smeru 128 tedyseverovychodnıho se vyskytovaly ve vysledku velmi casto viz tabulky 1 a 2Predpokladem bylo ze se odtok rozlozı do vıce smeru a pocet bunek s hod-notami zakladnıch smeru 1248163264 a 128 bude mene nez v prıpade al-goritmu D8 K rozkladu do vıce smeru sice doslo ale pocet nekterych bunekse zakladnımi smery byl vetsı u algoritmu MDinfin

Co se tyce delky doby behu algoritmu je algoritmus MDinfin pomalejsı viz casyv kapitole 5 nez D8 z nekolika zrejmych duvodu Predevsım algoritmus D8provadı mnohem mene pocetnıch operacı z duvodu jeho mensı slozitostiviz 3 Dalsım duvodem je take rozdıl v jazyce ve kterem jsou oba algo-ritmy napsany D8 je napsan v programovacım jazyce C++ ktery na vetsıchdatech je mnohonasobne rychlejsı nez Python Prepsanım algoritmu MDinfindo jazyka C++ by mohla byt cesta k budoucımu zvysenı rychlosti pracealgoritmu

13

Reference

[1] SEIBERT Jan McGlynn BL A new triangular multiple flow di-rection algortihm for computing upslope areas from gridded digi-tal elevation models [online] [cit 13 5 2013] Dostupne ke stazenız URL lthttpciteseerxistpsueduviewdocdownloaddoi=101179977amprep=rep1amptype=pdfgt

[2] HOLMGREN Peter Multiple direction algortihms for runoff modellingin grid based elevation models An empirical evaluation [online] [cit13 5 2013] Dostupny z URL ltftpwwwlwrkthseCommonUllaMFor_Imran[1994]20holmgren20-20multiple20flow

20direction20algorithms20for20runoff20modelling20in

20grid20based20elevation20modelspdf gt

[3] ESRI ESRI WebHelp - How Flow Direction works [online] [cit13 5 2013] Dostupne z URL lthttphelparcgiscomenarcgisdesktop100helpindexhtml009z00000063000000

htmgt

[4] ESRI ESRI Webhelp - Flow Direction (Spatial Analyst) [online][cit 13 5 2013] Dostupne z URL lthttphelparcgiscomenarcgisdesktop100helpindexhtml009z00000052000000

htmgt

[5] WIKIPEDIA NumPy [online] [cit 13 5 2013] Dostupne z URLlthttpenwikipediaorgwikiNumPygt

[6] INFORMIT Working with operators [online] [cit 13 5 2013] Dos-tupne z URL lthttpwwwinformitcomarticlesarticleaspxp=2002831ampseqNum=6gt

14

7 Prılohy

71 Bykovice a Nucice vstupnı DMT rastry

Obrazek 5 DMT Bykovice

Obrazek 6 DMT Nucice

15

72 Bykovice vysledky

Obrazek 7 Flow Direction D8

Obrazek 8 Flow Direction MDinfin

16

73 Nucice vysledky

Obrazek 9 Flow Direction D8

Obrazek 10 Flow Direction MDinfin

17

Page 31: pro zac ate cn kygeo.fsv.cvut.cz/gdata/2013/pin2/e/dokumentace/... · 2013-06-05 · CESK E VYSOK E U CEN I TECHNICKE V PRAZE FAKULTA STAVEBN I OBOR GEODEZIE A KARTOGRAFIE Dokumentace

2 Nejbeznejsı existujıcı algoritmy

Existujı tri nejbeznejsı algoritmy kazdy odlisne resıcı problematiku odtokuvody z rastru do sousednıch bunek Prvnım z nich je algoritmus D8 z roku1984 Algoritmus je podrobne popsan v nasledujıcı kapitole 3 Jelikoz odtoknastava vzdy jen do jedne sousednı bunky dochazı casto ke koncentracivodnıch sıtı a sıtrsquo odtoku pak neodpovıda skutecnosti Na druhou stranuje jeho vyhodou jeho jednoduchost a fakt ze nedochazı k nechtene disperzijako je tomu u druheho algoritmu

Druhym algoritmem je MD8 neboli multiple flow direction algorithm MD8algoritmem je voda odvadena do vsech nıze polozenych sousednıch buneka pomer vody je rozdelen procentualne podle sklonu Ve vysledku ma algo-ritmus tendenci vytvaret vıce realisticke prostorove sıte toku nez D8 tımze nedochazı k takove koncentraci vody v sıti U D8 ma mnohem vetsıvliv maly rozdıl vysek mezi sousednımi bunkami na to ktera bunka prijmeveskerou vodu Pouzitım MD8 tyto male vyskove rozdıly nemajı zdalekatakovy vliv jelikoz je mnozstvı vody rozdeleno pomerem mezi tyto bunkyNejvetsı nevyhodou tohoto algoritmu je jeho prılisna disperze na konver-gentnıch svazıch v dusledku odtoku do vsech nıze polozenych bunek

V roce 1997 byl navrzen algoritmus pojmenovany Dinfin Davidem G Tar-botonem z americke univerzity v Utahu Byl navrzen prıstup ktery je zalozenna osmi trojuhelnıkovych ploskach viz obrazek 3 Dıky tomuto postupu jsouodstraneny limitace v podobe moznosti pouze osmi smeru odtoku z bunkyProto je algoritmus pojmenovan Dinfin jelikoz muze nastat nekonecne moznostıvysledneho smeru odtoku Tento prıstup umoznuje pouze jeden smer odtokurozdeleny mezi jednu nebo dve bunky v zavislosti na smeru odtoku

Poslednı dva zmınene algoritmy MD8 a Dinfinmajı oproti D8 nevyhodu ve vetsıcasove narocnosti vypoctu V kapitole 4 je popsan algoritmus MDinfin kteryvyuzıva vyhody MD8 algoritmu za pouzitı trojuhelnıkovych plosek obdobnejako Dinfin algoritmus

3

3 Flow Direction D8

Pro pochopenı problematiky a zjevnost rozdılu mezi algoritmy je vhodneuvest jak funguje nastroj ktery pouzıva ArcGIS Zaklad algoritmu MDinfino nemz pojednava tato dokumentace je zalozen na podobnych postupech

31 Obecny princip D8

Princip nastroje urcenı smeru odtoku (Flow Direction) ktery pouzıva prostredıArcGIS je nasledujıcı Tento nastroj (tool) vezme vstupnı rastr digitalnıhomodelu terenu neboli vyskovy rastr Provede vypocet jehoz vystupem jerastr ktery v kazde bunce rastru obsahuje hodnotu urcujıcı smer odtokuz teto bunky Hodnot je osm podle osmi sousednıch bunek do kterych muzeodtekat voda viz obrazek 1 Prave podle osmi smeru odtoku se tento prıstupnazyva D8 (eight-direction approach)

Obrazek 1 Flow Direction D8 [3]

4

32 Popis algoritmu D8

Samotny vypocet algoritmu je v zasade primitivnı Pro vsechny sousednıbunky se vypocte maximalnı sklon [3]

maximalnı sklon = rozdıl vysek vzdalenost 100

Rozdıl vysek je rozdıl vysky v aktualnım bode a konkretnı sousednı bunkyVzdalenost je vypoctena mezi stredy bunek a lisı se v zavislosti na polozesousednı bunky Pro bunky sousedıcı vrcholem je hodnota velikosti pixeluprenasobena o odmocninu ze dvou Pro zbyle bunky sousedıcı hranou jevelikost vzdalenosti rovna velikosti pixelu Po nalezenı nejstrmejsıho smeruodtoku je hodnota ulozena v podobe bitove hodnoty reprezentujıcı danysmer Pred pouzitım nastroje Flow Direction se obvykle zpracuje vstupnırastr pomocı nastroje Sink Tento algoritmus zaplnı bezodtoke oblasti rastrunejnizsı hodnotou z okolı a do teto nejnizsı sousednı bunky pak posle voduPote jiz nemuze dojıt k situaci kdy vsechny sousednı bunky k dane buncemajı vyssı hodnoty vysek a nedochazelo by tedy k odtokuVysledny rastr nemusı obsahovat pouze bunky s hodnotami 202127 [4]Jestlize nastane situace kdy ma vıce sousednıch bunek nejnizsı hodnotuvysek pak je vysledna hodnota souctem vsech smeru Napr hodnota maximalnıhosklonu bude stejna pro sousednı bunku vlevo a nahore odtok tedy budesmerem na zapad (hodnota = 16) a na sever (hodnota = 64) vysledna hod-nota bude souctem 16 a 64 tedy 84

5

4 Popis algoritmu MDinfin

41 Obecny princip MDinfinObecny postup je prevzat z [1] Stejne jako v prıpade algoritmu Dinfin bylyzavedeny trojuhelnıkove plosky pro vypocet lokalnıho sklonu a smeru pro kazdoutrojuhelnıkovou plosku Okolo stredoveho boduM bylo vytvoreno osm trojuhelnıkuviz obrazek 3 Kazdy se zbyvajıcımi dvema vrcholy P1 P2 ve dvou sousedıcıchbunkach Pro kazdy z techto trojuhelnıku je vypocten smer nejvetsıho sklonuPokud oznacıme vysky bodu M P1 P2 jako hM hP1 hP2 rozdıly vysek sevypoctou takto

z1 = hP1 minus hM z2 = hP2 minus hM (1)

Obdobne se vypoctou rozdıly v x-ovych a y-ovych souradnicıch Po vypocturozdılu jednotlivych souradnic je vypocten normalovy vektor

n =

nx

ny

nz

=

z1y2 minus z2y1z1x2 minus z2x1y1x2 minus y2x1

(2)

Smer odtoku d a sklon s na trojuhelnıkove plose se vypocte pomocı rovnice3 Hodnota nula pro d oznacuje smer osy y a hodnota 3π2 oznacuje smerosy x

d =

0 nx = 0 ny ge 0

π nx = 0 ny lt 0

π2minus arctan(

ny

nx

) nx gt 0

3π2minus arctan(

ny

nx

) nx lt 0

(3)

s = minus tan

(arccos

(nzradic

n2x + n2

y + n2z

))(4)

Jestlize nejvetsı sklon od bodu M je mimo rozpetı 0-45 (π4 radian) jepouzit sklon strmejsı k jednomu z bodu P1 P2 a zaroven i sklon je spoctenk tomuto bodu V prıpade ze oba sousednı body jsou vyse polozeny nez bodM smer nenı pro tento trojuhelnık uvazovan Po spoctenı vsech osmi smerua sklonu pro jednotlive plosky jsou tyto smery povazovany za lokalne ne-jstrmejsı pro kazdy trojuhelnık v rozsahu 45 Smery vedoucı prımo do bodu

6

P1 nebo P2 tedy ty kde d = 0 nebo d = π4 jsou uvazovany pouze vprıpade kdy obe vedlejsı sousednı bunky majı smer k bodu P1 nebo P2Tato situace je znazornena na obrazku 2

Obrazek 2 Ukazka urcenı smeru odtoku z bunky [1]

Prvnı prıpad je smer mırıcı mezi bunky 5 a 6 Druhy prıpad je smer kteryvede prımo do bunky 3 Tato situace nastane jestlize pro trojuhelnık M43vyjde lokalnı smer d = π4 a pro trojuhelnık M32 smer vyjde d = 0Pote co je smer odtoku pro bunku vypocten je celkovy odtok rozdelendo vsech vyslednych smeru na zaklade sklonu Resenı teto problematiky jevıce popsano v sekci 42 Pro smery mırıcı mezi body P1 a P2 je odtokrozdelen do dvou bunek na zaklade nevejtsıho sklonu Pomer odtoku do buneks body P1 a P2 bude v tomto poradı α245 a α145

Obrazek 3 Trojuhelnıkove plosky [1]

7

42 Technicke resenı MDinfinVyse jiz bylo zmıneno ze algoritmus je napsan v jazyce Python Algoritmusje rozdelen do dvou skriptu Prvnı z nich obsahuje funkce a druhy je hlavnıVstupem do modelu je rastr digitalnıho modelu terenu a vystupnı adresardo ktereho se ulozı finalnı rastr smeru odtoku viz obr 4 Po nactenı rastruze vstupnıch parametru je tento rastr preveden na matici NumPy pomocıfunkce

arcpy RasterToNumPyArray ( InputRaster )

NumPy [5] je rozsırenı programovacıho jazyka Python je to balıcek uzıvanypro vedecke vypocty Umoznuje podporu velkych multi-dimenzionalnıch polıa matic spolu s velkou knihovnou matematickych funkcı pro praci s temitopoli

Algoritmus cyklem projızdı vsechny prvky matice a u tech ktere majı hod-notu ruznou od NoData nalezne okolı Hledanı okolı bunky provadı funkceneighbors ta je definovana takto

def ne ighbors ( i j array x y ) return nb1 nb2 nb3 nb4 nb5 nb6 nb7 nb8

Vstupem funkce je pozice v matici dale cela matice a jejı rozmery Funkceneighbors vypocıta hodnoty vysek sousednıch osmi bunek a vratı je na vystup

Obrazek 4 Dialogove okno nastroje MDinfin

Vystup z funkce neighbors slouzı jako jeden z vstupnıch parametru pro dalsıfunkci

8

Funkce byla pojmenovana dir slope jelikoz jejım vystupem je smer odtokua sklon tohoto smeru

def d i r s l o p e ( pointM nbrs vpix sp ix ) return d i r e c t i o n s l ope

Pro kazdy trojuhelnık byla spoctena hodnota d viz vzorec 3 Hodnota s bylapo spatnych a nelogickych vysledcıch pocıtana podle jineho vzorce ktery jizdaval spravne vysledky

s0 =

radicz212y21

+z22y22

(5)

Vzorec se lisı pro kazdy trojuhelnıcek uvedeny je pro vypocet sklonu kdy sousednıbunka je severozapadnı a severnı Tımto postupem bylo zbytecne pocıtatz-tovou slozku vekotoru n vzorec 2 Byly osetreny prıpady kdy sousednıbunky aktualnıho pocıtaneho trojuhelnıku jsou obe vyse polozene nebo obemimo rastr (NoData) Dalsı prıpad nastane jestlize je jeden bod vne rastra druhy v rastru lezı Smer je potom urcen prımo do toho bodu ktery nalezırastru Taktez i sklon je pocıtan pouze mezi tımto bodem a bodem M Lokalnı smer d v kazde plosce po vypoctenı nesmı prekrocit 45 V situacize tuto hodnotu prekrocı je smeru prirazena hodnota 0 nebo 45 v zavislostina vzajemnem porovnanı vysek bodu v trojuhelnıku Takto jsou zpracovanyvsechny plosky a je zjisteno zda-li do kazdeho trojuhelnıku nastava smerodtoku nebo ne Na konci funkce dir slope se kontroluje prıpad kdy smersousednıch trojuhelnıku odkazuje presne do stejneho bodu tedy hodnotysmeru musı byt pro prvnı trojuhelnık d = 45 a pro nasledujıcı sousednıtrojuhelnık d = 0 Vystupem funkce jsou dva vektory o osmi prvcıch smera sklon pro kazdou plosku

Dalsı fazı vypoctu je zjistenı pomeru vody ktera potece do jednotlivychsmeru K vypoctu pomeru byl pouzit tento vzorec [2]

fi =sxi8sum

j=1

sxj

(6)

kde s vyznacuje sklon vypocteneho smeru konkretnı trojuhelnıkove ploskya x je promenny exponent Pokud by byl exponent zvolen 1 bude vyslednasıtrsquo obdobna jako pri pouzitı MD8 algoritmu Pri zvetsovanı exponentu xk nekonecnu bude sıtrsquo stejna jako pri pouzitı D8 metody Vychozı hodnotaexponentu byla zvolena x = 4 coz je kompromis mezi obema variantami

9

Zmena exponentu se v soucasne podobe neprojevı na vyslednem rastru je-likoz vysledek prezentuje pouze smer odtoku a ne procentualnı cast Tohotopomeru bude vyuzito az pri spojenı skriptu s 2D modelem SMODERP

V dalsı casti vypoctu je rozdelen jiz zjisteny pomer z celkoveho odtokudo dvou prıpadne pouze do jedne bunky v zavislosti na smeru odtoku dVe vysledku je vypocten vektor osmi cısel kde kazda hodnota od 0 do 1prestavuje jiz procentualnı pomer z celkoveho odtoku do kazde sousednıbunky

Pro vyslednou reprezentaci smeru odtoku na vystup byl pro kazdou bunkuvytvoren vektor obsahujıcı 1 a 0 rıkajıcı zda nastava ci nenastava odtokdo sousednı bunky Tento vektor byl preveden na celocıselnou hodnotu po-mocı funkce bool2int

def boo l 2 i n t ( x ) y = 0for i j in enumerate ( x )

i f j y += 1ltlt ireturn y

Funkce ma na vstupu vektor jedicek a nul Naprıklad pro vektor 00000111kdy voda tece na severozapad sever a severovychod se funkce chova taktoJe testovano jestli platı j = 1 tedy prvnıch pet nul vektoru funkce preskocıa pro prvnı jednicku se pricte k promenne y 20 v dalsım kroku 21 a v poslednım22 Operator vyjadruje totiz bitovy posun smerem doleva Vysledkem jena vystupu cıslo y = 1 + 2 + 4 = 7

Pro vsechny bunky byla vypoctena hodnota reprezentujıcı smer odtoku Tatohodnota se ulozı do matice a ta se nasledne prevede na vysledny rastr

f l o w d i r = arcpy NumPyArrayToRaster ( value LLcorner spix vpix rdquordquo )

value hodnota reprezentujıcı smer odtokuLLcorner souradnice leveho dolnıho rohuspix sırka pixeluvpix vyska pixelu

10

5 Vysledky

Algoritmus MDinfin byl testovan na skutecnych datech dvou pozemku u obcıNucice ve Stredoceskem kraji a Bykovice v kraji Jihomoravskem rastry jsouv prıloze 71 Oba dva rastry jsou o rozlisenı 5 metru Finalnı rastry jsouporovnavany s rastry vytvorenymi v prostredı ArcGIS nastrojem Flow Di-rection metodou D8

51 Realna data - Bykovice

Vysledne rastry Flow Direction pro uzemı Bykovice jsou uvedeny v prıloze72 Oba rastry byly pro hodnoty 202127 obarveny shodnou barvou kvulilepsı nazornosti a porovnatelnosti vysledku Rastr ktery obsahuje z celkovehopoctu 44807 bunek celkem 23655 bunek s hodnotami vysek po probehnutıalgoritmy dal nasledujıcı vysledky

FD D8 MDinfin1 3650 7372 666 9174 207 188 21 716 94 3732 791 8564 8818 1045128 9408 14983sum

23655 14983

Tabulka 1 Tabulka porovnanı obou algoritmu pro rastr Bykovic

FD je zkratka pro Flow Direction cili smer odtoku reprezentovany celocıselnouhodnotou Ostatnı hodnoty u vysledneho rastru na ktery byl pouzit algorit-mus MDinfin jsou v rozpetı 0246 V rozmezı hodnot smeru odtoku 246255se nevyskytujı zadne bunky Cas potrebny pro vykonanı skriptu byl v prıpadeD8 4 vteriny Pro algoritmus MDinfin byl cas 15 vterin

11

52 Realna data - Nucice

Vysledne rastry jsou uvedeny v prıloze 73 Opet bylo pouzito shodne obar-venı pro zakladnı smery u obou rastru Rastr Nucice obsahoval data na 82732bunkach z celkove poctu 125449 bunek Vysledky jsou pro prehlednost uve-deny v tabulce

FD D8 MDinfin1 12186 12332 12441 87034 16907 10278 9826 1642316 2516 28832 5010 241764 7788 366128 16058 25475sum

82732 55932

Tabulka 2 Tabulka porovnanı obou algoritmu pro rastr Nucic

Ostatnı hodnoty u vysledneho rastru na ktery byl pouzit algoritmusMDinfin jsou v rozpetı 0255 Cas potrebny pro vykonanı skriptu byl v prıpadeD8 6 vterin Pro algoritmus MDinfin byl cas 50 vterin

12

6 Zaver

Cılem projektu bylo vytvorit funkcnı skript obsahujıcı algoritmus pojmen-ovany MDinfin [1] ktery resı odtok do sousednıch bunek rastru Algoritmusbyl napsan v programovacım jazyce Python a testovan na realnych datechVysledky byly mırnym prekvapenım kdy zejmena hodnoty smeru 128 tedyseverovychodnıho se vyskytovaly ve vysledku velmi casto viz tabulky 1 a 2Predpokladem bylo ze se odtok rozlozı do vıce smeru a pocet bunek s hod-notami zakladnıch smeru 1248163264 a 128 bude mene nez v prıpade al-goritmu D8 K rozkladu do vıce smeru sice doslo ale pocet nekterych bunekse zakladnımi smery byl vetsı u algoritmu MDinfin

Co se tyce delky doby behu algoritmu je algoritmus MDinfin pomalejsı viz casyv kapitole 5 nez D8 z nekolika zrejmych duvodu Predevsım algoritmus D8provadı mnohem mene pocetnıch operacı z duvodu jeho mensı slozitostiviz 3 Dalsım duvodem je take rozdıl v jazyce ve kterem jsou oba algo-ritmy napsany D8 je napsan v programovacım jazyce C++ ktery na vetsıchdatech je mnohonasobne rychlejsı nez Python Prepsanım algoritmu MDinfindo jazyka C++ by mohla byt cesta k budoucımu zvysenı rychlosti pracealgoritmu

13

Reference

[1] SEIBERT Jan McGlynn BL A new triangular multiple flow di-rection algortihm for computing upslope areas from gridded digi-tal elevation models [online] [cit 13 5 2013] Dostupne ke stazenız URL lthttpciteseerxistpsueduviewdocdownloaddoi=101179977amprep=rep1amptype=pdfgt

[2] HOLMGREN Peter Multiple direction algortihms for runoff modellingin grid based elevation models An empirical evaluation [online] [cit13 5 2013] Dostupny z URL ltftpwwwlwrkthseCommonUllaMFor_Imran[1994]20holmgren20-20multiple20flow

20direction20algorithms20for20runoff20modelling20in

20grid20based20elevation20modelspdf gt

[3] ESRI ESRI WebHelp - How Flow Direction works [online] [cit13 5 2013] Dostupne z URL lthttphelparcgiscomenarcgisdesktop100helpindexhtml009z00000063000000

htmgt

[4] ESRI ESRI Webhelp - Flow Direction (Spatial Analyst) [online][cit 13 5 2013] Dostupne z URL lthttphelparcgiscomenarcgisdesktop100helpindexhtml009z00000052000000

htmgt

[5] WIKIPEDIA NumPy [online] [cit 13 5 2013] Dostupne z URLlthttpenwikipediaorgwikiNumPygt

[6] INFORMIT Working with operators [online] [cit 13 5 2013] Dos-tupne z URL lthttpwwwinformitcomarticlesarticleaspxp=2002831ampseqNum=6gt

14

7 Prılohy

71 Bykovice a Nucice vstupnı DMT rastry

Obrazek 5 DMT Bykovice

Obrazek 6 DMT Nucice

15

72 Bykovice vysledky

Obrazek 7 Flow Direction D8

Obrazek 8 Flow Direction MDinfin

16

73 Nucice vysledky

Obrazek 9 Flow Direction D8

Obrazek 10 Flow Direction MDinfin

17

Page 32: pro zac ate cn kygeo.fsv.cvut.cz/gdata/2013/pin2/e/dokumentace/... · 2013-06-05 · CESK E VYSOK E U CEN I TECHNICKE V PRAZE FAKULTA STAVEBN I OBOR GEODEZIE A KARTOGRAFIE Dokumentace

3 Flow Direction D8

Pro pochopenı problematiky a zjevnost rozdılu mezi algoritmy je vhodneuvest jak funguje nastroj ktery pouzıva ArcGIS Zaklad algoritmu MDinfino nemz pojednava tato dokumentace je zalozen na podobnych postupech

31 Obecny princip D8

Princip nastroje urcenı smeru odtoku (Flow Direction) ktery pouzıva prostredıArcGIS je nasledujıcı Tento nastroj (tool) vezme vstupnı rastr digitalnıhomodelu terenu neboli vyskovy rastr Provede vypocet jehoz vystupem jerastr ktery v kazde bunce rastru obsahuje hodnotu urcujıcı smer odtokuz teto bunky Hodnot je osm podle osmi sousednıch bunek do kterych muzeodtekat voda viz obrazek 1 Prave podle osmi smeru odtoku se tento prıstupnazyva D8 (eight-direction approach)

Obrazek 1 Flow Direction D8 [3]

4

32 Popis algoritmu D8

Samotny vypocet algoritmu je v zasade primitivnı Pro vsechny sousednıbunky se vypocte maximalnı sklon [3]

maximalnı sklon = rozdıl vysek vzdalenost 100

Rozdıl vysek je rozdıl vysky v aktualnım bode a konkretnı sousednı bunkyVzdalenost je vypoctena mezi stredy bunek a lisı se v zavislosti na polozesousednı bunky Pro bunky sousedıcı vrcholem je hodnota velikosti pixeluprenasobena o odmocninu ze dvou Pro zbyle bunky sousedıcı hranou jevelikost vzdalenosti rovna velikosti pixelu Po nalezenı nejstrmejsıho smeruodtoku je hodnota ulozena v podobe bitove hodnoty reprezentujıcı danysmer Pred pouzitım nastroje Flow Direction se obvykle zpracuje vstupnırastr pomocı nastroje Sink Tento algoritmus zaplnı bezodtoke oblasti rastrunejnizsı hodnotou z okolı a do teto nejnizsı sousednı bunky pak posle voduPote jiz nemuze dojıt k situaci kdy vsechny sousednı bunky k dane buncemajı vyssı hodnoty vysek a nedochazelo by tedy k odtokuVysledny rastr nemusı obsahovat pouze bunky s hodnotami 202127 [4]Jestlize nastane situace kdy ma vıce sousednıch bunek nejnizsı hodnotuvysek pak je vysledna hodnota souctem vsech smeru Napr hodnota maximalnıhosklonu bude stejna pro sousednı bunku vlevo a nahore odtok tedy budesmerem na zapad (hodnota = 16) a na sever (hodnota = 64) vysledna hod-nota bude souctem 16 a 64 tedy 84

5

4 Popis algoritmu MDinfin

41 Obecny princip MDinfinObecny postup je prevzat z [1] Stejne jako v prıpade algoritmu Dinfin bylyzavedeny trojuhelnıkove plosky pro vypocet lokalnıho sklonu a smeru pro kazdoutrojuhelnıkovou plosku Okolo stredoveho boduM bylo vytvoreno osm trojuhelnıkuviz obrazek 3 Kazdy se zbyvajıcımi dvema vrcholy P1 P2 ve dvou sousedıcıchbunkach Pro kazdy z techto trojuhelnıku je vypocten smer nejvetsıho sklonuPokud oznacıme vysky bodu M P1 P2 jako hM hP1 hP2 rozdıly vysek sevypoctou takto

z1 = hP1 minus hM z2 = hP2 minus hM (1)

Obdobne se vypoctou rozdıly v x-ovych a y-ovych souradnicıch Po vypocturozdılu jednotlivych souradnic je vypocten normalovy vektor

n =

nx

ny

nz

=

z1y2 minus z2y1z1x2 minus z2x1y1x2 minus y2x1

(2)

Smer odtoku d a sklon s na trojuhelnıkove plose se vypocte pomocı rovnice3 Hodnota nula pro d oznacuje smer osy y a hodnota 3π2 oznacuje smerosy x

d =

0 nx = 0 ny ge 0

π nx = 0 ny lt 0

π2minus arctan(

ny

nx

) nx gt 0

3π2minus arctan(

ny

nx

) nx lt 0

(3)

s = minus tan

(arccos

(nzradic

n2x + n2

y + n2z

))(4)

Jestlize nejvetsı sklon od bodu M je mimo rozpetı 0-45 (π4 radian) jepouzit sklon strmejsı k jednomu z bodu P1 P2 a zaroven i sklon je spoctenk tomuto bodu V prıpade ze oba sousednı body jsou vyse polozeny nez bodM smer nenı pro tento trojuhelnık uvazovan Po spoctenı vsech osmi smerua sklonu pro jednotlive plosky jsou tyto smery povazovany za lokalne ne-jstrmejsı pro kazdy trojuhelnık v rozsahu 45 Smery vedoucı prımo do bodu

6

P1 nebo P2 tedy ty kde d = 0 nebo d = π4 jsou uvazovany pouze vprıpade kdy obe vedlejsı sousednı bunky majı smer k bodu P1 nebo P2Tato situace je znazornena na obrazku 2

Obrazek 2 Ukazka urcenı smeru odtoku z bunky [1]

Prvnı prıpad je smer mırıcı mezi bunky 5 a 6 Druhy prıpad je smer kteryvede prımo do bunky 3 Tato situace nastane jestlize pro trojuhelnık M43vyjde lokalnı smer d = π4 a pro trojuhelnık M32 smer vyjde d = 0Pote co je smer odtoku pro bunku vypocten je celkovy odtok rozdelendo vsech vyslednych smeru na zaklade sklonu Resenı teto problematiky jevıce popsano v sekci 42 Pro smery mırıcı mezi body P1 a P2 je odtokrozdelen do dvou bunek na zaklade nevejtsıho sklonu Pomer odtoku do buneks body P1 a P2 bude v tomto poradı α245 a α145

Obrazek 3 Trojuhelnıkove plosky [1]

7

42 Technicke resenı MDinfinVyse jiz bylo zmıneno ze algoritmus je napsan v jazyce Python Algoritmusje rozdelen do dvou skriptu Prvnı z nich obsahuje funkce a druhy je hlavnıVstupem do modelu je rastr digitalnıho modelu terenu a vystupnı adresardo ktereho se ulozı finalnı rastr smeru odtoku viz obr 4 Po nactenı rastruze vstupnıch parametru je tento rastr preveden na matici NumPy pomocıfunkce

arcpy RasterToNumPyArray ( InputRaster )

NumPy [5] je rozsırenı programovacıho jazyka Python je to balıcek uzıvanypro vedecke vypocty Umoznuje podporu velkych multi-dimenzionalnıch polıa matic spolu s velkou knihovnou matematickych funkcı pro praci s temitopoli

Algoritmus cyklem projızdı vsechny prvky matice a u tech ktere majı hod-notu ruznou od NoData nalezne okolı Hledanı okolı bunky provadı funkceneighbors ta je definovana takto

def ne ighbors ( i j array x y ) return nb1 nb2 nb3 nb4 nb5 nb6 nb7 nb8

Vstupem funkce je pozice v matici dale cela matice a jejı rozmery Funkceneighbors vypocıta hodnoty vysek sousednıch osmi bunek a vratı je na vystup

Obrazek 4 Dialogove okno nastroje MDinfin

Vystup z funkce neighbors slouzı jako jeden z vstupnıch parametru pro dalsıfunkci

8

Funkce byla pojmenovana dir slope jelikoz jejım vystupem je smer odtokua sklon tohoto smeru

def d i r s l o p e ( pointM nbrs vpix sp ix ) return d i r e c t i o n s l ope

Pro kazdy trojuhelnık byla spoctena hodnota d viz vzorec 3 Hodnota s bylapo spatnych a nelogickych vysledcıch pocıtana podle jineho vzorce ktery jizdaval spravne vysledky

s0 =

radicz212y21

+z22y22

(5)

Vzorec se lisı pro kazdy trojuhelnıcek uvedeny je pro vypocet sklonu kdy sousednıbunka je severozapadnı a severnı Tımto postupem bylo zbytecne pocıtatz-tovou slozku vekotoru n vzorec 2 Byly osetreny prıpady kdy sousednıbunky aktualnıho pocıtaneho trojuhelnıku jsou obe vyse polozene nebo obemimo rastr (NoData) Dalsı prıpad nastane jestlize je jeden bod vne rastra druhy v rastru lezı Smer je potom urcen prımo do toho bodu ktery nalezırastru Taktez i sklon je pocıtan pouze mezi tımto bodem a bodem M Lokalnı smer d v kazde plosce po vypoctenı nesmı prekrocit 45 V situacize tuto hodnotu prekrocı je smeru prirazena hodnota 0 nebo 45 v zavislostina vzajemnem porovnanı vysek bodu v trojuhelnıku Takto jsou zpracovanyvsechny plosky a je zjisteno zda-li do kazdeho trojuhelnıku nastava smerodtoku nebo ne Na konci funkce dir slope se kontroluje prıpad kdy smersousednıch trojuhelnıku odkazuje presne do stejneho bodu tedy hodnotysmeru musı byt pro prvnı trojuhelnık d = 45 a pro nasledujıcı sousednıtrojuhelnık d = 0 Vystupem funkce jsou dva vektory o osmi prvcıch smera sklon pro kazdou plosku

Dalsı fazı vypoctu je zjistenı pomeru vody ktera potece do jednotlivychsmeru K vypoctu pomeru byl pouzit tento vzorec [2]

fi =sxi8sum

j=1

sxj

(6)

kde s vyznacuje sklon vypocteneho smeru konkretnı trojuhelnıkove ploskya x je promenny exponent Pokud by byl exponent zvolen 1 bude vyslednasıtrsquo obdobna jako pri pouzitı MD8 algoritmu Pri zvetsovanı exponentu xk nekonecnu bude sıtrsquo stejna jako pri pouzitı D8 metody Vychozı hodnotaexponentu byla zvolena x = 4 coz je kompromis mezi obema variantami

9

Zmena exponentu se v soucasne podobe neprojevı na vyslednem rastru je-likoz vysledek prezentuje pouze smer odtoku a ne procentualnı cast Tohotopomeru bude vyuzito az pri spojenı skriptu s 2D modelem SMODERP

V dalsı casti vypoctu je rozdelen jiz zjisteny pomer z celkoveho odtokudo dvou prıpadne pouze do jedne bunky v zavislosti na smeru odtoku dVe vysledku je vypocten vektor osmi cısel kde kazda hodnota od 0 do 1prestavuje jiz procentualnı pomer z celkoveho odtoku do kazde sousednıbunky

Pro vyslednou reprezentaci smeru odtoku na vystup byl pro kazdou bunkuvytvoren vektor obsahujıcı 1 a 0 rıkajıcı zda nastava ci nenastava odtokdo sousednı bunky Tento vektor byl preveden na celocıselnou hodnotu po-mocı funkce bool2int

def boo l 2 i n t ( x ) y = 0for i j in enumerate ( x )

i f j y += 1ltlt ireturn y

Funkce ma na vstupu vektor jedicek a nul Naprıklad pro vektor 00000111kdy voda tece na severozapad sever a severovychod se funkce chova taktoJe testovano jestli platı j = 1 tedy prvnıch pet nul vektoru funkce preskocıa pro prvnı jednicku se pricte k promenne y 20 v dalsım kroku 21 a v poslednım22 Operator vyjadruje totiz bitovy posun smerem doleva Vysledkem jena vystupu cıslo y = 1 + 2 + 4 = 7

Pro vsechny bunky byla vypoctena hodnota reprezentujıcı smer odtoku Tatohodnota se ulozı do matice a ta se nasledne prevede na vysledny rastr

f l o w d i r = arcpy NumPyArrayToRaster ( value LLcorner spix vpix rdquordquo )

value hodnota reprezentujıcı smer odtokuLLcorner souradnice leveho dolnıho rohuspix sırka pixeluvpix vyska pixelu

10

5 Vysledky

Algoritmus MDinfin byl testovan na skutecnych datech dvou pozemku u obcıNucice ve Stredoceskem kraji a Bykovice v kraji Jihomoravskem rastry jsouv prıloze 71 Oba dva rastry jsou o rozlisenı 5 metru Finalnı rastry jsouporovnavany s rastry vytvorenymi v prostredı ArcGIS nastrojem Flow Di-rection metodou D8

51 Realna data - Bykovice

Vysledne rastry Flow Direction pro uzemı Bykovice jsou uvedeny v prıloze72 Oba rastry byly pro hodnoty 202127 obarveny shodnou barvou kvulilepsı nazornosti a porovnatelnosti vysledku Rastr ktery obsahuje z celkovehopoctu 44807 bunek celkem 23655 bunek s hodnotami vysek po probehnutıalgoritmy dal nasledujıcı vysledky

FD D8 MDinfin1 3650 7372 666 9174 207 188 21 716 94 3732 791 8564 8818 1045128 9408 14983sum

23655 14983

Tabulka 1 Tabulka porovnanı obou algoritmu pro rastr Bykovic

FD je zkratka pro Flow Direction cili smer odtoku reprezentovany celocıselnouhodnotou Ostatnı hodnoty u vysledneho rastru na ktery byl pouzit algorit-mus MDinfin jsou v rozpetı 0246 V rozmezı hodnot smeru odtoku 246255se nevyskytujı zadne bunky Cas potrebny pro vykonanı skriptu byl v prıpadeD8 4 vteriny Pro algoritmus MDinfin byl cas 15 vterin

11

52 Realna data - Nucice

Vysledne rastry jsou uvedeny v prıloze 73 Opet bylo pouzito shodne obar-venı pro zakladnı smery u obou rastru Rastr Nucice obsahoval data na 82732bunkach z celkove poctu 125449 bunek Vysledky jsou pro prehlednost uve-deny v tabulce

FD D8 MDinfin1 12186 12332 12441 87034 16907 10278 9826 1642316 2516 28832 5010 241764 7788 366128 16058 25475sum

82732 55932

Tabulka 2 Tabulka porovnanı obou algoritmu pro rastr Nucic

Ostatnı hodnoty u vysledneho rastru na ktery byl pouzit algoritmusMDinfin jsou v rozpetı 0255 Cas potrebny pro vykonanı skriptu byl v prıpadeD8 6 vterin Pro algoritmus MDinfin byl cas 50 vterin

12

6 Zaver

Cılem projektu bylo vytvorit funkcnı skript obsahujıcı algoritmus pojmen-ovany MDinfin [1] ktery resı odtok do sousednıch bunek rastru Algoritmusbyl napsan v programovacım jazyce Python a testovan na realnych datechVysledky byly mırnym prekvapenım kdy zejmena hodnoty smeru 128 tedyseverovychodnıho se vyskytovaly ve vysledku velmi casto viz tabulky 1 a 2Predpokladem bylo ze se odtok rozlozı do vıce smeru a pocet bunek s hod-notami zakladnıch smeru 1248163264 a 128 bude mene nez v prıpade al-goritmu D8 K rozkladu do vıce smeru sice doslo ale pocet nekterych bunekse zakladnımi smery byl vetsı u algoritmu MDinfin

Co se tyce delky doby behu algoritmu je algoritmus MDinfin pomalejsı viz casyv kapitole 5 nez D8 z nekolika zrejmych duvodu Predevsım algoritmus D8provadı mnohem mene pocetnıch operacı z duvodu jeho mensı slozitostiviz 3 Dalsım duvodem je take rozdıl v jazyce ve kterem jsou oba algo-ritmy napsany D8 je napsan v programovacım jazyce C++ ktery na vetsıchdatech je mnohonasobne rychlejsı nez Python Prepsanım algoritmu MDinfindo jazyka C++ by mohla byt cesta k budoucımu zvysenı rychlosti pracealgoritmu

13

Reference

[1] SEIBERT Jan McGlynn BL A new triangular multiple flow di-rection algortihm for computing upslope areas from gridded digi-tal elevation models [online] [cit 13 5 2013] Dostupne ke stazenız URL lthttpciteseerxistpsueduviewdocdownloaddoi=101179977amprep=rep1amptype=pdfgt

[2] HOLMGREN Peter Multiple direction algortihms for runoff modellingin grid based elevation models An empirical evaluation [online] [cit13 5 2013] Dostupny z URL ltftpwwwlwrkthseCommonUllaMFor_Imran[1994]20holmgren20-20multiple20flow

20direction20algorithms20for20runoff20modelling20in

20grid20based20elevation20modelspdf gt

[3] ESRI ESRI WebHelp - How Flow Direction works [online] [cit13 5 2013] Dostupne z URL lthttphelparcgiscomenarcgisdesktop100helpindexhtml009z00000063000000

htmgt

[4] ESRI ESRI Webhelp - Flow Direction (Spatial Analyst) [online][cit 13 5 2013] Dostupne z URL lthttphelparcgiscomenarcgisdesktop100helpindexhtml009z00000052000000

htmgt

[5] WIKIPEDIA NumPy [online] [cit 13 5 2013] Dostupne z URLlthttpenwikipediaorgwikiNumPygt

[6] INFORMIT Working with operators [online] [cit 13 5 2013] Dos-tupne z URL lthttpwwwinformitcomarticlesarticleaspxp=2002831ampseqNum=6gt

14

7 Prılohy

71 Bykovice a Nucice vstupnı DMT rastry

Obrazek 5 DMT Bykovice

Obrazek 6 DMT Nucice

15

72 Bykovice vysledky

Obrazek 7 Flow Direction D8

Obrazek 8 Flow Direction MDinfin

16

73 Nucice vysledky

Obrazek 9 Flow Direction D8

Obrazek 10 Flow Direction MDinfin

17

Page 33: pro zac ate cn kygeo.fsv.cvut.cz/gdata/2013/pin2/e/dokumentace/... · 2013-06-05 · CESK E VYSOK E U CEN I TECHNICKE V PRAZE FAKULTA STAVEBN I OBOR GEODEZIE A KARTOGRAFIE Dokumentace

32 Popis algoritmu D8

Samotny vypocet algoritmu je v zasade primitivnı Pro vsechny sousednıbunky se vypocte maximalnı sklon [3]

maximalnı sklon = rozdıl vysek vzdalenost 100

Rozdıl vysek je rozdıl vysky v aktualnım bode a konkretnı sousednı bunkyVzdalenost je vypoctena mezi stredy bunek a lisı se v zavislosti na polozesousednı bunky Pro bunky sousedıcı vrcholem je hodnota velikosti pixeluprenasobena o odmocninu ze dvou Pro zbyle bunky sousedıcı hranou jevelikost vzdalenosti rovna velikosti pixelu Po nalezenı nejstrmejsıho smeruodtoku je hodnota ulozena v podobe bitove hodnoty reprezentujıcı danysmer Pred pouzitım nastroje Flow Direction se obvykle zpracuje vstupnırastr pomocı nastroje Sink Tento algoritmus zaplnı bezodtoke oblasti rastrunejnizsı hodnotou z okolı a do teto nejnizsı sousednı bunky pak posle voduPote jiz nemuze dojıt k situaci kdy vsechny sousednı bunky k dane buncemajı vyssı hodnoty vysek a nedochazelo by tedy k odtokuVysledny rastr nemusı obsahovat pouze bunky s hodnotami 202127 [4]Jestlize nastane situace kdy ma vıce sousednıch bunek nejnizsı hodnotuvysek pak je vysledna hodnota souctem vsech smeru Napr hodnota maximalnıhosklonu bude stejna pro sousednı bunku vlevo a nahore odtok tedy budesmerem na zapad (hodnota = 16) a na sever (hodnota = 64) vysledna hod-nota bude souctem 16 a 64 tedy 84

5

4 Popis algoritmu MDinfin

41 Obecny princip MDinfinObecny postup je prevzat z [1] Stejne jako v prıpade algoritmu Dinfin bylyzavedeny trojuhelnıkove plosky pro vypocet lokalnıho sklonu a smeru pro kazdoutrojuhelnıkovou plosku Okolo stredoveho boduM bylo vytvoreno osm trojuhelnıkuviz obrazek 3 Kazdy se zbyvajıcımi dvema vrcholy P1 P2 ve dvou sousedıcıchbunkach Pro kazdy z techto trojuhelnıku je vypocten smer nejvetsıho sklonuPokud oznacıme vysky bodu M P1 P2 jako hM hP1 hP2 rozdıly vysek sevypoctou takto

z1 = hP1 minus hM z2 = hP2 minus hM (1)

Obdobne se vypoctou rozdıly v x-ovych a y-ovych souradnicıch Po vypocturozdılu jednotlivych souradnic je vypocten normalovy vektor

n =

nx

ny

nz

=

z1y2 minus z2y1z1x2 minus z2x1y1x2 minus y2x1

(2)

Smer odtoku d a sklon s na trojuhelnıkove plose se vypocte pomocı rovnice3 Hodnota nula pro d oznacuje smer osy y a hodnota 3π2 oznacuje smerosy x

d =

0 nx = 0 ny ge 0

π nx = 0 ny lt 0

π2minus arctan(

ny

nx

) nx gt 0

3π2minus arctan(

ny

nx

) nx lt 0

(3)

s = minus tan

(arccos

(nzradic

n2x + n2

y + n2z

))(4)

Jestlize nejvetsı sklon od bodu M je mimo rozpetı 0-45 (π4 radian) jepouzit sklon strmejsı k jednomu z bodu P1 P2 a zaroven i sklon je spoctenk tomuto bodu V prıpade ze oba sousednı body jsou vyse polozeny nez bodM smer nenı pro tento trojuhelnık uvazovan Po spoctenı vsech osmi smerua sklonu pro jednotlive plosky jsou tyto smery povazovany za lokalne ne-jstrmejsı pro kazdy trojuhelnık v rozsahu 45 Smery vedoucı prımo do bodu

6

P1 nebo P2 tedy ty kde d = 0 nebo d = π4 jsou uvazovany pouze vprıpade kdy obe vedlejsı sousednı bunky majı smer k bodu P1 nebo P2Tato situace je znazornena na obrazku 2

Obrazek 2 Ukazka urcenı smeru odtoku z bunky [1]

Prvnı prıpad je smer mırıcı mezi bunky 5 a 6 Druhy prıpad je smer kteryvede prımo do bunky 3 Tato situace nastane jestlize pro trojuhelnık M43vyjde lokalnı smer d = π4 a pro trojuhelnık M32 smer vyjde d = 0Pote co je smer odtoku pro bunku vypocten je celkovy odtok rozdelendo vsech vyslednych smeru na zaklade sklonu Resenı teto problematiky jevıce popsano v sekci 42 Pro smery mırıcı mezi body P1 a P2 je odtokrozdelen do dvou bunek na zaklade nevejtsıho sklonu Pomer odtoku do buneks body P1 a P2 bude v tomto poradı α245 a α145

Obrazek 3 Trojuhelnıkove plosky [1]

7

42 Technicke resenı MDinfinVyse jiz bylo zmıneno ze algoritmus je napsan v jazyce Python Algoritmusje rozdelen do dvou skriptu Prvnı z nich obsahuje funkce a druhy je hlavnıVstupem do modelu je rastr digitalnıho modelu terenu a vystupnı adresardo ktereho se ulozı finalnı rastr smeru odtoku viz obr 4 Po nactenı rastruze vstupnıch parametru je tento rastr preveden na matici NumPy pomocıfunkce

arcpy RasterToNumPyArray ( InputRaster )

NumPy [5] je rozsırenı programovacıho jazyka Python je to balıcek uzıvanypro vedecke vypocty Umoznuje podporu velkych multi-dimenzionalnıch polıa matic spolu s velkou knihovnou matematickych funkcı pro praci s temitopoli

Algoritmus cyklem projızdı vsechny prvky matice a u tech ktere majı hod-notu ruznou od NoData nalezne okolı Hledanı okolı bunky provadı funkceneighbors ta je definovana takto

def ne ighbors ( i j array x y ) return nb1 nb2 nb3 nb4 nb5 nb6 nb7 nb8

Vstupem funkce je pozice v matici dale cela matice a jejı rozmery Funkceneighbors vypocıta hodnoty vysek sousednıch osmi bunek a vratı je na vystup

Obrazek 4 Dialogove okno nastroje MDinfin

Vystup z funkce neighbors slouzı jako jeden z vstupnıch parametru pro dalsıfunkci

8

Funkce byla pojmenovana dir slope jelikoz jejım vystupem je smer odtokua sklon tohoto smeru

def d i r s l o p e ( pointM nbrs vpix sp ix ) return d i r e c t i o n s l ope

Pro kazdy trojuhelnık byla spoctena hodnota d viz vzorec 3 Hodnota s bylapo spatnych a nelogickych vysledcıch pocıtana podle jineho vzorce ktery jizdaval spravne vysledky

s0 =

radicz212y21

+z22y22

(5)

Vzorec se lisı pro kazdy trojuhelnıcek uvedeny je pro vypocet sklonu kdy sousednıbunka je severozapadnı a severnı Tımto postupem bylo zbytecne pocıtatz-tovou slozku vekotoru n vzorec 2 Byly osetreny prıpady kdy sousednıbunky aktualnıho pocıtaneho trojuhelnıku jsou obe vyse polozene nebo obemimo rastr (NoData) Dalsı prıpad nastane jestlize je jeden bod vne rastra druhy v rastru lezı Smer je potom urcen prımo do toho bodu ktery nalezırastru Taktez i sklon je pocıtan pouze mezi tımto bodem a bodem M Lokalnı smer d v kazde plosce po vypoctenı nesmı prekrocit 45 V situacize tuto hodnotu prekrocı je smeru prirazena hodnota 0 nebo 45 v zavislostina vzajemnem porovnanı vysek bodu v trojuhelnıku Takto jsou zpracovanyvsechny plosky a je zjisteno zda-li do kazdeho trojuhelnıku nastava smerodtoku nebo ne Na konci funkce dir slope se kontroluje prıpad kdy smersousednıch trojuhelnıku odkazuje presne do stejneho bodu tedy hodnotysmeru musı byt pro prvnı trojuhelnık d = 45 a pro nasledujıcı sousednıtrojuhelnık d = 0 Vystupem funkce jsou dva vektory o osmi prvcıch smera sklon pro kazdou plosku

Dalsı fazı vypoctu je zjistenı pomeru vody ktera potece do jednotlivychsmeru K vypoctu pomeru byl pouzit tento vzorec [2]

fi =sxi8sum

j=1

sxj

(6)

kde s vyznacuje sklon vypocteneho smeru konkretnı trojuhelnıkove ploskya x je promenny exponent Pokud by byl exponent zvolen 1 bude vyslednasıtrsquo obdobna jako pri pouzitı MD8 algoritmu Pri zvetsovanı exponentu xk nekonecnu bude sıtrsquo stejna jako pri pouzitı D8 metody Vychozı hodnotaexponentu byla zvolena x = 4 coz je kompromis mezi obema variantami

9

Zmena exponentu se v soucasne podobe neprojevı na vyslednem rastru je-likoz vysledek prezentuje pouze smer odtoku a ne procentualnı cast Tohotopomeru bude vyuzito az pri spojenı skriptu s 2D modelem SMODERP

V dalsı casti vypoctu je rozdelen jiz zjisteny pomer z celkoveho odtokudo dvou prıpadne pouze do jedne bunky v zavislosti na smeru odtoku dVe vysledku je vypocten vektor osmi cısel kde kazda hodnota od 0 do 1prestavuje jiz procentualnı pomer z celkoveho odtoku do kazde sousednıbunky

Pro vyslednou reprezentaci smeru odtoku na vystup byl pro kazdou bunkuvytvoren vektor obsahujıcı 1 a 0 rıkajıcı zda nastava ci nenastava odtokdo sousednı bunky Tento vektor byl preveden na celocıselnou hodnotu po-mocı funkce bool2int

def boo l 2 i n t ( x ) y = 0for i j in enumerate ( x )

i f j y += 1ltlt ireturn y

Funkce ma na vstupu vektor jedicek a nul Naprıklad pro vektor 00000111kdy voda tece na severozapad sever a severovychod se funkce chova taktoJe testovano jestli platı j = 1 tedy prvnıch pet nul vektoru funkce preskocıa pro prvnı jednicku se pricte k promenne y 20 v dalsım kroku 21 a v poslednım22 Operator vyjadruje totiz bitovy posun smerem doleva Vysledkem jena vystupu cıslo y = 1 + 2 + 4 = 7

Pro vsechny bunky byla vypoctena hodnota reprezentujıcı smer odtoku Tatohodnota se ulozı do matice a ta se nasledne prevede na vysledny rastr

f l o w d i r = arcpy NumPyArrayToRaster ( value LLcorner spix vpix rdquordquo )

value hodnota reprezentujıcı smer odtokuLLcorner souradnice leveho dolnıho rohuspix sırka pixeluvpix vyska pixelu

10

5 Vysledky

Algoritmus MDinfin byl testovan na skutecnych datech dvou pozemku u obcıNucice ve Stredoceskem kraji a Bykovice v kraji Jihomoravskem rastry jsouv prıloze 71 Oba dva rastry jsou o rozlisenı 5 metru Finalnı rastry jsouporovnavany s rastry vytvorenymi v prostredı ArcGIS nastrojem Flow Di-rection metodou D8

51 Realna data - Bykovice

Vysledne rastry Flow Direction pro uzemı Bykovice jsou uvedeny v prıloze72 Oba rastry byly pro hodnoty 202127 obarveny shodnou barvou kvulilepsı nazornosti a porovnatelnosti vysledku Rastr ktery obsahuje z celkovehopoctu 44807 bunek celkem 23655 bunek s hodnotami vysek po probehnutıalgoritmy dal nasledujıcı vysledky

FD D8 MDinfin1 3650 7372 666 9174 207 188 21 716 94 3732 791 8564 8818 1045128 9408 14983sum

23655 14983

Tabulka 1 Tabulka porovnanı obou algoritmu pro rastr Bykovic

FD je zkratka pro Flow Direction cili smer odtoku reprezentovany celocıselnouhodnotou Ostatnı hodnoty u vysledneho rastru na ktery byl pouzit algorit-mus MDinfin jsou v rozpetı 0246 V rozmezı hodnot smeru odtoku 246255se nevyskytujı zadne bunky Cas potrebny pro vykonanı skriptu byl v prıpadeD8 4 vteriny Pro algoritmus MDinfin byl cas 15 vterin

11

52 Realna data - Nucice

Vysledne rastry jsou uvedeny v prıloze 73 Opet bylo pouzito shodne obar-venı pro zakladnı smery u obou rastru Rastr Nucice obsahoval data na 82732bunkach z celkove poctu 125449 bunek Vysledky jsou pro prehlednost uve-deny v tabulce

FD D8 MDinfin1 12186 12332 12441 87034 16907 10278 9826 1642316 2516 28832 5010 241764 7788 366128 16058 25475sum

82732 55932

Tabulka 2 Tabulka porovnanı obou algoritmu pro rastr Nucic

Ostatnı hodnoty u vysledneho rastru na ktery byl pouzit algoritmusMDinfin jsou v rozpetı 0255 Cas potrebny pro vykonanı skriptu byl v prıpadeD8 6 vterin Pro algoritmus MDinfin byl cas 50 vterin

12

6 Zaver

Cılem projektu bylo vytvorit funkcnı skript obsahujıcı algoritmus pojmen-ovany MDinfin [1] ktery resı odtok do sousednıch bunek rastru Algoritmusbyl napsan v programovacım jazyce Python a testovan na realnych datechVysledky byly mırnym prekvapenım kdy zejmena hodnoty smeru 128 tedyseverovychodnıho se vyskytovaly ve vysledku velmi casto viz tabulky 1 a 2Predpokladem bylo ze se odtok rozlozı do vıce smeru a pocet bunek s hod-notami zakladnıch smeru 1248163264 a 128 bude mene nez v prıpade al-goritmu D8 K rozkladu do vıce smeru sice doslo ale pocet nekterych bunekse zakladnımi smery byl vetsı u algoritmu MDinfin

Co se tyce delky doby behu algoritmu je algoritmus MDinfin pomalejsı viz casyv kapitole 5 nez D8 z nekolika zrejmych duvodu Predevsım algoritmus D8provadı mnohem mene pocetnıch operacı z duvodu jeho mensı slozitostiviz 3 Dalsım duvodem je take rozdıl v jazyce ve kterem jsou oba algo-ritmy napsany D8 je napsan v programovacım jazyce C++ ktery na vetsıchdatech je mnohonasobne rychlejsı nez Python Prepsanım algoritmu MDinfindo jazyka C++ by mohla byt cesta k budoucımu zvysenı rychlosti pracealgoritmu

13

Reference

[1] SEIBERT Jan McGlynn BL A new triangular multiple flow di-rection algortihm for computing upslope areas from gridded digi-tal elevation models [online] [cit 13 5 2013] Dostupne ke stazenız URL lthttpciteseerxistpsueduviewdocdownloaddoi=101179977amprep=rep1amptype=pdfgt

[2] HOLMGREN Peter Multiple direction algortihms for runoff modellingin grid based elevation models An empirical evaluation [online] [cit13 5 2013] Dostupny z URL ltftpwwwlwrkthseCommonUllaMFor_Imran[1994]20holmgren20-20multiple20flow

20direction20algorithms20for20runoff20modelling20in

20grid20based20elevation20modelspdf gt

[3] ESRI ESRI WebHelp - How Flow Direction works [online] [cit13 5 2013] Dostupne z URL lthttphelparcgiscomenarcgisdesktop100helpindexhtml009z00000063000000

htmgt

[4] ESRI ESRI Webhelp - Flow Direction (Spatial Analyst) [online][cit 13 5 2013] Dostupne z URL lthttphelparcgiscomenarcgisdesktop100helpindexhtml009z00000052000000

htmgt

[5] WIKIPEDIA NumPy [online] [cit 13 5 2013] Dostupne z URLlthttpenwikipediaorgwikiNumPygt

[6] INFORMIT Working with operators [online] [cit 13 5 2013] Dos-tupne z URL lthttpwwwinformitcomarticlesarticleaspxp=2002831ampseqNum=6gt

14

7 Prılohy

71 Bykovice a Nucice vstupnı DMT rastry

Obrazek 5 DMT Bykovice

Obrazek 6 DMT Nucice

15

72 Bykovice vysledky

Obrazek 7 Flow Direction D8

Obrazek 8 Flow Direction MDinfin

16

73 Nucice vysledky

Obrazek 9 Flow Direction D8

Obrazek 10 Flow Direction MDinfin

17

Page 34: pro zac ate cn kygeo.fsv.cvut.cz/gdata/2013/pin2/e/dokumentace/... · 2013-06-05 · CESK E VYSOK E U CEN I TECHNICKE V PRAZE FAKULTA STAVEBN I OBOR GEODEZIE A KARTOGRAFIE Dokumentace

4 Popis algoritmu MDinfin

41 Obecny princip MDinfinObecny postup je prevzat z [1] Stejne jako v prıpade algoritmu Dinfin bylyzavedeny trojuhelnıkove plosky pro vypocet lokalnıho sklonu a smeru pro kazdoutrojuhelnıkovou plosku Okolo stredoveho boduM bylo vytvoreno osm trojuhelnıkuviz obrazek 3 Kazdy se zbyvajıcımi dvema vrcholy P1 P2 ve dvou sousedıcıchbunkach Pro kazdy z techto trojuhelnıku je vypocten smer nejvetsıho sklonuPokud oznacıme vysky bodu M P1 P2 jako hM hP1 hP2 rozdıly vysek sevypoctou takto

z1 = hP1 minus hM z2 = hP2 minus hM (1)

Obdobne se vypoctou rozdıly v x-ovych a y-ovych souradnicıch Po vypocturozdılu jednotlivych souradnic je vypocten normalovy vektor

n =

nx

ny

nz

=

z1y2 minus z2y1z1x2 minus z2x1y1x2 minus y2x1

(2)

Smer odtoku d a sklon s na trojuhelnıkove plose se vypocte pomocı rovnice3 Hodnota nula pro d oznacuje smer osy y a hodnota 3π2 oznacuje smerosy x

d =

0 nx = 0 ny ge 0

π nx = 0 ny lt 0

π2minus arctan(

ny

nx

) nx gt 0

3π2minus arctan(

ny

nx

) nx lt 0

(3)

s = minus tan

(arccos

(nzradic

n2x + n2

y + n2z

))(4)

Jestlize nejvetsı sklon od bodu M je mimo rozpetı 0-45 (π4 radian) jepouzit sklon strmejsı k jednomu z bodu P1 P2 a zaroven i sklon je spoctenk tomuto bodu V prıpade ze oba sousednı body jsou vyse polozeny nez bodM smer nenı pro tento trojuhelnık uvazovan Po spoctenı vsech osmi smerua sklonu pro jednotlive plosky jsou tyto smery povazovany za lokalne ne-jstrmejsı pro kazdy trojuhelnık v rozsahu 45 Smery vedoucı prımo do bodu

6

P1 nebo P2 tedy ty kde d = 0 nebo d = π4 jsou uvazovany pouze vprıpade kdy obe vedlejsı sousednı bunky majı smer k bodu P1 nebo P2Tato situace je znazornena na obrazku 2

Obrazek 2 Ukazka urcenı smeru odtoku z bunky [1]

Prvnı prıpad je smer mırıcı mezi bunky 5 a 6 Druhy prıpad je smer kteryvede prımo do bunky 3 Tato situace nastane jestlize pro trojuhelnık M43vyjde lokalnı smer d = π4 a pro trojuhelnık M32 smer vyjde d = 0Pote co je smer odtoku pro bunku vypocten je celkovy odtok rozdelendo vsech vyslednych smeru na zaklade sklonu Resenı teto problematiky jevıce popsano v sekci 42 Pro smery mırıcı mezi body P1 a P2 je odtokrozdelen do dvou bunek na zaklade nevejtsıho sklonu Pomer odtoku do buneks body P1 a P2 bude v tomto poradı α245 a α145

Obrazek 3 Trojuhelnıkove plosky [1]

7

42 Technicke resenı MDinfinVyse jiz bylo zmıneno ze algoritmus je napsan v jazyce Python Algoritmusje rozdelen do dvou skriptu Prvnı z nich obsahuje funkce a druhy je hlavnıVstupem do modelu je rastr digitalnıho modelu terenu a vystupnı adresardo ktereho se ulozı finalnı rastr smeru odtoku viz obr 4 Po nactenı rastruze vstupnıch parametru je tento rastr preveden na matici NumPy pomocıfunkce

arcpy RasterToNumPyArray ( InputRaster )

NumPy [5] je rozsırenı programovacıho jazyka Python je to balıcek uzıvanypro vedecke vypocty Umoznuje podporu velkych multi-dimenzionalnıch polıa matic spolu s velkou knihovnou matematickych funkcı pro praci s temitopoli

Algoritmus cyklem projızdı vsechny prvky matice a u tech ktere majı hod-notu ruznou od NoData nalezne okolı Hledanı okolı bunky provadı funkceneighbors ta je definovana takto

def ne ighbors ( i j array x y ) return nb1 nb2 nb3 nb4 nb5 nb6 nb7 nb8

Vstupem funkce je pozice v matici dale cela matice a jejı rozmery Funkceneighbors vypocıta hodnoty vysek sousednıch osmi bunek a vratı je na vystup

Obrazek 4 Dialogove okno nastroje MDinfin

Vystup z funkce neighbors slouzı jako jeden z vstupnıch parametru pro dalsıfunkci

8

Funkce byla pojmenovana dir slope jelikoz jejım vystupem je smer odtokua sklon tohoto smeru

def d i r s l o p e ( pointM nbrs vpix sp ix ) return d i r e c t i o n s l ope

Pro kazdy trojuhelnık byla spoctena hodnota d viz vzorec 3 Hodnota s bylapo spatnych a nelogickych vysledcıch pocıtana podle jineho vzorce ktery jizdaval spravne vysledky

s0 =

radicz212y21

+z22y22

(5)

Vzorec se lisı pro kazdy trojuhelnıcek uvedeny je pro vypocet sklonu kdy sousednıbunka je severozapadnı a severnı Tımto postupem bylo zbytecne pocıtatz-tovou slozku vekotoru n vzorec 2 Byly osetreny prıpady kdy sousednıbunky aktualnıho pocıtaneho trojuhelnıku jsou obe vyse polozene nebo obemimo rastr (NoData) Dalsı prıpad nastane jestlize je jeden bod vne rastra druhy v rastru lezı Smer je potom urcen prımo do toho bodu ktery nalezırastru Taktez i sklon je pocıtan pouze mezi tımto bodem a bodem M Lokalnı smer d v kazde plosce po vypoctenı nesmı prekrocit 45 V situacize tuto hodnotu prekrocı je smeru prirazena hodnota 0 nebo 45 v zavislostina vzajemnem porovnanı vysek bodu v trojuhelnıku Takto jsou zpracovanyvsechny plosky a je zjisteno zda-li do kazdeho trojuhelnıku nastava smerodtoku nebo ne Na konci funkce dir slope se kontroluje prıpad kdy smersousednıch trojuhelnıku odkazuje presne do stejneho bodu tedy hodnotysmeru musı byt pro prvnı trojuhelnık d = 45 a pro nasledujıcı sousednıtrojuhelnık d = 0 Vystupem funkce jsou dva vektory o osmi prvcıch smera sklon pro kazdou plosku

Dalsı fazı vypoctu je zjistenı pomeru vody ktera potece do jednotlivychsmeru K vypoctu pomeru byl pouzit tento vzorec [2]

fi =sxi8sum

j=1

sxj

(6)

kde s vyznacuje sklon vypocteneho smeru konkretnı trojuhelnıkove ploskya x je promenny exponent Pokud by byl exponent zvolen 1 bude vyslednasıtrsquo obdobna jako pri pouzitı MD8 algoritmu Pri zvetsovanı exponentu xk nekonecnu bude sıtrsquo stejna jako pri pouzitı D8 metody Vychozı hodnotaexponentu byla zvolena x = 4 coz je kompromis mezi obema variantami

9

Zmena exponentu se v soucasne podobe neprojevı na vyslednem rastru je-likoz vysledek prezentuje pouze smer odtoku a ne procentualnı cast Tohotopomeru bude vyuzito az pri spojenı skriptu s 2D modelem SMODERP

V dalsı casti vypoctu je rozdelen jiz zjisteny pomer z celkoveho odtokudo dvou prıpadne pouze do jedne bunky v zavislosti na smeru odtoku dVe vysledku je vypocten vektor osmi cısel kde kazda hodnota od 0 do 1prestavuje jiz procentualnı pomer z celkoveho odtoku do kazde sousednıbunky

Pro vyslednou reprezentaci smeru odtoku na vystup byl pro kazdou bunkuvytvoren vektor obsahujıcı 1 a 0 rıkajıcı zda nastava ci nenastava odtokdo sousednı bunky Tento vektor byl preveden na celocıselnou hodnotu po-mocı funkce bool2int

def boo l 2 i n t ( x ) y = 0for i j in enumerate ( x )

i f j y += 1ltlt ireturn y

Funkce ma na vstupu vektor jedicek a nul Naprıklad pro vektor 00000111kdy voda tece na severozapad sever a severovychod se funkce chova taktoJe testovano jestli platı j = 1 tedy prvnıch pet nul vektoru funkce preskocıa pro prvnı jednicku se pricte k promenne y 20 v dalsım kroku 21 a v poslednım22 Operator vyjadruje totiz bitovy posun smerem doleva Vysledkem jena vystupu cıslo y = 1 + 2 + 4 = 7

Pro vsechny bunky byla vypoctena hodnota reprezentujıcı smer odtoku Tatohodnota se ulozı do matice a ta se nasledne prevede na vysledny rastr

f l o w d i r = arcpy NumPyArrayToRaster ( value LLcorner spix vpix rdquordquo )

value hodnota reprezentujıcı smer odtokuLLcorner souradnice leveho dolnıho rohuspix sırka pixeluvpix vyska pixelu

10

5 Vysledky

Algoritmus MDinfin byl testovan na skutecnych datech dvou pozemku u obcıNucice ve Stredoceskem kraji a Bykovice v kraji Jihomoravskem rastry jsouv prıloze 71 Oba dva rastry jsou o rozlisenı 5 metru Finalnı rastry jsouporovnavany s rastry vytvorenymi v prostredı ArcGIS nastrojem Flow Di-rection metodou D8

51 Realna data - Bykovice

Vysledne rastry Flow Direction pro uzemı Bykovice jsou uvedeny v prıloze72 Oba rastry byly pro hodnoty 202127 obarveny shodnou barvou kvulilepsı nazornosti a porovnatelnosti vysledku Rastr ktery obsahuje z celkovehopoctu 44807 bunek celkem 23655 bunek s hodnotami vysek po probehnutıalgoritmy dal nasledujıcı vysledky

FD D8 MDinfin1 3650 7372 666 9174 207 188 21 716 94 3732 791 8564 8818 1045128 9408 14983sum

23655 14983

Tabulka 1 Tabulka porovnanı obou algoritmu pro rastr Bykovic

FD je zkratka pro Flow Direction cili smer odtoku reprezentovany celocıselnouhodnotou Ostatnı hodnoty u vysledneho rastru na ktery byl pouzit algorit-mus MDinfin jsou v rozpetı 0246 V rozmezı hodnot smeru odtoku 246255se nevyskytujı zadne bunky Cas potrebny pro vykonanı skriptu byl v prıpadeD8 4 vteriny Pro algoritmus MDinfin byl cas 15 vterin

11

52 Realna data - Nucice

Vysledne rastry jsou uvedeny v prıloze 73 Opet bylo pouzito shodne obar-venı pro zakladnı smery u obou rastru Rastr Nucice obsahoval data na 82732bunkach z celkove poctu 125449 bunek Vysledky jsou pro prehlednost uve-deny v tabulce

FD D8 MDinfin1 12186 12332 12441 87034 16907 10278 9826 1642316 2516 28832 5010 241764 7788 366128 16058 25475sum

82732 55932

Tabulka 2 Tabulka porovnanı obou algoritmu pro rastr Nucic

Ostatnı hodnoty u vysledneho rastru na ktery byl pouzit algoritmusMDinfin jsou v rozpetı 0255 Cas potrebny pro vykonanı skriptu byl v prıpadeD8 6 vterin Pro algoritmus MDinfin byl cas 50 vterin

12

6 Zaver

Cılem projektu bylo vytvorit funkcnı skript obsahujıcı algoritmus pojmen-ovany MDinfin [1] ktery resı odtok do sousednıch bunek rastru Algoritmusbyl napsan v programovacım jazyce Python a testovan na realnych datechVysledky byly mırnym prekvapenım kdy zejmena hodnoty smeru 128 tedyseverovychodnıho se vyskytovaly ve vysledku velmi casto viz tabulky 1 a 2Predpokladem bylo ze se odtok rozlozı do vıce smeru a pocet bunek s hod-notami zakladnıch smeru 1248163264 a 128 bude mene nez v prıpade al-goritmu D8 K rozkladu do vıce smeru sice doslo ale pocet nekterych bunekse zakladnımi smery byl vetsı u algoritmu MDinfin

Co se tyce delky doby behu algoritmu je algoritmus MDinfin pomalejsı viz casyv kapitole 5 nez D8 z nekolika zrejmych duvodu Predevsım algoritmus D8provadı mnohem mene pocetnıch operacı z duvodu jeho mensı slozitostiviz 3 Dalsım duvodem je take rozdıl v jazyce ve kterem jsou oba algo-ritmy napsany D8 je napsan v programovacım jazyce C++ ktery na vetsıchdatech je mnohonasobne rychlejsı nez Python Prepsanım algoritmu MDinfindo jazyka C++ by mohla byt cesta k budoucımu zvysenı rychlosti pracealgoritmu

13

Reference

[1] SEIBERT Jan McGlynn BL A new triangular multiple flow di-rection algortihm for computing upslope areas from gridded digi-tal elevation models [online] [cit 13 5 2013] Dostupne ke stazenız URL lthttpciteseerxistpsueduviewdocdownloaddoi=101179977amprep=rep1amptype=pdfgt

[2] HOLMGREN Peter Multiple direction algortihms for runoff modellingin grid based elevation models An empirical evaluation [online] [cit13 5 2013] Dostupny z URL ltftpwwwlwrkthseCommonUllaMFor_Imran[1994]20holmgren20-20multiple20flow

20direction20algorithms20for20runoff20modelling20in

20grid20based20elevation20modelspdf gt

[3] ESRI ESRI WebHelp - How Flow Direction works [online] [cit13 5 2013] Dostupne z URL lthttphelparcgiscomenarcgisdesktop100helpindexhtml009z00000063000000

htmgt

[4] ESRI ESRI Webhelp - Flow Direction (Spatial Analyst) [online][cit 13 5 2013] Dostupne z URL lthttphelparcgiscomenarcgisdesktop100helpindexhtml009z00000052000000

htmgt

[5] WIKIPEDIA NumPy [online] [cit 13 5 2013] Dostupne z URLlthttpenwikipediaorgwikiNumPygt

[6] INFORMIT Working with operators [online] [cit 13 5 2013] Dos-tupne z URL lthttpwwwinformitcomarticlesarticleaspxp=2002831ampseqNum=6gt

14

7 Prılohy

71 Bykovice a Nucice vstupnı DMT rastry

Obrazek 5 DMT Bykovice

Obrazek 6 DMT Nucice

15

72 Bykovice vysledky

Obrazek 7 Flow Direction D8

Obrazek 8 Flow Direction MDinfin

16

73 Nucice vysledky

Obrazek 9 Flow Direction D8

Obrazek 10 Flow Direction MDinfin

17

Page 35: pro zac ate cn kygeo.fsv.cvut.cz/gdata/2013/pin2/e/dokumentace/... · 2013-06-05 · CESK E VYSOK E U CEN I TECHNICKE V PRAZE FAKULTA STAVEBN I OBOR GEODEZIE A KARTOGRAFIE Dokumentace

P1 nebo P2 tedy ty kde d = 0 nebo d = π4 jsou uvazovany pouze vprıpade kdy obe vedlejsı sousednı bunky majı smer k bodu P1 nebo P2Tato situace je znazornena na obrazku 2

Obrazek 2 Ukazka urcenı smeru odtoku z bunky [1]

Prvnı prıpad je smer mırıcı mezi bunky 5 a 6 Druhy prıpad je smer kteryvede prımo do bunky 3 Tato situace nastane jestlize pro trojuhelnık M43vyjde lokalnı smer d = π4 a pro trojuhelnık M32 smer vyjde d = 0Pote co je smer odtoku pro bunku vypocten je celkovy odtok rozdelendo vsech vyslednych smeru na zaklade sklonu Resenı teto problematiky jevıce popsano v sekci 42 Pro smery mırıcı mezi body P1 a P2 je odtokrozdelen do dvou bunek na zaklade nevejtsıho sklonu Pomer odtoku do buneks body P1 a P2 bude v tomto poradı α245 a α145

Obrazek 3 Trojuhelnıkove plosky [1]

7

42 Technicke resenı MDinfinVyse jiz bylo zmıneno ze algoritmus je napsan v jazyce Python Algoritmusje rozdelen do dvou skriptu Prvnı z nich obsahuje funkce a druhy je hlavnıVstupem do modelu je rastr digitalnıho modelu terenu a vystupnı adresardo ktereho se ulozı finalnı rastr smeru odtoku viz obr 4 Po nactenı rastruze vstupnıch parametru je tento rastr preveden na matici NumPy pomocıfunkce

arcpy RasterToNumPyArray ( InputRaster )

NumPy [5] je rozsırenı programovacıho jazyka Python je to balıcek uzıvanypro vedecke vypocty Umoznuje podporu velkych multi-dimenzionalnıch polıa matic spolu s velkou knihovnou matematickych funkcı pro praci s temitopoli

Algoritmus cyklem projızdı vsechny prvky matice a u tech ktere majı hod-notu ruznou od NoData nalezne okolı Hledanı okolı bunky provadı funkceneighbors ta je definovana takto

def ne ighbors ( i j array x y ) return nb1 nb2 nb3 nb4 nb5 nb6 nb7 nb8

Vstupem funkce je pozice v matici dale cela matice a jejı rozmery Funkceneighbors vypocıta hodnoty vysek sousednıch osmi bunek a vratı je na vystup

Obrazek 4 Dialogove okno nastroje MDinfin

Vystup z funkce neighbors slouzı jako jeden z vstupnıch parametru pro dalsıfunkci

8

Funkce byla pojmenovana dir slope jelikoz jejım vystupem je smer odtokua sklon tohoto smeru

def d i r s l o p e ( pointM nbrs vpix sp ix ) return d i r e c t i o n s l ope

Pro kazdy trojuhelnık byla spoctena hodnota d viz vzorec 3 Hodnota s bylapo spatnych a nelogickych vysledcıch pocıtana podle jineho vzorce ktery jizdaval spravne vysledky

s0 =

radicz212y21

+z22y22

(5)

Vzorec se lisı pro kazdy trojuhelnıcek uvedeny je pro vypocet sklonu kdy sousednıbunka je severozapadnı a severnı Tımto postupem bylo zbytecne pocıtatz-tovou slozku vekotoru n vzorec 2 Byly osetreny prıpady kdy sousednıbunky aktualnıho pocıtaneho trojuhelnıku jsou obe vyse polozene nebo obemimo rastr (NoData) Dalsı prıpad nastane jestlize je jeden bod vne rastra druhy v rastru lezı Smer je potom urcen prımo do toho bodu ktery nalezırastru Taktez i sklon je pocıtan pouze mezi tımto bodem a bodem M Lokalnı smer d v kazde plosce po vypoctenı nesmı prekrocit 45 V situacize tuto hodnotu prekrocı je smeru prirazena hodnota 0 nebo 45 v zavislostina vzajemnem porovnanı vysek bodu v trojuhelnıku Takto jsou zpracovanyvsechny plosky a je zjisteno zda-li do kazdeho trojuhelnıku nastava smerodtoku nebo ne Na konci funkce dir slope se kontroluje prıpad kdy smersousednıch trojuhelnıku odkazuje presne do stejneho bodu tedy hodnotysmeru musı byt pro prvnı trojuhelnık d = 45 a pro nasledujıcı sousednıtrojuhelnık d = 0 Vystupem funkce jsou dva vektory o osmi prvcıch smera sklon pro kazdou plosku

Dalsı fazı vypoctu je zjistenı pomeru vody ktera potece do jednotlivychsmeru K vypoctu pomeru byl pouzit tento vzorec [2]

fi =sxi8sum

j=1

sxj

(6)

kde s vyznacuje sklon vypocteneho smeru konkretnı trojuhelnıkove ploskya x je promenny exponent Pokud by byl exponent zvolen 1 bude vyslednasıtrsquo obdobna jako pri pouzitı MD8 algoritmu Pri zvetsovanı exponentu xk nekonecnu bude sıtrsquo stejna jako pri pouzitı D8 metody Vychozı hodnotaexponentu byla zvolena x = 4 coz je kompromis mezi obema variantami

9

Zmena exponentu se v soucasne podobe neprojevı na vyslednem rastru je-likoz vysledek prezentuje pouze smer odtoku a ne procentualnı cast Tohotopomeru bude vyuzito az pri spojenı skriptu s 2D modelem SMODERP

V dalsı casti vypoctu je rozdelen jiz zjisteny pomer z celkoveho odtokudo dvou prıpadne pouze do jedne bunky v zavislosti na smeru odtoku dVe vysledku je vypocten vektor osmi cısel kde kazda hodnota od 0 do 1prestavuje jiz procentualnı pomer z celkoveho odtoku do kazde sousednıbunky

Pro vyslednou reprezentaci smeru odtoku na vystup byl pro kazdou bunkuvytvoren vektor obsahujıcı 1 a 0 rıkajıcı zda nastava ci nenastava odtokdo sousednı bunky Tento vektor byl preveden na celocıselnou hodnotu po-mocı funkce bool2int

def boo l 2 i n t ( x ) y = 0for i j in enumerate ( x )

i f j y += 1ltlt ireturn y

Funkce ma na vstupu vektor jedicek a nul Naprıklad pro vektor 00000111kdy voda tece na severozapad sever a severovychod se funkce chova taktoJe testovano jestli platı j = 1 tedy prvnıch pet nul vektoru funkce preskocıa pro prvnı jednicku se pricte k promenne y 20 v dalsım kroku 21 a v poslednım22 Operator vyjadruje totiz bitovy posun smerem doleva Vysledkem jena vystupu cıslo y = 1 + 2 + 4 = 7

Pro vsechny bunky byla vypoctena hodnota reprezentujıcı smer odtoku Tatohodnota se ulozı do matice a ta se nasledne prevede na vysledny rastr

f l o w d i r = arcpy NumPyArrayToRaster ( value LLcorner spix vpix rdquordquo )

value hodnota reprezentujıcı smer odtokuLLcorner souradnice leveho dolnıho rohuspix sırka pixeluvpix vyska pixelu

10

5 Vysledky

Algoritmus MDinfin byl testovan na skutecnych datech dvou pozemku u obcıNucice ve Stredoceskem kraji a Bykovice v kraji Jihomoravskem rastry jsouv prıloze 71 Oba dva rastry jsou o rozlisenı 5 metru Finalnı rastry jsouporovnavany s rastry vytvorenymi v prostredı ArcGIS nastrojem Flow Di-rection metodou D8

51 Realna data - Bykovice

Vysledne rastry Flow Direction pro uzemı Bykovice jsou uvedeny v prıloze72 Oba rastry byly pro hodnoty 202127 obarveny shodnou barvou kvulilepsı nazornosti a porovnatelnosti vysledku Rastr ktery obsahuje z celkovehopoctu 44807 bunek celkem 23655 bunek s hodnotami vysek po probehnutıalgoritmy dal nasledujıcı vysledky

FD D8 MDinfin1 3650 7372 666 9174 207 188 21 716 94 3732 791 8564 8818 1045128 9408 14983sum

23655 14983

Tabulka 1 Tabulka porovnanı obou algoritmu pro rastr Bykovic

FD je zkratka pro Flow Direction cili smer odtoku reprezentovany celocıselnouhodnotou Ostatnı hodnoty u vysledneho rastru na ktery byl pouzit algorit-mus MDinfin jsou v rozpetı 0246 V rozmezı hodnot smeru odtoku 246255se nevyskytujı zadne bunky Cas potrebny pro vykonanı skriptu byl v prıpadeD8 4 vteriny Pro algoritmus MDinfin byl cas 15 vterin

11

52 Realna data - Nucice

Vysledne rastry jsou uvedeny v prıloze 73 Opet bylo pouzito shodne obar-venı pro zakladnı smery u obou rastru Rastr Nucice obsahoval data na 82732bunkach z celkove poctu 125449 bunek Vysledky jsou pro prehlednost uve-deny v tabulce

FD D8 MDinfin1 12186 12332 12441 87034 16907 10278 9826 1642316 2516 28832 5010 241764 7788 366128 16058 25475sum

82732 55932

Tabulka 2 Tabulka porovnanı obou algoritmu pro rastr Nucic

Ostatnı hodnoty u vysledneho rastru na ktery byl pouzit algoritmusMDinfin jsou v rozpetı 0255 Cas potrebny pro vykonanı skriptu byl v prıpadeD8 6 vterin Pro algoritmus MDinfin byl cas 50 vterin

12

6 Zaver

Cılem projektu bylo vytvorit funkcnı skript obsahujıcı algoritmus pojmen-ovany MDinfin [1] ktery resı odtok do sousednıch bunek rastru Algoritmusbyl napsan v programovacım jazyce Python a testovan na realnych datechVysledky byly mırnym prekvapenım kdy zejmena hodnoty smeru 128 tedyseverovychodnıho se vyskytovaly ve vysledku velmi casto viz tabulky 1 a 2Predpokladem bylo ze se odtok rozlozı do vıce smeru a pocet bunek s hod-notami zakladnıch smeru 1248163264 a 128 bude mene nez v prıpade al-goritmu D8 K rozkladu do vıce smeru sice doslo ale pocet nekterych bunekse zakladnımi smery byl vetsı u algoritmu MDinfin

Co se tyce delky doby behu algoritmu je algoritmus MDinfin pomalejsı viz casyv kapitole 5 nez D8 z nekolika zrejmych duvodu Predevsım algoritmus D8provadı mnohem mene pocetnıch operacı z duvodu jeho mensı slozitostiviz 3 Dalsım duvodem je take rozdıl v jazyce ve kterem jsou oba algo-ritmy napsany D8 je napsan v programovacım jazyce C++ ktery na vetsıchdatech je mnohonasobne rychlejsı nez Python Prepsanım algoritmu MDinfindo jazyka C++ by mohla byt cesta k budoucımu zvysenı rychlosti pracealgoritmu

13

Reference

[1] SEIBERT Jan McGlynn BL A new triangular multiple flow di-rection algortihm for computing upslope areas from gridded digi-tal elevation models [online] [cit 13 5 2013] Dostupne ke stazenız URL lthttpciteseerxistpsueduviewdocdownloaddoi=101179977amprep=rep1amptype=pdfgt

[2] HOLMGREN Peter Multiple direction algortihms for runoff modellingin grid based elevation models An empirical evaluation [online] [cit13 5 2013] Dostupny z URL ltftpwwwlwrkthseCommonUllaMFor_Imran[1994]20holmgren20-20multiple20flow

20direction20algorithms20for20runoff20modelling20in

20grid20based20elevation20modelspdf gt

[3] ESRI ESRI WebHelp - How Flow Direction works [online] [cit13 5 2013] Dostupne z URL lthttphelparcgiscomenarcgisdesktop100helpindexhtml009z00000063000000

htmgt

[4] ESRI ESRI Webhelp - Flow Direction (Spatial Analyst) [online][cit 13 5 2013] Dostupne z URL lthttphelparcgiscomenarcgisdesktop100helpindexhtml009z00000052000000

htmgt

[5] WIKIPEDIA NumPy [online] [cit 13 5 2013] Dostupne z URLlthttpenwikipediaorgwikiNumPygt

[6] INFORMIT Working with operators [online] [cit 13 5 2013] Dos-tupne z URL lthttpwwwinformitcomarticlesarticleaspxp=2002831ampseqNum=6gt

14

7 Prılohy

71 Bykovice a Nucice vstupnı DMT rastry

Obrazek 5 DMT Bykovice

Obrazek 6 DMT Nucice

15

72 Bykovice vysledky

Obrazek 7 Flow Direction D8

Obrazek 8 Flow Direction MDinfin

16

73 Nucice vysledky

Obrazek 9 Flow Direction D8

Obrazek 10 Flow Direction MDinfin

17

Page 36: pro zac ate cn kygeo.fsv.cvut.cz/gdata/2013/pin2/e/dokumentace/... · 2013-06-05 · CESK E VYSOK E U CEN I TECHNICKE V PRAZE FAKULTA STAVEBN I OBOR GEODEZIE A KARTOGRAFIE Dokumentace

42 Technicke resenı MDinfinVyse jiz bylo zmıneno ze algoritmus je napsan v jazyce Python Algoritmusje rozdelen do dvou skriptu Prvnı z nich obsahuje funkce a druhy je hlavnıVstupem do modelu je rastr digitalnıho modelu terenu a vystupnı adresardo ktereho se ulozı finalnı rastr smeru odtoku viz obr 4 Po nactenı rastruze vstupnıch parametru je tento rastr preveden na matici NumPy pomocıfunkce

arcpy RasterToNumPyArray ( InputRaster )

NumPy [5] je rozsırenı programovacıho jazyka Python je to balıcek uzıvanypro vedecke vypocty Umoznuje podporu velkych multi-dimenzionalnıch polıa matic spolu s velkou knihovnou matematickych funkcı pro praci s temitopoli

Algoritmus cyklem projızdı vsechny prvky matice a u tech ktere majı hod-notu ruznou od NoData nalezne okolı Hledanı okolı bunky provadı funkceneighbors ta je definovana takto

def ne ighbors ( i j array x y ) return nb1 nb2 nb3 nb4 nb5 nb6 nb7 nb8

Vstupem funkce je pozice v matici dale cela matice a jejı rozmery Funkceneighbors vypocıta hodnoty vysek sousednıch osmi bunek a vratı je na vystup

Obrazek 4 Dialogove okno nastroje MDinfin

Vystup z funkce neighbors slouzı jako jeden z vstupnıch parametru pro dalsıfunkci

8

Funkce byla pojmenovana dir slope jelikoz jejım vystupem je smer odtokua sklon tohoto smeru

def d i r s l o p e ( pointM nbrs vpix sp ix ) return d i r e c t i o n s l ope

Pro kazdy trojuhelnık byla spoctena hodnota d viz vzorec 3 Hodnota s bylapo spatnych a nelogickych vysledcıch pocıtana podle jineho vzorce ktery jizdaval spravne vysledky

s0 =

radicz212y21

+z22y22

(5)

Vzorec se lisı pro kazdy trojuhelnıcek uvedeny je pro vypocet sklonu kdy sousednıbunka je severozapadnı a severnı Tımto postupem bylo zbytecne pocıtatz-tovou slozku vekotoru n vzorec 2 Byly osetreny prıpady kdy sousednıbunky aktualnıho pocıtaneho trojuhelnıku jsou obe vyse polozene nebo obemimo rastr (NoData) Dalsı prıpad nastane jestlize je jeden bod vne rastra druhy v rastru lezı Smer je potom urcen prımo do toho bodu ktery nalezırastru Taktez i sklon je pocıtan pouze mezi tımto bodem a bodem M Lokalnı smer d v kazde plosce po vypoctenı nesmı prekrocit 45 V situacize tuto hodnotu prekrocı je smeru prirazena hodnota 0 nebo 45 v zavislostina vzajemnem porovnanı vysek bodu v trojuhelnıku Takto jsou zpracovanyvsechny plosky a je zjisteno zda-li do kazdeho trojuhelnıku nastava smerodtoku nebo ne Na konci funkce dir slope se kontroluje prıpad kdy smersousednıch trojuhelnıku odkazuje presne do stejneho bodu tedy hodnotysmeru musı byt pro prvnı trojuhelnık d = 45 a pro nasledujıcı sousednıtrojuhelnık d = 0 Vystupem funkce jsou dva vektory o osmi prvcıch smera sklon pro kazdou plosku

Dalsı fazı vypoctu je zjistenı pomeru vody ktera potece do jednotlivychsmeru K vypoctu pomeru byl pouzit tento vzorec [2]

fi =sxi8sum

j=1

sxj

(6)

kde s vyznacuje sklon vypocteneho smeru konkretnı trojuhelnıkove ploskya x je promenny exponent Pokud by byl exponent zvolen 1 bude vyslednasıtrsquo obdobna jako pri pouzitı MD8 algoritmu Pri zvetsovanı exponentu xk nekonecnu bude sıtrsquo stejna jako pri pouzitı D8 metody Vychozı hodnotaexponentu byla zvolena x = 4 coz je kompromis mezi obema variantami

9

Zmena exponentu se v soucasne podobe neprojevı na vyslednem rastru je-likoz vysledek prezentuje pouze smer odtoku a ne procentualnı cast Tohotopomeru bude vyuzito az pri spojenı skriptu s 2D modelem SMODERP

V dalsı casti vypoctu je rozdelen jiz zjisteny pomer z celkoveho odtokudo dvou prıpadne pouze do jedne bunky v zavislosti na smeru odtoku dVe vysledku je vypocten vektor osmi cısel kde kazda hodnota od 0 do 1prestavuje jiz procentualnı pomer z celkoveho odtoku do kazde sousednıbunky

Pro vyslednou reprezentaci smeru odtoku na vystup byl pro kazdou bunkuvytvoren vektor obsahujıcı 1 a 0 rıkajıcı zda nastava ci nenastava odtokdo sousednı bunky Tento vektor byl preveden na celocıselnou hodnotu po-mocı funkce bool2int

def boo l 2 i n t ( x ) y = 0for i j in enumerate ( x )

i f j y += 1ltlt ireturn y

Funkce ma na vstupu vektor jedicek a nul Naprıklad pro vektor 00000111kdy voda tece na severozapad sever a severovychod se funkce chova taktoJe testovano jestli platı j = 1 tedy prvnıch pet nul vektoru funkce preskocıa pro prvnı jednicku se pricte k promenne y 20 v dalsım kroku 21 a v poslednım22 Operator vyjadruje totiz bitovy posun smerem doleva Vysledkem jena vystupu cıslo y = 1 + 2 + 4 = 7

Pro vsechny bunky byla vypoctena hodnota reprezentujıcı smer odtoku Tatohodnota se ulozı do matice a ta se nasledne prevede na vysledny rastr

f l o w d i r = arcpy NumPyArrayToRaster ( value LLcorner spix vpix rdquordquo )

value hodnota reprezentujıcı smer odtokuLLcorner souradnice leveho dolnıho rohuspix sırka pixeluvpix vyska pixelu

10

5 Vysledky

Algoritmus MDinfin byl testovan na skutecnych datech dvou pozemku u obcıNucice ve Stredoceskem kraji a Bykovice v kraji Jihomoravskem rastry jsouv prıloze 71 Oba dva rastry jsou o rozlisenı 5 metru Finalnı rastry jsouporovnavany s rastry vytvorenymi v prostredı ArcGIS nastrojem Flow Di-rection metodou D8

51 Realna data - Bykovice

Vysledne rastry Flow Direction pro uzemı Bykovice jsou uvedeny v prıloze72 Oba rastry byly pro hodnoty 202127 obarveny shodnou barvou kvulilepsı nazornosti a porovnatelnosti vysledku Rastr ktery obsahuje z celkovehopoctu 44807 bunek celkem 23655 bunek s hodnotami vysek po probehnutıalgoritmy dal nasledujıcı vysledky

FD D8 MDinfin1 3650 7372 666 9174 207 188 21 716 94 3732 791 8564 8818 1045128 9408 14983sum

23655 14983

Tabulka 1 Tabulka porovnanı obou algoritmu pro rastr Bykovic

FD je zkratka pro Flow Direction cili smer odtoku reprezentovany celocıselnouhodnotou Ostatnı hodnoty u vysledneho rastru na ktery byl pouzit algorit-mus MDinfin jsou v rozpetı 0246 V rozmezı hodnot smeru odtoku 246255se nevyskytujı zadne bunky Cas potrebny pro vykonanı skriptu byl v prıpadeD8 4 vteriny Pro algoritmus MDinfin byl cas 15 vterin

11

52 Realna data - Nucice

Vysledne rastry jsou uvedeny v prıloze 73 Opet bylo pouzito shodne obar-venı pro zakladnı smery u obou rastru Rastr Nucice obsahoval data na 82732bunkach z celkove poctu 125449 bunek Vysledky jsou pro prehlednost uve-deny v tabulce

FD D8 MDinfin1 12186 12332 12441 87034 16907 10278 9826 1642316 2516 28832 5010 241764 7788 366128 16058 25475sum

82732 55932

Tabulka 2 Tabulka porovnanı obou algoritmu pro rastr Nucic

Ostatnı hodnoty u vysledneho rastru na ktery byl pouzit algoritmusMDinfin jsou v rozpetı 0255 Cas potrebny pro vykonanı skriptu byl v prıpadeD8 6 vterin Pro algoritmus MDinfin byl cas 50 vterin

12

6 Zaver

Cılem projektu bylo vytvorit funkcnı skript obsahujıcı algoritmus pojmen-ovany MDinfin [1] ktery resı odtok do sousednıch bunek rastru Algoritmusbyl napsan v programovacım jazyce Python a testovan na realnych datechVysledky byly mırnym prekvapenım kdy zejmena hodnoty smeru 128 tedyseverovychodnıho se vyskytovaly ve vysledku velmi casto viz tabulky 1 a 2Predpokladem bylo ze se odtok rozlozı do vıce smeru a pocet bunek s hod-notami zakladnıch smeru 1248163264 a 128 bude mene nez v prıpade al-goritmu D8 K rozkladu do vıce smeru sice doslo ale pocet nekterych bunekse zakladnımi smery byl vetsı u algoritmu MDinfin

Co se tyce delky doby behu algoritmu je algoritmus MDinfin pomalejsı viz casyv kapitole 5 nez D8 z nekolika zrejmych duvodu Predevsım algoritmus D8provadı mnohem mene pocetnıch operacı z duvodu jeho mensı slozitostiviz 3 Dalsım duvodem je take rozdıl v jazyce ve kterem jsou oba algo-ritmy napsany D8 je napsan v programovacım jazyce C++ ktery na vetsıchdatech je mnohonasobne rychlejsı nez Python Prepsanım algoritmu MDinfindo jazyka C++ by mohla byt cesta k budoucımu zvysenı rychlosti pracealgoritmu

13

Reference

[1] SEIBERT Jan McGlynn BL A new triangular multiple flow di-rection algortihm for computing upslope areas from gridded digi-tal elevation models [online] [cit 13 5 2013] Dostupne ke stazenız URL lthttpciteseerxistpsueduviewdocdownloaddoi=101179977amprep=rep1amptype=pdfgt

[2] HOLMGREN Peter Multiple direction algortihms for runoff modellingin grid based elevation models An empirical evaluation [online] [cit13 5 2013] Dostupny z URL ltftpwwwlwrkthseCommonUllaMFor_Imran[1994]20holmgren20-20multiple20flow

20direction20algorithms20for20runoff20modelling20in

20grid20based20elevation20modelspdf gt

[3] ESRI ESRI WebHelp - How Flow Direction works [online] [cit13 5 2013] Dostupne z URL lthttphelparcgiscomenarcgisdesktop100helpindexhtml009z00000063000000

htmgt

[4] ESRI ESRI Webhelp - Flow Direction (Spatial Analyst) [online][cit 13 5 2013] Dostupne z URL lthttphelparcgiscomenarcgisdesktop100helpindexhtml009z00000052000000

htmgt

[5] WIKIPEDIA NumPy [online] [cit 13 5 2013] Dostupne z URLlthttpenwikipediaorgwikiNumPygt

[6] INFORMIT Working with operators [online] [cit 13 5 2013] Dos-tupne z URL lthttpwwwinformitcomarticlesarticleaspxp=2002831ampseqNum=6gt

14

7 Prılohy

71 Bykovice a Nucice vstupnı DMT rastry

Obrazek 5 DMT Bykovice

Obrazek 6 DMT Nucice

15

72 Bykovice vysledky

Obrazek 7 Flow Direction D8

Obrazek 8 Flow Direction MDinfin

16

73 Nucice vysledky

Obrazek 9 Flow Direction D8

Obrazek 10 Flow Direction MDinfin

17

Page 37: pro zac ate cn kygeo.fsv.cvut.cz/gdata/2013/pin2/e/dokumentace/... · 2013-06-05 · CESK E VYSOK E U CEN I TECHNICKE V PRAZE FAKULTA STAVEBN I OBOR GEODEZIE A KARTOGRAFIE Dokumentace

Funkce byla pojmenovana dir slope jelikoz jejım vystupem je smer odtokua sklon tohoto smeru

def d i r s l o p e ( pointM nbrs vpix sp ix ) return d i r e c t i o n s l ope

Pro kazdy trojuhelnık byla spoctena hodnota d viz vzorec 3 Hodnota s bylapo spatnych a nelogickych vysledcıch pocıtana podle jineho vzorce ktery jizdaval spravne vysledky

s0 =

radicz212y21

+z22y22

(5)

Vzorec se lisı pro kazdy trojuhelnıcek uvedeny je pro vypocet sklonu kdy sousednıbunka je severozapadnı a severnı Tımto postupem bylo zbytecne pocıtatz-tovou slozku vekotoru n vzorec 2 Byly osetreny prıpady kdy sousednıbunky aktualnıho pocıtaneho trojuhelnıku jsou obe vyse polozene nebo obemimo rastr (NoData) Dalsı prıpad nastane jestlize je jeden bod vne rastra druhy v rastru lezı Smer je potom urcen prımo do toho bodu ktery nalezırastru Taktez i sklon je pocıtan pouze mezi tımto bodem a bodem M Lokalnı smer d v kazde plosce po vypoctenı nesmı prekrocit 45 V situacize tuto hodnotu prekrocı je smeru prirazena hodnota 0 nebo 45 v zavislostina vzajemnem porovnanı vysek bodu v trojuhelnıku Takto jsou zpracovanyvsechny plosky a je zjisteno zda-li do kazdeho trojuhelnıku nastava smerodtoku nebo ne Na konci funkce dir slope se kontroluje prıpad kdy smersousednıch trojuhelnıku odkazuje presne do stejneho bodu tedy hodnotysmeru musı byt pro prvnı trojuhelnık d = 45 a pro nasledujıcı sousednıtrojuhelnık d = 0 Vystupem funkce jsou dva vektory o osmi prvcıch smera sklon pro kazdou plosku

Dalsı fazı vypoctu je zjistenı pomeru vody ktera potece do jednotlivychsmeru K vypoctu pomeru byl pouzit tento vzorec [2]

fi =sxi8sum

j=1

sxj

(6)

kde s vyznacuje sklon vypocteneho smeru konkretnı trojuhelnıkove ploskya x je promenny exponent Pokud by byl exponent zvolen 1 bude vyslednasıtrsquo obdobna jako pri pouzitı MD8 algoritmu Pri zvetsovanı exponentu xk nekonecnu bude sıtrsquo stejna jako pri pouzitı D8 metody Vychozı hodnotaexponentu byla zvolena x = 4 coz je kompromis mezi obema variantami

9

Zmena exponentu se v soucasne podobe neprojevı na vyslednem rastru je-likoz vysledek prezentuje pouze smer odtoku a ne procentualnı cast Tohotopomeru bude vyuzito az pri spojenı skriptu s 2D modelem SMODERP

V dalsı casti vypoctu je rozdelen jiz zjisteny pomer z celkoveho odtokudo dvou prıpadne pouze do jedne bunky v zavislosti na smeru odtoku dVe vysledku je vypocten vektor osmi cısel kde kazda hodnota od 0 do 1prestavuje jiz procentualnı pomer z celkoveho odtoku do kazde sousednıbunky

Pro vyslednou reprezentaci smeru odtoku na vystup byl pro kazdou bunkuvytvoren vektor obsahujıcı 1 a 0 rıkajıcı zda nastava ci nenastava odtokdo sousednı bunky Tento vektor byl preveden na celocıselnou hodnotu po-mocı funkce bool2int

def boo l 2 i n t ( x ) y = 0for i j in enumerate ( x )

i f j y += 1ltlt ireturn y

Funkce ma na vstupu vektor jedicek a nul Naprıklad pro vektor 00000111kdy voda tece na severozapad sever a severovychod se funkce chova taktoJe testovano jestli platı j = 1 tedy prvnıch pet nul vektoru funkce preskocıa pro prvnı jednicku se pricte k promenne y 20 v dalsım kroku 21 a v poslednım22 Operator vyjadruje totiz bitovy posun smerem doleva Vysledkem jena vystupu cıslo y = 1 + 2 + 4 = 7

Pro vsechny bunky byla vypoctena hodnota reprezentujıcı smer odtoku Tatohodnota se ulozı do matice a ta se nasledne prevede na vysledny rastr

f l o w d i r = arcpy NumPyArrayToRaster ( value LLcorner spix vpix rdquordquo )

value hodnota reprezentujıcı smer odtokuLLcorner souradnice leveho dolnıho rohuspix sırka pixeluvpix vyska pixelu

10

5 Vysledky

Algoritmus MDinfin byl testovan na skutecnych datech dvou pozemku u obcıNucice ve Stredoceskem kraji a Bykovice v kraji Jihomoravskem rastry jsouv prıloze 71 Oba dva rastry jsou o rozlisenı 5 metru Finalnı rastry jsouporovnavany s rastry vytvorenymi v prostredı ArcGIS nastrojem Flow Di-rection metodou D8

51 Realna data - Bykovice

Vysledne rastry Flow Direction pro uzemı Bykovice jsou uvedeny v prıloze72 Oba rastry byly pro hodnoty 202127 obarveny shodnou barvou kvulilepsı nazornosti a porovnatelnosti vysledku Rastr ktery obsahuje z celkovehopoctu 44807 bunek celkem 23655 bunek s hodnotami vysek po probehnutıalgoritmy dal nasledujıcı vysledky

FD D8 MDinfin1 3650 7372 666 9174 207 188 21 716 94 3732 791 8564 8818 1045128 9408 14983sum

23655 14983

Tabulka 1 Tabulka porovnanı obou algoritmu pro rastr Bykovic

FD je zkratka pro Flow Direction cili smer odtoku reprezentovany celocıselnouhodnotou Ostatnı hodnoty u vysledneho rastru na ktery byl pouzit algorit-mus MDinfin jsou v rozpetı 0246 V rozmezı hodnot smeru odtoku 246255se nevyskytujı zadne bunky Cas potrebny pro vykonanı skriptu byl v prıpadeD8 4 vteriny Pro algoritmus MDinfin byl cas 15 vterin

11

52 Realna data - Nucice

Vysledne rastry jsou uvedeny v prıloze 73 Opet bylo pouzito shodne obar-venı pro zakladnı smery u obou rastru Rastr Nucice obsahoval data na 82732bunkach z celkove poctu 125449 bunek Vysledky jsou pro prehlednost uve-deny v tabulce

FD D8 MDinfin1 12186 12332 12441 87034 16907 10278 9826 1642316 2516 28832 5010 241764 7788 366128 16058 25475sum

82732 55932

Tabulka 2 Tabulka porovnanı obou algoritmu pro rastr Nucic

Ostatnı hodnoty u vysledneho rastru na ktery byl pouzit algoritmusMDinfin jsou v rozpetı 0255 Cas potrebny pro vykonanı skriptu byl v prıpadeD8 6 vterin Pro algoritmus MDinfin byl cas 50 vterin

12

6 Zaver

Cılem projektu bylo vytvorit funkcnı skript obsahujıcı algoritmus pojmen-ovany MDinfin [1] ktery resı odtok do sousednıch bunek rastru Algoritmusbyl napsan v programovacım jazyce Python a testovan na realnych datechVysledky byly mırnym prekvapenım kdy zejmena hodnoty smeru 128 tedyseverovychodnıho se vyskytovaly ve vysledku velmi casto viz tabulky 1 a 2Predpokladem bylo ze se odtok rozlozı do vıce smeru a pocet bunek s hod-notami zakladnıch smeru 1248163264 a 128 bude mene nez v prıpade al-goritmu D8 K rozkladu do vıce smeru sice doslo ale pocet nekterych bunekse zakladnımi smery byl vetsı u algoritmu MDinfin

Co se tyce delky doby behu algoritmu je algoritmus MDinfin pomalejsı viz casyv kapitole 5 nez D8 z nekolika zrejmych duvodu Predevsım algoritmus D8provadı mnohem mene pocetnıch operacı z duvodu jeho mensı slozitostiviz 3 Dalsım duvodem je take rozdıl v jazyce ve kterem jsou oba algo-ritmy napsany D8 je napsan v programovacım jazyce C++ ktery na vetsıchdatech je mnohonasobne rychlejsı nez Python Prepsanım algoritmu MDinfindo jazyka C++ by mohla byt cesta k budoucımu zvysenı rychlosti pracealgoritmu

13

Reference

[1] SEIBERT Jan McGlynn BL A new triangular multiple flow di-rection algortihm for computing upslope areas from gridded digi-tal elevation models [online] [cit 13 5 2013] Dostupne ke stazenız URL lthttpciteseerxistpsueduviewdocdownloaddoi=101179977amprep=rep1amptype=pdfgt

[2] HOLMGREN Peter Multiple direction algortihms for runoff modellingin grid based elevation models An empirical evaluation [online] [cit13 5 2013] Dostupny z URL ltftpwwwlwrkthseCommonUllaMFor_Imran[1994]20holmgren20-20multiple20flow

20direction20algorithms20for20runoff20modelling20in

20grid20based20elevation20modelspdf gt

[3] ESRI ESRI WebHelp - How Flow Direction works [online] [cit13 5 2013] Dostupne z URL lthttphelparcgiscomenarcgisdesktop100helpindexhtml009z00000063000000

htmgt

[4] ESRI ESRI Webhelp - Flow Direction (Spatial Analyst) [online][cit 13 5 2013] Dostupne z URL lthttphelparcgiscomenarcgisdesktop100helpindexhtml009z00000052000000

htmgt

[5] WIKIPEDIA NumPy [online] [cit 13 5 2013] Dostupne z URLlthttpenwikipediaorgwikiNumPygt

[6] INFORMIT Working with operators [online] [cit 13 5 2013] Dos-tupne z URL lthttpwwwinformitcomarticlesarticleaspxp=2002831ampseqNum=6gt

14

7 Prılohy

71 Bykovice a Nucice vstupnı DMT rastry

Obrazek 5 DMT Bykovice

Obrazek 6 DMT Nucice

15

72 Bykovice vysledky

Obrazek 7 Flow Direction D8

Obrazek 8 Flow Direction MDinfin

16

73 Nucice vysledky

Obrazek 9 Flow Direction D8

Obrazek 10 Flow Direction MDinfin

17

Page 38: pro zac ate cn kygeo.fsv.cvut.cz/gdata/2013/pin2/e/dokumentace/... · 2013-06-05 · CESK E VYSOK E U CEN I TECHNICKE V PRAZE FAKULTA STAVEBN I OBOR GEODEZIE A KARTOGRAFIE Dokumentace

Zmena exponentu se v soucasne podobe neprojevı na vyslednem rastru je-likoz vysledek prezentuje pouze smer odtoku a ne procentualnı cast Tohotopomeru bude vyuzito az pri spojenı skriptu s 2D modelem SMODERP

V dalsı casti vypoctu je rozdelen jiz zjisteny pomer z celkoveho odtokudo dvou prıpadne pouze do jedne bunky v zavislosti na smeru odtoku dVe vysledku je vypocten vektor osmi cısel kde kazda hodnota od 0 do 1prestavuje jiz procentualnı pomer z celkoveho odtoku do kazde sousednıbunky

Pro vyslednou reprezentaci smeru odtoku na vystup byl pro kazdou bunkuvytvoren vektor obsahujıcı 1 a 0 rıkajıcı zda nastava ci nenastava odtokdo sousednı bunky Tento vektor byl preveden na celocıselnou hodnotu po-mocı funkce bool2int

def boo l 2 i n t ( x ) y = 0for i j in enumerate ( x )

i f j y += 1ltlt ireturn y

Funkce ma na vstupu vektor jedicek a nul Naprıklad pro vektor 00000111kdy voda tece na severozapad sever a severovychod se funkce chova taktoJe testovano jestli platı j = 1 tedy prvnıch pet nul vektoru funkce preskocıa pro prvnı jednicku se pricte k promenne y 20 v dalsım kroku 21 a v poslednım22 Operator vyjadruje totiz bitovy posun smerem doleva Vysledkem jena vystupu cıslo y = 1 + 2 + 4 = 7

Pro vsechny bunky byla vypoctena hodnota reprezentujıcı smer odtoku Tatohodnota se ulozı do matice a ta se nasledne prevede na vysledny rastr

f l o w d i r = arcpy NumPyArrayToRaster ( value LLcorner spix vpix rdquordquo )

value hodnota reprezentujıcı smer odtokuLLcorner souradnice leveho dolnıho rohuspix sırka pixeluvpix vyska pixelu

10

5 Vysledky

Algoritmus MDinfin byl testovan na skutecnych datech dvou pozemku u obcıNucice ve Stredoceskem kraji a Bykovice v kraji Jihomoravskem rastry jsouv prıloze 71 Oba dva rastry jsou o rozlisenı 5 metru Finalnı rastry jsouporovnavany s rastry vytvorenymi v prostredı ArcGIS nastrojem Flow Di-rection metodou D8

51 Realna data - Bykovice

Vysledne rastry Flow Direction pro uzemı Bykovice jsou uvedeny v prıloze72 Oba rastry byly pro hodnoty 202127 obarveny shodnou barvou kvulilepsı nazornosti a porovnatelnosti vysledku Rastr ktery obsahuje z celkovehopoctu 44807 bunek celkem 23655 bunek s hodnotami vysek po probehnutıalgoritmy dal nasledujıcı vysledky

FD D8 MDinfin1 3650 7372 666 9174 207 188 21 716 94 3732 791 8564 8818 1045128 9408 14983sum

23655 14983

Tabulka 1 Tabulka porovnanı obou algoritmu pro rastr Bykovic

FD je zkratka pro Flow Direction cili smer odtoku reprezentovany celocıselnouhodnotou Ostatnı hodnoty u vysledneho rastru na ktery byl pouzit algorit-mus MDinfin jsou v rozpetı 0246 V rozmezı hodnot smeru odtoku 246255se nevyskytujı zadne bunky Cas potrebny pro vykonanı skriptu byl v prıpadeD8 4 vteriny Pro algoritmus MDinfin byl cas 15 vterin

11

52 Realna data - Nucice

Vysledne rastry jsou uvedeny v prıloze 73 Opet bylo pouzito shodne obar-venı pro zakladnı smery u obou rastru Rastr Nucice obsahoval data na 82732bunkach z celkove poctu 125449 bunek Vysledky jsou pro prehlednost uve-deny v tabulce

FD D8 MDinfin1 12186 12332 12441 87034 16907 10278 9826 1642316 2516 28832 5010 241764 7788 366128 16058 25475sum

82732 55932

Tabulka 2 Tabulka porovnanı obou algoritmu pro rastr Nucic

Ostatnı hodnoty u vysledneho rastru na ktery byl pouzit algoritmusMDinfin jsou v rozpetı 0255 Cas potrebny pro vykonanı skriptu byl v prıpadeD8 6 vterin Pro algoritmus MDinfin byl cas 50 vterin

12

6 Zaver

Cılem projektu bylo vytvorit funkcnı skript obsahujıcı algoritmus pojmen-ovany MDinfin [1] ktery resı odtok do sousednıch bunek rastru Algoritmusbyl napsan v programovacım jazyce Python a testovan na realnych datechVysledky byly mırnym prekvapenım kdy zejmena hodnoty smeru 128 tedyseverovychodnıho se vyskytovaly ve vysledku velmi casto viz tabulky 1 a 2Predpokladem bylo ze se odtok rozlozı do vıce smeru a pocet bunek s hod-notami zakladnıch smeru 1248163264 a 128 bude mene nez v prıpade al-goritmu D8 K rozkladu do vıce smeru sice doslo ale pocet nekterych bunekse zakladnımi smery byl vetsı u algoritmu MDinfin

Co se tyce delky doby behu algoritmu je algoritmus MDinfin pomalejsı viz casyv kapitole 5 nez D8 z nekolika zrejmych duvodu Predevsım algoritmus D8provadı mnohem mene pocetnıch operacı z duvodu jeho mensı slozitostiviz 3 Dalsım duvodem je take rozdıl v jazyce ve kterem jsou oba algo-ritmy napsany D8 je napsan v programovacım jazyce C++ ktery na vetsıchdatech je mnohonasobne rychlejsı nez Python Prepsanım algoritmu MDinfindo jazyka C++ by mohla byt cesta k budoucımu zvysenı rychlosti pracealgoritmu

13

Reference

[1] SEIBERT Jan McGlynn BL A new triangular multiple flow di-rection algortihm for computing upslope areas from gridded digi-tal elevation models [online] [cit 13 5 2013] Dostupne ke stazenız URL lthttpciteseerxistpsueduviewdocdownloaddoi=101179977amprep=rep1amptype=pdfgt

[2] HOLMGREN Peter Multiple direction algortihms for runoff modellingin grid based elevation models An empirical evaluation [online] [cit13 5 2013] Dostupny z URL ltftpwwwlwrkthseCommonUllaMFor_Imran[1994]20holmgren20-20multiple20flow

20direction20algorithms20for20runoff20modelling20in

20grid20based20elevation20modelspdf gt

[3] ESRI ESRI WebHelp - How Flow Direction works [online] [cit13 5 2013] Dostupne z URL lthttphelparcgiscomenarcgisdesktop100helpindexhtml009z00000063000000

htmgt

[4] ESRI ESRI Webhelp - Flow Direction (Spatial Analyst) [online][cit 13 5 2013] Dostupne z URL lthttphelparcgiscomenarcgisdesktop100helpindexhtml009z00000052000000

htmgt

[5] WIKIPEDIA NumPy [online] [cit 13 5 2013] Dostupne z URLlthttpenwikipediaorgwikiNumPygt

[6] INFORMIT Working with operators [online] [cit 13 5 2013] Dos-tupne z URL lthttpwwwinformitcomarticlesarticleaspxp=2002831ampseqNum=6gt

14

7 Prılohy

71 Bykovice a Nucice vstupnı DMT rastry

Obrazek 5 DMT Bykovice

Obrazek 6 DMT Nucice

15

72 Bykovice vysledky

Obrazek 7 Flow Direction D8

Obrazek 8 Flow Direction MDinfin

16

73 Nucice vysledky

Obrazek 9 Flow Direction D8

Obrazek 10 Flow Direction MDinfin

17

Page 39: pro zac ate cn kygeo.fsv.cvut.cz/gdata/2013/pin2/e/dokumentace/... · 2013-06-05 · CESK E VYSOK E U CEN I TECHNICKE V PRAZE FAKULTA STAVEBN I OBOR GEODEZIE A KARTOGRAFIE Dokumentace

5 Vysledky

Algoritmus MDinfin byl testovan na skutecnych datech dvou pozemku u obcıNucice ve Stredoceskem kraji a Bykovice v kraji Jihomoravskem rastry jsouv prıloze 71 Oba dva rastry jsou o rozlisenı 5 metru Finalnı rastry jsouporovnavany s rastry vytvorenymi v prostredı ArcGIS nastrojem Flow Di-rection metodou D8

51 Realna data - Bykovice

Vysledne rastry Flow Direction pro uzemı Bykovice jsou uvedeny v prıloze72 Oba rastry byly pro hodnoty 202127 obarveny shodnou barvou kvulilepsı nazornosti a porovnatelnosti vysledku Rastr ktery obsahuje z celkovehopoctu 44807 bunek celkem 23655 bunek s hodnotami vysek po probehnutıalgoritmy dal nasledujıcı vysledky

FD D8 MDinfin1 3650 7372 666 9174 207 188 21 716 94 3732 791 8564 8818 1045128 9408 14983sum

23655 14983

Tabulka 1 Tabulka porovnanı obou algoritmu pro rastr Bykovic

FD je zkratka pro Flow Direction cili smer odtoku reprezentovany celocıselnouhodnotou Ostatnı hodnoty u vysledneho rastru na ktery byl pouzit algorit-mus MDinfin jsou v rozpetı 0246 V rozmezı hodnot smeru odtoku 246255se nevyskytujı zadne bunky Cas potrebny pro vykonanı skriptu byl v prıpadeD8 4 vteriny Pro algoritmus MDinfin byl cas 15 vterin

11

52 Realna data - Nucice

Vysledne rastry jsou uvedeny v prıloze 73 Opet bylo pouzito shodne obar-venı pro zakladnı smery u obou rastru Rastr Nucice obsahoval data na 82732bunkach z celkove poctu 125449 bunek Vysledky jsou pro prehlednost uve-deny v tabulce

FD D8 MDinfin1 12186 12332 12441 87034 16907 10278 9826 1642316 2516 28832 5010 241764 7788 366128 16058 25475sum

82732 55932

Tabulka 2 Tabulka porovnanı obou algoritmu pro rastr Nucic

Ostatnı hodnoty u vysledneho rastru na ktery byl pouzit algoritmusMDinfin jsou v rozpetı 0255 Cas potrebny pro vykonanı skriptu byl v prıpadeD8 6 vterin Pro algoritmus MDinfin byl cas 50 vterin

12

6 Zaver

Cılem projektu bylo vytvorit funkcnı skript obsahujıcı algoritmus pojmen-ovany MDinfin [1] ktery resı odtok do sousednıch bunek rastru Algoritmusbyl napsan v programovacım jazyce Python a testovan na realnych datechVysledky byly mırnym prekvapenım kdy zejmena hodnoty smeru 128 tedyseverovychodnıho se vyskytovaly ve vysledku velmi casto viz tabulky 1 a 2Predpokladem bylo ze se odtok rozlozı do vıce smeru a pocet bunek s hod-notami zakladnıch smeru 1248163264 a 128 bude mene nez v prıpade al-goritmu D8 K rozkladu do vıce smeru sice doslo ale pocet nekterych bunekse zakladnımi smery byl vetsı u algoritmu MDinfin

Co se tyce delky doby behu algoritmu je algoritmus MDinfin pomalejsı viz casyv kapitole 5 nez D8 z nekolika zrejmych duvodu Predevsım algoritmus D8provadı mnohem mene pocetnıch operacı z duvodu jeho mensı slozitostiviz 3 Dalsım duvodem je take rozdıl v jazyce ve kterem jsou oba algo-ritmy napsany D8 je napsan v programovacım jazyce C++ ktery na vetsıchdatech je mnohonasobne rychlejsı nez Python Prepsanım algoritmu MDinfindo jazyka C++ by mohla byt cesta k budoucımu zvysenı rychlosti pracealgoritmu

13

Reference

[1] SEIBERT Jan McGlynn BL A new triangular multiple flow di-rection algortihm for computing upslope areas from gridded digi-tal elevation models [online] [cit 13 5 2013] Dostupne ke stazenız URL lthttpciteseerxistpsueduviewdocdownloaddoi=101179977amprep=rep1amptype=pdfgt

[2] HOLMGREN Peter Multiple direction algortihms for runoff modellingin grid based elevation models An empirical evaluation [online] [cit13 5 2013] Dostupny z URL ltftpwwwlwrkthseCommonUllaMFor_Imran[1994]20holmgren20-20multiple20flow

20direction20algorithms20for20runoff20modelling20in

20grid20based20elevation20modelspdf gt

[3] ESRI ESRI WebHelp - How Flow Direction works [online] [cit13 5 2013] Dostupne z URL lthttphelparcgiscomenarcgisdesktop100helpindexhtml009z00000063000000

htmgt

[4] ESRI ESRI Webhelp - Flow Direction (Spatial Analyst) [online][cit 13 5 2013] Dostupne z URL lthttphelparcgiscomenarcgisdesktop100helpindexhtml009z00000052000000

htmgt

[5] WIKIPEDIA NumPy [online] [cit 13 5 2013] Dostupne z URLlthttpenwikipediaorgwikiNumPygt

[6] INFORMIT Working with operators [online] [cit 13 5 2013] Dos-tupne z URL lthttpwwwinformitcomarticlesarticleaspxp=2002831ampseqNum=6gt

14

7 Prılohy

71 Bykovice a Nucice vstupnı DMT rastry

Obrazek 5 DMT Bykovice

Obrazek 6 DMT Nucice

15

72 Bykovice vysledky

Obrazek 7 Flow Direction D8

Obrazek 8 Flow Direction MDinfin

16

73 Nucice vysledky

Obrazek 9 Flow Direction D8

Obrazek 10 Flow Direction MDinfin

17

Page 40: pro zac ate cn kygeo.fsv.cvut.cz/gdata/2013/pin2/e/dokumentace/... · 2013-06-05 · CESK E VYSOK E U CEN I TECHNICKE V PRAZE FAKULTA STAVEBN I OBOR GEODEZIE A KARTOGRAFIE Dokumentace

52 Realna data - Nucice

Vysledne rastry jsou uvedeny v prıloze 73 Opet bylo pouzito shodne obar-venı pro zakladnı smery u obou rastru Rastr Nucice obsahoval data na 82732bunkach z celkove poctu 125449 bunek Vysledky jsou pro prehlednost uve-deny v tabulce

FD D8 MDinfin1 12186 12332 12441 87034 16907 10278 9826 1642316 2516 28832 5010 241764 7788 366128 16058 25475sum

82732 55932

Tabulka 2 Tabulka porovnanı obou algoritmu pro rastr Nucic

Ostatnı hodnoty u vysledneho rastru na ktery byl pouzit algoritmusMDinfin jsou v rozpetı 0255 Cas potrebny pro vykonanı skriptu byl v prıpadeD8 6 vterin Pro algoritmus MDinfin byl cas 50 vterin

12

6 Zaver

Cılem projektu bylo vytvorit funkcnı skript obsahujıcı algoritmus pojmen-ovany MDinfin [1] ktery resı odtok do sousednıch bunek rastru Algoritmusbyl napsan v programovacım jazyce Python a testovan na realnych datechVysledky byly mırnym prekvapenım kdy zejmena hodnoty smeru 128 tedyseverovychodnıho se vyskytovaly ve vysledku velmi casto viz tabulky 1 a 2Predpokladem bylo ze se odtok rozlozı do vıce smeru a pocet bunek s hod-notami zakladnıch smeru 1248163264 a 128 bude mene nez v prıpade al-goritmu D8 K rozkladu do vıce smeru sice doslo ale pocet nekterych bunekse zakladnımi smery byl vetsı u algoritmu MDinfin

Co se tyce delky doby behu algoritmu je algoritmus MDinfin pomalejsı viz casyv kapitole 5 nez D8 z nekolika zrejmych duvodu Predevsım algoritmus D8provadı mnohem mene pocetnıch operacı z duvodu jeho mensı slozitostiviz 3 Dalsım duvodem je take rozdıl v jazyce ve kterem jsou oba algo-ritmy napsany D8 je napsan v programovacım jazyce C++ ktery na vetsıchdatech je mnohonasobne rychlejsı nez Python Prepsanım algoritmu MDinfindo jazyka C++ by mohla byt cesta k budoucımu zvysenı rychlosti pracealgoritmu

13

Reference

[1] SEIBERT Jan McGlynn BL A new triangular multiple flow di-rection algortihm for computing upslope areas from gridded digi-tal elevation models [online] [cit 13 5 2013] Dostupne ke stazenız URL lthttpciteseerxistpsueduviewdocdownloaddoi=101179977amprep=rep1amptype=pdfgt

[2] HOLMGREN Peter Multiple direction algortihms for runoff modellingin grid based elevation models An empirical evaluation [online] [cit13 5 2013] Dostupny z URL ltftpwwwlwrkthseCommonUllaMFor_Imran[1994]20holmgren20-20multiple20flow

20direction20algorithms20for20runoff20modelling20in

20grid20based20elevation20modelspdf gt

[3] ESRI ESRI WebHelp - How Flow Direction works [online] [cit13 5 2013] Dostupne z URL lthttphelparcgiscomenarcgisdesktop100helpindexhtml009z00000063000000

htmgt

[4] ESRI ESRI Webhelp - Flow Direction (Spatial Analyst) [online][cit 13 5 2013] Dostupne z URL lthttphelparcgiscomenarcgisdesktop100helpindexhtml009z00000052000000

htmgt

[5] WIKIPEDIA NumPy [online] [cit 13 5 2013] Dostupne z URLlthttpenwikipediaorgwikiNumPygt

[6] INFORMIT Working with operators [online] [cit 13 5 2013] Dos-tupne z URL lthttpwwwinformitcomarticlesarticleaspxp=2002831ampseqNum=6gt

14

7 Prılohy

71 Bykovice a Nucice vstupnı DMT rastry

Obrazek 5 DMT Bykovice

Obrazek 6 DMT Nucice

15

72 Bykovice vysledky

Obrazek 7 Flow Direction D8

Obrazek 8 Flow Direction MDinfin

16

73 Nucice vysledky

Obrazek 9 Flow Direction D8

Obrazek 10 Flow Direction MDinfin

17

Page 41: pro zac ate cn kygeo.fsv.cvut.cz/gdata/2013/pin2/e/dokumentace/... · 2013-06-05 · CESK E VYSOK E U CEN I TECHNICKE V PRAZE FAKULTA STAVEBN I OBOR GEODEZIE A KARTOGRAFIE Dokumentace

6 Zaver

Cılem projektu bylo vytvorit funkcnı skript obsahujıcı algoritmus pojmen-ovany MDinfin [1] ktery resı odtok do sousednıch bunek rastru Algoritmusbyl napsan v programovacım jazyce Python a testovan na realnych datechVysledky byly mırnym prekvapenım kdy zejmena hodnoty smeru 128 tedyseverovychodnıho se vyskytovaly ve vysledku velmi casto viz tabulky 1 a 2Predpokladem bylo ze se odtok rozlozı do vıce smeru a pocet bunek s hod-notami zakladnıch smeru 1248163264 a 128 bude mene nez v prıpade al-goritmu D8 K rozkladu do vıce smeru sice doslo ale pocet nekterych bunekse zakladnımi smery byl vetsı u algoritmu MDinfin

Co se tyce delky doby behu algoritmu je algoritmus MDinfin pomalejsı viz casyv kapitole 5 nez D8 z nekolika zrejmych duvodu Predevsım algoritmus D8provadı mnohem mene pocetnıch operacı z duvodu jeho mensı slozitostiviz 3 Dalsım duvodem je take rozdıl v jazyce ve kterem jsou oba algo-ritmy napsany D8 je napsan v programovacım jazyce C++ ktery na vetsıchdatech je mnohonasobne rychlejsı nez Python Prepsanım algoritmu MDinfindo jazyka C++ by mohla byt cesta k budoucımu zvysenı rychlosti pracealgoritmu

13

Reference

[1] SEIBERT Jan McGlynn BL A new triangular multiple flow di-rection algortihm for computing upslope areas from gridded digi-tal elevation models [online] [cit 13 5 2013] Dostupne ke stazenız URL lthttpciteseerxistpsueduviewdocdownloaddoi=101179977amprep=rep1amptype=pdfgt

[2] HOLMGREN Peter Multiple direction algortihms for runoff modellingin grid based elevation models An empirical evaluation [online] [cit13 5 2013] Dostupny z URL ltftpwwwlwrkthseCommonUllaMFor_Imran[1994]20holmgren20-20multiple20flow

20direction20algorithms20for20runoff20modelling20in

20grid20based20elevation20modelspdf gt

[3] ESRI ESRI WebHelp - How Flow Direction works [online] [cit13 5 2013] Dostupne z URL lthttphelparcgiscomenarcgisdesktop100helpindexhtml009z00000063000000

htmgt

[4] ESRI ESRI Webhelp - Flow Direction (Spatial Analyst) [online][cit 13 5 2013] Dostupne z URL lthttphelparcgiscomenarcgisdesktop100helpindexhtml009z00000052000000

htmgt

[5] WIKIPEDIA NumPy [online] [cit 13 5 2013] Dostupne z URLlthttpenwikipediaorgwikiNumPygt

[6] INFORMIT Working with operators [online] [cit 13 5 2013] Dos-tupne z URL lthttpwwwinformitcomarticlesarticleaspxp=2002831ampseqNum=6gt

14

7 Prılohy

71 Bykovice a Nucice vstupnı DMT rastry

Obrazek 5 DMT Bykovice

Obrazek 6 DMT Nucice

15

72 Bykovice vysledky

Obrazek 7 Flow Direction D8

Obrazek 8 Flow Direction MDinfin

16

73 Nucice vysledky

Obrazek 9 Flow Direction D8

Obrazek 10 Flow Direction MDinfin

17

Page 42: pro zac ate cn kygeo.fsv.cvut.cz/gdata/2013/pin2/e/dokumentace/... · 2013-06-05 · CESK E VYSOK E U CEN I TECHNICKE V PRAZE FAKULTA STAVEBN I OBOR GEODEZIE A KARTOGRAFIE Dokumentace

Reference

[1] SEIBERT Jan McGlynn BL A new triangular multiple flow di-rection algortihm for computing upslope areas from gridded digi-tal elevation models [online] [cit 13 5 2013] Dostupne ke stazenız URL lthttpciteseerxistpsueduviewdocdownloaddoi=101179977amprep=rep1amptype=pdfgt

[2] HOLMGREN Peter Multiple direction algortihms for runoff modellingin grid based elevation models An empirical evaluation [online] [cit13 5 2013] Dostupny z URL ltftpwwwlwrkthseCommonUllaMFor_Imran[1994]20holmgren20-20multiple20flow

20direction20algorithms20for20runoff20modelling20in

20grid20based20elevation20modelspdf gt

[3] ESRI ESRI WebHelp - How Flow Direction works [online] [cit13 5 2013] Dostupne z URL lthttphelparcgiscomenarcgisdesktop100helpindexhtml009z00000063000000

htmgt

[4] ESRI ESRI Webhelp - Flow Direction (Spatial Analyst) [online][cit 13 5 2013] Dostupne z URL lthttphelparcgiscomenarcgisdesktop100helpindexhtml009z00000052000000

htmgt

[5] WIKIPEDIA NumPy [online] [cit 13 5 2013] Dostupne z URLlthttpenwikipediaorgwikiNumPygt

[6] INFORMIT Working with operators [online] [cit 13 5 2013] Dos-tupne z URL lthttpwwwinformitcomarticlesarticleaspxp=2002831ampseqNum=6gt

14

7 Prılohy

71 Bykovice a Nucice vstupnı DMT rastry

Obrazek 5 DMT Bykovice

Obrazek 6 DMT Nucice

15

72 Bykovice vysledky

Obrazek 7 Flow Direction D8

Obrazek 8 Flow Direction MDinfin

16

73 Nucice vysledky

Obrazek 9 Flow Direction D8

Obrazek 10 Flow Direction MDinfin

17

Page 43: pro zac ate cn kygeo.fsv.cvut.cz/gdata/2013/pin2/e/dokumentace/... · 2013-06-05 · CESK E VYSOK E U CEN I TECHNICKE V PRAZE FAKULTA STAVEBN I OBOR GEODEZIE A KARTOGRAFIE Dokumentace

7 Prılohy

71 Bykovice a Nucice vstupnı DMT rastry

Obrazek 5 DMT Bykovice

Obrazek 6 DMT Nucice

15

72 Bykovice vysledky

Obrazek 7 Flow Direction D8

Obrazek 8 Flow Direction MDinfin

16

73 Nucice vysledky

Obrazek 9 Flow Direction D8

Obrazek 10 Flow Direction MDinfin

17

Page 44: pro zac ate cn kygeo.fsv.cvut.cz/gdata/2013/pin2/e/dokumentace/... · 2013-06-05 · CESK E VYSOK E U CEN I TECHNICKE V PRAZE FAKULTA STAVEBN I OBOR GEODEZIE A KARTOGRAFIE Dokumentace

72 Bykovice vysledky

Obrazek 7 Flow Direction D8

Obrazek 8 Flow Direction MDinfin

16

73 Nucice vysledky

Obrazek 9 Flow Direction D8

Obrazek 10 Flow Direction MDinfin

17

Page 45: pro zac ate cn kygeo.fsv.cvut.cz/gdata/2013/pin2/e/dokumentace/... · 2013-06-05 · CESK E VYSOK E U CEN I TECHNICKE V PRAZE FAKULTA STAVEBN I OBOR GEODEZIE A KARTOGRAFIE Dokumentace

73 Nucice vysledky

Obrazek 9 Flow Direction D8

Obrazek 10 Flow Direction MDinfin

17


Recommended