@lcplugin/cesium-plugin
v1.0.0
Published
``` my-cesium-lib/ ├── index.html ← 新增:开发时的入口HTML ├── src/ │ ├── playground/ ← 新增:示例平台相关代码 │ │ ├── App.vue │ │ └── examples.ts ← 你的所有示例定义 │ ├── main.ts ← 新增:开发时的 Vue 入口 │ ├── core/ ← 原始
Readme
项目结构
my-cesium-lib/
├── index.html ← 新增:开发时的入口HTML
├── src/
│ ├── playground/ ← 新增:示例平台相关代码
│ │ ├── App.vue
│ │ └── examples.ts ← 你的所有示例定义
│ ├── main.ts ← 新增:开发时的 Vue 入口
│ ├── core/ ← 原始封装代码
│ ├── layers/
│ ├── events/
│ ├── utils/
│ ├── index.ts ← 库的统一导出
│ └── plugin.ts ← Vite 插件
├── vite.config.ts ← 需要修改
├── package.json ← 增加开发依赖
└── tsconfig.json基于你现有的封装进度,我建议按照以下优先级继续扩展你的库:
🎯 推荐封装路线
第一优先级:三维模型(3D Tiles / glTF)
理由:GIS 应用中仅次于标注的核心功能,用于加载建筑、设备、场地等三维模型。
应包含的功能:
- 加载 3D Tiles / glTF 模型
- 更新模型位置、缩放、旋转
- 切换模型的颜色 / 材质(CustomShader 基础)
- 显隐控制
- 点击事件(拾取)
- 飞行定位到模型
- 删除模型
第二优先级:相机控制增强
理由:你的 MapManager 目前只有简单的 flyTo,实际项目中需要更丰富的视角控制。
应包含的功能:
- 设置视角朝向(方向、俯仰角)
- 围绕某点旋转
- 限制缩放范围
- 保存/恢复视角
- 自动环绕飞行
- 截图(保存画布为图片)
第三优先级:粒子特效与动态线
理由:监控大屏、应急指挥中常见的动态效果,让平台更有“科技感”。
应包含的功能:
- 粒子系统(火焰、烟雾、雨雪、飞线)
- 流动线(管线流向效果)
- 动态雷达扫描
- 动态扩散圆
- 脉冲点
第四优先级:海量数据展示
理由:当需要在单张图上展示数万甚至数十万级别的要素时,需要更高效的方案。
应包含的功能:
- 点聚合(
BillboardCollection已用,但可进一步封装聚合逻辑) - 热力图(
HeatmapMaterial或自定义着色器) - WMS / WMTS 服务管理
- GeoJSON / KML 数据加载
- 聚类显示
第五优先级:测量与绘制工具
理由:大多数 GIS 平台需要用户在图上进行交互式测量和绘制。
应包含的功能:
- 距离测量(贴地 / 直线)
- 面积测量
- 绘制临时点、线、面(鼠标交互)
- 编辑已有要素的顶点
- 测量结果显示(跟随鼠标的浮动标签)
第六优先级:UI 组件(非 Vue 组件,纯逻辑)
理由:虽然你不想提供 Vue 组件,但可以封装一些纯 JS 的逻辑模块,让使用者在自己的 UI 框架中集成。
应包含的功能:
- 图例管理
- 图层树(层级控制器)
- 时间轴控制
- 状态管理模块(记录地图当前视图、激活的数据集等)
📊 优先级总结表
| 优先级 | 模块 | 开发难度 | 项目价值 | 建议何时封装 | |--------|------|----------|----------|--------------| | ⭐1 | 3D Tiles / glTF 模型管理 | 中等 | 极高 | 现在立刻 | | ⭐2 | 相机控制增强 | 简单 | 很高 | 模型管理之后 | | ⭐3 | 粒子特效与动态线 | 中等 | 高 | 核心功能稳定后 | | ⭐4 | 海量数据展示 | 高 | 很高 | 遇到性能瓶颈时 | | ⭐5 | 测量与绘制工具 | 中等 | 中等 | 需要交互绘制时 | | ⭐6 | UI 逻辑组件 | 简单 | 中等 | API 丰富后 |
基于你现有的库结构,并结合常见三维 GIS 应用需求,我整理了一份可封装的分析与工具功能清单。这些功能都可以作为独立管理器或静态工具集,完全由纯 TypeScript 实现,不依赖任何 UI 框架,且对外暴露简单易用的 API。
🧠 一、空间分析功能
1. 通视分析 (Viewshed / Sightline)
- 核心内容:判断两点之间是否有遮挡;扇形或球面可视域计算(可生成颜色纹理贴图)。
- 封装思路:内部使用
Cesium.ScreenSpaceElement或射线拾取判断遮挡,提供isPointVisible(observer, target)方法;可视域分析可使用Cesium.PostProcessStage或自定义着色器实现。 - 使用场景:信号塔覆盖、监控探头范围、城市规划评估。
2. 限高分析 (Height Limit)
- 封装思路:根据给定的多边形范围和高度限制,对比 3D Tiles 或地形,高亮超标建筑。可通过遍历 3D Tiles 的
Cesium3DTileFeature或自定义着色器实现。 - 参数:区域、限高值、颜色标记。
3. 剖面分析 (Profile / Cross Section)
- 封装思路:绘制一条线,采样下方的地形高度(
Cesium.sampleTerrainMostDetailed),返回地形剖面数据(距离-高程数组),并可返回生成的剖面图 Canvas 或 SVG。 - 参数:路径、采样点数。
4. 坡度分析 (Slope) / 坡向分析
- 封装思路:基于地形瓦片,计算每个像素的坡度或坡向,生成彩色覆盖图(通过
Cesium.SingleTileImageryProvider或自定义图元)。 - 参数:区域、分级颜色。
5. 缓冲区分析 (Buffer)
- 封装思路:对点、线、面生成几何缓冲区(平面缓冲),考虑地表高度?可分 2D 和贴地两种模式。
- 实现:利用
turf.js进行平面几何运算,将结果转为 Cesium 多边形或折线。
6. 日照分析 (Shadow / Sunlight)
- 封装思路:通过
Cesium.ShadowMap或计算太阳位置,显示给定时间的阴影区域,或分析某点在一天内的日照时长。 - 参数:日期时间、区域。
7. 淹没模拟
- 封装思路:设置一个动态高度平面,用半透明多边形表现水位上涨。
- 参数:多边形区域、淹没高度、动画速度。
📏 二、测量工具(纯逻辑,无 UI组件)
1. 距离测量
- 贴地距离:
Cesium.EllipsoidGeodesic或采样地形点。 - 直线距离:直接计算 Cartesian3 之间的距离。
- 多段线总长:折线累计长度。
2. 面积测量
- 贴地面积:将多边形顶点投影到椭球面,使用多边形面积公式。
- 三维面积:基于高度差计算斜面面积。
3. 高度测量
- 两点间高差:直接相减。
- 贴地高度:从地表某点向上垂直测量(例如建筑高度)。
4. 角度测量
- 三点构成的角度:水平夹角、垂直夹角。
🧰 三、坐标与几何工具
1. 坐标批量转换
- 提供 WGS84 ↔ 墨卡托、笛卡尔坐标系互转,以及弧度/度转换。
- 输入输出为简单的
[lng, lat, height]或对象。
2. 几何计算
- 判断点是否在多边形内(平面/椭球)。
- 两条线段交点计算。
- 多边形中心点计算(质心/视觉中心)。
3. 地球数学常量
- 提供常用地球半径、PI 等常量。
🌐 四、数据与格式工具
1. GeoJSON / KML 加载器
- 将 GeoJSON 或 KML 数据自动解析为点、线、面 Entity 或 Primitive 集合。
- 支持样式映射(根据属性设置颜色)。
2. 3D Tiles 样式批处理
- 根据属性表动态设置 3D Tiles 的颜色、透明度、显示条件。
- 封装
Cesium.Cesium3DTileStyle的 JSON 生成,提供链式调用或对象配置。
3. 地形采样工具
- 输入坐标数组,返回对应地表高度。
- 内部使用
Cesium.sampleTerrainMostDetailed。
🕹️ 五、交互辅助工具
1. 鼠标拾取管理器
- 统一管理点击、悬停的拾取结果,自动识别对象类型(Entity、Primitive、3D Tiles 特征)。
- 提供回调:
onPick(callback),返回拾取对象的 ID、属性表、屏幕位置等。
2. 拖拽管理器
- 允许用户拖动某个 Entity(点/模型)并实时更新位置。
3. 图形绘制管理器
- 提供鼠标交互绘制点、线、面、圆、矩形的能力(不包含 UI 按钮,只暴露 start/stop 方法)。
- 绘制过程中实时预览,完成后返回几何数据。
4. 标绘管理器
- 提供常用军事/消防标号的绘制逻辑(如箭头、钳击、集结地等复杂形状)。
🎨 六、特效与可视化工具
1. 扫描雷达效果
- 扇形扫描面,可配置颜色、旋转速度、半径。
2. 动态流线
- 沿路径移动的纹理线(
PolylineFlowMaterialProperty或自定义着色器)。
3. 光柱/光墙
- 垂直向上或向外的发光墙体(可用 Wall 或 Billboard 模拟)。
4. 粒子特效管理器
- 统一管理火焰、烟雾、爆炸等粒子系统,简化参数。
📊 推荐实现优先级
| 优先级 | 功能 | 理由 | |-------|------|------| | ⭐1 | 拾取管理器 (PickerManager) | 很多分析功能需要交互拾取,基础而重要 | | ⭐1 | 测量工具集 (MeasureUtils) | 距离、面积、高度是常见需求,可静态方法调用 | | ⭐2 | 通视分析 | 典型的空间分析,有代表性 | | ⭐2 | 剖面分析 | 地形分析核心功能 | | ⭐2 | 坐标与几何工具 | 提高开发者效率,减少重复计算 | | ⭐3 | 绘制管理器 (DrawManager) | 提升交互体验,但复杂度稍高 | | ⭐3 | 缓冲区分析 | 常用 GIS 分析,可借助 Turf | | ⭐4 | 日照分析、淹没模拟 | 特定场景需求,可根据项目定制 |
