根据两点的经纬度查询两点间的距离
基于vue
调用的方法里传入四个参数,分别是两个点的纬度经度
this.CaleLength(第一个点的纬度,第一个点的经度,第二个点的纬度,第二个点的经度)
this.CaleLength(34.76984, 113.769852, 34.76984, 114.769852)
// 经纬度转换为度分秒形式
rad(d) {
return d * Math.PI / 180.0;
},
// 计算两点经纬度以及两点间的距离(起始地点与结束地点都是东经北纬)
CaleLength(slat, slong, elat, elong) {
// 第一个点的经纬度(当前地点) (起始地点的纬度 startLatitude 起始地点的经度 startLongitude )
let sLat = this.rad(slat)
let sLong = this.rad(slong)
// 第二个点的经纬度 (结束地点的纬度 endLatitude 结束地点的经度 endLongitude )
let eLat = this.rad(elat)
let eLong = this.rad(elong)
// 设置地球的半径为6371km
const EARTH_RADIUS = 6371
// 得到两点见的经纬差
let calcLat = eLat - sLat
let calcLong = eLong - sLong
// 判断经纬差是否为负
if (calcLat < 0) {
calcLat = Math.abs(calcLat)
}
if (calcLong < 0) {
calcLong = Math.abs(calcLong)
}
// 同样可以计算到距离
// let SS = 2 * Math.asin(Math.sqrt(Math.pow(Math.sin(calcLat / 2), 2) + Math.cos(sLat) * Math.cos(eLat) *
// Math.pow(Math.sin(calcLong / 2), 2)))
// SS = SS * EARTH_RADIUS
// console.log(SS + "km");
let S = EARTH_RADIUS * Math.acos(Math.cos(sLat) * Math.cos(eLat) * Math.cos(calcLong) + Math.sin(sLat) *
Math.sin(eLat))
S = Math.round(S * 100000) / 100
if (S > 1000) {
console.log(Math.round(S / 1000) + 'KM');
} else {
console.log(S + "M");
}
},