什么是经纬度距离
经纬度距离是指两点在一定空间范围内的距离,通常是指地球上两个经纬度点之间的距离。计算经纬度距离可以帮助我们实现多种功能,比如:地图导航、出行规划等,因此,经纬度距离计算是地图开发中非常重要的一个环节。
如何计算两地经纬度距离
计算两点之间的经纬度距离需要使用到数学计算公式。常用的计算公式有“Haversine公式”、“Vincenty公式”、“球面余弦公式”、“半正矢量公式”等。这里我们介绍一种比较常用的方法——球面余弦公式。
球面余弦公式
球面余弦公式(也叫余弦公式)是一种计算地球上两点距离的数学公式。其公式如下:
function getDistance(lat1, lng1, lat2, lng2){
let radLat1 = lat1 * Math.PI / 180.0;// 纬度转化成弧度
let radLat2 = lat2 * Math.PI / 180.0;
let a = radLat1 - radLat2;
let b = lng1 * Math.PI / 180.0 - lng2 * Math.PI / 180.0;// 经度差
let distance = 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;// 地球的半径为6378.137km
return parseInt(distance * 1000);// 返回米数
}
上述方法中,参数lat1、lng1、lat2、lng2分别表示两地的纬度和经度。通过这个方法,我们可以计算出两点之间的距离,单位为米。
uniapp中如何实现经纬度距离计算
在uniapp中,我们可以使用uni.getLocation()方法获取当前定位信息,通过获取到的经纬度信息,再通过自定义方法计算两点之间的距离。
获取当前定位信息
使用uni.getLocation()方法获取当前经纬度信息,如下:
uni.getLocation({
type:'gcj02',
success:function(res){
console.log(res);
},
fail:function(err){
console.log(err);
}
})
上述代码中,type字段表示坐标系类型,这里使用“gcj02”表示为国测局坐标系,可获得较高的精度。
成功获取到当前定位信息后,返回的结果如下:
{
"altitude": 0,
"errMsg": "getLocation:ok",
"horizontalAccuracy": 65,
"latitude": 23.120049,
"longitude": 113.30765,
"speed": -1,
"verticalAccuracy": 10
}
我们需要关注返回结果中的“latitude”和“longitude”字段,分别对应当前位置的纬度和经度。
自定义方法计算经纬度距离
通过获取两个位置的纬度和经度信息,我们可以调用自定义方法计算两点之间的距离。这里我们通过前面提到的“球面余弦公式”进行计算。
如下所示:
function getDistance(lat1, lng1, lat2, lng2){
let radLat1 = lat1 * Math.PI / 180.0;// 纬度转化成弧度
let radLat2 = lat2 * Math.PI / 180.0;
let a = radLat1 - radLat2;
let b = lng1 * Math.PI / 180.0 - lng2 * Math.PI / 180.0;// 经度差
let distance = 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;// 地球的半径为6378.137km
return parseInt(distance * 1000);// 返回米数
}
let distance = getDistance(23.120049, 113.30765, 31.224308, 121.476268);
console.log(distance);
上述代码中,调用了getDistance()方法计算了广州和上海之间的距离,并将结果输出到控制台。输出结果为:988570,表示两地之间的距离为988570米。
总结
经纬度距离计算是地图开发中的一个重要环节。在uniapp中,我们可以通过uni.getLocation()方法获取当前位置信息,再通过自定义方法计算两点之间的距离。通过这种方式,我们可以实现多种功能,如地图导航、出行规划等。