Algoritmes van Processing uitvoeren via Python (QGIS3)

De Toolbox van Processing in QGIS bevat een nog steeds groeiende collectie van gereedschappen voor geoprocessing. De Toolbox verschaft een gemakkelijke interface voor het batch-verwerking om een algoritme uit te voeren op een groot aantal invoeren. Bekijk Massa verwerken met behulp van Framework Processing (QGIS 3). Maar er zijn gevallen waarin u een beetje aangepaste logica in uw batch-verwerking moet inbouwen. Omdat alle algoritmes van Processing programmatisch kunnen worden uitgevoerd via de Python API, kunt u ze ook uitvoeren via de Python Console. Deze handleiding laat u zien hoe een algoritme van Processing uit te voeren via de Python Console om een aangepaste taak voor geoprocessing uit te voeren met slechts enkele regels code. Bekijk de handleiding Beginnen met programmeren in Python (QGIS3) om bekend te geraken met de basisbeginselen van de omgeving voor Python Scripting in QGIS.

Overzicht van de taak

We zullen 12 gerasterde rasterlagen gebruiken die de neerslag voor elke maand van het jaar weergeven en de gemiddelde maandelijkse neerslag berekenen voor de postcodes in de omgeving van Seattle.

Andere vaardigheden die u zult leren

  • Hoe een kolom (d.i. veld) te verwijderen uit een vectorlaag.

De gegevens ophalen

De PRISM Climate Group verzamelt klimatologische gegevens en verschaft historische en recente klimaatgegevens voor de gehele VS. Ga naar de gegevenspagina Recent Years en download de maandelijkse neerslaggegevens voor het jaar 2017 in de indeling BIL.

../../_images/data14.png

City of Seattle Open Data portal verschaft gratis en open gegevens voor de stad. Zoek naar en download de gegevens Zip Codes in de indeling shapefile.

Voor het gemak kunt u direct een kopie van beide gegevenssets downloaden vanaf de links hieronder:

PRISM_ppt_stable_4kmM3_2017_all_bil.zip

Zip_Codes.zip

Gegevensbron: [PRISM] [CITYOFSEATTLE]

Procedure

  1. Pak het bestand PRISM_ppt_stable_4kmM3_2017_all_bil.zip uit. Zoek naar de map PRISM_ppt_stable_4kmM3_2017_all_bil in de QGIS Browser en vergroot die. De map bevat 12 individuele lagen voor elke maand. Houd de Ctrl-toets ingedrukt en selecteer de bestanden .bil voor alle 12 maanden. Eenmaal geselecteerd, sleep ze naar het kaartvenster.

../../_images/1102.png

Notitie

