然後用使用者目前的經緯度座標,計算離使用者地點最近的幾個地點
這時候如果你的資料庫中有存放一些地點的座標資料
那我們就可以使用所謂的Haversine公式,來算出地球上使用者與這些地點座標之間的距離
(簡單的解釋一下每個符號的意義:d是距離,r是弧度,φ是經度,λ是緯度)然後假設我們資料庫中有一個資料表(table)
且資料表中的每個欄位記錄了每個地點的名稱(name)與座標(lat, lon),例如
table 
 | ||
name 
 | 
lat 
 | 
lon 
 | 
name_1 
 | 
latitude_1 
 | 
longitude_1 
 | 
name_2 
 | 
latitude_2 
 | 
longitude_2 
 | 
... 
 | 
... 
 | 
... 
 | 
接著我們可以將上面的公式轉換一下並且假設我們現在的座標在(23, 120)
在資料庫中就可以用這個語法來查詢
SELECT
     name,
     ( 6371 * acos( cos( radians( 23 ) ) * cos( radians( lat ) ) * cos( radians( lon ) 
     - radians( 120 ) ) + sin( radians( 23 ) ) * sin( radians( lat ) ) ) ) AS distance
FROM
     table
ORDER BY
     distance   
結果就會顯示這些地點的名稱與使用者之間的距離(公里),並且已經依照遠近排序其中用到的acos()、cos()、sin()、radians()等函數,在MySQL中都可以直接使用
Reference
Haversine formula - Wikipedia, the free encyclopedia
Creating a Store Locator with PHP, MySQL & Google Maps - Google Maps API — Google Developers
沒有留言:
張貼留言