지리 데이터 유형을 사용하여 저장된 일부 다각형이있는 PostGIS 테이블이 있습니다. 그들은 구형 지구의 지역을 나타냅니다.
모든 다각형 중에서 선택한 각 정점 쌍에 대해이 두 정점이 서로 "표시"되는지 계산하고 싶습니다. ( n * ( n -1) / 2와 같은 쌍이 있습니다. 여기서 n 은 표의 모든 다각형에 대한 고유 한 정점의 총 수입니다. "서로 볼 수 있음"은 두 정점이 테이블의 다각형과 교차하지 않습니다.
PostgreSQL / PostGIS에서 해당 계산을 수행하는 가장 빠른 방법은 무엇입니까?
작동하는 것이 있지만 느립니다. 방금 모든 쌍을 순진하게 반복하고 그 사이의 LineString이 다각형과 교차하는지 확인합니다. (PostGIS의 지리 데이터 형식은 구의 모든 어려운 수학을 처리합니다.) 따라서 속도를 높일 수있는 영리한 데이터 구조 나 알고리즘이 있는지 궁금합니다.
6
관련 개념 : 가시성 그래프 및이 작업을 3D 대신 2D로 수행하려면 Gnomonic 투영 .
—
whuber
"모든 쌍을 반복"한다는 것은 하나의 선이 모든 다각형과 교차하는지 테스트하는 절차에 FOR 루프가 있다는 것을 의미합니까? 그렇다면 (아마도) 더 빠를 것입니다. 가능한 모든 조합으로 선 스트링 테이블을 만들고 선이 다각형 테이블과 교차하는지 테스트하는 쿼리 하나를 수행하십시오
—
simplexio
문제의 예를 말씀해 주시겠습니까?
—
addcolor
대략적인 좌표 경계 상자를 사용하여 빠르게 수행되는 구형 수평선 (가장자리 근처의 키가 큰 객체의 경우 비트)을 제외한 모든 것을 제외 할 수 있습니다. 그렇지 않으면 기본적으로 NP 하드라고 생각합니다.
—
AnserGIS