วิธีการแยกรูปหลายเหลี่ยมสองจุดแยกกันโดยค่าเฉลี่ยการแบ่งพื้นที่ที่ใช้ร่วมกัน (QGIS / python shapely)


9

ฉันมีรูปหลายเหลี่ยมสองอัน

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

และต้องการแยกพวกเขาอย่างเท่าเทียมกัน ผลลัพธ์ควรแยกตามเส้นที่มีเครื่องหมายสีแดง

ฉันใช้ qgis / python shapely และต้องการใช้ python

สายการบิน (1 5,5 1)


4
ปัญหาของคุณเป็นเรื่องทั่วไปแค่ไหน? เห็นได้ชัดว่าคุณตั้งใจจะแก้ปัญหาที่จะนำไปใช้มากกว่าสองรูปหลายเหลี่ยม คุณคิดว่ารูปหลายเหลี่ยมแบบใด คุณหมายถึงอะไร "เท่าเทียมกัน" อย่างแม่นยำ? การแยกต้องเป็นไปตามส่วนของเส้นหรือสามารถเป็นไปตามส่วนโค้งที่ไม่ใช่เชิงเส้นได้หรือไม่? จะเกิดอะไรขึ้นในกรณีที่จุดตัดหลายเหลี่ยมประกอบด้วยหลายองค์ประกอบหรือไม่ได้เชื่อมต่อกัน เอาต์พุตควรใช้รูปแบบใด - ควรแยกจุดตัดหรือรูปหลายเหลี่ยมแต่ละอันหรืออาจเป็นเส้นแยก
whuber

1
ฉันกำลังทำงานกับรูปหลายเหลี่ยมที่ผิดปกติและต้องการมีรูปหลายเหลี่ยมสองรูปที่ไม่ตัดกัน ในกรณีนี้รูปหลายเหลี่ยมดั้งเดิมที่กล่าวถึงและผลลัพธ์ที่ต้องการคือ 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
ปัญหาเป็นเรื่องยากเมื่อหนึ่งหรือทั้งสองรูปหลายเหลี่ยมอาจมีวงแหวน (นั่นคือไม่ได้เชื่อมต่ออย่างง่าย)
whuber

คำตอบ:


5

ฉันใช้วิธีการกับ voronoi รูปหลายเหลี่ยมครั้งเดียว ฉันทำด้วยมือฉันมีความคิดที่คลุมเครือว่าคุณจะทำมันด้วยหุ่นดีได้อย่างไร แต่นี่คือวิธีที่มันจะเกิดขึ้น

ขั้นแรกให้คุณแยกจุดยอดของรูปหลายเหลี่ยมที่ซ้อนกันแต่ละอันและสร้างรูปหลายเหลี่ยม Voronoi (เวกเตอร์> เครื่องมือเรขาคณิต> แยกโหนด & เวกเตอร์> เครื่องมือรูปทรงเรขาคณิต> vononoi) ด้วยรูปร่างที่เกิดขึ้นคุณสามารถวาดเส้นที่แบ่งพื้นที่ทับซ้อนของคุณเป็นสองเท่า (สายสีเขียวสดใส) Voronoi

คุณคลิปเลเยอร์ voronoi ด้วยรูปหลายเหลี่ยมที่ทับซ้อนกันและเอาการทับซ้อนออกจากรูปร่างดั้งเดิมและวางรูปหลายเหลี่ยม voronoi ที่ตัดกลับด้วยรูปร่างเดิมของคุณ เลือกผสานรวมทั้ง!

ทีนี้มันดูหยาบไปหน่อยเพราะของฉันมีรูปร่างที่เรียบง่าย แต่คุณทำให้มันหนาแน่นขึ้น (Vector> เครื่องมือรูปทรงเรขาคณิต> รูปทรงความหนาแน่น) และเพิ่มโหนด 20 จุดระหว่างจุดสุดยอดแต่ละจุดที่มีอยู่คุณสามารถมีสิ่งนี้:

densigy_voronoi

ไหนดีกว่ากัน ง่ายถ้าคุณมีรูปร่างเพียงเล็กน้อยเท่านั้นที่จะแก้ไข


นี่เป็นความคิดที่ดี แต่เส้นสีเขียวสดใสนั้นมาจากไหนและคุณรู้ได้อย่างไรว่ามันแบ่งภูมิภาคออกเป็นสองส่วนเท่า ๆ กัน?
whuber

กระบวนการนี้แตกต่างจาก `SELECT astext (ทางแยก (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

มันมาจากความเหมาะสมของรูปหลายเหลี่ยม voronoi มันแบ่งพื้นที่อย่างเท่าเทียมกันระหว่างจุด นั่นเป็นสาเหตุที่คุณต้องทำให้รูปหลายเหลี่ยมของคุณหนาแน่นเพราะมิฉะนั้นบรรทัด "กลาง" จะไม่เป็นไปตามขอบเขต สำหรับเส้นที่สว่างฉันวาดมันด้วยตัวเองเพื่อแสดงว่าตรงกลางอยู่ตรงไหน ... สำหรับคำสั่ง PostGIS (ฉันเป็นมือใหม่ใน PostGIS) ฉันคิดว่ามันจะเลือกเฉพาะจุดตัดกันไม่แบ่งมัน
fgcartographix

1
ต้องบอกว่าฉันไม่ได้บอกว่ามันจะเป็นส่วนเท่ากัน วิธีการนั้นใช้ในการค้นหาเส้นกึ่งกลางแม่น้ำ หากคุณมีอ่าวในแม่น้ำเส้นกลางจะถูกดึงเข้าหามัน แต่มันจะไม่ใส่มันดังนั้นทำให้มันเป็น "ศูนย์กลาง" อย่างไรก็ตาม
fgcartographix
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.