天天看點

超圖supermap實作BIM模型的屬性查詢

有了BIM+GIS,實作室内室外一體化,室内導航等不再是夢想了哈!

最近為了學bim+gis,斷斷續續開始學超圖産品,還是小白一枚,若分享中有錯誤,歡迎批評指正!

關于BIM的屬性查詢,之前在網上沒找到合适的解決方案,走了不少彎路,終于解決了!廢話不多說,直接上幹貨!

相信有不少小夥伴像我一樣,學習時候參考的這個範例http://support.supermap.com.cn:8090/webgl/examples/editor.html#S3MTiles_BIM

超圖supermap實作BIM模型的屬性查詢

但是,這是個坑啊!入坑的小夥伴們讓我看到你們的雙手,知道自己不是一個人

超圖supermap實作BIM模型的屬性查詢

我聯系了超圖的技術人員,給出的答複是這個BIM模型是矢量面貼上去的,釋出的資料服務是多個資料聚合雲雲的(具體說法忘了,總之不要用這個撒)

需要參考的正确範例是這個http://support.supermap.com.cn:8090/webgl/examples/editor.html#S3MTiles

超圖supermap實作BIM模型的屬性查詢

先把我的代碼貼上來吧,後面解釋一下幾點需要注意的地方。

<!DOCTYPE html>
<html >
<head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=Edge,chrome=1">
    <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, minimum-scale=1, user-scalable=no">
    <title>屬性查詢</title>
    <link href="./Build/Cesium/Widgets/widgets.css" target="_blank" rel="external nofollow"  rel="stylesheet">
    <link href="./css/pretty.css" target="_blank" rel="external nofollow"  rel="stylesheet">
    <script src="./js/jquery.min.js"></script>
    <script src="./js/config.js"></script>
    <script type="text/javascript" src="./js/require.min.js" data-main="js/main"></script>

    <style>
        html, body, #cesiumContainer {
            width: 100%; height: 100%; margin: 0; padding: 0; overflow: hidden;background-color: #000000;
        }
    </style>
</head>
<body>
<div id="cesiumContainer"></div>
<div id='loadingbar' class="spinner">
    <div class="spinner-container container1">
        <div class="circle1"></div>
        <div class="circle2"></div>
        <div class="circle3"></div>
        <div class="circle4"></div>
    </div>
    <div class="spinner-container container2">
        <div class="circle1"></div>
        <div class="circle2"></div>
        <div class="circle3"></div>
        <div class="circle4"></div>
    </div>
    <div class="spinner-container container3">
        <div class="circle1"></div>
        <div class="circle2"></div>
        <div class="circle3"></div>
        <div class="circle4"></div>
    </div>
</div>
<blockquote id="bubble" class="bubble">

    <h2 id="title"></h2>
    <p id="des" class="word"></p>

