JavaScript如何計算兩個地理坐標點之間的距離(支持米與公里/千米)
一、 前言
角度轉弧度:將經(jīng)緯度從角度轉換為弧度
計算差值:計算兩點間的緯度和經(jīng)度差
應用哈弗辛公式:
sin²(Δlat/2) + cos(lat1) * cos(lat2) * sin²(Δlng/2)- 計算兩點間的中心角
計算弧長:
2 * R * arcsin(√上述結果)單位轉換:根據(jù)參數(shù)返回公里或米單位
二、 代碼注釋及參數(shù)詳解
注意:使用經(jīng)緯度WGS84、GCJ-02、BD-09等類型,前后參數(shù)需對應類型,否則存在偏差
有毒,解讀后食用
/**
* @param {number} lat1 - 第一個點的緯度
* @param {number} lng1 - 第一個點的經(jīng)度
* @param {number} lat2 - 第二個點的緯度
* @param {number} lng2 - 第二個點的經(jīng)度
* @param {boolean} kilometreFlag - 單位標志:true返回公里(km)并保留1位小數(shù),false返回米(m)并取整
* @returns {string} 兩點間的距離字符串(帶單位)
*/
function getDistance(lat1, lng1, lat2, lng2, kilometreFlag = false) {
window.location.
// 將角度轉換為弧度
function rad(d) {
return d * Math.PI / 180;
}
// 將經(jīng)緯度從角度轉換為弧度
const radLat1 = rad(lat1);
const radLat2 = rad(lat2);
// 計算緯度和經(jīng)度的差值(弧度)
const a = radLat1 - radLat2;
const 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)
)
);
// 乘以地球半徑(6378.137公里)得到距離(公里)
s = s * 6378.137;
// 根據(jù)單位標識返回不同單位和精度的結果
if(kilometreFlag) {
// 返回公里單位,保留1位小數(shù)
s = s.toFixed(1) + 'km';
}
else {
// 返回米單位,四舍五入取整
s = Math.round(s * 1000).toFixed(0) + 'm';
}
return s;
}
三、使用實例
// 示例1:計算兩個近距離點(約500米) const dist1 = getDistance(39.915, 116.404, 39.918, 116.408); console.log(dist1); // 輸出類似 "478m" // 示例2:計算兩個遠距離點(約1064公里) 北京-上海 const dist2 = getDistance(39.906217, 116.3912757, 31.2513263, 121.3912291, true); console.log(dist2); // 輸出類似 "1064.0km" // 示例3:使用默認單位(米)北京-上海 const dist3 = getDistance(39.906217, 116.3912757, 31.2513263, 121.3912291); console.log(dist3); // 輸出類似 "1064022m"
總結
到此這篇關于JavaScript如何計算兩個地理坐標點之間的距離(支持米與公里/千米)的文章就介紹到這了,更多相關JS計算兩個地理坐標點距離內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
詳解javascript appendChild()的完整功能
這篇文章主要介紹了詳解javascript appendChild()的完整功能,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-08-08
前端實現(xiàn)Excel文件導出功能的完整代碼解析(vue實現(xiàn)excel文件導出)
在Vue中實現(xiàn)導出Excel文件有多種方式,可以通過前端實現(xiàn),也可以通過前后端配合實現(xiàn),下面這篇文章主要給大家介紹了關于前端實現(xiàn)Excel文件導出功能(vue實現(xiàn)excel文件導出)的相關資料,需要的朋友可以參考下2024-05-05
JavaScript實現(xiàn)審核流程狀態(tài)的動態(tài)顯示進度條
對于有很多流程的東西,我們希望能夠根據(jù)不同的階段,用流程條對應地進行顯示,非常直觀,給用戶帶來極好的用戶體驗,下面小編給大家分享JavaScript實現(xiàn)審核流程狀態(tài)的動態(tài)顯示進度條功能,需要的的朋友參考下2017-03-03
解決Layui選擇全部,換頁checkbox復選框重新勾選的問題方法
今天小編就為大家分享一篇解決Layui選擇全部,換頁checkbox復選框重新勾選的問題方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-08-08

