CesiumJS如何在viewer.trackedEntity更改时保持Cesium.Viewer的缩放级别

时间:2017-01-09 12:14:55

标签: cesium

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

怎么做?

更新: 在我的应用程序中,我有2个不同的Cesium.Viewer实例。但对于这个问题,我认为它与Cesium.Viewer的数量无关。所以我更新了以下问题:

我有2架飞机在Cesium.Viewer上飞行,如附图所示,一个在红色路线上(参考为红色飞机),另一个在红色路线上(参考为红色飞机)。

步骤1:我通过双击跟踪黄色平面,然后它看起来像pic-1;

步骤2:我将其缩小为pic-2;

步骤3:我通过双击改变跟踪红色平面,它看起来像pic-3;

步骤4:我将其缩小为pic-4;

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

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

enter image description here

1 个答案:

答案 0 :(得分:0)

  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 param应该在源czml中进行跟踪。像这样:

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