Ini adalah pertanyaan lanjutan untuk pertanyaan ini .
Saya memiliki jaringan sungai (multiline) dan beberapa poligon drainase (lihat gambar di bawah). Tujuan saya adalah untuk memilih hanya poligon headwater (hijau).
Dengan solusi John, saya dapat dengan mudah mengekstraksi titik awal sungai (bintang). Namun, saya dapat memiliki situasi (poligon merah) di mana saya memiliki titik awal dalam poligon, tetapi poligon itu bukan poligon hulu, karena diterbangkan melalui sungai. Saya hanya ingin poligon hulu.
Saya mencoba memilihnya dengan menghitung jumlah persimpangan antara poligon dan sungai (dasar pemikiran: poligon hulu hanya memiliki 1 persimpangan dengan sungai)
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
, di mana poylg adalah poylgons, start_points dari johns answer and stream adalah jaringan sungai saya.
Namun, ini berlangsung selamanya dan saya tidak menjalankannya:
"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)"
Jadi pertanyaan saya adalah: Bagaimana saya bisa meminta kuota hulu secara efisien?
Pembaruan: Saya menambahkan beberapa data sampel ke dropbox saya . Data berasal dari Jerman barat daya. Ini dua file bentuk - satu dengan aliran dan satu dengan poligon.
polygons
yang hanya berisi titik-titik yang merupakan sumber sungai (dari pertanyaan sebelumnya) dan untuk mengecualikan di mana dua sungai bertemu. Maaf, untuk semua pertanyaan, hanya ingin memastikan.
polygons
yang memiliki sungai yang lewat (sungai masuk dan meninggalkan poligon) dan menjaga mereka yang mulai (dan sungai hanya menyisakan poligon ini).