<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>计算经纬点之间的距离</title>
<style type="text/css" media="screen">
.box {
width: 400px;
height: 200px;
padding: 10px;
border: 1px solid gray;
font-size: 24px;
}
</style>
</head>
<body>
<div class="box" id="test">0</div>
<br>
<button id="btn" type="button">计算距离</button>
<script>
var lngLatArray = [{
"lat": 35.03062407631191,
"lng": 118.2799814491858
},
{
"lat": 35.008200544914835,
"lng": 118.23489338775353
},
{
"lat": 35.00815493404102,
"lng": 118.23227068999196
},
{
"lat": 35.00808231483372,
"lng": 118.21680414236586
},
{
"lat": 35.009912259710916,
"lng": 118.20297513372515
}
];
/**
* 经纬度转换成三角函数中度分表形式
* @param {number} d 经度
* @return {number} 返回转换后的度分表值
*/
function getRad(d) {
return d * Math.PI / 180.0;
}
/**
* 计算两个经纬度坐标点之间的距离
* @param {object} lnglatA 起点坐标点
* @param {object} lnglatB 终点坐标点
* @return {number} 计算后得出两点之间的距离
*/
function getDistance(lnglatA, lnglatB) {
var radLat1 = getRad(lnglatA.lat);
var radLat2 = getRad(lnglatB.lat);
var a = radLat1 - radLat2;
var b = getRad(lnglatA.lng) - getRad(lnglatB.lng);
var 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 * 6378137; // 地球半径(米);
return s;
}
/**
* 计算多个经纬度坐标点之间的距离
* @param {array} 经纬度数组
* @return {number} 计算后得出多个点之间的总距离
*/
function totalDistance(arr) {
var len = arr.length;
var distance = 0;
for (var i = 0; i < len - 1; i++) {
distance += getDistance(arr[i], arr[i+1]);
}
return distance;
}
/* 点击按钮计算结果 */
btn.onclick = function() {
var distance = totalDistance(lngLatArray);
test.innerText = (distance / 1000).toFixed(2) + ' 千米';
};
</script>
</body>
</html>
计算地图经纬点之间的距离
最新推荐文章于 2024-07-19 14:46:05 发布