我使用haversine查詢來拉取距離移動應用提供的經緯度最近的位置。with 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英里,我試圖將其轉換爲英尺,所以我分裂dist_x由5280
$distance = (float)($dist_x/5280);
我得到的回覆是$距離= 1.88688075179E-6
我在做什麼錯?
轉換因子是略微不正確的:1852米(海里)/1609.344米(標準英里)〜1,1508。只是一個小點.... –
我不明白你在哪裏看到這些值... – ppetree
在SELECT語句的末尾有「pi())* 60 * 1.1515」。你得到的結果是弧度,將其轉換成度,然後乘以60得到弧分。一弧分是海里,而海里是1,1508標準英里。 –