首页 / 浏览问题 / 其他 / 问题详情
webgl属性查询,构件的选择事件
9EXP 2017年02月22日

您好!我想问构件的选择事件要怎么触发。

按照你们官网例子,webgl的属性查询是,

先设置查询参数

 layer.setQueryParameter({...});

然后在构件的选择事件里获取属性

 viewer.pickEvent.addEventListener(function(feature){...});

------------------------

我知道你们有个Layer.getSelection()方法可以获取到现在选中的构件ID,

现在有个问题是我不用layer.setQueryParameter({...})设置查询参数,为什么viewer.pickEvent.addEventListener这个事件就不能触发了?请问不绑定查询参数,要怎么触发构件的选择事件?

求助!大侠们

请问有没有for webgl的源码可以参考?

1个回答

您好,如果不能触发,您检查一下页面是不是没有引用到相关的库呀。

您仔细对比一下在线范例的吧<head>标签。

http://support.supermap.com.cn:8090/iserver/iClient/for3D/webgl/examples/S3MTiles.html

3,389EXP 2017年02月22日

不好意思!我可能没有描述清楚

现在是我没有用layer.setQueryParameter({...})这段,所以viewer.pickEvent.addEventListener这个事件就不能触发。

我想问的问题是如果调用数据服务设置查询参数,可以触发对象的单击事件吗?不是Html对象的事件,是三维图层里的对象。

viewer.pickEvent.addEventListener,现在这个事件不会触发。如果不用数据服务,请问要怎么修改?

场景里面的对象是有选择事件的,就是这个监听方法呀,您看一下浏览器控制台有没有错误信息呢
控制台没有返回信息。在事件里写了log,但是也没有打出来。感觉没有触发事件。

请教下pickevent的api在哪里呢?有没有supermap for webgl的源码可以参考下呢?
你看看你webgl本地包的源码吧。

D:\Program Files\SuperMap\supermap_iserver_8.1.0_win64_zip\iClient\for3D\webgl

把路径D:\Program Files\SuperMap\supermap_iserver_8.1.0_win64_zip\换成你的iserver安装目录即可
那个源码有的,已经下载了。

但是没有setqueryparam函数的实现源码,想参照下你们的基础JS库可以吗?

您好,这个可能参考不了,应该是加密压缩过的。具体您找找这个目录吧,\iClient\for3D\webgl\examples\js\supermap。

不过按理说触发选中对象的事件与setqueryparam应该没关系吧,setqueryparam只是一个设置查询条件的语句,您是否关注错方向了。

我也觉得是的,应该没有关系的啊?

但是我就是把你们官网例子的源码拿了下来,然后把setqueryparam那段去掉了,就进不了pickevent的事件。所以才想看看是不是在setqueryparam里有什么处理。

我们这边代码里要在setqueryparam里加上queryClazz: SuperMap,请问这段什么意思啊?不加的话不能显示图层。

我有遇到类似情况甚至更糟,加了setqueryparam也触发不了pickevent事件,模型用的是revit导出的,请问大哥指教一二
遇到同样的问题,求解!!!!
这是我们封装了的,请按照范例的格式写,是没问题的。

如果想自己触发事件,请多参考cesium提供的方法,如:

    //设置鼠标左键单击回调事件
    handler.setInputAction(function(e) {
        //首先移除之前添加的点
        viewer.entities.removeAll();
        //获取点击位置笛卡尔坐标
        var position = scene.pickPosition(e.position);

        //将笛卡尔坐标转化为经纬度坐标
        var cartographic = Cesium.Cartographic.fromCartesian(position);
        var longitude = Cesium.Math.toDegrees(cartographic.longitude);
        var latitude = Cesium.Math.toDegrees(cartographic.latitude);
        var height = cartographic.height;
        if(height < 0) {
            height = 0;
        }

        //创建弹出框信息
        var entity = new Cesium.Entity({
            name : "位置信息",
            description : createDescription(Cesium, [longitude, latitude, height])
        });
        viewer.selectedEntity = entity;

        //在点击位置添加对应点
        viewer.entities.add(new Cesium.Entity({
            point : new Cesium.PointGraphics({
                color : new Cesium.Color(1, 1, 0),
                pixelSize : 10,
                outlineColor : new Cesium.Color(0, 1, 1)
            }),
            position : Cesium.Cartesian3.fromDegrees(longitude, latitude , height + 0.5)
        }));
    }, Cesium.ScreenSpaceEventType.LEFT_CLICK);
 

拾取参考代码:

var pick = scene.pick(position)
    if(Cesium.defined(pick)) {
        if(pick.id) {
        
            }
        }

    }
请问您解决了吗,我的BIM查询也不可以
我现在也是碰到这个问题去掉layer.setQueryParameter({...})这段,viewer.pickEvent.addEventListener这个事件就不能触发
...