2009-12-13 2 views
17

좌표가 들어있는 행의 테이블이 있다고 가정 해 봅시다.하나의 좌표가 다른 좌표의 반지름에 있는지 확인

다른 좌표의 반경에있는 좌표 행만 가져 오는 가장 좋은 방법은 무엇입니까? 내가 예를 들어 Row3의 반경에있는 좌표의 행을 얻는 방법, SQL 문에서

Table like: 
Columns: Latitude, Longitude. 
Row1: 23.44444 24.55555 
Row2: 32.44444 28.22222 
Row3: 35.11111 32.12345 

:

내 질문을 단순화하기 위해

, 나는 다음과 같은 예를주는거야?

답변

29

post은 SQL Server에서이 작업을 수행하는 방법을 보여줍니다. 여기

그리고 MySQL의에서이를 수행하는 방법입니다 :

SELECT ((ACOS(SIN($lat * PI()/180) * SIN(lat * PI()/180) + 
     COS($lat * PI()/180) * COS(lat * PI()/180) * COS(($lon - lon) * 
     PI()/180)) * 180/PI()) * 60 * 1.1515) AS distance 
FROM members 
HAVING distance<='10' ORDER BY distance ASC 
+0

감사합니다. 어떻게 Access 데이터베이스에서 사용할 수 있습니까? –

+0

아는 한, Access 데이터베이스에서이 유형의 함수를 만들 수 없습니다. 두 번째 방법을 시도해야합니다. (일부 수정이 필요할 것입니다. 예를 들어 액세스에 PI() 함수가 없다고 생각합니다. – jbochi

+0

마일 또는 킬로미터 단위입니까? – Pentium10

0

당신의 반경에 무엇을 뜻합니까? 5 마일을 거리로 지나가고 행 x에서 5 마일 이내에있는 모든 행을 찾으십니까? 아웃 그래서 http://www.microsoft.com/sqlserver/2008/en/us/spatial-data.aspx

+0

예, 저는 킬로미터를 사용하고 있지만 당신은 그 생각을 가지고 있습니다. 문제는 액세스 DB에 필요합니다. –

+0

VBA 함수를 사용하여 적응할 수있는 googleable 코드 스 니펫이 많이 있습니다. –

1

는 거리 화학식 보이는 경우

확인이다 :

Y 및 Z는
D = 60* 1.1515 * acos (sin(pi*y/180) * sin(pi*Y/180) + 
         cos(pi*y/180) * cos(pi*Y/180) * cos((z-Z) *pi/180) 
       ) * 180/pi) 

- 만약 whant을 테스트하기 위해 각 행의 포인트, y 및 z이다은 - 포인트이다 예제 행의.

그래서 당신이 그런 일을 할 수 있습니다 :

  1. 이 테이블의 각 행을 선택하고 얻을 그것의 lonlat.
  2. 내가 접근이를 만드는 방법을 알고하지 않는 데이터 형태 포인트 1.

$lon$lat을 변경, this에서 쿼리를 적용합니다. 그러나이 방법은 천천히 곤란하다.

관련 문제