加载3DTiles

1.构造方法:

const manager = new MchCesium.TilesetManager(viewer);

2.参数说明:

viewer:Cesium创建的view实例。

3.load(id, url, options) 加载3DTiles

manager.load(id, url,options);

参数说明:

id{string}实例唯一标识

url{string}tileset.json路径

options{object} 配置项(其中ssError:用于设置驱动细节细化级别的最大屏幕空间误差)

应用实例:

// 方式1: 加载3DTiles(不设置基准点)

manager.load("model1", url1, { ssError: 1 }).then(() => {

     // 定位到模型

    manager.flyTo("model1");

});

// 方式2:加载3DTiles(设置基准点)

manager.load("model2", url2).then(() => {

    // 设置自定义基准点(经度116.39093087,纬度39.91218836,基准高度50)

    manager.setReferenceCoordinates("model2", [116.39093087, 39.91218836, 50]);

    // 定位到基准点位置

    manager.flyTo("model2");

});

4.setVisible(id, visible) 设置显示/隐藏

隐藏:manager.setVisible(id, false);

显示:manager.setVisible(id, true);

参数说明:

id{string}实例唯一标识

visible{Boolean}显示状态:true显示,false隐藏

5.destroy(id) 销毁

manager.destroy(id);

参数说明:

id{string}实例唯一标识

6.flyTo(id, viewParams = {})定位到tileset

manager.flyTo(id, viewParams);

参数说明:

id{string}实例唯一标识

viewParams {object} 选填,视角参数(longitude, latitude, height);

7.changeHeight(id, height)调整高度

manager.changeHeight(id, height);

参数说明:

id{string}实例唯一标识

height{Number} 高度

8.setReferenceCoordinates(id, position)设置自定义基准点

 manager.setReferenceCoordinates(id, position);

参数说明:

Id {string} - 实例唯一标识

position {Array|null} - 基准点坐标[经度,纬度,高度];传null则清除基准点(恢复原始位置)

9.代码实例

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="description" content="cesium开发加载3DTiles" />
        <meta name="keywords" content="microbee-http,软件开发框架,cesium,3DTiles" />
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <script src="https://mhc.ixiera.com/mhc/main.js"></script>
        <script src="https://mhc.ixiera.com/mhc/Cesium-1.120/Build/Cesium/Cesium.js"></script>
        <script src="https://mhc.ixiera.com/mhc/Cesium3DTile.js"></script>
        <script src="../mhc/Cesium3DTile.js"></script>
        <title>加载3DTiles-cesium</title>
        <style type="text/css">
            .btnsBox {
                position: fixed;
                top: 20px;
                left: 20px;
                width: 70%;
                height: 30px;
            }
                        
            .btnsBox button {
                width: 200px;
                margin-bottom: 15px;
                background-color: #fff;
                border-radius: 2px;
                color: #333;
                line-height: 30px;
                margin-right: 15px;
                font-size: 12px;
                padding: 0 15px;
                cursor: pointer;
            }
        </style>
    </head>
    <body>
        <div id="cesiumContainer"></div>
        <div class="btnsBox">
            <button onclick="renderModel2()">加载模型2(设置基准点)</button>
            <button onclick="setHeightModel2()">模型2调整高度</button>
            <button onclick="fousModel2()">聚焦模型2</button>
            <button onclick="destroyModel2()">销毁模型2</button>
            <br>
            <button onclick="renderModel1()">加载模型1(不设置基准点)</button>
            <button onclick="setHeightModel1()">模型1调整高度</button>
            <button onclick="fousModel1()">聚焦模型1</button>
            <button onclick="destroyModel1()">销毁模型1</button>
            <br>
            <button onclick="setoriginal()">模型2清除基准点恢复原始位置</button>
            <button onclick="hide()">隐藏所有模型</button>
            <button onclick="show()">显示所有模型</button>
        </div>
        <script>
            const view3D = MchCesium.init('cesiumContainer', true);
            
            var url1 = 'https://mhc.ixiera.com/mhc/3dtiles-master/tileset.json';
            var url2 = 'https://mhc.ixiera.com/plugins/final_3dtiles/tileset.json';
            
            // 初始化管理器
            const manager = new MchCesium.TilesetManager(MchCesium.viewer);
            
            function renderModel1(){
                // 加载3DTiles(不设置基准点)
                manager.load("model1", url1, { ssError: 1 }).then(() => {
                    // 定位到模型
                    manager.flyTo("model1");
                });
            }
            
            function renderModel2(){
                // 加载3DTiles(设置基准点)
                manager.load("model2", url2).then(() => {
                    // 设置自定义基准点(经度116.39093087,纬度39.91218836,基准高度0)
                    manager.setReferenceCoordinates("model2", [116.39093087, 39.91218836, 50]);
                
                    // 定位到基准点位置
                    manager.flyTo("model2");
                });
            }
            
            function fousModel1(){
                // 定位到模型
                manager.flyTo("model1");
            }
            
            function fousModel2(){
                // 定位到模型
                manager.flyTo("model2");
            }
            
            function hide(){
                manager.setVisible('model1', false);
                manager.setVisible('model2', false);
            }
            
            function show(){
                manager.setVisible('model1', true);
                manager.setVisible('model2', true);
            }
            
            function setHeightModel1(){
                // 直接调整高度(基于模型原始位置)
                manager.changeHeight("model1", 80); // 原始位置高度调整为80米
            }
            
            function setHeightModel2(){
                // 调整高度(基于该基准点,高度改为70米)
                manager.changeHeight("model2", 100);
            }
            
            function setoriginal(){
                // 可选:清除基准点,恢复原始位置
                manager.setReferenceCoordinates("model2", null);
                manager.flyTo("model2");
            }
            
            function destroyModel1(){
                manager.destroy('model1');
            }
            
            function destroyModel2(){
                manager.destroy('model2');
            }
            
            // 初始化 - 默认聚焦点 - 相机定位
            MchCesium.viewer.camera.flyTo({
                destination: Cesium.Cartesian3.fromDegrees(116.39093087, 39.91218836, 500),
                orientation: {
                    heading: Cesium.Math.toRadians(0),
                    pitch: Cesium.Math.toRadians(-80), // 降低俯视角度,看清模型自身朝向
                    roll: 0
                },
                duration: 2,
                complete: () => {
                    // 聚焦点 - 便于比较设置基准点位置
                    const entity = MchCesium.viewer.entities.add({
                        name: "点",
                        show: true,
                        position: Cesium.Cartesian3.fromDegrees(116.39093087, 39.91218836, 0),
                        point: {
                            color: Cesium.Color.YELLOW, // 颜色
                            pixelSize: 10, // 大小
                            heightReference: Cesium.HeightReference.CLAMP_TO_GROUND,
                            disableDepthTestDistance: Number.POSITIVE_INFINITY,  // 无论如何缩放,标记点不被地形遮挡
                            zIndex:999999,
                        }
                    });
                }
            });
            
        </script>
    </body>

</html>

10.效果展示:

Demo地址:

https://mhc.ixiera.com/html/cesiumDemo/demo_3DTiles.html

本文档来自—MCHMAP 丨 地图引擎平台