PostGIS2.0を使用して、ラスター/ポリゴンの交差を行います。どの操作を使用する必要があるのか、これを実行する最も速い方法は何かを理解するのが困難です。私の問題は次のとおりです。
- ポリゴンとラスターがあります
- ポリゴン内にあるすべてのピクセルを見つけて、ピクセル値の合計を取得したい
- (更新された問題):クエリを実行すると、元のラスターに存在しないいくつかのピクセルの大きな値を取得しています
ST_Intersects()
またはを使用する必要があるかどうかがわかりませんST_Intersection()
。また、ピクセルを合計するための最良のアプローチが何であるかわかりません。これが私が試した最初のアプローチです(#1):
SELECT
r.rast
FROM
raster as r,
polygon as p
WHERE
ST_Intersects(r.rast, p.geom)
これはrast
値のリストを返しますが、これをどうすればいいのかわかりません。を使用して要約統計を計算しようとしましたST_SummaryStats()
が、これがポリゴン内にあるすべてのピクセルの加重和であるかどうかはわかりません。
SELECT
(result).count,
(result).sum
FROM (
SELECT
ST_SummaryStats(r.rast) As result
FROM
raster As r,
polygon As p
WHERE
ST_Intersects(r.rast, p.geom)
) As tmp
私が試した他のアプローチ(#2)はST_Intersection()
次を使用します:
SELECT
(gv).geom,
(gv).val
FROM
(
SELECT
ST_Intersection(r.rast, p.geom) AS gv
FROM
raster as r,
polygon as p
WHERE
ST_Intersects(r.rast, p.geom)
) as foo;
これにより、さらに分析するジオメトリのリストが返されますが、これは効率が悪いと思われます。
どちらが最も速い操作順序なのかもわかりません。ポリゴンを常に選択するraster, polygon
かpolygon, raster
、ポリゴンをラスターに変換する必要がありraster, raster
ますか?
編集:R.K.
のリンクからのいくつかの詳細でアプローチ#2を更新しました。
アプローチ#2を使用して、出力に次のエラーがあることに気付きました。これは、出力を理解できなかった理由の一部です。元のラスターの画像と、そのラスターを交差させるために使用されているポリゴンのアウトラインが上に重ねられています。
そして、これがPostGISを使用した交差の結果です。
結果の問題は、元のラスタにはない21474836の値が返されることです。なぜこれが起こっているのか分かりません。どこか小さい数字に関連していると思われます(ほぼ0で除算)が、間違った結果を返します。
ST_SummaryStats()
#1に使用しましたが、#2にそれを行う方法がわかりません。