2012-09-20 3 views
0

MySQL에서 Haversine 수식을 사용하여 특정 위치 주변에 그려진 원 안에 포함 된 모든 점을 찾는 방법에 대해 많이 알아 보았습니다.주어진 점 주위의 원과 교차하는 모든 다각형 가져 오기

내 함수는 적어도 부분적으로 원과 교차하는 모든 다각형을 반환해야합니다.

  1. 해당 서클을 어떻게 만듭니 까?

  2. 다각형이 원과 교차하는지 어떻게 확인합니까?

답변

1

이것은 오래되었지만 여전히이 문제를 검색 할 때 Google 조회수 중 가장 많은 조회수 중 하나입니다. 기존의 응답은 MySQL에서 사용하기 위해 합리적으로 구현할 수 없으므로 유용하지 않습니다. 적어도 원격으로 허용되는 성능을 가진 방식은 아닙니다.

용액 요점/반경에는 ST_Buffer를 사용하는 것이다 : 행을 반환하는 폴리곤 데이터를 포함하는 열 "다각형"를 포함하는 테이블,

ST_Buffer(point, radius) 

예 쿼리 그 중심을 가진 원에 반경 9의 점대 점은 다음과 같습니다 :

SELECT * FROM mytable WHERE ST_Intersects(polygon, ST_Buffer(mypoint, 9)) 
2

2D 또는 3D로 작업했는지 여부는 언급하지 않았습니다. sphere이 아니라 circle이라고 말하면 2D라고 가정합니다.

당신이 알아야 할 원과 교차 모든 다각형을 찾으려면 :

A) 다각형의 각 다각형 (더 구체적으로, 중앙의 기원).

b) 원의 원점.

c) 원의 직경 (또는 반지름).

이 값을 사용하여 원의 중심과 각 다각형의 중심 사이의 거리를 결정할 수 있습니다. 원의 중심과 다각형의 중심 사이의 거리 크기가 원의 반지름보다 작 으면 다각형이 교차합니다.

먼저 원과 관련하여 각 다각형의 크기를 계산 한 다음 원의 반지름에 대해 계산해야하므로 SQL 쿼리에이 값을 연결하는 방법에 대해 지나치게 확신하지는 않습니다. 내가 작성 및 SQL 한 이래로 동안이었다 그러나 나는 다음의 라인을 따라 어딘가에있을 것입니다 상상 : 다각형의 중심과 원의 중심 사이의 거리이다

  • 가 모든 항목을 수집 반경보다 큽니다.

더 그림이 편리한 이미지보기 :이 고려 복잡한 모양을 고려하지 않는

circle intersections

이는 교차로를 결정하는 매우 거칠고 기본적인 방법을 제공한다. 본질적으로 이것은 구의 선을 따라 더 많은 것입니다. 경계 선은 경계 구가 폴리곤을 둘러 쌀 것입니다. 일부 상황에서는 오탐 (false positive)을 제공하지만, 결과를 필요에 따라 필터링하기 위해보다 세분화 된 충돌 감지에이 결과를 쉽게 전달할 수 있습니다.

희망 하시겠습니까?

관련 문제