2010-08-20 85 views
11

我有一個mysql數據庫和2張桌子讓我們說客戶和學校。現在每個表格都有經度和緯度的列。而且我需要從第二個表格中選擇一個SELECT,例如第一個表格中的學校位於給定半徑的一個記錄中。計算應基於經度和緯度。 PS:我正在使用PHP。從基於緯度經度的mysql獲取結果

+2

除了Piskvor的回答,本教程還是相當不錯的:[使用MySQL的地理距離搜索](http://www.scribd.com/doc/2569355/Geo-Distance-用MySQL搜索),儘管我發現該頁面加載不好。作爲替代,PowerPoint演示文稿可以在[這裏]找到(http://www.mysqlconf.com/mysql2008/public/schedule/detail/347)。 – Mike 2010-08-20 07:29:40

回答

9

您可以使用Spherical law of cosines計算距離 - 度和弧度
ACOS(X) -

SELECT DEGREES(ACOS(SIN(RADIANS(clients.latitude)) * SIN(RADIANS(schools.latitude)) + 
        COS(RADIANS(clients.latitude)) * COS(RADIANS(schools.latitude)) 
                * COS(RADIANS(clients.longitude 
                   – schools.longitude)))) 
     * 60 * 1.1515 * 1.609344 AS distance 
FROM clients, schools HAVING distance < $radius 

RADIANS(X) X的反餘弦,即,餘弦值是X
DEGREES(X) - 弧度度

60分鐘一度
1.1515英里在nautical mile
1.609344 - 一英里里程數

+0

謝謝,我現在就試試並接受它是否正常工作。 – Centurion 2010-08-20 07:36:43

+1

因此,如果我的半徑以千米爲單位,則查詢將如您所寫或我應該更改它?謝謝 – Centurion 2010-08-20 07:40:25

+0

Mysql提供了一個錯誤:'字段列表'中的未知列'clients.longitude-schools.longitude'...,' - '在這裏的含義是什麼意思? – Centurion 2010-08-20 07:52:46