-
功能介绍:
- 首先,定义了两个地理坐标点
point1
和point2
,分别表示两个点的经度、纬度和高度。 - 接着,通过
Cesium.Cartesian3.distance
方法计算了两点之间的直线距离。 - 然后,根据直线距离将两点之间的距离进行等分,得到分割的份数。
- 遍历每个等分点,通过
Cesium.Cartesian3.lerp
方法计算插值点的笛卡尔坐标,并将插值点添加到数组中。 - 将插值点的笛卡尔坐标转换为经纬度坐标,并将其存储在
interpolatedDegrees
数组中,以便后续使用。
- 首先,定义了两个地理坐标点
-
注意事项:
- 输入的地理坐标点
point1
和point2
必须使用Cesium.Cartesian3.fromDegrees
方法进行转换,以确保它们被正确解释为经纬度坐标。 - 计算插值点时,使用直线距离等分两点之间的距离可能会忽略地球曲面的弯曲性。在较长距离上,建议使用更精确的方法来计算插值点,例如大圆航线或贝塞尔曲线。
- 经纬度坐标的精度取决于原始地理坐标点的精度,以及
numberOfDivisions
的值。增加numberOfDivisions
可以提高插值点的密度和精度,但也会增加计算量和内存消耗。
- 输入的地理坐标点
- 所有代码:
var point1 = Cesium.Cartesian3.fromDegrees(113.3500, 15.521, 124);var point2 = Cesium.Cartesian3.fromDegrees(113.3600, 15.522, 137);// 计算两点之间的距离var distance = Cesium.Cartesian3.distance(point1, point2);// 定义分割的份数var numberOfDivisions = distance;// 初始化一个数组来存储所有的插值点var interpolatedPoints = [];// 在两点之间按1米进行插值for (var i = 0; i <= numberOfDivisions; i++) {// 计算插值点var interpolationFactor = i / numberOfDivisions;var interpolatedPoint = Cesium.Cartesian3.lerp(point1, point2, interpolationFactor, new Cesium.Cartesian3());// 将插值点添加到数组中interpolatedPoints.push(interpolatedPoint);}// 将笛卡尔坐标转换为经纬度坐标var interpolatedCartographicPositions = interpolatedPoints.map(function(cartesianPoint) {return Cesium.Cartographic.fromCartesian(cartesianPoint);});// 将经纬度坐标转换为度数var interpolatedDegrees = interpolatedCartographicPositions.map(function(cartographicPosition) {var longitude = Cesium.Math.toDegrees(cartographicPosition.longitude);var latitude = Cesium.Math.toDegrees(cartographicPosition.latitude);var height = cartographicPosition.height;return [longitude, latitude,height];});// 打印所有插值点的经纬度坐标console.log(interpolatedDegrees);