uniapp怎么实现两地经纬度距离

什么是经纬度距离

经纬度距离是指两点在一定空间范围内的距离,通常是指地球上两个经纬度点之间的距离。计算经纬度距离可以帮助我们实现多种功能,比如:地图导航、出行规划等,因此,经纬度距离计算是地图开发中非常重要的一个环节。

如何计算两地经纬度距离

计算两点之间的经纬度距离需要使用到数学计算公式。常用的计算公式有“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()方法获取当前位置信息,再通过自定义方法计算两点之间的距离。通过这种方式,我们可以实现多种功能,如地图导航、出行规划等。