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. 效果图

相关推荐
kyriewen9 分钟前
折腾了半年 AI 编程工作流,最后发现效率瓶颈是桌上那块屏幕
前端·javascript·ai编程
蜗牛前端36 分钟前
codex 全流程开发上线的高颜值礼簿小程序
前端·微信小程序
大龄秃头程序员1 小时前
我在图文流 App 里落地双层缓存、弱网降级与 OOM 治理
前端
老王以为1 小时前
React Renderer 分离的多平台架构
前端·react native·react.js
hunterandroid1 小时前
Kotlin Coroutines 与 Flow:让异步任务更清晰
前端
Bigger2 小时前
从零搭建 AI 代码审查服务:一份前端也能看懂的 Python 学习笔记
前端·ci/cd·ai编程
lichenyang4532 小时前
JSAPI、NAPI、Biz、Imp:ASCF Demo 如何真正调用系统能力和 C++ 能力
前端
lichenyang4533 小时前
IPC、JSVM、UIThread、libuv:ASCF 架构图里最容易混的几个词
前端
用户059540174463 小时前
Redis记忆存储故障恢复测试踩坑实录:手动测试让我漏掉了2个一致性Bug
前端·css
用户2136610035723 小时前
Vue2脚手架工程化与Axios集成
前端·vue.js