Cesium 初始搭建

前言

对 Cesium 学习与总结,后续持续更新。然后需要学习的人,点赞、评论、收藏、关注 可鞭策本牛马加快更新速度,体验当老板感 jiao 。如果有任何错误,欢迎评论指出本菜鸡会及时更正。

1.Cesium 介绍

Cesium 是一个跨平台、跨浏览器的展示三维地球和地图的 javascript 库。使用 Webgl 来进行硬件加速图形,不需要任何插件支持,并且是跨平台、跨浏览器,并且适应于动态数据可视化,但浏览器必须支持 Webgl。

官网地址:cesium.com/learn/

官网例子地址:sandcastle.cesium.com/index.html

官网文档地址(目前2023.11.24最新版本:V1.111):cesium.com/downloads/c...

Cesium几个月更新一个版本(有时更快),基本一致。

2.Cesium 能做什么

  • 支持2D,2.5D,3D形式的地图展示。
  • 可以绘制各种几何图形、高亮区域,支持导入图片,甚至 3D 模型等多种数据可视化展示。
  • 可用于动态数据可视化并提供良好的触摸支持,支持绝大多数的浏览器和移动端浏览器。
  • 支持基于时间轴的动态数据展示。

3.Cesium 搭建(以vue3为例)

安装:

css 复制代码
npm i cesium
npm i vite-plugin-cesium -D

npm i @types/cesium // Cesium的代码提示

vite.config.js:

javascript 复制代码
import cesium from 'vite-plugin-cesium' // 引入插件                   
export default () => {
  return {
    plugins: [
      vue(),
      cesium() // 引入cesium
    ]
  }
}

加载 Cesium 样式:

arduino 复制代码
import 'cesium/Build/Cesium/Widgets/widgets.css'

全局加载:本文以 Cesium 学习为主就默认全局加载

javascript 复制代码
import * as Cesium from 'cesium'

局部加载:

dart 复制代码
import { Cesium, Viewer, Cartesian3, Color... } from 'cesium'

局部加载后可去除new Cesium. 或 Cesium. 简化
new Cesium.Viewer => Viewer
Cesium.Color => Color

4.初始化

4.1 创建一个标签,id 为 cesiumContainer,并进行绑定

ini 复制代码
<div id="cesiumContainer"></div>
let viewer = new Cesium.Viewer('cesiumContainer')

4.2 token

一般不需要,使用 Cesium 资源或者放在 Cesium 平台上的资源加载需要配置token

ini 复制代码
Cesium.Ion.defaultAccessToken = '你在 Cesium 平台上申请的 token'

4.3 配置 Viewer 选项

arduino 复制代码
let viewer = new Cesium.Viewer('cesiumContainer', {
  // imageryProvider: new Cesium.UrlTemplateImageryProvider({
  //   url: 'https://webst02.is.autonavi.com/appmaptile?style=6&x={x}&y={y}&z={z}'
  // }), // 加载地图图层
  geocoder: false, // 地理编码(搜索)组件
  homeButton: false, // 首页,点击之后将视图跳转到默认视角
  sceneModePicker: false, // 场景模式,切换2D、3D 和 Columbus View (CV) 模式。
  infoBox: false, // 信息框
  selectionIndicator: false, //是否显示选取指示器组件
  baseLayerPicker: false, // 底图组件,选择三维数字地球的底图(imagery and terrain)
  navigationHelpButton: false, // 帮助提示,如何操作数字地球
  animation: false, // 下方动画按钮
  timeline: false, // 下方时间轴
  fullscreenButton: true,  // 全屏
  vrButton: false, // vr视角按钮
  skyAtmosphere: false, // 关闭地表大气层
  shadows: false // 模型阴影
})
// 去除版权信息 logo
viewer.cesiumWidget.creditContainer.style.display = 'none'
或
viewer._cesiumWidget._creditContainer.style.display = 'none'

4.4 其它配置

