MODULARIZACE VÝUKY EVOLUČNÍ A EKOLOGICKÉ BIOLOGIE CZ.1.07/2.2.00/15.0204 Bi9009 Geografické informační systémy v botanice a zoologii II Cvičení 4 Vytvoření skriptu 1. Automatizace Při práci s prostorovými daty v ArcGIS nejsme odkázáni pouze na nástroje, které najdeme v ArcToolboxu. Ve cvičení 3 jsme si vyzkoušeli spojení několika nástrojů do modelu a tímto spojením vznikl zcela nový nástroj využívající funkcionalitu nástrojů z ArcToolboxu. Takový nástroj jsem schopni připravit pro vícenásobné používání a nebo pro méně zkušenou obsluhu s tím, že stačí zadat vstupní parametry a jméno výstupu. Vše ostatní řeší model sám. Další možností, jak upravit nástroje geoprocessingu k obrazu svému je psaní vlastních (nebo modifikace cizích) skriptů. Oproti modelu je skript flexibilnějším nástrojem, jeho použití však již vyžaduje určité programovací dovednosti. ArcGIS používá skriptovací jazyk Python a to především pro automatizaci úloh. Automatizace přináší několik výhod:  Práce je jednodušší – jak jsme si vyzkoušeli při tvorbě modelu, jakmile máme jednou posloupnost nástrojů vytvořenou, při jejím dalším použití nemusíme znovu přemýšlet, který nástroj navazuje na který, jaké hodnoty zadávat atd.  Práce je rychlejší – spuštění zautomatizované úlohy (ať už skriptu nebo modelu) přináší značnou úsporu času  Práce je přesnější – při manuální práci je vždy prostor pro chybu – pokud je proces jednou vyzkoušený jako bezchybný, žádné z dalších spuštění procesu už chybu nepřinese Skript je program, který vykonává sérii (posloupnost) příkazů. V rámci skriptu mohou být spouštěny geoprocesingové nástroje buď jednotlivě a nebo zřetězeny za sebou. Ovšem výhodou skriptu je možnost použití podmínek. Tak lze řešit případy, kdy různé nástroje by měly být spuštěny teprve v závislosti na výstupu z předcházejících operací. Do skriptu je také možno vložit opakování (iterace) nebo smyčky (loop) pro případy, kdy je třeba opakovat operaci několikrát (např. pro všechny prvky ve vrstvě, pro všechny vrstvy v databázi). Nástroj vytvořený pomocí skriptu můžeme distribuovat jako samostatný skript a nebo z něj můžeme vytvořit tlačítko v menu. My zkusíme druhou možnost – napíšeme skript, který bude vykonávat jednoduchou úlohu, a zabudujeme ho do menu mezi standartní nástroje ArcGISu. 2. Python skript Zápletka: Pracujeme na odboru ŽP Magistrátu města Brna. Po různá mapování druhů, sčítání, inventarizace a jiné jsme byli uz několikrát kolegy osloveni, abychom vytvořili pravidelnou čtvercovou mapovací síť. V závislosti na účelu mapování to byla pokaždé síť s jinak velkými čtverci. Abychom si pro příště ušetřili práci, napíšeme skript, který bude síť vyrábět a zabudujeme tento skript do menu ArcMapu mezi ostatní nástroje. Pro psaní skriptu použijeme prostředí IDLE. Najdeme ho mezi ostaními programy ve složce ArcGIS. V interaktivním okně zvolíme File > New Window. V tomto novém okně bude psát a poté uložíme svůj skript. Nejdříve je dobré napsat několik informací o skriptu. Bude se to hodit nám někdy později (až zapomeneme kdy a proč jsme skript psali) a bude se to hodit i někomi jinému, pokud se k našemu skriptu dostane. Tento popis skriptu se nebude vykonávat. Aby tomu tak bylo, je třeba každý řádek začít znakem #. Takto označené řádny nemají vliv na fungování skriptu. Na dalším řádku (prvním, který se bude vykonávat) importujeme geoprocessingový modul arcpy. Ten obsahuje všechny nástroje ArcToolboxu a jejich funkcionalitu přináší do Python skriptu. Abychom měli možnost ve skriptu označit kam uložit vytvořenou mapovací síť (a také kde hledat vrstvu, podle které se mapovací síť bude vytvářet) musíme definovat Workspace Environment (toto není specialita skriptu, Environments se mohou nastavovat i u geoprocesingových nástrojů v ArcGISu). Pro to potřebujeme importovat z arcpy modul env. # import system module import arcpy from arcpy import env #set workspace environmnt env.workspace = "C:/gis/cv4/brno.mdb" Nyní budeme potřebovat znát syntaxi nástroje na vytvoření pravidelné sítě (nástroj se jmenuje Create Fishnet), syntaxi najdeme v helpu nástroje (je třeba vybrat syntaxi skriptovou, nikoli syntaxi nástroje v toolboxu, trochu se od sebe liší) arcpy.CreateFishnet_management(outFeatureClass, originCoordinate, yAxisCoordinate, cellSizeWidth, cellSizeHeight, numRows, numColumns, oppositeCoorner, labels, templateExtent, geometryType) Pokud známe syntaxi, můžeme zadávat proměnné pro všechny požadované parametry. V pythonu se proměnné definují pomocí rovnítka. outFeatureClass = 'mapovaci_sit' originCoordinate = '3604175.25 5443194' yAxisCoordinate = '3604175.25 5443204' cellSizeWidth = '200' cellSizeHeight = '200' numRows = '0' numColumns = '0' oppositeCorner = '#' labels = 'false' templateExtent = 'brno_mesto' geometryType = 'POLYGON' Tady znak # znamená nevyplněnou hodnotu, což je u nepovinných údajů možné udělat. Nakonec je třeba napsat samotný příkaz (nástroj) včetně parametrů (ty bývají v pythonu v závorkách, oddělené čárkou). To je všechno. Aby mohl skript fungovat, musíme vytvořit personalní geodatabazi, kterou jsme zadali jako úložiště dat(workspace) a exportovat do ní do ní vrstvu brno_mesto (ne jako shapefile ale jako feature class). Někam uložíme skript (jménem, které jsme napsali na začátek skriptu v jeho popisu) a zavřeme obě Python okna. V CatalogWindow se přesuneme do My Toolboxes, vytvoříme Toolbox pro cv4 a přidáme do něj skript, který jsme právě napsali. Zadáme jméno skriptu (bez mezer), případně Label i Discription. Najdeme soubor skriptu s koncovkou .py, který jsme si uložili. Zkusíme nezadat žádné paramtry a dokončit průvodce tvorbou skriptu. Můžeme ho zkusit spustit. Skript nemá žádné parametry a tak ho stačí spustit. Výsledek by měl vypadat takto, můžeme mapovat. Skript funguje, obsluha nemusí zadávat vůbec nic. To ale není zase taková výhoda. Jednak si obsluha neumí sama zadat jak velké čtverce (nebo třeba obdelníky) chce ve výsledku mít. Navíc se výsledky stále přepisují, to znamená, že pokud bydeme tvořit jinou síť, přepíše výsledek předchozí síť. Ani jedno se nám nehodí, vyřešíme to stejně jako minule u modelu pomocí parametrů. Aby bylo možné zadat parametry ručne je třeba upravit skript. Budeme ho tedy editovat. Prohlédněme si obrázek upraveného skriptu a zkusme říci, jestli bude možné takto generovat i síť obdelníků. Upravme skript podle obrázku, uložme. Parametry musíme nastavit také a to ve Vlastnostech skriptu. Nyní definujeme parametry, tedy ty proměnné, které zadá uživatel sám. Dispay Name bude NewFileName, Data Type bude Any Value. Všimněme si, že v Parameter Properties je nastaveno, že tato hodnota bude vyžadovaná a že tento parametr je Vstupem (Input). Stejně nastavíme parametr CellSize, tedy velikosti čtverce. I tady je hodnota povinná a vstupní. Vyzkoušejme skript i se zadáváním parametrů. Pokud skript správně funguje, můžeme z něj udělat tlačítko na paletě nástrojů (aby obsluha nemusela pokaždé hledat skript schovaný v toolboxu). Customize > Customize Mode > Categories > [Geoprocessing Tools] > Add Tools Skript je teď přidán jako geoprocesingový nástroj ArcMAPu a přetažením myší je možné ho umístit do libovolné palety nástrojů.