【问题标题】:CesiumJS how to keep the zoom level of a Cesium.Viewer when the viewer.trackedEntity is changedCesiumJS如何在更改viewer.trackedEntity时保持Cesium.Viewer的缩放级别
【发布时间】:2017-01-09 12:14:55
【问题描述】:

我有 2 个不同的 Cesium.Viewer 实例,当用户缩放其中一个时,我想同步这两个查看器。

怎么做?

更新: 在我的应用程序中,我有 2 个不同的 Cesium.Viewer 实例。但是对于这里的这个问题,我觉得跟Cesium.Viewer的数量无关。所以我将问题更新如下:

我有 2 架飞机在 Cesium.Viewer 上飞行,如随附的屏幕截图所示,一架在红色航线上(参考红色飞机),另一架在红色航线上(参考红色飞机)。

Step-1:我通过双击跟踪黄色飞机,然后它看起来像pic-1;

第 2 步:我将其缩小到 pic-2;

Step-3:我改成双击追踪红色平面,如图3;

Step-4:我把它缩小到 pic-4;

每当我更改跟踪的实体时(如第 3 步),我都需要再次手动缩小它。

那么,我的问题是如何在更改被跟踪实体时保持缩放级别?

【问题讨论】:

  • 我不是反对者,但这个问题有点太简单了。你能发布代码来展示这两个查看器是如何构建的吗?您是否将相同的数据加载到两个查看器中?您希望摄像机平移/倾斜与两个观看者匹配,还是仅与变焦匹配?两个观众都在 3D 模式下观看吗?两位观众有什么不同?
  • @emackey 感谢您的 cmets,更新了我的帖子。

标签: cesium


【解决方案1】:
  1. 保存当前camera.view.scene
  2. 检测 trackedEntity 更改的时刻
  3. 恢复 camera.view.scene

要保存和恢复,您可以使用以下代码作为示例:

var viewer = new Cesium.Viewer('cesiumContainer');
var savedView = {};

Cesium.CzmlDataSource.load('../../SampleData/simple.czml').then(function(dataSource) {
    viewer.dataSources.add(dataSource);

    Sandcastle.addToolbarButton('Save View', function() {
        savedView.offset = viewer.scene.camera.position.clone();
    });

    Sandcastle.addToolbarButton('Restore View', function() {
        viewer.trackedEntity._viewFrom._value = savedView.offset;
    });
});

注意:viewFrom 参数应该在源 czml 中用于跟踪。喜欢:

 "viewFrom": {
    "cartesian": [
      -2080,
      -1715,
      779
    ]
  },

【讨论】:

    猜你喜欢
    • 2017-12-26
    • 2016-05-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-24
    相关资源
    最近更新 更多