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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
73 Nucice vysledky
Obrazek 9 Flow Direction D8
Obrazek 10 Flow Direction MDinfin
17