Cesium - TypeError:在对象上聚焦相机时未定义t

时间:2016-01-08 15:48:08

标签: javascript cesium

我已经将一些JSon数据加载到我的Cesium项目中,并将地球上的每个国家/地区概述为GeoJSonDataSource。每个国家/地区也会作为单独的条目复制到数组中。为了突出显示某个国家/地区,我使用

viewer.entities.add(countryArray[countryID]);

当用户点击它时,会在所选国家/地区上放置彩色多边形。但是,当我单击默认情况下Cesium提供的信息框中的“相机”图标时,没有任何反应。在控制台中,错误消息显示为:

  

TypeError:t未定义

并指向Cesium.js。如果我没有向viewer.entities数组添加任何内容,则不会出现此错误。

1 个答案:

答案 0 :(得分:0)

可能有更好的方法来突出显示所选国家/地区。尝试捕获所选实体,并更改现有多边形的材质属性,而不是创建新的多边形。

例如,尝试一下:加载Cesium Sandcastle并将以下代码粘贴到代码编辑器中,然后点击F8:

var viewer = new Cesium.Viewer('cesiumContainer', {
    navigationHelpButton: false, animation: false, timeline: false,
    selectionIndicator: false
});

var deselectColor = Cesium.Color.BLUE.withAlpha(0.3);
var selectedColor = Cesium.Color.LIME.withAlpha(0.5);

var deselectMaterial = new Cesium.ColorMaterialProperty(
        new Cesium.ConstantProperty(deselectColor));
var selectedMaterial = new Cesium.ColorMaterialProperty(
        new Cesium.ConstantProperty(selectedColor));

viewer.dataSources.add(Cesium.GeoJsonDataSource.load(
        '../../SampleData/ne_10m_us_states.topojson', {
    stroke: Cesium.Color.WHITE,
    fill: deselectColor,
    strokeWidth: 2
}));

//Set the camera to a US centered tilted view.
viewer.camera.lookAt(Cesium.Cartesian3.fromDegrees(-98.0, 40.0),
        new Cesium.Cartesian3(0.0, -4790000.0, 3930000.0));
viewer.camera.lookAtTransform(Cesium.Matrix4.IDENTITY);

var previousEntity;
Cesium.knockout.getObservable(viewer, '_selectedEntity').subscribe(function(newEntity) {
    if (Cesium.defined(previousEntity) && Cesium.defined(previousEntity.polygon)) {
        previousEntity.polygon.material = deselectMaterial;
    }
    if (Cesium.defined(newEntity) && Cesium.defined(newEntity.polygon)) {
        newEntity.polygon.material = selectedMaterial;
    }
    previousEntity = newEntity;
});