Cesium傾斜模型單體化

xietao20發表於2020-10-31

Cesium傾斜模型單體化

前言

目前Cesium三維專案很多是使用傾斜攝影模型,但是傾斜模型只是一張好看的皮,不能進行互動操作,所以需要後期實現單體化功能,單體化有很多種,比如樓棟單體化、分層單體化、更細的有分戶單體化。

實現效果

在這裡插入圖片描述

實現思路

傾斜模型單體化需要資料結合程式碼來實現,資料生產需要採集每層的面座標串等資訊。有了資料後在Cesium中通過Entity的方式渲染出來。

關鍵程式碼

 //處理查詢結果
    handleQueryResult(result) {
        //清除上一次結果
        this.clearQueryResult();
        //如果查詢成功 那麼返回的結果應該是一個geojson物件 型別為FeatureCollection
        let feature = result.features[0]; //取第一個要素
        if (!feature) return;
        let geometry = feature.geometry; //取要素的幾何物件
        let properties = feature.properties; //取要素的屬性資訊
        let coordinates;
        let pointArr = [];
        if (geometry.type == "MultiPolygon") { //多面 房屋面一般不會出現空洞等現象 如果有需要另做處理
            coordinates = geometry.coordinates[0][0];
        } else if (geometry.type == "Polygon") {
            coordinates = geometry.coordinates[0];
        }

        for (let i = 0; i < coordinates.length; i++) {
            const element = coordinates[i];
            pointArr.push(element[0]);
            pointArr.push(element[1]);
            pointArr.push(0);
        }
        this.addClampFeature(pointArr);
        this.showBuildInfo(properties)
    },

    //新增貼地物件
    addClampFeature(pointArr) {
        this.clampFeature = this.viewer.entities.add({
            polygon: {
                hierarchy: new Cesium.PolygonHierarchy(Cesium.Cartesian3.fromDegreesArrayHeights(pointArr)),
                classificationType: Cesium.ClassificationType.CESIUM_3D_TILE,
                material: Cesium.Color.RED.withAlpha(0.5)
            }
        })
    },

詳情參見 Cesium實戰專欄

相關文章