河川網(複数線)といくつかの排水ポリゴンがあります(下の画像を参照)。私の目標は、源流ポリゴン(緑)のみを選択することです。
ジョンのソリューション私は簡単に川の開始点(星)を抽出することができます。ただし、ポリゴンに始点がある状況(赤いポリゴン)がある場合がありますが、ポリゴンは河川を通って飛んでいるため、源流ポリゴンではありません。源流ポリゴンだけが必要です。
ポリゴンと川の交差点の数を数えてそれらを選択しようとしました(理由:源流ポリゴンには川との交差点が1つだけである必要があります)
SELECT
polyg.*
FROM
polyg, start_points, stream
WHERE
st_contains(polyg.geom, start_points.geom)
AND ST_Npoints(ST_Intersection(poly.geom, stream.geom)) = 1
ここで、poylgはpoylgonsであり、johnsのstart_pointsは答え、streamは私の河川ネットワークです。
しかし、これは永遠にかかり、私はそれを実行しませんでした:
"Nested Loop (cost=0.00..20547115.26 rows=641247 width=3075)"
" Join Filter: _st_contains(ezg.geom, start_points.geom)"
" -> Nested Loop (cost=0.00..20264906.12 rows=327276 width=3075)"
" Join Filter: (st_npoints(st_intersection(ezg.geom, rivers.geom)) = 1)"
" -> Seq Scan on ezg_2500km2_31467 ezg (cost=0.00..2161.52 rows=1648 width=3075)"
" Filter: ((st_area(geom) / 1000000::double precision) < 100::double precision)"
" -> Materialize (cost=0.00..6364.77 rows=39718 width=318)"
" -> Seq Scan on stream_typ rivers (cost=0.00..4498.18 rows=39718 width=318)"
" -> Index Scan using idx_river_starts on river_starts start_points (cost=0.00..0.60 rows=1 width=32)"
" Index Cond: (ezg.geom && geom)"
だから私の質問は:どうやって源流ポリゴンを効率的にクエリできるのですか?
アップデート: 私は私にいくつかのサンプルデータを追加しましたDropboxの。データはドイツ南西部のものです。これは2つのシェイプファイルで、1つはストリーム、もう1つはポリゴンです。
polygons
(前の質問からの)川の源であるポイントのみを含むセットと、2つの川が交わる場所を除外する必要があります。すみません、すべての質問について、確認したいだけです。
polygons
川が通り過ぎる(川がポリゴンに出入りする)ものを除外し、開始点を維持します(川はこのポリゴンだけを離れます)。