De gegevens worden geleverd in de indeling BIL. Elke laag wordt weergegeven met een set bestanden, bestand .bil dat de feitelijke gegevens bevat, een bestand .hdr dat de structuur van de gegevens beschrijft en een bestand .prj dat de informatie voor de projectie bevat. QGIS kan het bestand .bil laden vooropgesteld dat de andere bestanden bestaan in dezelfde map.

  1. Pak vervolgens het bestand Zip_Codes.zip uit en plaats het Shapefile in een map. Zoek naar de map Zip_Codes en vergroot die. Sleep het bestand Zip_Codes.shp` naar het kaartvenster.

../../_images/249.png
  1. Klik met rechts op de laag Zip_Codes en selecteer Op kaartlaag inzoomen. U zult de polygonen van de postcodes voor de stad en omliggende gebieden zien.

../../_images/334.png
  1. Ga naar Processing ‣ Toolbox.

../../_images/419.png
  1. Het algoritme om monsters te nemen uit een rasterlaag met behulp van vectorpolygonen staat bekend als Gebiedsstatistieken. Zoek naar het algoritme in de Toolbox van Processing. Selecteer het algoritme en ga er met uw muis overheen. U zult een Helptip zien met de tekst Algorithm ID: ‘qgis:zonalstatistics’. Onthoud deze ID, die nodig is om dit algoritme aan te roepen via de API van Python. Dubbelklik op het algoritme Gebiedsstatistieken om het te starten.

../../_images/519.png
  1. We zullen een handmatige test van het algoritme uitvoeren voor één enkele laag. Dit is een nuttige manier om te controleren of het algoritme zich gedraagt zoals verwacht en ook een gemakkelijke manier om uit te zoeken hoe de relevante parameters aan het algoritme door te geven wanneer het gebruikt wordt via Python. Selecteer, in het dialoogvenster Gebiedsstatistieken, PRISM_ppt_stable_4kmM3_201701_bil als de Rasterlaag en Zip_Codes als de Vectorlaag bevat zones. Laat de andere parameters op hun standaard waarde. Klik op de knop ... naast Statistieken om te berekenen en selecteer alleen Gemiddelde. Klik op Uitvoeren.

../../_images/619.png
  1. Schakel, als het algoritme is voltooid, naar de tab Log. Maak een notitie van de Parameters invoer die werden doorgegeven aan het algoritme. Klik op Close.

../../_images/718.png
  1. Laten we de resultaten van de uitgevoerde test controleren. Klik, in het hoofdvenster van QGIS, met rechts op de laag Zip_Codes en selecteer Attributentabel openen. Dit bepaalde algoritme past de laag voor de invoerzones ter plekke aan en voegt een nieuwe kolom toe voor elke statistiek die werd geselecteerd. Een nieuwe kolom, genaamd _mean, is toegevoegd aan de tabel, omdat we alleen de waarde Gemiddelde hadden geselecteerd. De _ is het standaard voorvoegsel. Wanneer we het algoritme uitvoeren voor lagen van alle maanden is het nuttig om een aangepast voorvoegsel met het nummer van de maand te specificeren, zodat we eenvoudig de gemiddelde waarden kunnen identificeren voor elke maand (d.i. 01_mean, 02_mean etc.). Specificeren van dit aangepaste voorvoegsel is niet mogelijk in de interface Batch Processing van QGIS en als we deze opdracht zouden uitvoeren met die interface, zouden we het aangepaste voorvoegsel handmatig moeten toevoegen voor elke laag. Als u werkt met een groot aantal lagen kan dit behoorlijk omslachtig zijn. Vandaar dat we deze aangepaste logica kunnen toevoegen met de API van Python en het algoritme in een for-loop voor elke laag uitvoeren.

../../_images/818.png
  1. Laten we, voordat we doorgaan, de kolom _mean die werd gemaakt bij het uitvoeren van de test verwijderen. Klik op de knop Bewerken aan/uitzetten, gevolgd door de knop Veld verwijderen. Selecteer het veld _mean en klik op OK.

../../_images/918.png
  1. Klik opnieuw op de knop Bewerken aan/uitzetten en dan Save om de wijzigingen te behouden.

../../_images/1018.png
  1. Ga, terug in het hoofdvenster van QGIS, naar Plug-ins ‣ Python Console.

../../_images/1121.png
  1. We moeten toegang hebben tot alle namen van de lagen om het algoritme van Processing uit te voeren via Python. Voer de volgende code in in de Python Console en druk op Enter. U zult de namen van alle lagen zien afgedrukt in de console.

root = QgsProject.instance().layerTreeRoot()
for layer in root.children():
  print(layer.name())
../../_images/121.gif
  1. Voor het toevoegen van een aangepast voorvoegsel moeten we kijken naar de naam van de laag en een subtekenreeks uitnemen die het nummer van de maand weergeeft. Voer de volgende code in om door alle rasterlagen te gaan, het aangepaste voorvoegsel uit te nemen en het algoritme qgis:zonalstatistics daarmee uit te voeren.

root = QgsProject.instance().layerTreeRoot()
for layer in root.children():
  if layer.name().startswith('PRISM'):
    prefix = layer.name()[-6:-4]
    params = {'INPUT_RASTER': layer.name(), 'RASTER_BAND': 1, 'INPUT_VECTOR': 'Zip_Codes', 'COLUMN_PREFIX': prefix+'_', 'STATS': 2}
    processing.run("qgis:zonalstatistics", params)
../../_images/13.gif
  1. Klik met rechts, als het verwerken is voltooid, op de laag Zip_Codes en selecteer Attributentabel openen.

../../_images/1417.png
  1. U zult in de tabel 12 nieuw toegevoegde kolommen zien met aangepaste voorvoegsels en waarden voor de gemiddelde neerslag, uitgenomen uit de rasterlagen.

../../_images/1516.png
comments powered by Disqus

This work is licensed under a Creative Commons Attribution 4.0 International License