Pertanyaan saya cukup terkait dengan Split tumpang tindih yang tidak terjawab antara poligon menjadi set terpisah kecuali saya tidak menggunakan shapely
, saya menggunakan PostGIS 2.4 pada PostgreSQL 10.
Saya punya tabel berisi multi-satuan untuk unit administrasi. Geometri hanya mencakup area lahan. Tujuan saya adalah untuk memperpanjang jarak mereka ke air.
Untuk memperluas poligon saat ini ke dalam air, saya melakukan buffer diikuti dengan mengurangi semua geometri lain dalam tabel. Ini klip buffer mana geometri memiliki tetangga dan mempertahankan buffer di mana layer saat ini tidak memiliki apa-apa. Jadi, sesuatu seperti:
SELECT c1.name
, ST_Difference( ST_Buffer( ST_Union(c1.geom), 250 )
, (SELECT ST_Union(c2.geom)
FROM foo.county AS c2
WHERE c2.name <> c1.name)
)
FROM foo.county AS c1
GROUP BY c1.name;
Namun, ini tentu saja memberi saya buffer yang tumpang tindih di mana dua poligon bertemu satu sama lain di tepi air, serta melintasi selat yang sempit:
(Perhatikan bahwa sliver ungu kecil di sebelah kiri harus sepenuhnya ditetapkan ke poligon merah, karena tidak ada titik dalam geometri yang lebih dekat ke biru daripada merah karena semenanjung mirip-appendix.)
Di sinilah aku terjebak. Saya ingin memotong tumpang tindih (bagian ungu) menjadi dua poligon terpisah di sepanjang garis yang sama dengan poligon yang tidak dikonstruksikan, dan kemudian mengurangi irisan itu dari daerah buffer.
Saya tidak berpikir saya memiliki kasus tiga atau lebih buffer yang tumpang tindih. Saya akan menyeberangi jembatan itu jika dan ketika saya sampai di sana.
Baunya bagi saya seperti sesuatu yang mirip-tetapi-tidak-cukup-identik dengan menggunakan ST_VoronoiPolygons
tetapi di sekitar poligon, bukan titik.
Apakah ini ada - idealnya - sebagai fungsi PostGIS, sebagai fungsi geoprosesing QGIS atau mungkin di beberapa pustaka python?
ExteriorRing
danIntersects
tetapi belum punya waktu untuk mengerjakannya selama liburan.Jawaban:
Jika solusi untuk masalah ini relevan, dan saya memahaminya dengan benar, solusinya adalah sebagai berikut: (Data asli adalah abstrak, seperti yang saya pahami adalah berbatasan yang bersinggungan pada buffer dengan jumlah meter tertentu, dalam kasus saya 2 tabel : exper_list3 dan exper_list4 lihat gambar 1):
1) Di pgAdmin, jalankan kueri:
create table exper_list5 as SELECT st_intersection (exper_list4.geom, exper_list3.geom) AS geom FROM exper_list4, exper_list3 WHERE st_intersects (exper_list4.geom, exper_list3.geom) = true;
hasil: tabel exper_list5 lihat gambar 2;2) Di pgAdmin, jalankan kueri:
create table exper_list6 as SELECT (ST_Dumppoints (geom)). Geom FROM exper_list5;
Hasilnya adalah tabel dengan titik-titik, tambahan pergi ke properti tabel, buat bidang gid dan tetapkan batasannya;3) Di QGIS, jalankan alat Polygon Voronoi di atas meja (layer vektor) exper_list6 Hasilnya ditunjukkan pada Gambar 3.
4) Di pgAdmin, jalankan kueri:
create table exper_list8 as SELECT (ST_Dumppoints (geom)).geom FROM exper_list7;
Hasilnya ditunjukkan pada Gambar 4.5) Pilih dari exper_list8 titik-titik yang memasukkan poligon exper_list5 Di pgAdmin, jalankan kueri:
create table exper_list9 as SELECT st_intersection (exper_list8.geom, exper_list5.geom) AS geom FROM exper_list8, exper_list5 WHERE st_intersects (exper_list8.geom, exper_list5.geom) = true;
dan salin titik-titik ini ke angka hasil tabel exper_list6 angka 5;6) Di QGIS Pada tabel exper_list6 jalankan alat "Delaunay triangulation" dan dapatkan hasilnya exper_list10 lihat gambar 6
7) Dalam QGIS dalam mode pengeditan "Pensil" pada tabel exper_list10 pilih segitiga yang mengenai bidang yang diminati, gunakan alat "Vektor" - "Geoprosesing" - "Penyatuan menurut fitur" (centang "hanya objek yang dipilih" "Klasifikasi" - dengan semua tanda) hasil exper_list11 angka 7;
8) Dari exper_list6 memotong exper_list11 angka hasil 8 exper_list12;
9) Dari exper_list4 memotong exper_list11 angka hasil 9 exper_list13;
10) Tindakan serupa harus dilakukan dengan poligon kiri (dalam kasus saya, tabel exper_list4)
11) Hasil keseluruhan adalah dua tabel exper_list13 dan exper_list14 lihat gambar 10.
semoga sukses, milikmu dengan setia
sumber