webgl属性查询,构件的选择事件

0 投票
2,902 浏览

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

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

先设置查询参数

 layer.setQueryParameter({...});

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

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

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

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

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

求助!大侠们

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

2月 22, 2017 分类:  2902次浏览 | 用户: scat (4 分)

1个回答

0 投票

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

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

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

2月 22, 2017 用户: 邹涛 名扬四海 (3,335 分)
我有遇到类似情况甚至更糟,加了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这个事件就不能触发
...