Tôi có một bảng PostGIS với một số đa giác (được lưu trữ bằng cách sử dụng kiểu dữ liệu địa lý). Họ đại diện cho các khu vực trên một trái đất hình cầu.
Đối với mỗi cặp đỉnh được chọn trong số tất cả các đa giác, tôi muốn tính toán xem hai đỉnh đó có "hiển thị" với nhau không. (Có n * ( n -1) / 2 cặp như vậy, trong đó n là tổng số đỉnh duy nhất trên tất cả các đa giác trong bảng.) Bởi "hiển thị cho nhau", ý tôi là đường dẫn vòng tròn lớn giữa hai đỉnh không giao nhau với bất kỳ đa giác nào trong bảng.
Cách nhanh nhất để thực hiện tính toán đó, tốt nhất là trong PostgreSQL / PostGIS là gì?
Tôi đã có một cái gì đó hoạt động, nhưng nó chậm. Tôi chỉ lặp đi lặp lại một cách ngây thơ trên tất cả các cặp và xem liệu LineString giữa chúng có giao nhau với bất kỳ đa giác nào không. (Kiểu dữ liệu địa lý của PostGIS xử lý tất cả các phép toán khó trên hình cầu cho tôi.) Vì vậy, tôi tự hỏi liệu có một cấu trúc dữ liệu hoặc thuật toán thông minh nào có thể tăng tốc mọi thứ không.