最近開發微信小程序,遇到了外賣配送半徑的問題,在網上查閱了諸多資料,也大概理解了經緯度距離計算的公式原理,在此做下筆記,方便自己和大家學習使用。
若是把地球當作一個正常的球體(其實它是橢球)來說,球面兩點之間的距離計算並不復雜,運用球坐標很容易就能計算出兩點之間的弧長。
親測有效的代碼,原理就不詳細講了,列一大堆公式對急需使用的開發者也沒太大幫助,網上一大堆,直接上代碼好了。
//經緯度轉換成三角函數中度分表形式。
function rad(d) {
return d * Math.PI / 180.0;
}
/**
*
* @param lat1 緯度1
* @param lng1 經度1
* @param lat2 緯度2
* @param lng2 經度2
*/
function geoDistance(lat1, lng1, lat2, lng2) {
let radLat1 = rad(lat1);
let radLat2 = rad(lat2);
let a = radLat1 - radLat2;
let b = rad(lng1) - rad(lng2);
let s = 2 * Math.asin(Math.sqrt(Math.pow(Math.sin(a / 2), 2) + Math.cos(radLat1) * Math.cos(radLat2) * Math.pow(Math.sin(b / 2), 2)));
s = s * 6378.137;// EARTH_RADIUS;
s = Math.round(s * 10000) / 10000; //輸出為公里
return s;
}
如果其他編程語言需要使用,只需替換相關的數學函數調試一下即可。
