如何解决Cesium:选择一个点时触发事件
我确信这很简单,但我已经搜索、搜索并查看了 Cesium 的文档。 我在画布上绘制了几个点。 它们根据它们所代表的内容进行颜色编码。 我现在想“点击”一个点并在 JS 中发起一个动作。 我已经成功捕获了点击事件...(鼠标左键)...但我想知道我点击了哪个点。这可能吗?如果是这样,它会是什么样子?
viewer.screenSpaceEventHandler.setInputAction(function() {
alert("left click");},Cesium.ScreenSpaceEventType.LEFT_DOWN);`
解决方法
有不同的方法可以做到这一点。如果点已创建为 Cesium“实体”,那么您可以使用 viewer.selectedEntityChanged
事件来跟踪更改。
这是一个 live demo。首先点击底部的“控制台”标签,然后点击黄色和蓝色的点。
var viewer = new Cesium.Viewer("cesiumContainer");
viewer.entities.add({
name: "Yellow Point",position: Cesium.Cartesian3.fromDegrees(-75.59777,40.03883),point: {
pixelSize: 10,color: Cesium.Color.YELLOW,},});
viewer.entities.add({
name: "Blue Point",position: Cesium.Cartesian3.fromDegrees(-79.59777,color: Cesium.Color.BLUE,});
viewer.selectedEntityChanged.addEventListener(function(selectedEntity) {
if (Cesium.defined(selectedEntity)) {
if (Cesium.defined(selectedEntity.name)) {
console.log('Selected ' + selectedEntity.name);
} else {
console.log('Unknown entity selected.');
}
} else {
console.log('Deselected.');
}
});
如果点不是实体(例如,图形基元),或者如果您需要对选择过程进行更多的手动控制,那么您正在寻找一个名为“Picking”的系统。这是一个 Sandcastle Demo showing Picking,如果您在本地构建 Sandcastle,则可以在开发人员部分找到其他选择演示。 Picking 是一个低级系统,其中 Cesium 在内部重新渲染场景的一小部分,以便确定给定屏幕空间位置的内容,例如鼠标指针或触摸位置。它是 Cesium 中几乎所有选择的动力,但它会影响性能,尤其是在使用不当时。查看器的 selectedEntity
机制 uses picking under the hood。
但是,如果您只有几个实体并且想要跟踪选择,则可以使用 selectedEntityChanged
事件,它要简单得多。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。