主页/项目集/CesiumJs智慧园区
CesiumJs智慧园区新项目ZYBK Pro 打开预览

项目简介

1. 项目定位

本项目是一套园区三维数字孪生可视化系统:以本地 3D Tiles 园区场景为空间底座,叠加 Cesium Ion 影像底图与业务图层,在浏览器中完成运营总览、设备运维、视频监控、人员轨迹与基础空间分析。

核心目标不是做成「纯 GIS 工具」,而是做成地图常驻、业务面板浮层的大屏交互产品:用户始终处于三维场景中,切换菜单只切换叠加的业务能力。


2. 技术选型与理由

层次 选型 说明
应用框架 Vue 2.6 + Vue Router + Vuex 业务面板组件化;路由按模块拆分;全局清理走 store action
三维引擎 Cesium 1.95 原生支持 3D Tiles、CZML、Entity、相机与量算类交互
图表 ECharts 5 首页双栏统计面板
轻量 UI Vant 2(按需) 人员轨迹日期选择等表单控件
构建 Vue CLI 5 + Webpack Cesium Workers/Assets 拷贝、分包缓存
样式 Less + 全局 CSS 变量 深色 GIS 面板统一视觉

选型上,Cesium 比 Three.js 更适合「园区级地理坐标 + 倾斜摄影/瓦片 + 轨迹回放」这类场景;Vue 负责 UI 状态与生命周期,避免把 DOM 交互全部塞进 Cesium 脚本。


3. 总体架构

┌─────────────────────────────────────────────────────────┐
│  Header(顶栏导航) + Tabbar(基础功能二级菜单)          │
├─────────────────────────────────────────────────────────┤
│  router-view:业务面板(Home / Operation / Cameras …)   │
│       ↕ 事件总线 / Vuex / 全局 viewer                   │
├─────────────────────────────────────────────────────────┤
│  MapModel:Cesium Viewer 单例、Tileset、相机、全屏       │
├─────────────────────────────────────────────────────────┤
│  public/Apps:3D Tiles、GeoJSON、CZML、GLB、图标资源     │
└─────────────────────────────────────────────────────────┘

4. 三维场景关键实现

4.1 底图与地形

  • 影像:Cesium Ion createWorldImagery(需配置 Ion Token)。
  • 地形:使用椭球地形(EllipsoidTerrain),避免世界地形与本地建筑模型冲突导致「埋地」。
  • 深度:按功能开关 depthTestAgainstTerrain;量算等交互关闭半透明拾取相关风险配置。

4.2 园区模型

园区主体为本地 3D Tilespublic/Apps/3dtitle/贝尔园区场景模型/tileset.json),加载后:

  1. 应用首页默认相机(homeCamera.js,可被地图标签覆盖并写入 localStorage)。
  2. 按包围球半径设置缩放距离与俯仰角限制,防止穿模与仰天。
  3. 分辨率倍率限制(如 devicePixelRatio 上限),控制 GPU 压力。

5. 业务模块技术要点

5.1 首页大屏

  • 布局:地图全幅 + 左右半透明统计柱。
  • 图表:ECharts 在面板内按需初始化,注意 resize 与路由销毁时 dispose
  • 告警:GeoJSON 上图 + Billboard,点击联动镜头(cream.js ViewTab)。

5.2 智能运维 / 视频监控

  • 点位:GeoJSON → Entity Billboard。
  • 选中:替换图标样式、雷达高亮;视频监控弹窗挂到 document.body 全屏居中,避免侧栏 overflow 裁切。

5.3 人员监控与历史轨迹

  • 人员点位:CZML 巡检路线解析出初始坐标上图。
  • 历史轨迹:点击弹窗进入轨迹模式,加载对应 CZML DataSource。
  • 播放:viewer.clock + 底部自定义时间轴(进度、倍速);避免持续 trackedEntity,减少相机抖动闪烁。
  • 返回:退出轨迹模式、移除 DataSource、重新加载人员点位,而不是跳转首页。

5.4 基础功能

能力 技术要点
地图标签 相机快照、弹窗编辑、localStorage 持久化、首页默认视角
元素查询 scene.pick / 3DTileFeature 属性展示
空间量算 Primitive 折线 + 测面半透明 Polygon(allowPicking: false 规避半透明拾取崩溃)
路径漫游 SampledPositionProperty + VelocityOrientationProperty,模型轴向用四元数补偿(y20:-90°
通视分析 起终点采样高度,绿线通视 / 红线遮挡;异步 clamp 失败时回退插值

6. 构建与性能优化

6.1 Webpack / Vue CLI

  • CopyWebpackPlugin:拷贝 Cesium WorkersAssetsWidgets
  • CESIUM_BASE_URL:指向打包后的静态资源根。
  • splitChunkschunk-cesiumchunk-echartschunk-vendors 分离,利于缓存。
  • 生产关闭 sourceMap;开发启用 NODE_OPTIONS=--openssl-legacy-provider 兼容新 Node。

6.2 运行时

  • Tileset:maximumScreenSpaceErrormaximumMemoryUsageskipLevelOfDetail 控制精度与显存。
  • 相机:俯仰与缩放钳制,减少无效渲染视角。
  • UI:轨迹时间轴用节流/直接改 DOM,降低 Vue 每帧重绘。
  • 资源:清理未引用的旧版 public/Apps/js 与多余 GLB,缩短部署体积。

7. 交互与样式层

  • 视觉:深色半透明玻璃面板、蓝色强调色,与卫星影像对比清晰。
  • 顶栏:主菜单文字项 + 「基础功能」切角按钮,选中态底线指示。
  • 弹窗:编辑视点、视频播放等挂到 body,使用非 scoped 样式保证离开侧栏后主题仍生效。
  • 全屏:body.map-fullscreen 隐藏 Header / 面板 / 时间轴,地图独占视口。

8. 数据与扩展方式

当前演示数据以静态文件为主:

  • GeoJSON:设备、监控、告警
  • CZML:人员巡检轨迹
  • GLB:路径漫游载具(如 y20)
  • 3D Tiles:园区场景

扩展建议:

  1. 用后端 API 替换 $.getJSON,保持 Entity 构建逻辑不变。
  2. 轨迹回放可升级为服务端下发 CZML / 二进制轨迹流。
  3. 通视、量算结果可落库,形成「分析工单」闭环。
  4. Ion Token、默认相机等配置外置到环境变量或配置中心。

9. 工程结构速览

src/
  main.js                 # 入口:Router / Vuex / ECharts / jQuery / Vant
  components/MapModel.vue # Cesium 场景核心
  views/                  # 业务面板
  js/view/                # 视角、镜头预设
  js/fence/               # 电子围栏(可选启用)
  store/                  # clearArrAll 等全局清理
public/Apps/
  3dtitle/                # 园区 3D Tiles
  model/                  # GeoJSON / CZML / GLB
  img/                    # 图标与贴图

功能清单

能力 技术要点
地图标签 相机快照、弹窗编辑、localStorage 持久化、首页默认视角
元素查询 scene.pick / 3DTileFeature 属性展示
空间量算 Primitive 折线 + 测面半透明 Polygon(allowPicking: false 规避半透明拾取崩溃)
路径漫游 SampledPositionProperty + VelocityOrientationProperty,模型轴向用四元数补偿(y20:-90°
通视分析 起终点采样高度,绿线通视 / 红线遮挡;异步 clamp 失败时回退插值
  • GeoJSON:设备、监控、告警
  • CZML:人员巡检轨迹
  • GLB:路径漫游载具(如 y20)
  • 3D Tiles:园区场景

项目截图