Three.js教程
Cesium
cesium-dev-kit
cesium-dev-kit

每次做 Cesium 项目都要重写这些?有人把雷达扫描、流动特效、地形分析全打包进 npm 了

做 Cesium 项目的开发者大概都有这种体验:坐标转换、相机控制、测量工具、天气效果……每个项目都需要,每个项目又要从头写一遍。

cesium_dev_kit (opens in a new tab) 是一个开发者在业余时间整理的 Cesium 工具包,把这些高频需求统一封装成 npm 包发布。从基础的图层加载、坐标转换,到视觉效果类的动态河流、烟花特效、雷达扫描,再到专业的通视分析、地形开挖、淹没分析,基本覆盖了 Cesium 项目的主要使用场景。目前 GitHub 251 Star,npm 版本 1.1.16,持续维护中。

GitHub:https://github.com/dengxiaoning/cesium_dev_kit (opens in a new tab) API 文档:https://benpaodehenji.com/cesiumDevKitDoc (opens in a new tab)


包含哪些功能

功能大致分三类:

基础操作类 图层加载、坐标转换、坐标拾取、相机控制、测量、标绘、模型加载(平移/旋转/缩放)、模型拖拽、3D Tiles 视角位置调整。

视觉特效类 天气系统(雨、雪、雾)、雷达扫描、流动线、发光线、动态墙、光线投射、烟花特效、动态河流、卷帘效果、三维柱状图、聚合图层、第一人称路径漫游、路线规划、奔跑动画(动画士兵)、图形挤压、自定义图元。

空间分析类 通视分析、透视分析、坡度分析、淹没分析、方量分析、地形开挖、后置场景效果。

视觉特效类是这个工具包的亮点,动态河流、烟花、流光材质这类效果在 Cesium 项目里有需求但实现起来并不简单,封装成现成模块可以省不少时间。


安装与使用

npm install cesium_dev_kit

工具包支持两种引入方式。

完整引入

通过 initCesium 一次性获取所有模块,适合需要用到多个功能、不太在意包体积的项目:

import { initCesium } from 'cesium_dev_kit'
 
// 先创建 Viewer(也可以让 initCesium 内部创建)
const myViewer = new Cesium.Viewer('cesiumContainer', {
  animation: false,
  timeline: false,
  baseLayerPicker: false,
  // ...其他配置
})
 
// 传入已有 Viewer,initCesium 不会重新创建
const { viewer, material, graphics, analysis } = new initCesium({
  cesiumGlobal: Cesium,
  containerId: 'cesiumContainer',
  viewer: myViewer
})

解构出来的模块(materialgraphicsanalysis 等)直接调用对应方法即可,不需要再做额外初始化。

按需引入

只引入需要的模块,减少冗余代码,适合对打包体积敏感的项目:

import { Graphics } from 'cesium_dev_kit'
 
const { viewer, graphics } = new Graphics({
  cesiumGlobal: Cesium,
  viewer: myViewer
})
 
// 直接调用具体方法
graphics.getPointGraphics({
  color: Cesium.Color.GREEN,
  pixelSize: 5,
  outlineColor: Cesium.Color.WHITE,
  outlineWidth: 1
})

当前可按需引入的模块包括:GraphicsMaterialAnalysisPrimitive 等,具体列表见 API 文档。

H5 直接引入

不使用构建工具的项目,可以通过 UMD 方式引入:

<script src="index.umd.js"></script>
<script>
  new cesium_dev_kit.initCesium({ ... })
</script>

使用范例

官方提供了三个框架的完整示例仓库,可以直接 clone 跑起来参考:

在线演示(可以直接看各模块效果):https://benpaodehenji.com/cesiumDevKit (opens in a new tab)


写在最后

cesium_dev_kit 更像是一份实战积累——作者把自己项目里反复用到的 Cesium 功能整理出来、封装发布,本质是在做代码复用。对于需要快速搭建 Cesium 功能的项目,可以先查 API 文档,确认有没有现成实现,再决定是直接用还是参考源码自己写。

需要注意的是,作者在 README 里自己提到两个不足:扩展类没有使用 TypeScript 做类型检测,也没有异常捕获处理。在生产项目中引入时需要评估这两点对稳定性的影响,必要时自行补充边界处理。

GitHub:https://github.com/dengxiaoning/cesium_dev_kit (opens in a new tab)