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

相关推荐
前端fighter18 分钟前
js基本数据新增的Symbol到底是啥呢?
前端·javascript·面试
GISer_Jing32 分钟前
从0开始分享一个React项目:React-ant-admin
前端·react.js·前端框架
川石教育36 分钟前
Vue前端开发子组件向父组件传参
前端·vue.js·前端开发·vue前端开发·vue组件传参
GISer_Jing1 小时前
Vue前端进阶面试题目(二)
前端·vue.js·面试
乐闻x2 小时前
Pinia 实战教程:构建高效的 Vue 3 状态管理系统
前端·javascript·vue.js
weixin_431449682 小时前
web组态软件
前端·物联网·低代码·编辑器·组态
橘子味小白菜2 小时前
el-table的树形结构后端返回的id没有唯一键怎么办
前端·vue.js
前端Hardy2 小时前
HTML&CSS:比赛记分卡
前端·javascript·css·3d·html
疯狂的沙粒3 小时前
Vue项目开发 element-UI 前端实现 1到10排列选择的按钮
前端·vue.js·ui
刺客-Andy3 小时前
React第六节 组件属性prop的propTypes类型使用介绍
前端·javascript·react.js·typescript