cesium实现加载城市三维建筑物

方法一
首选将shp文件转换为cesium可以加载的geojson文件,在线转换工具,使用cesium的GeoJsonDataSource接口类,根据建筑物高度上色加载geojson文件
代码如下
         var geojsonOptions = {
            clampToGround : true //使数据贴地
        };
        var entities;
        var promise =Cesium.GeoJsonDataSource.load('../data/json/testData.json', geojsonOptions);
        promise.then(function (dataSource) {
            viewer.dataSources.add(dataSource);
            entities =dataSource.entities.values;
            viewer.zoomTo(entities);
            for (var i = 0; i < entities.length;i++) {
                var entity = entities[i];
                var lvalue = entity.properties._Height._value;
                var color;
                if(lvalue<10){
                    color = "151,232,173";
                }
                else if(lvalue>=10&&lvalue<20){
                    color = "244,217,99";
                }
                else if(lvalue>=20&&lvalue<30){
                    color = "247,180,45";
                }
                else if(lvalue>=30&&lvalue<45){
                    color = "241,147,3";
                }
                else if(lvalue>=45&&lvalue<60){
                    color = "239,117,17";
                }
                else if(lvalue>=60&&lvalue<70){
                    color = "238,88,31";
                }
                else if(lvalue>=70&&lvalue<80){
                    color = "224,63,22";
                }
                else{
                    color = "208,36,14";
                }
                entity.polygon.name = entity.properties._Floor._value;
                entity.polygon.fill = true;
                entity.polygon.material = Cesium.Color.fromCssColorString("rgb("+color+")");
                entity.polygon.extrudedHeight = lvalue;
                entity.polygon.outline = false;
                entity.polygon.outlineColor = Cesium.Color.YELLOW;
            }
        });
结果如下

å¨è¿éæå¥å¾çæè¿°
方法二
采用cesiumlab工具将shp文件转换为cesium可以加载的3dtiles格式,建筑数据为白模型。有纹理的模型需要在cesiumlab中自行设置
代码如下
        // 加载tileset.json
        var tileset = new Cesium.Cesium3DTileset({
            url:"../data/Tilesets/testdata-No/tileset.json"
        });
        viewer.scene.primitives.add(tileset);

        tileset.readyPromise.then(function(tileset) {
            viewer.zoomTo(tileset, new Cesium.HeadingPitchRange(0, -2.0, Math.max(100.0 - tileset.boundingSphere.radius, 0.0)));
        }).otherwise(function(error) {
            throw(error);
        });
结果如下

å¨è¿éæå¥å¾çæè¿°

综合对比两种方法,发现方法二加载速度比方法一更快,加载的数据量更多
————————————————
原文链接:https://blog.csdn.net/u013270065/article/details/102801446

猜你喜欢

转载自blog.csdn.net/qq_26280383/article/details/114289961