Esta es una pregunta de seguimiento a esta pregunta .
Tengo una red fluvial (multilínea) y algunos polígonos de drenaje (ver imagen a continuación). Mi objetivo es seleccionar solo los polígonos de cabecera (verde).
Con la solución de John puedo extraer fácilmente los puntos de inicio del río (estrellas). Sin embargo, puedo tener situaciones (polígono rojo) en las que tengo puntos de inicio en un polígono, pero el polígono no es un polígono de cabecera, porque el río lo vuela. Solo quiero los polígonos de cabecera.
Traté de seleccionarlos contando el número de intersección entre polígonos y ríos (justificación: un polígono de cabecera debería tener solo 1 intersección con el río)
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
, donde poylg son los polígonos, start_points de johns answer y stream es mi red fluvial.
Sin embargo, esto lleva una eternidad y no lo ejecuté:
"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)"
Entonces mi pregunta es: ¿cómo puedo consultar eficientemente los polígonos de cabecera?
Actualización: agregué algunos datos de muestra a mi Dropbox . Los datos son del suroeste de Alemania. Son dos archivos de forma: uno con secuencias y otro con polígonos.
polygons
esos contenga solo aquellos puntos que son fuentes de ríos (de la pregunta anterior) y excluya cualquier lugar donde se unan dos ríos. Lo sentimos, para todas las preguntas, solo quiero estar seguro.
polygons
que tienen un río que pasa (el río entra y sale del polígono) y mantener a aquellos con comienzos (y los ríos solo dejan este polígono).