Stai usando il plugin QGIS Zonal Stats da Python Console?


9

Sto usando il plugin Zonal Stats in QGIS per estrarre statistiche raster da poligoni sovrapposti (ho shapefile di distribuzione delle specie e voglio estrarre i dati ambientali dall'interno di ogni specie). Ho circa 300 file di cui ho bisogno per ottenere i dati e quindi vorrei scrivere uno script da eseguire nella console di Python, tuttavia sono un principiante completo con Python e non ho idea di come farlo.



Ciad - sì, è una domanda simile ma è più specifica. Nessuno ha risposto all'altra domanda, invece hanno suggerito altri modi per risolvere il problema. Non so come cancellare l'altro post
Thomas

Nell'altra domanda ti ho indicato un r-script capace di quello che vuoi e Sylvester Sneekly ti ha nominato il metodo esatto in Python. Se non sei abituato a programmare in Python o R, tutti gli altri suggerimenti non ti aiuteranno. Hai bisogno di uno script auto-codificato o di molti mouseclicks. Impara un po 'di codice, prova gli esempi e riporta indietro, se qualcosa non funziona.
Chiurlo

@Curlew - Il metodo di Sylvester, anche se suona molto bene, rappresenterebbe per me un'enorme curva di apprendimento e al momento non ho tempo per farlo. Apprezzo l'aiuto di Sylvester ma non è stata la risposta semplice che stavo cercando. Pensavo di avere la maggior parte del codice che cercavo nel post che ho citato nell'altra mia domanda ( gis.stackexchange.com/questions/23203/… ). Se il metodo di Sylvester è l'unico modo per farlo in Python, forse ho sottovalutato quanto sarebbe difficile.
Thomas,

@Curlew - Il tuo script R funziona davvero, grazie. L'unica cosa che devo ancora capire è come aggiungere i risultati restituiti in R al file .dbf per i miei shapefile (qualsiasi aiuto con questo sarebbe molto apprezzato).
Thomas,

Risposte:


13

Il codice seguente ha funzionato per me QGis 1.8.0

È possibile modificarlo per ospitare più file con alcuni loop.

from qgis.analysis import QgsZonalStatistics

#specify polygon shapefile vector
polygonLayer = QgsVectorLayer('F:/temp/zonalstat/zonePoly.shp', 'zonepolygons', "ogr") 

# specify raster filename
rasterFilePath = 'F:/temp/zonalstat/raster1.tif'

# usage - QgsZonalStatistics (QgsVectorLayer *polygonLayer, const QString &rasterFile, const QString &attributePrefix="", int rasterBand=1)
zoneStat = QgsZonalStatistics (polygonLayer, rasterFilePath, 'pre-', 1)
zoneStat.calculateStatistics(None)

Grande. Grazie mille Vinayan, è esattamente quello che stavo cercando.
Thomas,

Vedi anche qui per una soluzione alternativa usando R
Thomas

felice che ti abbia aiutato!
Vinayan,

@vinayan QProgressDialog è utile per gli ambienti visivi in ​​cui si desidera vedere fino a che punto sono progrediti i calcoli. Non serve a nulla dalla riga di comando. Puoi usare Nonecome parametro e funziona benissimo. Quindi non hai bisogno della PyQt4..linea from o della progressDialog = linea. Vedi post simile su gis.stackexchange.com/questions/23203/…
rudivonstaden

@rudivonstaden - ora ha senso..ho aggiornato la risposta
vinayan

2

Ecco il modo per ottenere ciò che vuoi in SAGA GIS. Questa probabilmente non è la soluzione che desideri, ma funziona. Esaminerò i motivi per cui i miei plug-in falliscono e lo aggiornerò il prima possibile.

Installa SAGA GIS (dovrebbe essere disponibile anche tramite apt-get o aptitudbe nella tua distribuzione linux).

  • Avvia SAGA, carica la tua forma raster e vettoriale (Moduli menu -> File -> Importazione GDAL / OGR). Puoi vedere il processo qui sotto.
  • Eseguire il modulo "Statistiche griglia per poligoni" (Moduli menu -> Forma -> Griglia -> Valori griglia). I valori vengono aggiunti direttamente alla tabella. La finestra di dialogo dovrebbe apparire cosìinserisci qui la descrizione dell'immagine
  • Vai alla scheda "Dati" nell'area di lavoro, fai clic con il pulsante destro del mouse sul livello vettoriale e scegli di " salva con nome " per esportare la forma con gli attributi aggiunti. È inoltre possibile visualizzare la tabella degli attributi facendo clic con il pulsante destro del mouse, quindi fare clic su Mostra tabella

Funziona con il set di dati che mi hai inviato. È anche possibile chiamare i moduli SAGA in QGIS tramite SEXTANTE come processo BATCH. Per fare ciò è sufficiente attivare i moduli SAGA nelle opzioni SEXTANTE.


grazie per il suggerimento, ma ho già provato Saga - i risultati che ha prodotto erano incoerenti, cioè fare la stessa cosa due volte ha dato risultati diversi. So che il plugin ZonalStats in QGIS funziona, quindi sto cercando un modo per automatizzare ZonalStats.
Thomas,

@vinayan ho il codice che hai dato per la statica zonale ma sta creando le colonne nel livello vettoriale poligonale ma non aggiorna i valori calcolati. Perché è così?
user99

2
zoneStat = QgsZonalStatistics (polygonLayer, rasterFilePath, 'pre-', 1)
zoneStat.calculateStatistics(None)

calcola di default solo Count, Sum e Mean (come si può vedere da Raster -> Zonal StatisticsQGIS Desktop, può fare molto di più).

Se, ad esempio, vuoi calcolare solo la media devi usare:

zoneStat = QgsZonalStatistics (polygonLayer, rasterFilePath, 'pre-', 1, QgsZonalStatistics.Mean)
zoneStat.calculateStatistics(None)

vedi API per tutte le opzioni.


Qualcuno può aiutare con la sintassi per ottenere due statistiche di scelta, diciamo Min e Max, allo stesso tempo? Ho provato diversi modi, ma senza successo
Dorakiara,

In Qgis 3 devi sostituire il percorso del file raster con il file raster stesso! Pertanto, rasterFilePath = 'F: /temp/zonalstat/raster1.tif' diventa: rasterFile = QgsRasterLayer ('F: /temp/zonalstat/raster1.tif', 'raster') Quindi cambia rasterFilePath in rasterFile nella zonaStat command zoneStat = QgsZonalStatistics (polygonLayer, rasterFile, 'pre-', 1) zoneStat.calculateStatistics (None)
philsch
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.