外部CSVのデータを使用してQGISモデラーの複数のラスター計算を実行しますか?


20

CSVメタデータファイルの値に基づいて一連のラスターに対して複数の計算を実行する必要があります。

私はQGISグラフィカルモデラーを使用していますし、CSVでの特定のフィールドを呼び出すことができますTableし、Table Field入力。

複数のラスタがあり、各ラスタにはCSVの対応する値があるため、特定の行を呼び出す方法を教えてください。(たとえば、ルックアップに似ています)。

使いやすくする必要がない場合は、スクリプトを追加したくありません。


1
おそらく、ラスターをポイントファイルに変換することで、これに近づく方が簡単でしょう。そこから、2つのファイル間に必要なリンクを作成するのが簡単になります。 webhelp.esri.com/arcgisdesktop/9.3/…– Jamie2483
1

3
タスクのリスト(擬似コード)を作成します。これにより、仕事をするためにスクリプトに頼る必要があるかどうかがわかります。反復または条件付きプロシージャは、スクリプトに頼らなければならないことの指標です。構造スクリプトの作成はあなたの友達です。
ragnvald

回答:


2

本当に古い投稿ですが、可能性のある解決策は、残念ながらあなたのケースでは、モデラーでスクリプトを使用することです:

  • ロードされたすべてのラスターレイヤーの名前を取得します。
  • ラスター名を持つ列を含むメタデータを反復処理します。
  • ロードされたラスター名をメタデータ内のラスター名と一致させます。
  • 一致するものが見つかった場合、ラスターの対応する値が抽出されます。

  1. 以下からスクリプトを作成できます。

    Processing Toolbox > Scripts > Tools > Create new script
    

    次に、次のようなものを使用します。

    ##Example=name
    ##Table=table
    ##Field=Field Table
    ##Output_value=output Number
    
    from qgis.core import QgsMapLayer, QgsMapLayerRegistry
    import csv
    
    raster_list = [layer.name() for layer in QgsMapLayerRegistry.instance().mapLayers().values() if layer.type() == QgsMapLayer.RasterLayer]
    with open(Table) as f:
        reader = csv.reader(f)
        for row in reader:
            for raster in raster_list:
                if raster in row[0]:
                    Output_value = row[1]
                    print Output_value
    

  1. 次に、モデラーにスクリプトを追加します(2つの入力だけで簡単な例を作成しました)。

    モデラ

    上記のスクリプトを使用してこのモデルを実行すると、ラスターの名前に対応するメタデータからの出力値が単に出力されます。

    結果


  1. モデルの構築方法やスクリプトの微調整に応じて、複数のラスター計算を実行できます。
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.