HarmonyOS 鸿蒙Next指定的两个经纬度坐标点,如何计算这两个点间距离
HarmonyOS 鸿蒙Next指定的两个经纬度坐标点,如何计算这两个点间距离
鸿蒙这边有map的api可以算出两个坐标的距离,文档如下:https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/map-map-V5#section1962210347237
let fromLatLng: mapCommon.LatLng = {
latitude: 38,
longitude: 118
};
let toLatLng: mapCommon.LatLng = {
latitude: 39,
longitude: 119
};
let distance = map.calculateDistance(fromLatLng, toLatLng);
或者可以用算法自己实现,不过默认地球是一个标准的圆球,和官方的数据有一定误差,仅供参考:
function HaverSin(theta: number)
{
let v = Math.sin(theta / 2);
return v * v;
}
function Distance(lata: number,loga: number, latb: number,logb: number)
{
let EARTH_RADIUS = 6371.0;
let dis = 0;
let lat_a = 0.0;
let lat_b = 0.0;
let log_a = 0.0;
let log_b = 0.0;
//用haversine公式计算球面两点间的距离。
//转弧度
lat_a = lata * Math.PI / 180;
lat_b = latb * Math.PI / 180;
log_a = loga * Math.PI / 180;
log_b = logb * Math.PI / 180;
//差值
let vLon = (log_a - log_b);
let vLat = (lat_a - lat_b);
//h is the great circle distance in radians, great circle就是一个球体上的切面,它的圆心即是球心的一个周长最大的圆。
let h = HaverSin(vLat) + Math.cos(lat_a) * Math.cos(lat_b) * HaverSin(vLon);
dis = 2 * EARTH_RADIUS * Math.asin(Math.sqrt(h));
return dis;
}
在HarmonyOS鸿蒙Next中,计算两个指定经纬度坐标点之间的距离,可以通过以下步骤实现:
-
使用Haversine公式:这是一个在球面上计算两点间最短距离的公式,适用于地理坐标系统。公式如下:
- d=2×r×arcsin(√(sin²((Δlat/2))+cos(lat1)×cos(lat2)×sin²((Δlon/2))))
- 其中,d为两点间距离,r为地球半径(约为6378137米),Δlat和Δlon分别为两点纬度和经度的差值。
-
编写计算函数:在HarmonyOS应用中,可以编写一个函数,将上述公式用代码实现,并传入两个经纬度坐标点作为参数,返回计算出的距离。
-
调用计算函数:在需要计算距离的地方,调用该函数并传入指定的经纬度坐标点,即可得到两点间的距离。
2024年底最新HarmonyOS鸿蒙Next教程在线学习:https://www.itying.com/goods-1205.html