xml 复制代码
<!-- 太阳光 -->
viewer.scene.sun.show = false
<!-- 环境光 -->
viewer.scene.lightSource.ambientLightColor = new Cesium.Color(0, 0, 0, 1)
<!-- 是否显示地球 -->
scene.globe.show = false
<!-- 关闭阴影 -->
viewer.shadows = false
<!-- 是否添加全球光照,scene(场景)中的光照将会随着每天时间的变化而变化 -->
viewer.scene.globe.enableLighting = true
<!-- 是否添加大气效果 -->
viewer.scene.globe.showGroundAtmosphere = true
<!-- 防止移动、放大缩小会视觉偏移depthTestAgainstTerrain,设置该属性为true之后,标绘将位于地形的顶部;如果设为false(默认值),那么标绘将位于平面上。缺陷:开启该属性有可能在切换图层时会引发标绘消失的bug -->
viewer.scene.globe.depthTestAgainstTerrain = true // 深度地形开启
// 开启抗锯齿(默认false,开启后减少物体严重锯齿边缘)
viewer.scene.postProcessStages.fxaa.enabled = true
// 销毁地图
viewer.destroy()

5. 指南针(罗盘),缩放

安装:

css 复制代码
npm install cesium-navigation-es6 --save

使用:

typescript 复制代码
import CesiumNavigation from 'cesium-navigation-es6'
import type { NavigationOptions } from 'cesium-navigation-es6' 
// 指南针(罗盘)
// ts使用 options: NavigationOptions
let options = {
  defaultResetView: Cesium.Rectangle.fromDegrees(71, 3, 90, 14), // 默认初始视角(经度,纬度,高度,zoom)
  // defaultResetView = new Cesium.Cartographic(Cesium.Math.toRadians(114), Cesium.Math.toRadians(33), 500),
  orientation: { // 相机方向
    pitch: Cesium.Math.toRadians(-45)
  },
  enableCompass: true, // 罗盘
  enableZoomControls: true, // 缩放控件zoom
  enableDistanceLegend: false, // 距离图例
  enableCompassOuterRing: false, // 指南针外环
  duration: 3 // 相机延时,默认为3s
}
//修改重置视图的tooltip
options.resetTooltip = '重置视图'
//修改放大按钮的tooltip
options.zoomInTooltip = '放大'
//修改缩小按钮的tooltip
options.zoomOutTooltip = '缩小'

new CesiumNavigation(viewer, options)
// 或者直接使用默认配置
new CesiumNavigation(viewer, {})
// 清除导航
viewer.cesiumNavigation.destroy()

// 视野缩放
// 最小缩放高度(米)
viewer.scene.screenSpaceCameraController.minimumZoomDistance = 50
// 最大缩放高度(米)
viewer.scene.screenSpaceCameraController.maximumZoomDistance = 10000

// 修改控件位置
// 比例尺控件为例
let distanceLegend = document.getElementsByClassName('distance-legend')[0] as HTMLElement
distanceLegend.style.right = '20px'

6. css 控制按键隐藏

css 复制代码
/* 右上角按钮组 */
.cesium-viewer-toolbar,
/* 左下角动画控件 */
.cesium-viewer-animationContainer,
/* 时间线 */
.cesium-viewer-timelineContainer,
/* logo信息 */
.cesium-viewer-bottom {
  display: none;
}

![image.png](https://p1-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/9cd5e60cc2274f389f101422730a8d68~tplv-k3u1fbpfcp-jj-mark:0:0:0:0:q75.image#?w=1247&h=811&s=698949&e=png&b=000000)
/* 全屏按钮 */
.cesium-viewer-fullscreenContainer{
  position: absolute; top: -999em;
}

7. 效果图

相关推荐
乘风gg12 分钟前
还在养虾吗?虾王已诞生:微信龙虾 ClawBot
前端·ai编程·claude
小小小小宇27 分钟前
LLM 长期记忆构建
前端
lichenyang45340 分钟前
从 Express 老项目到 NestJS + Docker:一次车辆管理系统的渐进式重构
前端
Momo__2 小时前
VueUse createReusableTemplate —— 单文件组件内的模板复用神器
前端·vue.js
程序员小富2 小时前
我开源了一个开发者专属的智能 JSON 工具,得到了媳妇高度认可
前端·vue.js·后端
小小小小宇2 小时前
程序员如何给 LLM 装工具以及看懂推理过程
前端
写代码的皮筏艇2 小时前
React中的forwardRef
前端·react.js·面试
槑有老呆2 小时前
花三个月工资请了个 AI 程序员,结果它连青岛啤酒股价都查不了
前端
风骏时光牛马2 小时前
Verilog开发常见问题汇总解析
前端
子兮曰2 小时前
AI Coding Method Map:一张图看懂 AI 编程的完整链路
前端·人工智能·后端