前言
之前做过一个基于 Cesium 的演示系统,有个需求是沿给定的一条路线让相机漫游,但由于给的路线数据是不连续的,也就是画出来的路线是不平滑的(如下图),现在需要通过一些办法将给定的路线转成一条相对比较平滑的路线
方法
Cesium API 中有几个计算插值的方法:LinearSpline,CatmullRomSpline,HermiteSpline
这里以CatmullRomSpline
的插值方式为例
const carPositions = [
Cesium.Cartesian3.fromDegrees(110, 20, 28000),
Cesium.Cartesian3.fromDegrees(101, 21, 26000),
Cesium.Cartesian3.fromDegrees(102, 19, 26000),
Cesium.Cartesian3.fromDegrees(104, 21, 26000),
Cesium.Cartesian3.fromDegrees(103, 23, 210000)
]
const spline = new Cesium.CatmullRomSpline({
points: carPositions,
times: [0.0, 0.25, 0.5, 0.75, 1],
});
// 插值100个点
const newPositions = [];
for (let i = 0; i <= 100; i++) {
const cartesian3 = spline.evaluate(i / 100);
newPositions.push(cartesian3);
}
const entity = viewer.entities.add({
polyline: {
positions: newPositions
}
})
viewer.zoomTo(entity)
评论区