2012-10-26 34 views
0

我使用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

我在做什麼錯?

+0

轉換因子是略微不正確的:1852米(海里)/1609.344米(標準英里)〜1,1508。只是一個小點.... –

+0

我不明白你在哪裏看到這些值... – ppetree

+0

在SELECT語句的末尾有「pi())* 60 * 1.1515」。你得到的結果是弧度,將其轉換成度,然後乘以60得到弧分。一弧分是海里,而海里是1,1508標準英里。 –

回答

2

我可能會錯過一些東西,但是如果您想將英里轉換爲英尺,您是不是想要乘以5280而不是分割?

+0

這就是當你工作太多時間會發生什麼......當你應該擺弄並做出愚蠢的小錯誤時你會發生什麼,而你無法弄清楚爲什麼你會得到你得到的錯誤,並且你發佈了其他愚蠢的問題人們來回答!哈哈謝謝! – ppetree

2

一英里是5280英尺,所以它應該是

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

我給了localhost這個解決方案,因爲......他先回答了......但是謝謝! – ppetree