当前位置: 首页 > article >正文

Cesium快速入门到精通系列教程一:打造第一个Cesium应用

一、打造第一个Cesium应用

1、官方渠道下载Cesium(可选择历史版本)

​​GitHub Releases页面​​:https://github.com/CesiumGS/cesium/releases

访问 Cesium GitHub Releases,此处列出了所有正式发布的版本。

通过标签(如 v1.95.0)选择目标版本,下载对应的压缩包(包含源码、构建文件和网页)。

​​优势​​:获取官方认证版本,附带完整变更日志和修复记录。

2、下载解压后依次执行以下命令,可以在本地运行Cesium:

yarn install
yarn start

3、Vue3中使用Cesium:

npm create vue@latest #安装当前最新版本的Vue3
cd cesium1.93 
npm install
npm i cesium@1.93 #安装cesium1.93

 以上命令执行完成后,将node_modules中cesium的以下四个目录复制到public目录:

另外,将node_modules中cesium的Widgets目录复制到src目录: 

App.vue中代码如下:

<template><div id="cesiumContainer"></div>
</template><script setup>
Cesium.Ion.defaultAccessToken = '你的AccessTokens';
import { onMounted } from "vue";
import * as Cesium from "cesium";
import "./Widgets/widgets.css";window.CESIUM_BASE_URL = "/"; // 设置Cesium静态资源路径(public目录)onMounted(() => {const viewer = new Cesium.Viewer("cesiumContainer");})</script><style scoped>
*{margin: 0;padding: 0;
}#cesiumContainer{width: 100wh;height: 100vh;
}
</style>

cmd中执行

npm run dev

二、Cesium基础设置:

