如何对webgl中BIM模型进行属性查询

0 投票
1,304 浏览

我现在已经将osgb格式的BIM模型利用Webgl发布出来,想请教怎么对建筑物进行查询开发?

最新提问 5月 20, 2017 分类:  1304次浏览 | 用户: 我的超图123 (5 分)

1个回答

0 投票

(1)BIM数据导到超图平台就已经带一些属性数据,如果需要另外补充,可以在生成OSGB缓存前先添加字段,补充信息之后再生成OSGB缓存。

(2)简单的查询就是通过鼠标点选模型,然后弹出所选模型的信息,这个可以参考范例:

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

(3)复杂一点的查询是SQL查询,输入一个条件比如查某个字段“Name”,条件为Name = '超图大厦',这种缓存数据做不了,需要将原始数据用iserver发布数据服务,通过数据服务返回查询结果,再通过气泡将结果展示再球上,并且高亮查询出来的模型。请参考:

http://support.supermap.com.cn:8090/iserver/iClient/forJavaScript/examples/examples.html#queryByBounds

中的数据集查询。

最新回答 5月 22, 2017 用户: 邹涛 名扬四海 (3,335 分)

您好,简单查询我参考了S3MTiles.html文件写的代码  ,应该是我不太清楚BIM的不同,所以无法实现气泡显示属性的功能。

BIM属性也是靠SmID联系的吗?

您可以在超图桌面平台idesktop找到您导过来的数据集,右键,浏览属性表就能看见属性啦。

对不起,我实在是不会怎么改参考代码来实现BIM属性查询,不知能否耽误您给帮忙看看哪些代码是需要改的?

<body>
<div id="cesiumContainer"></div>

    <blockquote id="bubble" class="example-right">
        <img id="myimg" src="./images/home_banner.jpg" width="50%" height="auto">
        <h2 id="title"></h2>
        <p id="des" class="word"></p>
        <audio controls="controls">
            <source src="./media/song.mp3" type="audio/mpeg" />
            Your browser does not support the audio tag.
        </audio>
    </blockquote>

    <script type="text/javascript">
    var host = document.location.toString().match(/file:\/\//)?"http://localhost:8090":'http://' + document.location.host;
    var viewer;
    function onload(Cesium) {
        var infoboxContainer = document.getElementById("bubble");
        viewer = new Cesium.Viewer('cesiumContainer');
        viewer.customInfobox = infoboxContainer;
        var scene = viewer.scene;
        var canvas = scene.canvas;
        var canvasWidth = canvas.width;
        var canvasHeight = canvas.height;
        var widget = viewer.cesiumWidget;
         try {
            var promise = scene.addS3MTilesLayerByScp('http://localhost:8090/iserver/services/3D-shijiao01/rest/realspace/datas/墙@CreateDatasource01/config', {
                name: '墙@CreateDatasource01'
            });
            Cesium.when(promise, function (layer) {
                //设置属性查询参数
                layer.setQueryParameter({
                    queryClazz: SuperMap,
                    url: 'http://localhost:8090/iserver/services/3D-shijiao01/rest/realspace/datas',
                    dataSourceName: 'CreateDatasource01',
                    dataSetName: '墙@CreateDatasource01',
                    keyWord: 'SmUserID'
                });
                scene.camera.setView({
                    destination: Cesium.Cartesian3.fromDegrees(115.497, 39.498, 600)
                });
            }, function (e) {
                if (widget._showRenderLoopErrors) {
                    var title = 'An error occurred while rendering.  Rendering has stopped.';
                    widget.showErrorPanel(title, undefined, e);
                }
            });
        }
        catch (e) {
            if (widget._showRenderLoopErrors) {
                var title = 'An error occurred while rendering.  Rendering has stopped.';
                widget.showErrorPanel(title, undefined, e);
            }
        }
        //添加自定义infobox
        var title = document.getElementById("title");
        var des = document.getElementById("des");
        var myimg = document.getElementById("myimg");
        viewer.pickEvent.addEventListener(function (feature) {
            var title = Cesium.defaultValue(feature.NAME, '');
            var description = Cesium.defaultValue(feature.DES, '');
            title.innerText = title;
            des.innerText = description;
            myimg.src = "./images/" + title + ".jpg";
        });
    }
    </script>

</body>

麻烦您有空指导一下可以吗?很希望能做成BIM属性查询小功能,谢谢您

额,请问您看了示范代码具体有啥不懂呢?

您这样要求太笼统了,我无法帮助您啊,您这样问。。。我就只能告诉您参考范例。
<blockquote id="bubble" class="example-right">
        <img id="myimg" src="./images/home_banner.jpg" width="50%" height="auto">
        <h2 id="title"></h2>
        <p id="des" class="word"></p>
</blockquote>


var title = document.getElementById("title");
        var des = document.getElementById("des");
        var myimg = document.getElementById("myimg");

viewer.pickEvent.addEventListener(function(feature){
            var title = Cesium.defaultValue(feature.NAME,'');
            var description = Cesium.defaultValue(feature.DES,'');
            title.innerText = title;
            des.innerText = description;
            myimg.src = "./images/" + title + ".jpg";
        });

我不知道怎么获得气泡中的标题等信息,title,des都是怎么查询到的?谢谢

您好,实质是用的JavaScript客户端的数据查询服务:

http://support.supermap.com.cn:8090/iserver/iClient/forJavaScript/examples/examples.html#queryByBounds

只是WebGL客户端把过程封装起来了。

抱歉,看了,也没看懂document.getElementById可以获取到指定url中的属性?

我不明白,我的BIM模型中的属性表中并没有name,des等属性啊,怎么获取

没有name,des等属性就获取不了啦。如果有需要,可以在生成缓存前的数据集添加这些字段,并添加属性。

我想问一下,那几句代码是实现出现气泡的,为什么我点击之后没有任何反映,连气泡都没有是怎么回事

单击选中模型,能不能看见选中效果?如果没有换个浏览器试试。

是这样,BIM模型不是每一个构件都可以选中嘛,然后,我可以选中每一个构件,但就是不出气泡,没有任何反应,同样的浏览器(火狐),示范程序可以出现气泡

那就是您哪儿没写对咯,检查检查吧。
我也遇到了相同的问题,请问大哥解决了嘛,我监视下来发现选中模型时,监听方法未生效
换个最新的iserver版本
...