Cara membagi dua poligon yang bersilangan dengan linestring rata-rata area yang dibagikan (QGIS / python rupawan)

9

Saya punya dua poligon,

POLYGON ((- 5 -5, -5 5,5 5,5 -5, -5 -5)) POLYGON ((1 1, 1 7, 7 7, 7 1, 1 1)))

dan ingin membaginya secara merata. Hasilnya harus berupa split sepanjang garis bertanda merah.

Saya menggunakan qgis / python rupawan dan ingin melakukannya menggunakan python.

LINESTRING (1 5,5 1)

OLS
sumber
4
Seberapa umum masalah Anda? Jelas Anda bermaksud solusi untuk diterapkan ke lebih dari hanya dua poligon ini. Apa jenis poligon yang Anda renungkan? Tepatnya apa yang Anda maksud dengan "merata"? Haruskah perpecahan berada di sepanjang segmen garis atau dapatkah itu sepanjang beberapa busur nonlinier? Apa yang harus terjadi jika persimpangan poligon terdiri dari beberapa komponen atau tidak hanya terhubung? Bagaimana bentuk yang harus diambil oleh output - haruskah memotong perpotongan, atau masing-masing poligon, atau mungkin hanya garis pemisah?
whuber
1
Saya sedang bekerja dengan poligon tidak beraturan, dan ingin memiliki dua poligon tidak berpotongan. dalam hal ini, poligon asli sebagai menyebutkan dan hasil yang diinginkan adalah POLYGON ((- 5 -5, -5 5,1 5,5 1,5 -5, -5 -5)) POLYGON ((1 5, 1 7, 7 7, 7 1,5 1,1 5))
OLS
1
Masalahnya sulit ketika salah satu atau kedua poligon memiliki cincin (yaitu, tidak hanya terhubung).
whuber

Jawaban:

5

Saya menggunakan pendekatan dengan poligon voronoi sekali. Saya melakukannya dengan tangan dan saya hanya punya ide samar tentang bagaimana Anda bisa melakukannya dengan rupawan, tapi begini caranya.

Pertama, Anda mengekstrak simpul dari setiap poligon yang tumpang tindih dan membuat poligon Voronoi dari mereka (vektor> alat geometri> ekstrak node & vektor> alat geometri> vononoi). Dengan bentuk yang dihasilkan, Anda dapat menggambar garis yang membagi area yang tumpang tindih menjadi dua. (Garis hijau cerah) voronoi

Anda memotong lapisan voronoi dengan poligon yang tumpang tindih dan menghapus tumpang tindih dari bentuk aslinya dan menempelkan poligon voronoi yang terpotong kembali dengan bentuk aslinya. Pilih, gabung, voila!

Sekarang, ini terlihat sedikit kasar, karena bentuk saya sangat sederhana. Tetapi, jika Anda memperbesarnya (Vector> Geometry tools> Density geometries) dan menambahkan seperti 20 node antara setiap vertex yang ada, Anda dapat memiliki ini:

densigy_voronoi

Yang jauh lebih baik. Mudah jika Anda hanya memiliki sedikit bentuk untuk dimodifikasi.

fgcartographix
sumber
Ini ide yang bagus. Tapi dari mana asalnya garis hijau terang itu dan bagaimana Anda tahu itu membagi wilayah menjadi dua bagian yang sama?
whuber
betapa berbedanya proses ini dari `SELECT astext (persimpangan (geomFromText ('POLYGON ((- 5 -5, -5 5,5 5,5 -5, -5 -5))', 4326), geomFromText ('POLYGON ( (1 1, 1 7, 7 7, 7 1, 1 1)) ', 4326))); astext -------------------------------- POLYGON ((1 5,5 5,5 1,1 1,1 5 ) '?
OLS
Itu berasal dari kesopanan voronoi poligon. Ini membagi ruang secara merata antara titik-titik. Itu sebabnya Anda harus memadatkan poligon Anda karena jika tidak, garis "tengah" tidak mengikuti batas. Adapun garis terang, saya menggambar secara manual untuk menggambarkan di mana tengahnya ... Adapun perintah PostGIS (saya seorang pemula di PostGIS), saya pikir itu hanya akan memilih area berpotongan, tidak membaginya.
fgcartographix
1
Setelah mengatakan itu, saya tidak mengatakan bahwa itu akan menjadi bagian yang sama. Metode itu digunakan untuk mencari garis tengah sungai. Jika Anda memiliki teluk di sungai, garis tengah akan ditarik ke arahnya. tetapi tidak akan memasukinya sehingga membuatnya "terpusat".
fgcartographix