2011-03-25 8 views
0

지정된 점의 주어진 반경 주위에 점 (하버 사인 공식 Q)를 찾기난 작은 문제가

난 그냥 포인트를 지정하는 프로젝트에서 내 프로젝트 의 하버 사인 공식의 사용을 테스트했다 그리고 제가 제공 한 포인트의 주어진 반경 내에서 모든 포인트를 찾고 싶습니다. 많은 인터넷 검색 결과를 통해이 haversine 수식 쿼리를 시도했습니다.

SELECT service_id, (3959 * acos(cos(radians(51.500152)) * cos(radians(latitude)) * cos(radians(longitude) - radians(-0.126236)) + sin(radians(51.500152)) * sin(radians(latitude)))) AS distance 
FROM sys_t_taxi_real_time_servce HAVING distance < 25 ORDER BY distance LIMIT 0 , 20; 

나는 (SERVICE_ID, driver_id, journey_id, 경도, 위도, driver_status) 결과 세트에 대한 그래서

4, 1, , 51.5034, -0.174751, '' 
5, 1, 2, 51.477106, -0.137329, '' 

의 순서와 같이 데이터를 지정한 후, 런던의 위도와 경도를 얻고 그러나 나는 아무것도 얻을, 행이

그러나이

, 나는 다음과 같은 결과가 설정 얻을 HAVING 절을 제거 (SERVICE_ID, 거리)

,878을 반환3210

나는이 문제에 대해 반드시 답답하고 앞으로 나아갈 수 없으며 모든 도움을 주시면 대단히 감사하겠습니다.

쿼리 등이 http://code.google.com/apis/maps/articles/phpsqlsearch.html

은 또한 사람이, 내가 MySQL의 공간적 관련 물건을보고 같은 문제를 해결하기 위해 다른 방법을 알고 않습니다 다음 링크에서 얻을 수 있지만, 같은이 포착되었다

를 사용하기 쉽게했다

안부, MilindaD

답변

0

난 당신이 설명하는 공식을 사용하지 않은하지만 어쩌면 다른 접근 방법은 문제를 해결 : 사용자가 SQL 쿼리를 가져, 나는 당신이 적어도 MySQL을 사용한다고 가정합니다. 데이터베이스의 공간 기능을 사용하려고 했습니까? CONTAINS 및 WITHIN이라는 함수가 있습니다. 따라서 좌표계 주위에 처음부터 버퍼 폴리곤을 만들고 where 절에 CONTAINS 함수를 포함시킬 수 있습니다.

MySQL, PostgreSQL, SQL Server 또는 Oracle에만 국한되지 않으면 훨씬 많은 것을 제공합니다. PostgreSQL은 오픈 소스이며, 다른 것들은 교육적 목적으로 무료로 사용할 수 있습니다 (제가 기억한다면).

감사합니다. Martin

관련 문제