คำนวณกราฟการมองเห็นบนทรงกลม


9

ฉันมีตาราง PostGIS พร้อมรูปหลายเหลี่ยม (จัดเก็บโดยใช้ชนิดข้อมูลภูมิศาสตร์) พวกเขาเป็นตัวแทนของภูมิภาคบนโลกทรงกลม

สำหรับจุดยอดแต่ละคู่ที่เลือกจากรูปหลายเหลี่ยมทั้งหมดฉันต้องการคำนวณว่าจุดยอดสองจุดนั้นเป็น "มองเห็น" ซึ่งกันและกันหรือไม่ (มีn * ( n -1) / 2 คู่ดังกล่าวโดยที่nคือจำนวนจุดยอดรวมที่ไม่ซ้ำกันของรูปหลายเหลี่ยมทั้งหมดในตาราง) โดย "มองเห็นซึ่งกันและกัน" ฉันหมายความว่าเส้นทางวงกลมใหญ่ระหว่าง สองจุดยอดไม่ตัดรูปหลายเหลี่ยมใด ๆ ในตาราง

วิธีที่เร็วที่สุดในการคำนวณคืออะไรโดยเฉพาะอย่างยิ่งใน PostgreSQL / PostGIS

ฉันมีบางอย่างที่ใช้งานได้ แต่มันช้า ฉันเพียงแค่ทำซ้ำทุก ๆ คู่และดูว่า LineString ระหว่างพวกเขาตัดกันรูปหลายเหลี่ยมใด ๆ (ประเภทข้อมูลภูมิศาสตร์ของ PostGIS จัดการกับคณิตศาสตร์อย่างหนักทั้งหมดบนทรงกลมสำหรับฉัน) ดังนั้นฉันจึงสงสัยว่ามีโครงสร้างข้อมูลหรืออัลกอริทึมที่ชาญฉลาดที่อาจทำให้สิ่งต่าง ๆ เร็วขึ้น


6
แนวความคิดที่เกี่ยวข้อง: กราฟการมองเห็นและถ้าคุณต้องการที่จะทำงานนี้ในแบบ 2D แทน 3D ที่ฉาย gnomonic
whuber

"วนซ้ำทุกคู่" หมายความว่าคุณมี FOR loop ในโพรซีเดอร์ซึ่งทดสอบว่าหนึ่งบรรทัดตัดกันรูปหลายเหลี่ยมทั้งหมดหรือไม่ ถ้าเป็นได้เร็วขึ้นเพียงสร้าง linestring table ด้วยชุดค่าผสมที่เป็นไปได้ทั้งหมดและทำหนึ่งแบบสอบถามที่คุณทดสอบว่าเส้นตัดกันตารางรูปหลายเหลี่ยมหรือไม่
simplexio

คุณสามารถแบ่งปันภาพประกอบของปัญหา
addcolor

คุณสามารถยกเว้นทุกอย่างนอกเหนือจากขอบฟ้าทรงกลม (บวกเล็กน้อยสำหรับวัตถุสูงใกล้ขอบ) ซึ่งทำได้อย่างรวดเร็วด้วยกล่องขอบเขตพิกัดโดยประมาณ มิฉะนั้นฉันคิดว่ามันเป็นเรื่องยาก NP พื้นฐาน
AnserGIS

คำตอบ:


1

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

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