2012-10-26 3 views
0

모바일 앱에서 제공하는 위도/경도에 가장 가까운 위치를 잡아 당기기 위해 haversine 쿼리를 사용하고 있습니다.haversine 및 float ...와 거리 계산

쿼리는 다음과 같다 : 이것은 잘 작동하고

SELECT *,(((acos(sin(($latitude *pi()/180)) * sin((`lat`*pi()/180))+cos(($latitude *pi()/180)) * cos((`lat`*pi()/180))* cos((($longitude - `lon`)*pi()/180))))*180/pi())*60*1.1515) AS dist_x 
FROM `work_places` 
HAVING dist_x <= '1' 
ORDER BY dist_x ASC 
LIMIT 10 

내가 정확히 내가 점점해야 할 위치를 얻고있다.

문제는 dist_x를 사용자가 읽을 수있는 것으로 변환하는 것입니다. 지금은 dist_x가 다음과 같이 표시됩니다. 0.00996273036944 (floatval 및 문자열로 동일하게 표시되므로 변환이 적절 함)

쿼리가 1 마일을 찾고 있으므로이 값을 피트로 변환하려고합니다. 5280.

 $distance = (float)($dist_x/5280); 

에 의해 dist_x은 내가 돌아 가야하는 것은 $ 거리 = 1.88688075179E-6

내가 잘못 뭐하는 거지입니까?

+0

해야 변환 계수가 약간 잘못 : 1852 분 (해리)/1609.344 m (표준 마일) ~ 1,1508. 그냥 작은 지점 .... –

+0

그 값을보고있는 곳을 이해하지 못합니다 ... – ppetree

+0

SELECT 문장의 끝에 "pi()) * 60 * 1.1515"가 있습니다. 결과를 라디안으로 얻고 각도로 변환 한 다음 60을 곱하여 arcminutes로 변환합니다. 하나의 arcminute는 항해 마일이며 해상 ​​마일은 1,1508 표준 마일입니다. –

답변

2

내가 누락되었을 수도 있지만 마일을 피트로 변환하려면 나누지 않고 5280을 곱하고 싶지 않으십니까?

+0

그게 당신이 많은 시간을 tooo 일할 때 일어나는 일이야 ... 당신이 zagging하고 어리석은 작은 실수를 할 때 zig하면 왜 당신은 당신이 받고있어 오류가 발생하고 다른 바보 같은 질문을 게시 알아낼 수 없다 응답 할 사람들! LOL 고마워! – ppetree

2

마일이 5,280피트, 그래서이

$distance = (float)($dist_x * 5280); 
+0

나는 로컬 호스트에게 해결책을 주었다. 왜냐하면 그는 먼저 대답했다. 그러나 고마워! – ppetree