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

article/2025/7/18 20:20:02

一、打造第一个Cesium应用

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

​​GitHub 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: '高德地图'});viewer.imageryLayers.addImageryProvider(gaodeLabels);const layers = viewer.imageryLayers;// 设置图层透明度(0.0完全透明,1.0完全不透明)const layer = layers.get(0);  // 获取第二个图层layer.alpha = 0.2;  // 设置70%透明度
})


http://www.hkcw.cn/article/ZefTFWrveh.shtml

相关文章

云南降水频繁易引发次生灾害 警惕持续降雨风险

据中央气象台消息,云南和西藏前期降水频繁,易引发次生灾害,华北和东北地区需警惕强对流天气。6月1日,南方地区出现较强降雨。安徽南部、浙江北部、江西北部、湖北中东部、湖南西南部、贵州东南部、广西北部、云南西部、西藏东南部、台湾岛南部等地部分地区出现大雨或暴雨,…

llamafactory-cli webui启动报错TypeError: argument of type ‘bool‘ is not iterable

一、问题 在阿里云Notebook上启动llamafactory-cli webui报错TypeError: argument of type ‘bool’ is not iterable This share link expires in 72 hours. For free permanent hosting and GPU upgrades, run gradio deploy from the terminal in the working directory t…

前端小案例——520表白信封

前言&#xff1a;我们在学习完了HTML和CSS之后&#xff0c;就会想着使用这两个东西去做一些小案例&#xff0c;不过又没有什么好的案例让我们去练手&#xff0c;本篇文章就提供里一个案例——520表白信封 ✨✨✨这里是秋刀鱼不做梦的BLOG ✨✨✨想要了解更多内容可以访问我的主…

【GitHub开源项目实战】开源AI界面革新者:Open WebUI MCP实战解析

【GitHub开源项目实战】开源AI界面革新者&#xff1a;Open WebUI MCP实战解析 关键词 Open WebUI、MCP、多模型统一管理、AI前端框架、推理接口接入、Agent系统集成 摘要 Open WebUI 是 2024 年底在 GitHub 上快速崛起的开源项目&#xff0c;定位为“轻量级多模型 AI 接口统…

前端弹性布局:用Flexbox构建现代网页的魔法指南

引言&#xff1a;布局的进化史 在网页设计的黑暗时代&#xff08;2010年前&#xff09;&#xff0c;开发者们用float、position和inline-block这些原始工具进行布局&#xff0c;就像用石器时代的工具建造摩天大楼。直到2012年W3C正式推出Flexbox规范&#xff0c;前端世界终于迎…

自动化打造信息影响力:用 Web Unlocker 和 n8n 打造你的自动化资讯系统

一、研究背景 在信息爆炸的时代&#xff0c;及时获取高质量行业资讯成为内容创作者、运营者以及研究者的刚需。无论是IT、AI领域的技术动态&#xff0c;还是招聘、人才市场的趋势新闻&#xff0c;第一时间掌握热点、总结观点并进行内容输出&#xff0c;正逐渐成为提升影响力与…

爬虫补环境利器webEnv使用教程,打造自己专属得JSdom

爬虫补环境利器webEnv使用教程&#xff0c;打造自己专属得JSdom 一、为什么要打造自己的JSdom二、webEnv下载通道三、wenEnv使用四、日志管理五、总结 web端JavaScript环境检测&#xff1a;SpiderTools谷歌插件 一、为什么要打造自己的JSdom 在爬虫逆向工程中&#xff0c;补环…

C#进阶-基于.NET Framework 4.x框架实现ASP.NET WebForms项目IP拦截器

在这篇文章中&#xff0c;我们将探讨如何在 ASP.NET WebForms 中实现IP拦截器&#xff0c;以便在 ASMX Web 服务方法 和 HTTP 请求 中根据IP地址进行访问控制。我们将使用自定义的 SoapExtension 和 IHttpModule 来实现这一功能&#xff0c;并根据常用的两种文本传输协议&#…

【前端开发】HTML+CSS+JavaScript前端三剑客的基础知识体系了解

前言 &#x1f31f;&#x1f31f;本期讲解关于HTMLCSSJavaScript的基础知识&#xff0c;小编带领大家简单过一遍~~~ &#x1f308;感兴趣的小伙伴看一看小编主页&#xff1a;GGBondlctrl-CSDN博客 &#x1f525; 你的点赞就是小编不断更新的最大动力 …

Open WebUI项目源码学习记录(从0开始基于纯CPU环境部署一个网页Chat服务)

