每次做 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
})解构出来的模块(material、graphics、analysis 等)直接调用对应方法即可,不需要再做额外初始化。
按需引入
只引入需要的模块,减少冗余代码,适合对打包体积敏感的项目:
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
})当前可按需引入的模块包括:Graphics、Material、Analysis、Primitive 等,具体列表见 API 文档。
H5 直接引入
不使用构建工具的项目,可以通过 UMD 方式引入:
<script src="index.umd.js"></script>
<script>
new cesium_dev_kit.initCesium({ ... })
</script>使用范例
官方提供了三个框架的完整示例仓库,可以直接 clone 跑起来参考:
- Vue 示例:https://github.com/dengxiaoning/cesium_kit_test (opens in a new tab)
- React 示例:https://github.com/dengxiaoning/react-cesium (opens in a new tab)
- H5 示例:https://github.com/dengxiaoning/cesium_kit_test_h5 (opens in a new tab)
在线演示(可以直接看各模块效果):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)