詳細については、このリンクを参照してください。
問題:
連続ラスタ(属性テーブルを持たないラスタ)をセルごとにループして、セルの値を取得したい。これらの値を取得して条件を実行し、実際にラスター計算機を使用せずに、以下で説明するマップ代数ステップをエミュレートします。
以下のコメントのリクエストごとに、問題の背景を提供し、「分析が必要:」と呼ばれる以下のセクションにメソッドを実装する必要性を正当化する詳細を追加しました。
以下に提案する分析は、背景を提供することで私の問題に関連している一方で、回答に実装する必要はありません。質問の範囲は、セル値を取得/設定するために連続ラスタを繰り返し処理することのみに関係します。
必要な分析:
以下の条件のいずれかが満たされている場合、出力セルに値1を与えます。出力セルに値0を与えるのは、どの条件も満たされない場合のみです。
条件1:セルの値が上部および下部のセルより大きい場合、値1を指定します。
Con("raster" > FocalStatistics("raster", NbrIrregular("C:\filepath\kernel_file.txt"), "MAXIMUM"), 1, 0)
カーネルファイルは次のようになります。
3 3
0 1 0
0 0 0
0 1 0
条件2:セルの値が左右のセルより大きい場合、値1を指定します。
Con("raster" > FocalStatistics("raster", NbrIrregular("C:\filepath\kernel_file.txt"), "MAXIMUM"), 1, 0)
カーネルファイルは次のようになります。
3 3
0 0 0
1 0 1
0 0 0
条件3:セルの値が左上および右下のセルより大きい場合、値1を指定します。
Con("raster" > FocalStatistics("raster", NbrIrregular("C:\filepath\kernel_file.txt"), "MAXIMUM"), 1, 0)
カーネルファイルは次のようになります。
3 3
1 0 0
0 0 0
0 0 1
条件4:セルの値がbottomleftおよびtoprightのセルより大きい場合、値1を指定します。
Con("raster" > FocalStatistics("raster", NbrIrregular("C:\filepath\kernel_file.txt"), "MAXIMUM"), 1, 0)
カーネルファイルは次のようになります。
3 3
0 0 1
0 0 0
1 0 0
条件5:場合、任意の隣接するセルの一つが中心セルに等しい値を有し、1の値は、ラスタ出力を与える(2つの最も近い近隣の計算と焦点さまざまな方法を使って)
なぜマップ代数を使用しないのですか?
以下では、マップ代数を使用して問題を解決できることに注意しましたが、上記のように、これは合計6つのラスター計算と、作成されたすべてのラスターを結合する1つです。私は、セルごとに移動し、各セルを個別に7回ループして7つのラスターを作成するためにかなりのメモリを使用する代わりに、各セルですべての比較を一度に行う方がはるかに効率的であるように思われます。
問題はどのように攻撃されるべきですか?
上記のリンクではIPixelBlockインターフェイスを使用することをお勧めしますが、実際にIPixelBlockを介して単一のセル値にアクセスしているのか、設定したIPixelBlockのサイズから複数のセル値にアクセスしているのかは、ESRIのドキュメントからはわかりません。良い答えは、連続ラスタのセル値にアクセスする方法を提案し、明らかでない場合はコードの背後にある方法論の説明を提供する必要があります。
要約すれば:
CONTINUOUSラスタ(属性テーブルを持たない)のすべてのセルをループしてセル値にアクセスする最良の方法は何ですか?
良い答えは、上記の解析ステップを実装する必要はなく、ラスタのセル値にアクセスする方法を提供するだけです。