JavaScript如何計算兩個地理坐標(biāo)點之間的距離(支持米與公里/千米)
一、 前言
角度轉(zhuǎn)弧度:將經(jīng)緯度從角度轉(zhuǎn)換為弧度
計算差值:計算兩點間的緯度和經(jīng)度差
應(yīng)用哈弗辛公式:
sin²(Δlat/2) + cos(lat1) * cos(lat2) * sin²(Δlng/2)- 計算兩點間的中心角
計算弧長:
2 * R * arcsin(√上述結(jié)果)單位轉(zhuǎn)換:根據(jù)參數(shù)返回公里或米單位
二、 代碼注釋及參數(shù)詳解
注意:使用經(jīng)緯度WGS84、GCJ-02、BD-09等類型,前后參數(shù)需對應(yīng)類型,否則存在偏差
有毒,解讀后食用
/**
* @param {number} lat1 - 第一個點的緯度
* @param {number} lng1 - 第一個點的經(jīng)度
* @param {number} lat2 - 第二個點的緯度
* @param {number} lng2 - 第二個點的經(jīng)度
* @param {boolean} kilometreFlag - 單位標(biāo)志:true返回公里(km)并保留1位小數(shù),false返回米(m)并取整
* @returns {string} 兩點間的距離字符串(帶單位)
*/
function getDistance(lat1, lng1, lat2, lng2, kilometreFlag = false) {
window.location.
// 將角度轉(zhuǎn)換為弧度
function rad(d) {
return d * Math.PI / 180;
}
// 將經(jīng)緯度從角度轉(zhuǎn)換為弧度
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ù)單位標(biāo)識返回不同單位和精度的結(jié)果
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"
總結(jié)
到此這篇關(guān)于JavaScript如何計算兩個地理坐標(biāo)點之間的距離(支持米與公里/千米)的文章就介紹到這了,更多相關(guān)JS計算兩個地理坐標(biāo)點距離內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
關(guān)于arguments,callee,caller等的測試
關(guān)于arguments,callee,caller等的測試...2006-12-12
通過Jscript中@cc_on 語句識別IE瀏覽器及版本的代碼
通過Jscript中@cc_on 語句識別IE瀏覽器及版本的代碼,需要的朋友可以參考下。2011-05-05
uni-app自定義導(dǎo)航欄右側(cè)做增加按鈕并跳轉(zhuǎn)鏈接功能
這篇文章主要介紹了uni-app自定義導(dǎo)航欄右側(cè)做增加按鈕并跳轉(zhuǎn)鏈接,本文通過實例代碼給大家分享實現(xiàn)思路,代碼簡單易懂,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-03-03
javascript結(jié)合canvas實現(xiàn)圖片旋轉(zhuǎn)效果
圖片的旋轉(zhuǎn)可以說是一種效果,但是逐漸旋轉(zhuǎn)已經(jīng)不單單是屬于視覺效果那個范疇,其更具有使用性,功能性。照片有時候是需要橫過來的拍的,當(dāng)我們預(yù)覽或共享到web上時需要進行旋轉(zhuǎn)。這個操作在以往可能更多的是交給軟件去完成,然后再將旋轉(zhuǎn)到正常角度的圖片發(fā)布到web上。2015-05-05
簡介EasyUI datagrid editor combogrid搜索框的實現(xiàn)
這篇文章主要介紹了EasyUI datagrid editor combogrid搜索框的實現(xiàn),涉及到EasyUI中combogrid的使用方法的相關(guān)知識,非常具有參考價值,需要的朋友可以參考下2016-04-04

