2011-03-16 5 views
8

Mysql과 PostgresSQL에서 공간 함수를 사용하여 두 위치 간의 거리를 계산하려고합니다. Google에서 위도와 경도를 찍었습니다. 세부 사항은 아래에 있습니다MySql에서 공간 함수를 사용하여 두 좌표 간의 거리를 찾는 정확한 방법

위치 1 - 위도 : 42.260223; Lon : -71.800010

위치 2- 위도 : 42.245647; 경도 : -71.802521

SQL 쿼리 사용 :

SELECT 거리 (GEOMFROMTEXT ('포인트 (42.260223 -71.800010)'), GEOMFROMTEXT ('포인트 (42.245647 -71.802521)'))

양쪽 데이터베이스를 동일한 결과 0.014790703059697을 제공합니다. 그러나 다른 시스템에서 거리를 계산할 때 결과가 다릅니다. (가) 아래

http://www.zip-codes.com/distance_calculator.asp?zip1=01601&zip2=01610&Submit=Search

링크를 참조하십시오 = 1.44 마일

http://www.distancecheck.com/zipcode-distance.php?start=01601&end=01610

= 1.53 마일

을 그래서 난 내 계산 방법/쿼리를 잘인지 여부를 알고 싶어요. 그리고 그것이 틀린 경우 거리에 대한 db를 쿼리하는 올바른 방법은 무엇입니까?

+0

가능한 중복 (http://stackoverflow.com/questions/5217819/effectively-selecting-the-closest-distance- 데이터베이스에서 레코드/5217888 # 5217888) – BigFatBaby

답변

5

위의 경우 MySql은 단순히 pythagorean 정리 : c2 = a^2 + b^2를 적용합니다. 이 특정 경우에서, SQRT ((42.245647 - 42.260223)^2 + (-71.802521^2 - -71.800010)^2) = 0.014790703이다.

실제로 구의 좌표로 거리에 MySql 거리 기능을 사용하는 데는 두 가지 문제가 있습니다. (1) MySql은 비행기가 아닌 구체에서 거리를 caclulating입니다. (2) 그 결과는 마일이 아닌 각도의 형태로 되돌아옵니다. 마일, km, 피트 등의 실제 구면 거리를 얻으려면 위도와 경도에 대한 지구의 중심을 지나는 선으로부터 반경을 측정하여 위도와 경도를 측정하려는 단위로 변환해야합니다. 당신은 측정하고 있습니다.

진정한 척도를 얻으려면 많은 개인과 회사가이 분야에서 경력을 쌓았습니다.

8

간단한 답변은 Haversine 공식을 사용하는 것입니다. 이것은 지구가 구가 아니라고 가정합니다. 그러나 나쁜 근사는 아닙니다. 이, 다른 세부 정보를 많이이 프레젠테이션에서 설명과 함께 : [이]의

http://www.scribd.com/doc/2569355/Geo-Distance-Search-with-MySQL

+1

이 프레젠테이션은 내가 간과 한 가장 간결하고 직선적 인 솔루션 일 것입니다. 그것은 거리를 마일로 되돌려 주도록 설정되어 있지만 킬로미터에 해당하는 지구의 반경 값을 교환하기 만하면됩니다. –

+0

예, 제가 발견 한 최고의 수확 인입니다. 수식으로 반환 된 거리가 킬로미터 또는 마일인지 여부를 확인하고 싶습니까? – Prasad

+0

반지름으로 3956을 사용하는 경우 숫자가 마일로 나옵니다. –

관련 문제