Tidigare i veckan visade jag hur du kan använda GDAL i såväl ArcGIS som QGIS för att skapa väldigt lika Pythonskript för att klippa isär stora rasterfiler. Python kan användas till så mycket mera i både ArcGIS och QGIS, och i detta inlägg så tänkte jag titta på inbyggda funktioner i QGIS för att komma åt geobearbetningen och enkelt skapa process-skript som kan användas i verktygslådan.
I de tidigare inläggen beskrev jag hur QGIS använder ”##” för att definiera variabler och formulärfält som direkt används av QGIS för att hantera anpassade processer på ett användarvänligt sätt.
##Variabel_och_Rubrik=Typ Options
Variabeln som skapas kan sedan direkt användas i det följande Pythonskriptet.
De typer som stöds är:
- raster (ett rasterlager/-fil)
- vector (ett vektorlager/-fil)
- table (en tabell)
- number (måste ha defaultvärde som option)
- string (måste ha ett defaultvärde ex: ##namn=string Anders)
- boolean (option True/False för defaultvärde)
- multiple raster (flera rasterlager/-filer)
- multiple vector (flera vektorlager/-filer)
- field (ett attributfält, måste ha ett namn på en vektorvariabel som option)
- folder (en katalog)
- file (ett filnamn)
Det finns några till, men dessa räcker gott att börja med. Dessutom så kan man ange utdatatyper:
- output raster
- output vector
- output table
- output html
- output file
- output number (dolda)
- output string (dolda)
De dolda utdatatyperna syns inte i formuläret, men kan användas för att exempelvis skicka värden vidare till andra processer i en modell.
Inbyggda processer
Om man öppnar en Pythonkonsol i QGIS (Insticksprogram/Pythonkonsol CRTL-Alt-P) och skriver in import processing följt av processing.alglist() så får man upp en lång lista med alla tillgängliga processer och vad de heter. Är man någorlunda säker på vad man letar efter så kan man lägga till en text för detta för att filtrera listan (exempelvis processing.alglist(”buffer”) ):
För att ta reda på mer om en viss process så skriver man processing.alghelp(”qgis:fixeddistancebuffer”) eller det namn på process man är intresserad av.
Processerna körs sedan med processing.runalg(namn, arg1, arg2, …) och argumenten som används framgår av hjälptexten ovan.
Sätt samman alltihopa
Det går att lägga in massor med extra Pyhonkod i processerna, men för att göra det enkelt och belysa principen så tänkte jag helt enkelt göra ett buffertverktyg. Det finns redan flera så se det enbart som ett exempel.
Mer avancerat än så är det inte! Som tidigare så måste man se upp med svenska tecken i variabelnamn. Det kan därför se lite konstigt ut i dialogrutor, men jag har inte kommit på en lösning runt detta.
Vill man ha ett ”namn” på algoritmen så löser man det med ##Min Buffert=name, och om man vill placera processen i en speciell grupp så anger man ##Min Grupp=group.