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