GDALに異なるサイズのラスターを追加して、結果が交差領域のみにあるようにする方法


11

2つのラスターを追加し、1つのラスター出力を生成するPythonメソッドを書いています。私が制御できない理由により、入力ラスタの範囲は異なりますが、重複しています。

出力ラスタ範囲が2つの入力の交差領域のみになるように出力を生成するために、2つの重複領域で重複する入力ラスタピクセルのみを操作することは可能ですか?

回答:


12

最初に行うことは、地理空間座標で重複する長方形を決定することです。これを行うには、各ソースイメージのジオトランスフォームを取得します。

gt1 = ds1.GetGeoTransform()
# r1 has left, top, right, bottom of dataset's bounds in geospatial coordinates.
r1 = [gt1[0], gt1[3], gt1[0] + (gt1[1] * ds1.RasterXSize), gt1[3] + (gt1[5] * ds1.RasterYSize)]

# Do the same for dataset 2 ...

intersection = [max(r1[0], r2[0]), min(r1[1], r2[1]), min(r1[2], r2[2]), max(r1[3], r2[3])]

次に、上部と左側の座標を減算し、ピクセルサイズで割って、切り上げて、その長方形を各画像のピクセルに変換します。

ここからReadRaster()、各画像を呼び出して、計算したばかりのピクセル範囲を指定できます。

band.ReadRaster(px1[0], px1[1], px1[2] - px1[0], px1[3] - px1[1], px1[2] - px1[0], px1[3] - px1[1],
                # <band's datatype here>
)

私は少し疲れているので、これがあまり意味をなさないなら、私に知らせてください!


これは、異なる投影法(別名座標参照系/空間参照系)を持つラスターでも機能しますか?そして、投影が同じであっても:gt1[1]およびgt2[1](またはgt1[5]およびgt2[5])が反対の兆候がある場合、これは機能しますか?(垂直または水平ラスタの1を反転ことになる、私は。思う)場合や、abs(gt1[2])およびabs(gt1[4])より大きいabs(gt1[1])abs(gt1[5])が、abs(gt2[2])そしてabs(gt2[4])よりも小さいabs(gt2[1])abs(gt2[5])(おそらく斜めラスタの1を反転ことになりますか)?
das-g

6

交差の3番目の要素はmin(r1 [2]、r2 [2])である必要があります。

intersection = [max(r1[0], r2[0]), min(r1[1], r2[1]), min(r1[2], r2[2]), max(r1[3], r2[3])]

また、データセットが実際に交差することを確認するロジックをお勧めします。

これは1つのアプローチです。

if (intersection[2] < intersection[0]) or (intersection[1] < intersection[3]):
    intersection = None
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.