const position = Cesium.Cartesian3.fromDegrees(
116.401,
39.89855,
0
);
const entity = this.viewer.entities.add({
id: "cesiumMan",
name: "data/gltf/Man.glb",
position: position,
model: {
uri: 'data/gltf/Cesium_Man.glb',
minimumPixelSize: 128,
maximumScale: 20,
scale: 1
}
});
以上是加载模型的方法
const viewer = this.viewer;
const dataP = [
{
lat: '39.898864999998416',
lng: '116.4013140000069'
},
{
lat: '39.89886799999828',
lng: '116.40152700000996'
},
{
lat: '39.89872399999817',
lng: '116.40152700000996'
},
{
lat: '39.898737999997984',
lng: '116.401819000014'
},
{
lat: '39.89886799999756',
lng: '116.40181900001403'
}
];
// 定义一个数组,存储物体运动的时间和位置点
const positionData = [];
for (let i = 0; i < dataP.length; ++i) {
// addSeconds 用于在给定的秒数后添加时间 两个点所用时间就是这里设置 使用简单的线性间隔
positionData.push({
longitude: Number(dataP[i].lng),
latitude: Number(dataP[i].lat),
time: i * 10
});
}
// 创建一个采样器对象,用于插值计算物体运动的位置
const positionSampler = new Cesium.SampledPositionProperty();
positionSampler.setInterpolationOptions({
interpolationDegree: 2,
interpolationAlgorithm: Cesium.HermitePolynomialApproximation
});
const start = Cesium.JulianDate.fromDate(new Date(2023, 2, 29));
// 遍历数组,将时间和位置点添加到采样器对象中
for (let i = 0; i < positionData.length; i++) {
const data = positionData[i];
const time = new Cesium.JulianDate.addSeconds(start, data.time, new Cesium.JulianDate());
const position = new Cesium.Cartesian3.fromDegrees(data.longitude, data.latitude);
positionSampler.addSample(time, position);
}
const entity = viewer.entities.getById("cesiumMan")
entity.position = positionSampler;
entity.orientation = new Cesium.VelocityOrientationProperty(positionSampler); //根据坐标转头
// 定义时钟参数,设置开始时间、结束时间和当前时间 结束时间尤其重要 如果动画执行完了 结束时间没到,中间会空一段时间
// 反之动画还没结束 stop时间到了 那就会立刻再次重复 一段动画路径还没执行
var stop = Cesium.JulianDate.addSeconds(start, 50, new Cesium.JulianDate());
viewer.clock.startTime = start.clone();
viewer.clock.stopTime = stop.clone();
viewer.clock.currentTime = start.clone();
viewer.clock.shouldAnimate = true;
viewer.clock.clockRange = Cesium.ClockRange.LOOP_STOP;
viewer.clock.multiplier = 2;
// 设置视角跟随物体运动,并显示信息框
viewer.trackedEntity = entity;