MySQL創建根據經緯度計算距離的函數


按照經緯度計算距離

       日常開發中,特別是做微信項目時,經常會遇到根據用戶地理位置來展示附近商家的功能,通常解決這種問題的思路是,后台設置商家的經緯度,然后再根據前台傳的經緯度進行計算,具體經緯度轉換以及前台如何獲取,本篇不做詳細介紹,可以使用php類方法計算,也可以通過sql語句來計算,在此,主要是介紹利用MySQL創建一個函數,然后在sql語句中使用

 

創建函數:lat_lng_distance(),單位:km,並已截取小數點2位

1 CREATE FUNCTION `lat_lng_distance` (lat1 FLOAT, lon1 FLOAT, lat2 FLOAT, lon2 FLOAT) 2 RETURNS FLOAT
3 DETERMINISTIC 4 BEGIN
5     RETURN ROUND(6378.138 * 2 * ASIN(SQRT(POW(SIN((lat1 * PI() / 180 - lat2 * PI() / 180) / 2), 2) 6            + COS(lat1 * PI() / 180) * COS(lat2 * PI() / 180) 7            * POW(SIN(( lon1 * PI() / 180 - lon2 * PI() / 180 ) / 2),2))),2); 8 END

 

創建完成,然后再在sql語句中調用即可,下面是截圖

1 $shops = Db::name('user') 2   ->field('id,shop_name,shop_address,avatar,average_consume,discount,lat_lng_distance('.$lat.','.$lon.',lat,lon) as distance,get_shop_avg_star(id) as star') 4   ->where($where) 5   ->page($page,10) 6   ->order('distance asc') 7   ->select()->toArray();

其中,$lat,$lon是前台傳過來的參數;


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2026 CODEPRJ.COM