구의 계산 가시성 그래프


9

지리 데이터 유형을 사용하여 저장된 일부 다각형이있는 PostGIS 테이블이 있습니다. 그들은 구형 지구의 지역을 나타냅니다.

모든 다각형 중에서 선택한 각 정점 쌍에 대해이 두 정점이 서로 "표시"되는지 계산하고 싶습니다. ( n * ( n -1) / 2와 같은 쌍이 있습니다. 여기서 n 은 표의 모든 다각형에 대한 고유 한 정점의 총 수입니다. "서로 볼 수 있음"은 두 정점이 테이블의 다각형과 교차하지 않습니다.

PostgreSQL / PostGIS에서 해당 계산을 수행하는 가장 빠른 방법은 무엇입니까?

작동하는 것이 있지만 느립니다. 방금 모든 쌍을 순진하게 반복하고 그 사이의 LineString이 다각형과 교차하는지 확인합니다. (PostGIS의 지리 데이터 형식은 구의 모든 어려운 수학을 처리합니다.) 따라서 속도를 높일 수있는 영리한 데이터 구조 나 알고리즘이 있는지 궁금합니다.


6
관련 개념 : 가시성 그래프 및이 작업을 3D 대신 2D로 수행하려면 Gnomonic 투영 .
whuber

"모든 쌍을 반복"한다는 것은 하나의 선이 모든 다각형과 교차하는지 테스트하는 절차에 FOR 루프가 있다는 것을 의미합니까? 그렇다면 (아마도) 더 빠를 것입니다. 가능한 모든 조합으로 선 스트링 테이블을 만들고 선이 다각형 테이블과 교차하는지 테스트하는 쿼리 하나를 수행하십시오
simplexio

문제의 예를 말씀해 주시겠습니까?
addcolor

대략적인 좌표 경계 상자를 사용하여 빠르게 수행되는 구형 수평선 (가장자리 근처의 키가 큰 객체의 경우 비트)을 제외한 모든 것을 제외 할 수 있습니다. 그렇지 않으면 기본적으로 NP 하드라고 생각합니다.
AnserGIS

답변:


1

보이지 않는 것을 추론하십시오. 해변의 정점에 서서 인접한 다각형의 두 개의 원격 정점을보고 있다고 가정합니다. 그런 다음이 정점 뒤에있는 전체 섹터의 정점이이 정점에서 보이지 않는다고 가정 할 수 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.