然後用使用者目前的經緯度座標,計算離使用者地點最近的幾個地點
這時候如果你的資料庫中有存放一些地點的座標資料
那我們就可以使用所謂的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
沒有留言:
張貼留言