Dies ist eine Folgefrage zu dieser Frage .
Ich habe ein Flussnetz (mehrzeilig) und einige Entwässerungspolygone (siehe Bild unten). Mein Ziel ist es, nur die Quellwasserpolygone (grün) auszuwählen.
Mit Johns Lösung kann ich leicht die Flussstartpunkte (Sterne) extrahieren. Es kann jedoch Situationen geben (rotes Polygon), in denen ich Startpunkte in einem Polygon habe, das Polygon jedoch kein Quellwasserpolygon ist, da es vom Fluss geflogen wird. Ich möchte nur die Quellwasserpolygone.
Ich habe versucht, sie auszuwählen, indem ich die Anzahl der Schnittpunkte zwischen Polygonen und Flüssen gezählt habe (Begründung: Ein Quellwasserpolygon sollte nur einen Schnittpunkt mit dem Fluss haben).
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
, wo poylg die poylgons sind, start_points von johns antworten und stream ist mein flussnetz .
Dies dauert jedoch ewig und ich habe es nicht ausgeführt:
"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)"
Meine Frage lautet also: Wie kann ich Quellwasserpolygone effizient abfragen?
Update: Ich habe meiner Dropbox einige Beispieldaten hinzugefügt . Die Daten stammen aus Südwestdeutschland. Es sind zwei Formdateien - eine mit Streams und eine mit Polygonen.
polygons
nur die Punkte enthält, die Flussquellen sind (aus der vorherigen Frage), und alle Punkte ausschließt, an denen sich zwei Flüsse treffen. Entschuldigung, für alle Fragen möchte ich nur sicher sein.
polygons
ein Fluss vorbeiführt (der Fluss tritt in das Polygon ein und verlässt es), und diejenigen mit Starts behalten (und Flüsse verlassen nur dieses Polygon).