MySQL 計算兩個經緯度之間的距離 與 遠近排序

在 MySQL 裡面要計算經緯度之間的距離,並且由近排到遠,SQL 語法要怎麼下?

註:簡單說就是要做到:經緯度算距離 + 找出 範圍區間 的資料

MySQL 計算兩個經緯度之間的距離 與 遠近排序

Google Map 的文件裡面就有範例,下述取自此篇:Creating a Store Locator with PHP, MySQL & Google Maps

  • SQL:SELECT id, ( 3959 * acos( cos( radians(37) ) * cos( radians( lat ) ) * cos( radians( lng ) - radians(-122) ) + sin( radians(37) ) * sin( radians( lat ) ) ) ) AS distance FROM markers HAVING distance < 25 ORDER BY distance LIMIT 0 , 20;

註:

  1. 3959 是以 mile 為單位。若要以 km,要換成 6371。
  2. 37, -122 是目前所在的經緯度位置(外部傳入的位置)
  3. lat, lng 是資料庫經緯度的欄位名稱
  4. markers 是 table name

範例:

  • SELECT *, ( 6371 * acos( cos( radians(25.043800) ) * cos( radians( lat )) * cos( radians( lon ) - radians(121.5 29305) ) + sin( radians(25.043800) ) * sin( radians( lat ) ) ) ) AS distance FROM markers HAVING distance < 25 ORDER BY distance LIMIT 15
  • SELECT *, ( 6371 * acos( cos( radians(22.665083) ) * cos( radians( lat ) ) * cos( radians( lon ) - radians(120.305161) ) + sin( radians(22.665083) ) * sin( radians( lat ) ) ) ) AS distance FROM markers HAVING distance < 25 ORDER BY distance LIMIT 15

資料大需要加速的可見此篇:Distance Searching and MySQL

相關網頁

關於「Tsung」

對新奇的事物都很有興趣, 喜歡簡單的東西, 過簡單的生活.
分類: Programming,標籤: , , , , , , , 。這篇內容的永久連結

發表迴響

這個網站採用 Akismet 服務減少垃圾留言。進一步瞭解 Akismet 如何處理網站訪客的留言資料