按照經緯度計算距離
日常開發中,特別是做微信項目時,經常會遇到根據用戶地理位置來展示附近商家的功能,通常解決這種問題的思路是,后台設置商家的經緯度,然后再根據前台傳的經緯度進行計算,具體經緯度轉換以及前台如何獲取,本篇不做詳細介紹,可以使用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是前台傳過來的參數;
