提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
Cesium两点求距离
前言
在Cesium中,要根据两点求距离,你可以使用Cesium提供的Cartesian3类来表示点的坐标,然后使用Cesium.Cartesian3.distance方法计算它们之间的距离。除此之外也可以根据经纬度求距离。
一、笛卡尔坐标求距离?
var point1 = Cesium.Cartesian3.fromDegrees(lon1, lat1, height1);
var point2 = Cesium.Cartesian3.fromDegrees(lon2, lat2, height2);
var distance = Cesium.Cartesian3.distance(point1, point2);
console.log("距离:", distance, "米");
二、经纬度坐标求距离?
下面代码是通过经纬度坐标求距离,当earthRadius = 6371返回的值单位是千米,当earthRadius = 6371000返回的值为米。
/**
* 使用 Haversine 公式计算两个经纬度点之间的距离(以千米为单位)
* 输入起点和终点
* @param {*} point1 经纬度数组 [纬度, 经度]
* @param {*} point2 经纬度数组 [纬度, 经度]
* @returns {number} 起点到终点的距离(以千米为单位)
*/
export function calculateHaversineDistance(point1, point2) {
// 提取起点和终点的纬度和经度
const lat1 = point1[0];
const lon1 = point1[1];
const lat2 = point2[0];
const lon2 = point2[1];
// 地球半径(千米)
const earthRadius = 6371;
// 将角度转换为弧度
const radLat1 = (Math.PI * lat1) / 180;
const radLat2 = (Math.PI * lat2) / 180;
const deltaLat = (Math.PI * (lat2 - lat1)) / 180;
const deltaLon = (Math.PI * (lon2 - lon1)) / 180;
// Haversine 公式计算
const a =
Math.sin(deltaLat / 2) * Math.sin(deltaLat / 2) +
Math.cos(radLat1) *
Math.cos(radLat2) *
Math.sin(deltaLon / 2) *
Math.sin(deltaLon / 2);
const c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));
// 返回距离(以千米为单位)
return earthRadius * c;
}