大疆无人机之Cesium地图加载

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

最近在写大疆无人机项目,大疆开源代码已经不满足现有的需求;客户要求要可以绘制航线和查看3D建模画面。所以我们首先重新加载个新地图吧

一、环境搭建

我是用的是vue搭建的框架,npm安装方便,但是最近在网不好的情况下,地图加载很慢;计划后面替换成离线地图

npm install cesium vite-plugin-cesium
# or
pnpm add cesium vite-plugin-cesium
# or
yarn add cesium vite-plugin-cesium

二、使用步骤

1.引入cesium

代码如下(示例):

import { defineConfig } from "vite";
import vue from "@vitejs/plugin-vue";
import cesium from "vite-plugin-cesium";
 
// https://vitejs.dev/config/
export default defineConfig({
  plugins: [vue(), cesium()],
});

2.在模板页面中创建地图

代码如下(示例):

viewer = new Cesium.Viewer('cesiumContainer', {
    sceneMode: Cesium.SceneMode.SCENE3D,
    baseLayerPicker: false,
    shouldAnimate: true,
    terrainProvider: Cesium.createWorldTerrain(),
    geocoder: false, // 右上角 搜索
    homeButton: false, // 右上角 Home
    sceneModePicker: false, // 右上角 2D/3D 切换
    navigationHelpButton: false, // 右上角 Help
    animation: false, // 左下角 圆盘动画控件
    timeline: false, // 时间轴
    fullscreenButton: false, // 右下角 全屏控件
    vrButton: false, // 如果设置为 true,将创建 VRButton 小部件。
    scene3DOnly: true, // 每个几何实例仅以 3D 渲染以节省 GPU 内存
    infoBox: false, // 隐藏点击要素后的提示信息
  })

具体使用请查看官方文档cesium中文网

3.相机初始位置

地图是加载出来了,可是想要定位到某个点,那就还需要设置相机位置,让相机带我们去到那个点

viewer.camera.setView({
    destination: Cesium.Cartesian3.fromDegrees(lng,lat,height), // 经度, 纬度, 高度
    duration: 1
  })

4.去除logo

// 去除logo
viewer.cesiumWidget.creditContainer.style.display = "none";


总结

注意:安装cesium的时候,查看一下版本,我的是1.95,如果版本过低,部分功能受影响,更新cesium

npm install cesium@1.95

到这里地图就显示出来啦,下一章我们继续

### 加载和显示大疆 2D GeoTIFF 影像文件 为了在 Cesium加载并显示大疆 2D GeoTIFF 影像文件,可以采用两种主要方法之一:直接加载单个 GeoTIFF 文件或将 GeoTIFF 文件转换为适合 Web 显示的瓦片图层。 #### 方法一:直接加载单个 GeoTIFF 文件 通过 `GeoTiffUtil` 工具类可以直接读取 GeoTIFF 数据,并将其作为图像资源添加到 Cesium 场景中。此过程涉及初始化工具库、获取地理范围以及创建基于 Canvas 的 URL 来提供给 ImageryProvider 使用[^1]: ```javascript import GeoTiffUtil from '@/utils/tifs.js'; // 初始化 GeoTiff 解析器并处理完成后的回调函数 GeoTiffUtil.init().then((res) => { // 定义影像覆盖区域 const rectangle = Cesium.Rectangle.fromDegrees( res.rectangle[0], res.rectangle[1], res.rectangle[2], res.rectangle[3] ); // 将解析得到的结果绘制到 canvas 上转成 dataURL 格式字符串 const du = res.canvas.toDataURL(); // 添加新的影像提供商至场景视图 viewer.imageryLayers.addImageryProvider( new Cesium.SingleTileImageryProvider({ url: du, rectangle, }) ); // 设置相机视角聚焦于该矩形区域内 viewer.camera.setView({ destination: rectangle }); }); ``` 这种方法适用于较小尺寸的 GeoTIFF 文件,在浏览器端内存允许的情况下能够快速展示静态图片效果。 #### 方法二:使用 CesiumLab 进行预处理与切片 对于较大规模的数据集,则建议先利用专门软件如 ArcGIS 或者开源项目 GDAL 对原始 TIFF 图像做镶嵌操作后,再借助第三方平台比如 CesiumLab 实现高效的空间索引构建和服务发布功能[^2]。具体步骤如下: - 导出所需地图数据; - 利用 CesiumLab 平台上传源文件; - 配置输出选项(例如选择 TMS 协议、EPSG:4326 投影坐标系等); - 执行任务生成分块化的栅格产品; - 下载成果或配置在线访问链接供前端调用。 最终可以在 JavaScript 代码里按照标准方式引入这些经过优化过的遥感资料片段: ```javascript viewer.imageryLayers.addImageryProvider( new Cesium.WebMapTileServiceImageryProvider({ url : 'https://example.com/path/to/your/wmts/service', layer : 'layerName', style : 'default', format : 'image/jpeg', tileMatrixSetID : 'GoogleMapsCompatible', maximumLevel : 18 }) ); ``` 以上就是关于如何在 Cesium 应用程序内集成来自无人机拍摄所得二维正射影像的具体实现方案介绍。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值