欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Cesium-手拉手教你发布自己的离线三维地形图

程序员文章站 2022-07-12 18:22:42
...

最终效果展示

Cesium-手拉手教你发布自己的离线三维地形图

软件准备

  1. LocaSpaceViewer 4

    • 下载地址:http://www.locaspace.cn/LSV.jsp
    • 说明:这个地图数据下载软件真的是蛮好用的,可以免费方便的下载到卫星影像数据和 DEM 高程数据。作为同类型的软件还有 BigeMap,下载高程数据要收费,果断放弃。。
  2. cesiumlab

    • 下载地址:http://www.cesiumlab.com/
    • 说明:很棒的一个软件。通过这个软件我们可以将高程数据转换成地形切片数据,也可以将卫星影像数据转换成瓦片数据,这样就可以在 cesium 中直接加载自己的数据了,很方便。

下载高程数据和卫星影像数据

下载高程数据

  1. 首先在 LocaSpaceViewer 4 的编辑菜单中选择绘制矩形,绘制完成后如下图所示

    Cesium-手拉手教你发布自己的离线三维地形图

  2. 在地形下载中选择选择面,选中我们之前绘制的矩形。同理,下载级别越高,文件越大,根据自身情况选择。温馨提示,这个高程数据下载速度很慢,请耐心等待

    Cesium-手拉手教你发布自己的离线三维地形图

  3. 等待下载完成即可。

下载卫星影像数据(瓦片

  1. 选中绘制的矩形,在矩形上右击,选择数据下载,在弹出的框框中选择选择面,下载配置如下所示

    Cesium-手拉手教你发布自己的离线三维地形图

  2. 点击开始下载,选择保存路径即可。

通过 cesiumlab 将高程数据转换为地形切片数据

  1. 打开 cesiumlab 登录自己的账号,选择 数据处理 -> 地形切片,如下所示

    Cesium-手拉手教你发布自己的离线三维地形图

  2. 输入文件那里,点击添加,选择刚刚下载的高程数据,存储类型选择散列文件,输出文件设置保存路径,其余可以不用设置,如下所示

    Cesium-手拉手教你发布自己的离线三维地形图

  3. 点击确认即可。

在 Cesium 框架中加载自己的地形数据和卫星瓦片数据

脚本如下

<!DOCTYPE html>
<html lang="en">

<head>
    <!-- Use correct character set. -->
    <meta charset="utf-8" />
    <!-- Tell IE to use the latest, best version. -->
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <!-- Make the application on mobile take up the full browser screen and disable user scaling. -->
    <meta name="viewport"
        content="width=device-width, initial-scale=1, maximum-scale=1, minimum-scale=1, user-scalable=no" />
    <title>三维地图</title>
    <script type="text/javascript" src="Build/Cesium/Cesium.js"></script>
    <style>
        @import url(Build/Cesium/Widgets/widgets.css);

        html,
        body,
        #cesiumContainer {
            width: 100%;
            height: 100%;
            margin: 0;
            padding: 0;
            overflow: hidden;
        }
    </style>
</head>

<body>
    <div id="cesiumContainer" class="fullSize"></div>
    <script>

        var terrainProvider = new Cesium.CesiumTerrainProvider({
            url: "Assets/muli/muli_dem_tile"
        });

        var imageryProvider = new Cesium.UrlTemplateImageryProvider({
            url: "Assets/muli/muli_tile/{z}/{x}/{y}.png",
            maximumLevel: 19,
            // 设置边界
            rectangle: new Cesium.Rectangle(
                Cesium.Math.toRadians(102.145299911499),    // west
                Cesium.Math.toRadians(27.757043838501),     // south
                Cesium.Math.toRadians(102.348546981812),    // east
                Cesium.Math.toRadians(27.8943729400635)     // north
            )
        });

        var viewer = new Cesium.Viewer("cesiumContainer", {
            terrainProvider: terrainProvider,
            imageryProvider: imageryProvider,
            homeButton: true,
            baseLayerPicker: false,
            animation: false,
            timeline: false,
            navigationHelpButton: false,
            geocoder: false,
            sceneModePicker: false
        });

        // 隐藏版权信息
        viewer._cesiumWidget._creditContainer.style.display = "none";

        // 添加一个图层
        var layers = viewer.scene.imageryLayers;
        var globalImagery = layers.addImageryProvider(new Cesium.SingleTileImageryProvider({
            url: 'Assets/global.png'
        }));
        // 移动到底层
        layers.lower(globalImagery);
        // 调整透明度 0.0 is transparent.  1.0 is opaque.
        globalImagery.alpha = 0.5;

        // 设置相机初始位置
        var homeCameraView = {
            destination: Cesium.Cartesian3.fromDegrees(
                102.145299911499,
                27.757043838501,
                10000
            ),
            orientation: {
                heading: Cesium.Math.toRadians(0),
                pitch: Cesium.Math.toRadians(-45),
                roll: Cesium.Math.toRadians(0),
            },
        };
        viewer.camera.setView(homeCameraView);

        // 设置 Home 按钮
        viewer.homeButton.viewModel.command.beforeExecute.addEventListener(function (e) {
            e.cancel = true;
            viewer.camera.setView(homeCameraView);
        });

    </script>
</body>

</html>

部署在 Tomcat 中即可。

如果您觉得这篇文章对您有帮助,欢迎给我的 github项目 点一个⭐ ο(=•ω<=)ρ⌒☆