<template><div id="cesiumContainer"></div>
</template><script setup>
Cesium.Ion.defaultAccessToken = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJqdGkiOiI4MzFiNGJmOS1jYzBmLTQyYjYtOTNhOS0wMThjZWE3YzM0MGMiLCJpZCI6MjU5MTEyLCJpYXQiOjE3MzI5NzM5MzB9.RUpB02gjxFwpqmbND4OKWyR7-VntYuohtjlXklFB6UE'
import { onMounted } from "vue";
import * as Cesium from "cesium";
import "./Widgets/widgets.css";window.CESIUM_BASE_URL = "/"; // 设置Cesium静态资源路径(public目录)// 设置Cesium默认视角
Cesium.Camera.DEFAULT_VIEW_RECTANGLE = Cesium.Rectangle.fromDegrees(89.5, // 西边经度20.4, // 南边维度110.4, // 东边经度61.2) // 北边维度onMounted(() => {const viewer = new Cesium.Viewer("cesiumContainer");viewer.cesiumWidget.creditContainer.style.display = "none"; // 隐藏logo
})</script><style scoped>
* {margin: 0;padding: 0;
}#cesiumContainer {width: 100wh;height: 100vh;
}
</style>
// 设置Cesium默认视角
Cesium.Camera.DEFAULT_VIEW_RECTANGLE = Cesium.Rectangle.fromDegrees(89.5, // 西边经度20.4, // 南边维度110.4, // 东边经度61.2) // 北边维度
viewer.cesiumWidget.creditContainer.style.display = "none"; // 隐藏logo

三、viewer查看器设置

  const viewer = new Cesium.Viewer("cesiumContainer", {geocoder: false, //设置搜索框是否可见homeButton: false, // 返回初始位置键是否可见sceneModePicker: false, // 查看器选择模式选择键是否可见baseLayerPicker: false, // 图层选择键是否可见navigationHelpButton: false, // 帮助按钮是否可见animation: false, // 播放控制按钮是否可见timeline: false, // 时间轴是否可见fullscreenButton: false, // 全屏按钮是否可见});

四、Cesium自定义地图与地图叠加

1、天地图加载

天地图是中国国家基础地理信息系统,由中国测绘地理信息局和国家地理信息公共服务平台共同开发和运营。它提供多项地理信息服务,包括地图数据、地理编码、路径规划以及地理搜索等。天地图的目标是为各行业提供高质量、全面的地理信息数据和解决方案。

天地图调用申请:

登录已有账号。如果尚未注册,请先进行注册。

访问天地图首页,进入开发资源,然后点击地图API。

在地图API页面,点击申请Key。

选择“创建新应用”,并填写应用的详细信息。

申请完成后,您可以查看新应用的Key。

在服务调用时,请使用刚刚申请到的Key作为Token。

天地图影像加载:

中国的天地图(Tianditu)提供了丰富的影像与矢量数据,通过 Cesium 可以轻松地将天地图的服务加载到三维地球中。下面是如何加载天地图的矢量图层、影像图层及其注记图层的示例。

矢量底图:

  const MAP_KEY = '你的天地图访问密钥';const viewer = new Cesium.Viewer("cesiumContainer", {imageryProvider: new Cesium.WebMapTileServiceImageryProvider({url: "http://t0.tianditu.com/vec_w/wmts?service=wmts&request=GetTile&version=1.0.0&LAYER=vec&tileMatrixSet=w&TileMatrix={TileMatrix}&TileRow={TileRow}&TileCol={TileCol}&style=default&format=tiles&tk=" + MAP_KEY,layer: "tdtVecBasicLayer",style: "default",format: "image/jpeg",tileMatrixSetID: "GoogleMapsCompatible"})});

矢量注记:

  const MAP_KEY = '你的天地图访问密钥';const viewer = new Cesium.Viewer("cesiumContainer", {imageryProvider: new Cesium.WebMapTileServiceImageryProvider({url: "http://t0.tianditu.com/cva_w/wmts?service=wmts&request=GetTile&version=1.0.0&LAYER=cva&tileMatrixSet=w&TileMatrix={TileMatrix}&TileRow={TileRow}&TileCol={TileCol}&style=default.jpg&tk=" + MAP_KEY,layer: "tdtAnnoLayer",style: "default",format: "image/jpeg",tileMatrixSetID: "GoogleMapsCompatible"})});

影像底图:

  const MAP_KEY = '你的天地图访问密钥';const viewer = new Cesium.Viewer("cesiumContainer", {imageryProvider: new Cesium.WebMapTileServiceImageryProvider({url: "http://t0.tianditu.com/img_w/wmts?service=wmts&request=GetTile&version=1.0.0&LAYER=img&tileMatrixSet=w&TileMatrix={TileMatrix}&TileRow={TileRow}&TileCol={TileCol}&style=default&format=tiles&tk=" + MAP_KEY,layer: "tdtBasicLayer",style: "default",format: "image/jpeg",tileMatrixSetID: "GoogleMapsCompatible"})});

影像注记:

  const MAP_KEY = '你的天地图访问密钥';const viewer = new Cesium.Viewer("cesiumContainer", {imageryProvider: new Cesium.WebMapTileServiceImageryProvider({url: "http://t0.tianditu.com/cia_w/wmts?service=wmts&request=GetTile&version=1.0.0&LAYER=cia&tileMatrixSet=w&TileMatrix={TileMatrix}&TileRow={TileRow}&TileCol={TileCol}&style=default.jpg&tk=" + MAP_KEY,layer: "tdtAnnoLayer",style: "default",format: "image/jpeg",tileMatrixSetID: "GoogleMapsCompatible"})});

使用 Cesium.WebMapTileServiceImageryProvider 类来添加一个WMTS(Web Map Tile Service)图层。具体配置包括:

  • url:指定底图的服务地址,这里我们使用天地图提供的矢量服务。
  • layer:图层的名称。
  • style:图层样式,这里使用默认样式。
  • format:指定图块格式为JPEG。
  • tileMatrixSetID:使用Google Maps兼容的平铺矩阵集。

该配置将返回一个矢量底图,可以在Cesium视图中进行渲染。

调整色调和对比度:

为了创建一个视觉上更具冲击力的暗黑色系效果,我们对底图的色调和对比度进行了调整:

imagery.hue = 3; // 图层色调  
imagery.contrast = -1.2; // 图层对比度  
  • imagery.hue:此属性用于调整底图的色调。例如设置为3可能会使颜色偏向于蓝色或绿色,具体效果依赖于底图的原始色调。
  • imagery.contrast:此属性设置对比度。负值(如-1.2)会降低对比度,使图像的颜色更加柔和,并增强暗色区域的细节,从而使底图视觉上更加协调和沉稳。

2、高德地图加载

在 Cesium 中加载高德地图作为底图,可以通过配置 Cesium 的 ImageryProvider 来实现。高德地图提供了多种图层服务:

加载高德地图矢量图层

// 创建高德地图矢量图层
const gaodeVector = new Cesium.UrlTemplateImageryProvider({url: 'http://webrd0{s}.is.autonavi.com/appmaptile?lang=zh_cn&size=1&scale=1&style=8&x={x}&y={y}&z={z}',subdomains: ['1', '2', '3', '4'],maximumLevel: 19,credit: '高德地图'
});// 添加到地图
viewer.imageryLayers.addImageryProvider(gaodeVector);

加载高德地图影像图层

// 创建高德地图影像图层
const gaodeImagery = new Cesium.UrlTemplateImageryProvider({url: 'http://webst0{s}.is.autonavi.com/appmaptile?style=6&x={x}&y={y}&z={z}',subdomains: ['1', '2', '3', '4'],maximumLevel: 19,credit: '高德地图'
});// 添加到地图
viewer.imageryLayers.addImageryProvider(gaodeImagery);

加载高德地图标注图层

标注图层通常需要叠加在矢量或影像图层之上:

// 创建高德地图标注图层
const gaodeLabels = new Cesium.UrlTemplateImageryProvider({url: 'http://webst0{s}.is.autonavi.com/appmaptile?style=8&x={x}&y={y}&z={z}',subdomains: ['1', '2', '3', '4'],maximumLevel: 19,credit: '高德地图'
});// 添加到地图(通常叠加在影像图层之上)
viewer.imageryLayers.addImageryProvider(gaodeLabels);

完整示例代码

下面是一个完整的示例,展示如何在 Cesium 中同时加载高德地图的影像图层和标注图层:

onMounted(() => {const MAP_KEY = '你的Cesium token';const viewer = new Cesium.Viewer("cesiumContainer", {geocoder: false, //设置搜索框可见homeButton: false, // 返回初始位置键是否可见sceneModePicker: false, // 查看器选择模式选择键是否可见baseLayerPicker: false, // 图层选择键是否可见navigationHelpButton: false, // 是否显示帮助按钮animation: false, // 是否显示播放控制按钮timeline: false, // 是否显示时间轴fullscreenButton: false, // 是否显示全屏按钮})// 移除默认图层viewer.imageryLayers.removeAll();// 创建高德地图影像图层const gaodeImagery = new Cesium.UrlTemplateImageryProvider({url: 'http://webst0{s}.is.autonavi.com/appmaptile?style=6&x={x}&y={y}&z={z}',subdomains: ['1', '2', '3', '4'],maximumLevel: 19,credit: '高德地图'});// 创建高德地图标注图层const gaodeLabels = new Cesium.UrlTemplateImageryProvider({url: 'http://webst0{s}.is.autonavi.com/appmaptile?style=8&x={x}&y={y}&z={z}',subdomains: ['1', '2', '3', '4'],maximumLevel: 19,credit: '高德地图'});// 添加图层到地图viewer.imageryLayers.addImageryProvider(gaodeImagery);viewer.imageryLayers.addImageryProvider(gaodeLabels);viewer.cesiumWidget.creditContainer.style.display = "none"; // 隐藏logo
});

3、地图叠加

多源影像图层叠加​​

onMounted(() => {const MAP_KEY = '天地图MAP_KEY';const viewer = new Cesium.Viewer("cesiumContainer", {geocoder: false, //设置搜索框可见homeButton: false, // 返回初始位置键是否可见sceneModePicker: false, // 查看器选择模式选择键是否可见baseLayerPicker: false, // 图层选择键是否可见navigationHelpButton: false, // 是否显示帮助按钮animation: false, // 是否显示播放控制按钮timeline: false, // 是否显示时间轴fullscreenButton: false, // 是否显示全屏按钮});// 加载高德矢量地图
const amapLayer = new Cesium.UrlTemplateImageryProvider({url: 'http://webrd0{s}.is.autonavi.com/appmaptile?lang=zh_cn&size=1&scale=1&style=8&x={x}&y={y}&z={z}',subdomains: ['1', '2', '3', '4'],maximumLevel: 19,credit: '高德地图'
});// 加载天地图卫星影像
const tiandituLayer = new Cesium.WebMapTileServiceImageryProvider({url: "http://t0.tianditu.com/vec_w/wmts?service=wmts&request=GetTile&version=1.0.0&LAYER=vec&tileMatrixSet=w&TileMatrix={TileMatrix}&TileRow={TileRow}&TileCol={TileCol}&style=default&format=tiles&tk=" + MAP_KEY,layer: "tdtImgBasicLayer",style: "default",format: "image/jpeg",tileMatrixSetID: "GoogleMapsCompatible"
});// 添加到图层集合
viewer.imageryLayers.addImageryProvider(amapLayer);
viewer.imageryLayers.addImageryProvider(tiandituLayer);viewer.cesiumWidget.creditContainer.style.display = "none"; // 隐藏logo
})

通过viewer.imageryLayers数组顺序控制图层叠加层级,后添加的图层显示在最上层。

控制图层顺序和透明度

onMounted(() => {const viewer = new Cesium.Viewer("cesiumContainer", {geocoder: false, //设置搜索框可见homeButton: false, // 返回初始位置键是否可见sceneModePicker: false, // 查看器选择模式选择键是否可见baseLayerPicker: false, // 图层选择键是否可见navigationHelpButton: false, // 是否显示帮助按钮animation: false, // 是否显示播放控制按钮timeline: false, // 是否显示时间轴fullscreenButton: false, // 是否显示全屏按钮});// 移除默认图层viewer.imageryLayers.removeAll();// 添加高德地图矢量图层const gaodeVector = new Cesium.UrlTemplateImageryProvider({url: 'http://webrd0{s}.is.autonavi.com/appmaptile?lang=zh_cn&size=1&scale=1&style=8&x={x}&y={y}&z={z}',subdomains: ['1', '2', '3', '4'],maximumLevel: 19,credit: '高德地图'});viewer.imageryLayers.addImageryProvider(gaodeVector);// 添加高德地图标注图层(叠加在矢量图层之上)const gaodeLabels = new Cesium.UrlTemplateImageryProvider({url: 'http://webst0{s}.is.autonavi.com/appmaptile?style=8&x={x}&y={y}&z={z}',subdomains: ['1', '2', '3', '4'],maximumLevel: 19,credit: '高德地图'});const layer2 = viewer.imageryLayers.addImageryProvider(gaodeLabels);const layers = viewer.imageryLayers;// 设置图层透明度(0.0完全透明,1.0完全不透明)const layer = layers.get(0);  // 获取第二个图层layer.alpha = 0.2;  // 设置70%透明度// 或者// layer2.alpha = 0.2;
})

http://www.lryc.cn/news/2397568.html

相关文章:

  • 力扣题解106:从中序与后序遍历序列构造二叉树
  • Vue传参Props还是Pinia
  • 学习STC51单片机25(芯片为STC89C52RCRC)
  • 宁夏农业科技:创新引领,赋能现代农业新篇章
  • Accelerate 2025北亚巡展正式启航!AI智御全球·引领安全新时代
  • 005学生心理咨询评估系统技术解析:搭建科学心理评估平台
  • azure devops 系列 - 常用的task
  • 贪心算法应用:多重背包启发式问题详解
  • 【保姆级教程】PDF批量转图文笔记
  • Pytest Fixture 是什么?
  • Spring Boot 基础知识全面解析:快速构建企业级应用的核心指南
  • 数据库系统概论(十一)SQL 集合查询 超详细讲解(附带例题表格对比带你一步步掌握)
  • [mcu]系统频率
  • clickhouse如何查看操作记录,从日志来查看写入是否成功
  • 5G-A:开启通信与行业变革的新时代
  • 鸿蒙OS在UniApp中集成Three.js:打造跨平台3D可视化应用#三方框架 #Uniapp
  • Vue 3 组件化设计实践:构建可扩展、高内聚的前端体系
  • 腾讯云 Python3.12.8 通过yum安装 并设置为默认版本
  • 鸿蒙OSUniApp页面切换动效实战:打造流畅精致的转场体验#三方框架 #Uniapp
  • React 泛型组件:用TS来打造灵活的组件。
  • TDengine 集群运行监控
  • 图像任务中的并发处理:线程池、Ray、Celery 和 asyncio 的比较
  • DeepSeek 赋能智能物流:解锁仓储机器人调度的无限可能
  • C#上传图片后压缩
  • uniapp路由跳转toolbar页面
  • 【linux】知识梳理
  • PostgreSQL 内置扩展列表
  • NodeMediaEdge快速上手
  • ChatOn:智能AI聊天助手,开启高效互动新时代
  • 基于Vue3.0的【Vis.js】库基本使用教程(002):图片知识图谱的基本构建和设置