HarmonyOS 鸿蒙Next指定的两个经纬度坐标点,如何计算这两个点间距离

发布于 1周前 作者 zlyuanteng 来自 鸿蒙OS

HarmonyOS 鸿蒙Next指定的两个经纬度坐标点,如何计算这两个点间距离

计算两个坐标点的举例 当前使用高德地图想计算两个坐标点的直线距离如何实现? 如果高德地图不支持是否有其他替代方案?

2 回复

鸿蒙这边有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中,计算两个指定经纬度坐标点之间的距离,可以通过以下步骤实现:

  1. 使用Haversine公式:这是一个在球面上计算两点间最短距离的公式,适用于地理坐标系统。公式如下:

    • d=2×r×arcsin(√(sin²((Δlat/2))+cos(lat1)×cos(lat2)×sin²((Δlon/2))))
    • 其中,d为两点间距离,r为地球半径(约为6378137米),Δlat和Δlon分别为两点纬度和经度的差值。
  2. 编写计算函数:在HarmonyOS应用中,可以编写一个函数,将上述公式用代码实现,并传入两个经纬度坐标点作为参数,返回计算出的距离。

  3. 调用计算函数:在需要计算距离的地方,调用该函数并传入指定的经纬度坐标点,即可得到两点间的距离。

2024年底最新HarmonyOS鸿蒙Next教程在线学习https://www.itying.com/goods-1205.html

回到顶部