Jednou věcí, která mně dokáže spolehlivě otrávit libovolný projekt, je moment, kdy se dopracuju k zjištění, že 80% práce ideálně zvládne X (jazyk, software, cokoliv …) ale těch zbývajících 20% by bylo mnohem jednodušší vyřešit v Y (opět jazyk, software, cokoliv…). Taková reálná srážka s Paretovým principem. Při programování takhle většinou těžko vybírám mezi R a Pythonem, přičemž v pohodě pracuji v obou, ale některé věci jsou příjemnější v jednom z těchto jazyků, nebo při práci s GIS kdy zase těžko volím konkrétní software. Asi proto mě vždycky zaujmou projekty, které se snaží pomyslný příkop mezi technologiemi/jazyky nějak zasypat. V R je to třeba balík reticulate, který umožňuje přímo volat Pythonový kód a poměrně smysluplně do/z něj předávat/získávat proměnné. Z hlediska gisáckého mě takhle zaujaly dva projekty Processing R Provider a qgisprocess. První umožňuje psát nástroje pro QGIS v R a druhý zase volat z R nástroje QGIS, přičemž oba projekty nějakým způsobem minimalizují nároky na předávání dat z pohledu uživatele. K vývoji obou těchto nástrojů se ve volném čase snažím nějakou troškou přispět, protože je oba velice rád používám.
Jednou z typických situací, o které jsem se zmiňoval v přechozím odstavci, je zpracování prostorových dat, kde velkou část tvoří operace nad atributovými daty a menší část prostorové analýzy/operace. U takového zadaní bych hodně váhal, jaký jazyk zvolit pro řešení. Ale nejspíš bych si vybral R, protože množství funkcí na práci s atributovými daty a obecně zpracování dat, hlavně s použím přístupů tidyverse, u mně vede nad alternativami. Nakonec bych ale nejspíš stejně nebyl spokojený, protože řešit některé prostorové operace s použítím balíků sf a nebo raster je prostě složitější, než je najít připravené v QGIS.
Naštěstí tuhle situaci řeší právě balík qgisprocess (a historicky třeba RQGIS3, ale ten mi nikdy příliš neseděl). Pomocí něj a novinky v QGIS qgis_process, která umožňuje spouštět nástroje QGIS přímo z příkazové řádky, se dá R a QGIS velice rozumně propojit. Krátké ukázky jsou pěkně zpracované na webu. Jakkoliv se mi tento balík uživatelsky líbí, po nějakém čase jsem začal narážet na pár omezení. Jde spíše o nízkoúrovňový přístup ke QGISu a pořád je třeba řešit poměrně dost věcí okolo. Navíc, hledat jednotlivé funkce QGIS a koukat na jejich nápověd člověk pořád musí mimo RStudio, pokud to nechce dělat z příkazové řádky, což mi přijde neefektivní a rozptylující.
S ohledem na možnosti, které qgisprocess poskytuje, jsem rozhodl napsat experimentální balík pro R s jednoduchým názvem qgis, který zpřístupňuje všechny základní funkce QGIS v podobě funkcí v R a to včetně nápovědy. Pomocí qgisprocess lze zjistit jak seznam všech algoritmů v QGIS, tak i jejich vstupních parametrů, výstupních parametrů a i nápovědu. V momentě, kdy lze tyto informace rozumně získat, je jen otázkou vytvoření rozumné šablony pro funkce a nápovědu v R, než je možné pro všechny funkce QGISu vytvořit jejich v R jejich ekvivalenty. Experimentálnost balíku je hlavně v tom, že v podstatě většina jeho kódu se generuje automaticky na základě informací extrahovaných z QGIS. Samotný mnou vytvořený kód ve výsledku stojí v podstatě mimo balík, ale stará se o samotné vytvoření balíku. V podstatě se jedná o jakýsi zdrojový metakód jehož výstupem je kód. Výsledný balík se pořád výrazně opírá o qgisprocess a používá jeho klíčové funkce. Díky tomu, že se kód balíku generuje automaticky a samotné sestavování probíhá v cloudu pomocí Github Actions, tak do značné míry odpadá potřeba manuálně do procesu zasahovat. Balík se automaticky přegeneruje vždy prvního v měsíci, nebo v případě že se změní metakód definující postup vytvoření balíku. Díky tomu je možné vytvořit balík, který má více než 900 dostupných funkcí.
Základní verze balíku, kterou lze nainstalovat z GitHubu, má dostupné všechny algoritmy QGISu, GRASS GIS a SAGA GIS, což odpovídá základní čisté instalaci QGIS bez pluginů. Pakliže chcete mít dostupné i další algoritmy, např. ze specifických pluginů, nebo vaše osobní QGIS skripty či modely, je nutné balík qgis vytvořit lokálně, což je popsané v jednom z dostupných tutoriálů. Tím se počet dostupných funkcí může rapidně rozšířit. Jen upozorním, že takovéto lokální “zkompilování” balíku je časově náročnější. Může a patrně to zabere okolo jedné hodiny (standardní běh přes Github Actions zabere něco kolem 40 minut, ale to je včetně instalace QGIS a všech potřebných Rkových balíků).
Podrobnější popis a jednoduchá ukázka je na webu. Takže pokud hledáte možnost jak skloubit programování v R s geoinformatikou v QGIS na takové běžné uživatelské úrovni, pak balík qgis nabízí jednu z možností. Nějakou ukázku použití balíku v praxi si nechám na příště.