首页 / 浏览问题 / 三维GIS / 问题详情
WebGL BIM模型的属性查询
58EXP 2019年06月13日

进行pickEvent的监听事件,点击时并没有触发该事件。代码如下:
 

let promise = scene.open(layerService.url); //打开iserver场景服务下所有图层

Cesium.when.all(promise, layers => {

for (let layer of layers) {

let layerName = layer.name.split("@")[0];

if (layerName && layerName != "") {

let datasetName = ModelDatasetNameEnum[layerName];

layer.setQueryParameter({

//设置查询参数

url: layerService.dataUrl,

dataSourceName: "model_filter",

dataSetName: datasetName,

keyWord: "UniqueID"

});

}

}

});

if (scene.pickPositionSupported) {

this.viewer.pickEvent.addEventListener(function(feature) {

//没有进来

console.log(feature)

});

}

3 个回答

现在将发布数据服务的数据集类型修改成模型数据集就可以了,之前使用的属性表数据集。
58EXP 2019年06月18日
官网的例子似乎也是没有效果的,这个要怎么解决呢?
58EXP 2019年06月13日
官网示例中需要把119行代码修改为: dataSourceName : 'BIMBuilding',

您没有写绑定的代码

layer = scene.layers.find("WhiteBuilding@CBD_building");

整体代码

Cesium.when(promise,function(layer){
                viewer.camera.setView({
                    destination : Cesium.Cartesian3.fromDegrees(116.45 ,39.915, 15000.0)
                    });
                layer = scene.layers.find("WhiteBuilding@CBD_building");
                });

            viewer.pickEvent.addEventListener(
                console.log(1)
            );

您可以参考示例http://support.supermap.com.cn:8090/webgl/examples/editor.html#S3MTiles_BIM

6,215EXP 2019年06月13日
scene.layers.find('***')的layer 和promise里回调的layer不是同一个类型的吗?那分别是什么呢?

这样改也是不行啊,我看了一下我发布的服务和官网发布的服务,图层的等级好像是不一样的。

我发布的如下图:

官网例子的如下图:

您好,您问题解决了吗
您好,已经解决了
我看到上面说将发布数据服务的数据集类型修改成模型数据集是吗,实在桌面端里面修改吗,我也是发布的三维图层有很多个,但是demo里面的三维服务图层只有一个BIMBuilding,但是图层列表又有很多,我就是卡在这一步了
图层多少个是没有关系的。只要相应的图层,能和数据服务里的数据对应上就可以了。
...