У мене є таблиця PostGIS з деякими багатокутниками (зберігається з використанням типу даних географії). Вони представляють регіони на сферичній землі.
Для кожної пари вершин, вибраних серед усіх многокутників, я хочу обчислити, чи є ці дві вершини "видимими" один для одного. (Є n * ( n -1) / 2 таких пар, де n - загальна кількість унікальних вершин по всіх багатокутниках у таблиці.) "Видно один одному", я маю на увазі, що шлях великого кола між дві вершини не перетинає жоден з многокутників таблиці.
Який найшвидший спосіб зробити це обчислення, бажано в PostgreSQL / PostGIS?
У мене щось працює, але це повільно. Я просто наївно повторюю всі пари і бачу, чи LineString між ними перетинає якісь багатокутники. (Тип даних географії PostGIS обробляє всю важку математику для сфери для мене.) Тому мені цікаво, чи є розумна структура даних або алгоритм, який може прискорити роботу.