</blockquote>
<script type="text/javascript">
    function onload(Cesium) {

        var infoboxContainer = document.getElementById("bubble");
        //初始化viewer部件
        var viewer = new Cesium.Viewer('cesiumContainer',{
            imageryProvider: new Cesium.BingMapsImageryProvider({
                url : 'https://dev.virtualearth.net',
                mapStyle : Cesium.BingMapsStyle.AERIAL
            })
        });

        viewer.scene.undergroundMode = true; //設定開啟地下場景
        viewer.customInfobox = infoboxContainer;
        var scene = viewer.scene;
        var canvas = scene.canvas;
        var widget = viewer.cesiumWidget;
        $('#loadingbar').remove();
        try {
            //添加S3M圖層服務
            var promise = scene.addS3MTilesLayerByScp('http://localhost:8090/iserver/services/3D-JiaNianHuaZhan2/rest/realspace/datas/[email protected]建築整合/config', {
                name: 'jinjiang'
            });
            Cesium.when(promise, function (layer) {
                if(!scene.pickPositionSupported){
                    alert('不支援深度拾取,屬性查詢功能無法使用!');
                }
                //設定屬性查詢參數
                layer.setQueryParameter({
                    url: 'http://localhost:8090/iserver/services/data-JiaNianHuaZhan/rest/data',
                    dataSourceName: '建築整合',
                    dataSetName: 'PrjRegionResult',
                    keyWord: 'SmID'
                });
                //設定相機視角
                scene.camera.setView({
                    //将經度、緯度、高度的坐标轉換為笛卡爾坐标
                    destination : new Cesium.Cartesian3.fromDegrees(120.398294317173950,36.117298362827277,50),
                    orientation : {
                        heading : 4.7793869967010565,
                        pitch : -0.5899023527373464,
                        roll : 8.539835505416704e-12
                    }
                });


            }, function (e) {
                if (widget._showRenderLoopErrors) {
                    var title = '渲染時發生錯誤,已停止渲染。';
                    widget.showErrorPanel(title, undefined, e);
                }
            });
        }
        catch (e) {
            if (widget._showRenderLoopErrors) {
                var title = '渲染時發生錯誤,已停止渲染。';
                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){
            console.log(feature);
            var title = Cesium.defaultValue(feature.NAME,'');
            var description=new Array()
            description[0]=Cesium.defaultValue("SMID:"+feature.SMID,'');
            description[1]=Cesium.defaultValue("SMSDRIW:"+feature.SMSDRIW,'');
            description[2]=Cesium.defaultValue("SMSDRIN:"+feature.SMSDRIN,'');
            description[3]=Cesium.defaultValue("ELEMENTID:"+feature.ELEMENTID,'');
            title.innerText = title;
            des.innerText = description;
        });
    }
</script>
</body>
</html>
           

回到小白的解決曆程上來:

1.關于BIM模型的服務,你釋出對了嗎?

需要注意的幾個點:

(1)BIM模型的資料源添加到場景中(友情提示,減少出錯機會,初學者最好先用一個圖層)

(2)打開場景,選擇上方工具條中的【對象操作】->【截面與投影】->【投影面】,選擇對應資料擷取其投影面資料(非常重要!!!不然資料量太大,想進行屬性查詢?不存在可能性的)

超圖supermap實作BIM模型的屬性查詢
超圖supermap實作BIM模型的屬性查詢

(3)場景右鍵生成緩存,儲存并關閉場景(關閉很重要!!!同一資料不能同時在desktop 和iServer中打開)

超圖supermap實作BIM模型的屬性查詢

生成場景緩存時會有這樣的提示,我就一個建議,别聽它忽悠,别聽它吓唬你!勇敢的生成場景緩存吧!離革命勝利又近了一步啦!

超圖supermap實作BIM模型的屬性查詢

根據個人喜好修改下路徑啥的,然後坐等進度條跑完。再提醒一次,完事兒記得儲存并關閉!因為檔案型資料源具有獨占性!!!

(4)然後打開SUPERMAP ISERVER進行服務的釋出,包括REST三維服務和資料服務!

超圖supermap實作BIM模型的屬性查詢

我的iServer是免安裝版的,是以要先start.bat啟動服務.服務啟動之後通路iserver就是這個界面。釋出服務需要選擇服務管理。

超圖supermap實作BIM模型的屬性查詢
超圖supermap實作BIM模型的屬性查詢

個人經驗:這個路徑盡量不要包含中文,否則點選下一步沒反應!

超圖supermap實作BIM模型的屬性查詢

選擇這兩種服務類型點選下一步釋出即可。然後釋出的資料服務就可以用在上述的DEMO代碼中調試檢視效果啦!給大家看下我的效果。作為一個妹子,我也深知這樣的界面醜到你了,哈哈,我也覺得彈窗好醜,功能實作了最重要。

超圖supermap實作BIM模型的屬性查詢

如果您有任何問題,歡迎聯系我,我們一起讨論呀

超圖supermap實作BIM模型的屬性查詢