PostGISで頭を一周できないような課題に直面しています。私はプログラミング言語を使用してこれを解決できることを知っています(そしてそれは私のバックアップ計画です)が、私はPostGISでこれを解決したいのです。検索を試みましたが、問題と一致する回答が見つかりませんでした。これは、検索語句がわからないことが原因である可能性があります。そのため、申し訳ありませんが、正しい方向に向けてください。
私の問題はこれです:
- ポリゴン/マルチポリゴンが混在するテーブルがあります
- 各(マルチ)ポリゴンには、ランク付けする属性(優先度)があります。
- 各ポリゴンには、知りたい値もあります。
- 検索エリア(ポリゴン)があります
- 私のクエリ領域では、各ポリゴン値によってカバーされる領域を見つけたい
例:
そして、小さな青い長方形は私のクエリポリゴンです
さらに、属性は
geom | rank | value
-------|------|----
red | 3 | 0.1
green | 1 | 0.2
indigo | 2 | 0.2
私が欲しいのは、これらのジオメトリを選択して、最高ランク(緑)が可能なすべての領域(つまり、クエリgeomとそのgeomの交点)を埋め、次に次に高い(インディゴ)がクエリジオメトリの交点を埋めるようにすることです。およびgeom MINUSはすでにカバーされています)など。
私はこの質問を見つけました:ST_Differenceを使用して重複するフィーチャを削除しますか?しかし、それは私が望んでいるようには見えません。
エリアなどの計算方法を自分で理解できるので、2番目の画像に示されている3つのジオメトリを取得するクエリは問題ありません。
追加情報:-これは大きなテーブルではありません(〜2000行)-重複がゼロまたは複数(3つだけではない)の可能性があります-クエリ領域(またはその一部)にポリゴンがない可能性があります-私はm postgres 9.6.6でpostgis 2.3を実行
私のフォールバックソリューションは、次のようなクエリを実行することです。
SELECT
ST_Intersection(geom, querygeom) as intersection, rank, value
FROM mytable
WHERE ST_Intersects(geom, querygeom)
ORDER by rank asc
そして、コードのジオメトリの一部を繰り返し「切り落とす」。しかし、私が言ったように、私は本当にこれをPostGISで実行したいと思います


WITH RECURSIVE ...CTE(ドキュメントと一般的なチュートリアル)を探しています