首頁 / 浏覽問題 / WebGIS / 問題詳情
模型實時(shí)運動
32EXP 2024年03月29日
我需要(yào / yāo)将模型點位通過entity model 來(lái)撒在(zài)地(dì / de)圖上(shàng),然後此時(shí)點位是(shì)靜止的(de),然後我通過websocket來(lái)拿到(dào)最新的(de)點位坐标,有什麽辦法在(zài)websocket返回我信息之(zhī)後我去使這(zhè)些模型運動到(dào)最新的(de)點位上(shàng)呢?

1個(gè)回答

您好,首先 從 WebSocket 收到(dào)最新的(de)點位坐标信息後,在(zài)前端代碼中解析這(zhè)些坐标數據,獲取目标位置。 使用 Cesium 提供的(de)動畫或插值方法,實現模型平滑移動到(dào)目标點位上(shàng);然後通過 SampledPositionProperty 實現了(le/liǎo)在(zài)一(yī / yì /yí)秒内模型從當前位置移動到(dào)目标位置的(de)效果。你可以(yǐ)根據需要(yào / yāo)調整動畫時(shí)間和(hé / huò)方式來(lái)實現不(bù)同的(de)效果

// 假設 targetPosition 是(shì)你從 WebSocket 獲取到(dào)的(de)目标點位坐标
var targetPosition = Cesium.Cartesian3.fromDegrees(10, 0, 0);

// 創建一(yī / yì /yí)個(gè)動畫效果,使模型移動到(dào)目标位置
var entity = viewer.entities.getById('yourModelEntityId'); // 根據實際情況獲取模型的(de)實體對象
entity.position = new Cesium.ConstantPositionProperty(entity.position.getValue(viewer.clock.currentTime)); // 設置起始位置

var property = new Cesium.SampledPositionProperty();
property.addSample(viewer.clock.currentTime, entity.position.getValue(viewer.clock.currentTime));
property.addSample(viewer.clock.currentTime + 1, targetPosition); // 在(zài)1秒内移動到(dào)目标位置

entity.position = property;

希望可以(yǐ)幫到(dào)您

1,680EXP 2024年03月29日

property.addSample(viewer.clock.currentTime + 1, targetPosition);
我在(zài)循環體裏執行這(zhè)段代碼然後上(shàng)面這(zhè)行代碼會報錯,是(shì)不(bù)能直接+1麽,好像會有問題,

我的(de)代碼如下:

entities.values.forEach((em: any) => {
          if (em.data.text.includes(item.department + item.devicename)) {
            em.position = new window.Cesium.ConstantPositionProperty(em.position.getValue(earth.viewer.clock.currentTime));
            const property = new window.Cesium.SampledPositionProperty();
            property.addSample(earth.viewer.clock.currentTime, em.position.getValue(earth.viewer.clock.currentTime));
            property.addSample(earth.viewer.clock.currentTime + 1, p);
            em.position = property;
          }
        });

您将代碼改爲(wéi / wèi) var newTime = Cesium.JulianDate.addSeconds(earth.viewer.clock.currentTime, 1, new Cesium.JulianDate()); property.addSample(newTime, p);

...