Esta é uma pergunta de acompanhamento para esta pergunta .
Eu tenho uma rede fluvial (multilinha) e alguns polígonos de drenagem (veja a figura abaixo). Meu objetivo é selecionar apenas os polígonos da cabeceira (verde).
Com a solução de John, posso extrair facilmente os pontos de partida do rio (estrelas). No entanto, eu posso ter situações (polígono vermelho) em que tenho pontos de partida em um polígono, mas o polígono não é um polígono de cabeceira, porque é levado pelo rio. Eu só quero os polígonos da cabeceira.
Tentei selecioná-los contando o número de interseções entre polígonos e rios (justificativa: um polígono de cabeceira deveria ter apenas 1 interseção com o rio)
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
, onde poylg são os poylgons, start_points de johns respondem e stream é minha rede fluvial.
No entanto, isso leva uma eternidade e eu não o executei:
"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)"
Portanto, minha pergunta é: como posso consultar com eficiência polígonos de cabeceira?
Atualização: adicionei alguns dados de amostra à minha caixa de depósito . Os dados são do sudoeste da Alemanha. São dois arquivos de forma - um com fluxos e outro com polígonos.
polygons
contenha apenas os pontos que são fontes de rios (da pergunta anterior) e exclua os locais onde dois rios se encontram. Desculpe, por todas as perguntas, só quero ter certeza.
polygons
que têm um rio que passa (o rio entra e sai do polígono) e os mantém com início (e os rios deixam apenas esse polígono).