tileset并没有这个恶属性tileSelected
时间: 2023-08-21 15:07:56 浏览: 44
非常抱歉,我之前的回答有误。Cesium中的tileset并没有提供tileSelected事件。不过,我们可以通过监听场景的pick事件来实现选中tileset中模型的效果。下面是一个示例代码:
```javascript
// 加载tileset模型
var tileset = viewer.scene.primitives.add(new Cesium.Cesium3DTileset({
url: 'path/to/tileset.json'
}));
// 监听场景的pick事件
var handler = new Cesium.ScreenSpaceEventHandler(viewer.scene.canvas);
handler.setInputAction(function(movement) {
var pickedObject = viewer.scene.pick(movement.endPosition);
if (Cesium.defined(pickedObject) && pickedObject.tileset === tileset) {
// 获取模型的位置信息
var position = Cesium.Cartographic.toCartesian(pickedObject.primitive.contentBoundingVolume.center);
// 添加标记
var entity = viewer.entities.add({
position: position,
point: {
pixelSize: 10,
color: Cesium.Color.YELLOW
},
selected: true,
description: '属性信息和坐标信息'
});
// 点击标记时显示属性和坐标信息
entity.description.show = false;
viewer.selectedEntityChanged.addEventListener(function(selectedEntity) {
if (selectedEntity === entity) {
entity.description.show = true;
} else {
entity.description.show = false;
}
});
}
}, Cesium.ScreenSpaceEventType.LEFT_CLICK);
// 取消选择模型时移除标记
viewer.screenSpaceEventHandler.setInputAction(function(movement) {
var pickedObject = viewer.scene.pick(movement.endPosition);
if (!Cesium.defined(pickedObject) || pickedObject.tileset !== tileset) {
var entities = viewer.entities;
entities.removeAll();
}
}, Cesium.ScreenSpaceEventType.LEFT_CLICK, Cesium.KeyboardEventModifier.CTRL);
```
在上述示例代码中,我们通过监听场景的pick事件,判断选中的对象是否为tileset中的模型。如果是,则在模型位置添加一个标记,并显示模型的属性和坐标信息。我们还监听了Ctrl键的状态,当按下Ctrl键时,取消选择模型时不移除标记,方便用户查看多个模型的信息。
希望这个示例代码能够解决您的问题!