모바일 앱에서 제공하는 위도/경도에 가장 가까운 위치를 잡아 당기기 위해 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
내가 잘못 뭐하는 거지입니까?
해야 변환 계수가 약간 잘못 : 1852 분 (해리)/1609.344 m (표준 마일) ~ 1,1508. 그냥 작은 지점 .... –
그 값을보고있는 곳을 이해하지 못합니다 ... – ppetree
SELECT 문장의 끝에 "pi()) * 60 * 1.1515"가 있습니다. 결과를 라디안으로 얻고 각도로 변환 한 다음 60을 곱하여 arcminutes로 변환합니다. 하나의 arcminute는 항해 마일이며 해상 마일은 1,1508 표준 마일입니다. –