javascript
html GPS坐标实现,JavaScript 实现GPS坐标点距离计算(两个经/纬度间的距离计算)...
在LBS(基于位置服務)的一些應用中,有時我們會需要計算兩個用戶或兩個坐標點之間的距離。要解決這類問題,就要了解空間幾何的概念并結合數學中在三角函數公式計算兩點之間的值。本文介紹基于經度/緯度的,兩個坐標點之間的距離計算,與JavaScript的實現代碼。
1. 解決思路
問題:已知兩個GPS坐標點A和B,其坐標值分別為(φ1, λ1)和(φ2, λ2)(φ表示緯度,λ表示經度),計算兩個坐標點之間的直線距離。
解決這個問題時,我們可以將經度想象成平面幾何中的x軸,將緯度想象成平面幾何中的y軸。并利用這兩個點,構造出一個∠C=90°的直角三角型,如下所示:
在這個三角型中,我們可以根據坐標點A和B計算出坐標點C的坐標為(φ2, λ1),并可以坐標點A和B的經/緯度計算出邊a和邊b的距離。
經過這一系列的推導和計算,坐標點之間的距離計算,已經轉換為利用三角函數計算勾股值的問題。
2. 公式及方法
2.1 公式
根據上面的問題分析,在這個計算中,我們應該包括以下推導過程:
經緯度轉換為10進制
在GPS坐中,使用度/分/秒的形式表示,我們首先應該將其轉換為10進制表示。如,點A坐標為(北緯39°54'27",東經116°23'17"),可以將其表示為(39.5427, 116.2317)。
經緯度轉換為弧度
三角函數中使用弧度值進行計算,還需要將經緯度轉換為弧度。轉換公式為N*PI/180,如將點A的緯度值39.5427轉換為弧度39.5427*PI/180(PI為圓周率)。
經緯度轉換為弧度
三角函數中使用弧度值進行計算,還需要將經緯度轉換為弧度。轉換公式為N*PI/180,如將點A的緯度值39.5427轉換為弧度39.5427*PI/180(PI為圓周率)。A/B兩點的經/緯度轉為弧度后分別用φA、λA、φB、λB
計算邊a和邊b的弦度
利用緯度差,我們可得到邊a的弧度Δa;利用經度差,我們可得到邊b的弧度Δb(計算時注意取絕對值)。
計算邊兩點間的正弦值和余弦值
計算出以上一系列變量后,計算出半正矢值a,其計算公式為sin2(Δa/2)+cos(φA)*cos(φA)*sin2(Δb/2)。
計算邊正切值
c = 2*atan2(√a, √(1?a))
返回距離
d = R*c(R表示地球半徑)
2.2 算法實現
綜上所述,JavaScript實現計算兩個坐標點之間的距離方法如下:
function getDistance(lat1, lon1, lat2, lon2) {
var R = 6378137; // 地球長半徑
var φ1 = toRadians(lat1);
var φ2 = toRadians(lat2);
var Δφ = toRadians(lat2-lat1);
var Δλ = toRadians(lon2-lon1);
var a = Math.sin(Δφ/2) * Math.sin(Δφ/2) +
Math.cos(φ1) * Math.cos(φ2) *
Math.sin(Δλ/2) * Math.sin(Δλ/2);
var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a));
var d = R * c;
return d;
// 轉為弧度
function toRadians(d) {
return d * Math.PI / 180;
}
}
或者,我們可以寫成更易讀的方式:
function getDistance(lat1, lng1, lat2, lng2) {
var dis = 0;
var radLat1 = toRadians(lat1);
var radLat2 = toRadians(lat2);
var deltaLat = radLat1 - radLat2;
var deltaLng = toRadians(lng1) - toRadians(lng2);
var dis = 2 * Math.asin(Math.sqrt(Math.pow(Math.sin(deltaLat / 2), 2) + Math.cos(radLat1) * Math.cos(radLat2) * Math.pow(Math.sin(deltaLng / 2), 2)));
return dis * 6378137;
function toRadians(d) { return d * Math.PI / 180;}
}
使用這個公式計算坐標點(北緯39°54'00",東經116°23'00")與坐標點(北緯38°38'00",東經115°48'00")之間的距離:
getDistance(39.54, 116.23, 38.85, 115.48)// 100430.73284694664
總結
以上是生活随笔為你收集整理的html GPS坐标实现,JavaScript 实现GPS坐标点距离计算(两个经/纬度间的距离计算)...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: hping 详解_hping3命令
- 下一篇: Android SDK 2.3/3.0/