Python Konsolundan QGIS Zonal Stats Eklentisi mi Kullanıyorsunuz?


9

Katlamalı poligonlardan raster istatistiklerini çıkarmak için QGIS'deki Zonal Stats eklentisini kullanıyorum (tür dağılımının şekil dosyalarına sahibim ve her türün aralığında çevresel veriler elde etmek istiyorum). Ben veri almak için gereken 300 ya da öylesine dosyaları var ve bu yüzden python konsolunda çalıştırmak için bir komut dosyası yazmak istiyorum, ancak ben python ile tam bir acemi ve nasıl yapılacağı hakkında hiçbir fikrim yok.



Chad - evet benzer bir soru ama daha spesifik. Kimse diğer soruyu cevaplamadı, bunun yerine sorunu çözmenin başka yollarını önerdiler. Diğer
Thomas

Diğer soruda ne istediğinizi yapabilen bir r-betiğine işaret ettim ve Sylvester Sneekly size python'daki kesin yöntemi adlandırdı. Python veya r'de kodlama yapmaya alışkın değilseniz, diğer tüm ipuçları size yardımcı olmaz. Kendi kendine kodlanmış bir komut dosyasına veya çok sayıda fare işaretine ihtiyacınız var. Bazı kodlamaları öğrenin, örnekleri deneyin ve bir şey işe yaramazsa rapor edin.
Ocak'ta Curlew

@Curlew - Sylvester'ın yöntemi, kulağa çok iyi gelse de, benim için büyük bir öğrenme eğrisini temsil ediyordu ve şu anda bunu yapacak zamanım yok. Sylvester'in yardımını takdir ediyorum ama peşinden geldiğim basit bir cevap değildi. Ben diğer soruda ( gis.stackexchange.com/questions/23203/… ) bahsettiğim sonrası sonra kodun çoğunu vardı rağmen . Eğer Sylvester'ın yöntemi python'da bunu yapmanın tek yolu ise, belki de ne kadar zor olacağını hafife aldım.
Thomas

@Curlew - R betiğiniz gerçekten işe yarıyor, teşekkür ederim. Henüz çalışmam gereken tek şey, R'de döndürülen sonuçların şekil dosyaları için .dbf dosyasına nasıl ekleneceğidir (bununla ilgili herhangi bir yardım çok takdir edilecektir).
Thomas

Yanıtlar:


13

Aşağıdaki kod benim için çalıştı QGis 1.8.0

Bir döngü ile birden fazla dosya karşılamak için bunu değiştirebilirsiniz.

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)

Harika. Çok teşekkür ederim vinayan, tam da peşindeydim.
Thomas

Ayrıca bakınız burada alternatif çözüm kullanılarak R
Thomas

Sana yardım ettiğine sevindim!
vinayan

@vinayan QProgressDialog, hesaplamaların ne kadar ilerlediğini görmek istediğiniz görsel ortamlar için kullanışlıdır. Komut satırından faydası yoktur. NoneParametre olarak kullanabilirsiniz ve iyi çalışır. O zaman PyQt4..satırdan veya hatta ihtiyacınız yoktur progressDialog = . Benzer yayınlara
rudivonstaden

@rudivonstaden - bu şimdi mantıklı .. Cevabı güncelledim
vinayan

2

İşte SAGA GIS'de istediğinizi elde etmenin yolu. Bu muhtemelen istediğiniz çözüm değil, ama işe yarıyor. Eklentilerimin başarısız olmasının nedenlerini inceleyeceğim ve en kısa sürede güncelleyeceğim.

Yükleme SAGA GIS (aynı zamanda apt-get veya Linux dağıtımında aptitudbe yoluyla ulaşılabilir olmalıdır).

  • SAGA'yı başlatın, Raster ve vektör şeklinizi yükleyin (Menü Modülleri -> Dosya -> GDAL / OGR içe aktarma). İşlemi aşağıda görebilirsiniz.
  • "Çokgenler için Izgara istatistikleri" modülünü yürütün (Menü Modülleri -> Şekil -> Izgara -> Izgara değerleri). Değerler doğrudan tabloya eklenir. İletişim Kutusu şöyle görünmelidirresim açıklamasını buraya girin
  • Çalışma alanındaki "Veri" sekmesine gidin, vektör katmanınıza sağ tıklayın ve şekli eklenen özelliklerle dışa aktarmak için "farklı kaydet " i seçin . Özellik tablosunu sağ tıklatarak da görüntüleyebilir ve ardından tablo şovunu tıklayabilirsiniz

Bu, bana gönderdiğiniz veri kümesi için işe yarar. QGIS'teki SAGA modüllerini SEXTANTE üzerinden bir BATCH işlemi olarak çağırmak da mümkündür. Bunu yapmak için SEXTANTE seçeneklerindeki SAGA modüllerini etkinleştirin.


öneri için teşekkürler ama zaten destan denedim - üretilen sonuçlar tutarsızdı yani aynı şeyi iki kez yapmak farklı sonuçlar verdi. QGIS'te ZonalStats eklentisini biliyorum, bu yüzden ZonalStats'ı otomatik hale getirmenin bir yolunun peşindeyim.
Thomas

@vinayan ben bölgesel statastics için verdiğiniz kodu var ama çokgen vektör katmanı sütunları oluşturmak ama hesaplanan değerleri güncelleme değil. Neden böyle?
user99

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

varsayılan olarak sadece Say, Toplam ve Ortalama hesaplar ( Raster -> Zonal StatisticsQGIS Desktop'tan anlayabileceğiniz gibi, çok daha fazlasını yapabilir).

Örneğin, yalnızca kullanmak zorunda olduğunuz Ortalamayı hesaplamak istiyorsanız:

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

tüm seçenekler için API'ya bakın .


Herkes aynı anda iki seçim istatistiği elde etmek için sözdizimine yardımcı olabilir mi, örneğin Min & Max, aynı anda? Farklı yollar deniyorum ama başarı yok
dorakiara

Qgis 3'te raster dosyası yolunu raster dosyasının kendisiyle değiştirmeniz gerekir! Bu nedenle, rasterFilePath = 'F: /temp/zonalstat/raster1.tif' olur: rasterFile = QgsRasterLayer ('F: /temp/zonalstat/raster1.tif', 'raster') Sonra rasterFilePath öğesini zoneStat içindeki rasterFile olarak değiştirirsiniz command zoneStat = QgsZonalStatistics (polygonLayer, rasterFile, 'pre-', 1) zoneStat.calculateStatistics (Yok)
philsch
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.