感谢您点开这篇文章:D&#xff0c;鼠鼠我是一个代码小白&#xff0c;下文是学习开源项目Open WebUI过程中的一点笔记记录&#xff0c;希望能帮助到你&#xff5e; 本人菜鸟&#xff0c;持续成长&#xff0c;能力不足有疏漏的地方欢迎一起探讨指正&#xff0c;比心心&#xff5e…

C++家庭财务管理 全国信息素养大赛复赛决赛 C++小学/初中组 算法创意实践挑战赛 内部集训模拟题详细解析

C++家庭财务管理 全国信息素养大赛 C++复赛/决赛模拟训练题 博主推荐 所有考级比赛学习相关资料合集【推荐收藏】1、C++专栏 电子学会C++一级历年真题解析

“雪龙2”号今起开放预约 端午假期新体验

“雪龙2”号是我国首艘自主建造的极地科学考察破冰船。6月2日起,“雪龙2”号在海南举办了为期五天的公众开放日活动,这是该船首次抵达海南并面向公众开放,为公众带来了端午假期的新体验。活动期间,公众可以预约参观科考实验室、登船大厅以及飞行平台等多个特色区域,近距离…

太原警方:李某彪被当场控制 酒后驾车冲撞他人

太原市小店警方对一起事件作出回应:6月2日0时许,李某彪酒后与他人发生口角,随后驾车冲撞与其发生争执的人员,导致商家门口部分物品受损,两名在场人员在躲避过程中轻微受伤。民警迅速到达现场并将李某彪控制。目前案件正在进一步办理中。此前有报道称,6月2日凌晨4时许,有…

MySQL学习笔记Day9(事务)

事务是一组操作的集合&#xff0c;它是一个不可分割的工作单位&#xff0c;事务会把所有的操作作为一个整体一起向系统提交或撤销操作请求&#xff0c;即这些操作要么同时成功&#xff0c;要么同时失败。 举个例子&#xff0c;去银行转账的操作就是一个事务&#xff0c;比如A要…

黑龙江多地现粉色极光 梦幻奇观引关注

6月2日,黑龙江密山、佳木斯等地的网友在社交平台上分享了梦幻般的粉色极光视频。画面中,天空被渲染成粉紫色,宛如飘逸的丝带舞动,美得令人窒息,仿佛置身于童话世界。一位来自佳木斯的视频发布者兴奋地讲述了拍摄经历。他在6月1日晚9时左右来到郊区福胜村江边,支好设备,用…

外卖诗人王计兵回应新职 兼职阅读推广

近日,一则关于“外卖诗人”王计兵新职务的消息引起了网友的关注。据徐州市委宣传部发布的任前公示,王计兵拟任徐州市全民阅读促进会副会长。6月2日,王计兵确认了这一消息,并表示这个新职务是兼职,不会影响他继续做外卖员的工作。他表示自己将主要负责一些阅读推广活动。王…

河北秦皇岛市卢龙县发生2.5级地震 震源深度10公里

据中国地震台网正式测定,6月2日17时35分在河北秦皇岛市卢龙县发生2.5级地震,震源深度10公里,震中位于北纬39.96度,东经118.88度。震中5公里范围内平均海拔约50米。根据中国地震台网速报目录,震中周边200公里内近5年来共发生3级以上地震14次,其中最大一次是2020年7月12日在…

入户调查已开始 今年抽取30万人 反映人口特征与生活质量变化

国家统计局日前发布了《致人口固定样本跟访调查对象的一封信》,决定于2025年在全国范围内开展两次人口固定样本跟访调查。两次调查的标准时点分别为6月1日零时和11月1日零时,调查员将在6月1日至6月25日以及11月16日至12月5日期间入户开展调查工作。今年的人口固定样本跟访调查…

[Redis] Redis命令(2)

初次学习&#xff0c;如有错误还请指正 目录 Set命令 SortedSet类型 Set命令 Redis的Set结构与Java中的HashSet类似&#xff0c;可以看做是一个value为null的HashMap。因为也是一个hash表&#xff0c; 因此具备与HashSet类似的特征&#xff1a; 无序 元素不可重复 查找快…

开发规范1

Restful REST (REpresentational State Transfer)&#xff0c;表述性状态转换&#xff0c;它是一种软件架构风格。 传统 Restful Apifox测试工具 介绍:Apifox是一款集成了Api文档、Api调试、ApiMock、Api测试的一体化协作平台。 作用:接口文档管理、接口请求测试、Mock服务。…