首页 / 浏览问题 / 三维GIS / 问题详情
viewer.selectedEntityChanged添加监听事件如何传递参数
35EXP 2023年01月04日

使用产品:iserver 10i

操作系统:win11 x64

数据类型: 文件型

问题详细描述:

viewer.selectedEntityChanged.addEventListener绑定监听事件,只有使用匿名函数时才能获取到点击的entity,如写法:

viewer.selectedEntityChanged.addEventListener(function (entity) { console.log(entity); });

但是匿名函数无法通过viewer.selectedEntityChanged.removeEventListener移除,

如果使用已定义的函数的话,可以移除,但是无法获取参数,

如以下写法:

viewer.selectedEntityChanged.addEventListener(this.mapLayerInfoShow(entity)); //mapLayerInfoShow是我已定义的函数,需要参数entity

就会显示entity未定义,无法将点击的entity信息传递给函数

2 个回答

您参考一下这个范例试一下(http://support.supermap.com.cn:8090/webgl/examples/webgl/editor.html#Geometry)这个范例中用到了selectedEntityChanged。

4,151EXP 2023年01月04日
感谢回复!

这个示例中只进行了selectedEntityChanged的函数添加,并没有函数移除操作。
您好!实体左键点击选中entity,获取到entity可以删除,具体代码如下:

var handler = new Cesium.ScreenSpaceEventHandler(scene.canvas);
        handler.setInputAction(function(e) {
            var pickedObject = scene.pick(e.position);
            if (Cesium.defined(pickedObject) && (pickedObject.id instanceof Cesium.Entity)) {
                targetEntity = pickedObject.id;
                viewer.entities.remove(targetEntity);
            } else {
                targetEntity = null;
            }
        }, Cesium.ScreenSpaceEventType.LEFT_CLICK);

也可以如楼上回复的参考范例,范例里有。
3,352EXP 2023年01月04日

感谢回复!

但是采用这种方法无法拾取到mvt图层中的要素,没法获取其属性,简而言之,这种方法无法对该案例中的MVT (supermap.com.cn)使用viewer.selectedEntityChanged.addEventListener进行替换。

...