PythonコンソールからQGIS Zonal Statsプラグインを使用していますか?


9

QGISのゾーン統計プラグインを使用して、オーバーレイポリゴンからラスター統計を抽出しています(種の分布のシェープファイルがあり、各種の範囲内から環境データを抽出したい)。データを取得する必要のあるファイルが300個ほどあるので、Pythonコンソールで実行するスクリプトを記述したいのですが、Pythonの初心者であり、これを行う方法がわかりません。



チャド-はい、それは同様の質問ですが、より具体的です。他の質問には誰も答えていません。代わりに、問題を解決する他の方法を提案しました。他の投稿を削除する方法がわかりません
Thomas

他の質問で、私はあなたが望むものを実行できるrスクリプトをあなたに指摘し、Sylvester SneeklyはあなたにPythonでの正確なメソッドと名付けました。pythonまたはrのいずれかでコードを作成することに慣れていない場合、それ以上のヒントは役に立ちません。自己コーディングされたスクリプトまたは多くのマウスクリックが必要です。いくつかのコーディングを学び、例を試して、何かがうまくいかない場合は報告してください。
Curlew

@Curlew-シルベスターの方法は非常に良いように聞こえますが、私にとっては大きな学習曲線を表すことになるので、現時点ではこれを行う時間はありません。私はシルベスターの助けに感謝しますが、それは私が求めていた簡単な答えではありませんでした。私は他の質問(gis.stackexchange.com/questions/23203/…)で述べた投稿のほとんどのコードを手に入れましたが、シルベスターの方法がPythonでこれを行う唯一の方法である場合、私はそれがどれほど難しいかを過小評価していたかもしれません。
トーマス

@Curlew-Rスクリプトは実際に機能します。ありがとうございます。私がまだ解決していない唯一のことは、Rで返された結果をシェープファイルの.dbfファイルに追加する方法です(これに関するヘルプがあれば大歓迎です)。
トーマス

回答:


13

以下のコードは私のために働きましたQGis 1.8.0

これを変更して、ループのある複数のファイルに対応することができます。

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)

すごい。ビナヤン、どうもありがとう。
トーマス

Rを使用した代替ソリューションについては、こちらもご覧ください
Thomas

それがあなたを助けてくれてうれしい!
ビナヤン2013

@vinayan QProgressDialogは、計算がどこまで進んだかを確認したい視覚環境に役立ちます。コマンドラインからは使用しません。Noneパラメータとして使用でき、正常に動作します。次に、from PyQt4..行やline は必要ありませんprogressDialog = 。で同様の記事を参照してくださいgis.stackexchange.com/questions/23203/...
rudivonstaden

@rudivonstaden-それは今理にかなっています..私は答えを更新しました
vinayan '27 / 03/13

2

SAGA GISで必要なものを取得する方法は次のとおりです。これはおそらく望ましい解決策ではありませんが、機能します。プラグインが失敗する理由を調べ、できるだけ早く更新します。

SAGA GISをインストールします(Linuxディストリビューションのapt-getまたはaptitudbeからも利用できるはずです)。

  • SAGAを起動し、ラスターとベクターシェイプを読み込みます(メニューモジュール->ファイル-> GDAL / OGRインポート)。以下のプロセスを確認できます。
  • モジュール「ポリゴンのグリッド統計」を実行します(メニューモジュール->形状->グリッド->グリッド値)。値はテーブルに直接追加されます。ダイアログは次のようになりますここに画像の説明を入力してください
  • ワークスペースの[データ]タブに移動し、ベクターレイヤーを右クリックして、[名前を付けて保存]を選択し、追加された属性で形状をエクスポートします。右クリックして属性テーブルを表示し、テーブルショーをクリックすることもできます

これは、あなたが私に送ったデータセットに対して機能します。また、バッチプロセスとしてSEXTANTEを介してQGISでSAGAモジュールを呼び出すこともできます。これを行うには、SEXTANTEオプションでSAGAモジュールをアクティブ化するだけです。


提案に感謝しますが、私はすでに佐賀を試しました-それが生み出した結果は一貫していませんでした。QGISのZonalStatsプラグインが機能することを知っているので、ZonalStatsを自動化する方法を探しています。
トーマス

@vinayan私はゾーン統計にuが指定したコードを持っていますが、ポリゴンベクトルレイヤーに列を作成していますが、計算値を更新していません。なぜそうなのですか?
user99 2015

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

デフォルトでは、Count、Sum、およびMeanのみを計算します(Raster -> Zonal StatisticsQGIS Desktop からわかるように、さらに多くのことができます)。

たとえば、使用しなければならない平均のみを計算したい場合:

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

すべてのオプションについては、APIを参照してください。


誰かが選択した2つの統計(Min&Maxなど)を同時に取得するための構文を手伝ってくれる?私はさまざまな方法を試してきましたが、成功しませんでした
ドラキアラ

Qgis 3では、ラスターファイルのパスをラスターファイル自体に置き換える必要があります。したがって、rasterFilePath = 'F:/temp/zonalstat/raster1.tif'は、次のようになります。コマンドzoneStat = QgsZonalStatistics(polygonLayer、rasterFile、 'pre-'、1)zoneStat.calculateStatistics(None)
philsch
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.