Đây là một câu hỏi tiếp theo cho câu hỏi này .
Tôi có một mạng lưới sông (multiline) và một số đa giác thoát nước (xem hình dưới đây). Mục tiêu của tôi là chỉ chọn các đa giác đầu nguồn (màu xanh lá cây).
Với giải pháp của John, tôi có thể dễ dàng trích xuất các điểm bắt đầu của dòng sông (sao). Tuy nhiên, tôi có thể có các tình huống (đa giác màu đỏ) trong đó tôi có điểm bắt đầu trong một đa giác, nhưng đa giác không phải là đa giác đầu nguồn, bởi vì nó được bay qua sông. Tôi chỉ muốn các đa giác đầu nguồn.
Tôi đã cố gắng chọn chúng bằng cách đếm số lượng giao điểm giữa đa giác và sông (lý do: một đa giác đầu nguồn chỉ có 1 giao điểm với sông)
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
, trong đó poylg là poylgons, start_point từ câu trả lời của johns và luồng là mạng lưới sông của tôi.
Tuy nhiên, điều này mất mãi mãi và tôi đã không chạy nó:
"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)"
Vì vậy, câu hỏi của tôi là: Làm thế nào tôi có thể truy vấn đa giác nước đầu một cách hiệu quả?
Cập nhật: Tôi đã thêm một số dữ liệu mẫu vào dropbox của mình . Dữ liệu là từ phía tây nam nước Đức. Đó là hai tệp hình dạng - một có luồng và một có đa giác.
polygons
chỉ chứa những điểm đó là nguồn sông (từ câu hỏi trước) và loại trừ bất kỳ nơi nào hai con sông gặp nhau. Xin lỗi, cho tất cả các câu hỏi, chỉ muốn chắc chắn.
polygons
có một dòng sông đi qua (dòng sông chảy vào và rời khỏi đa giác) và giữ những người bắt đầu (và những dòng sông chỉ để lại đa giác này).