摘要: CesiumJS 1.145 把矢量贴地、裁剪多边形和捕捉服务同时推进了一步。对 GIS 团队而言,这不是把版本号升上去即可:同一份 MVT 或 GeoJSON 的高程语义、裁剪对象的更新方式、服务端捕捉的返回位置,都应有独立的回归用例。本文依据官方更新日志,给出可落地的验收边界。

关键词:CesiumJS、Cesium 1.145、MVT、heightReference、3D Tiles、ClippingPolygons、Scene.snap、三维 GIS

先确认这次更新到底改变了什么

CesiumJS 1.145 的官方更新日志发布日期是 2026 年 9 月 2 日。版本最直接的空间数据变化,是 Mapbox Vector Tile(MVT)中的多边形与折线可以借助 heightReference 贴附到 3D Tiles 表面。它解决的是“矢量有坐标却没有与模型表面一致的显示关系”这一类问题;它不自动保证业务高程、模型表面高程和地形高程含义相同。

同一日志还写明 MVTDataProvider.fromUrl 与 GeoJsonPrimitive 增加 heightReference 选项。这意味着同一套贴地策略可以分别用于瓦片矢量与 GeoJSON 原始要素。工程上应把两条数据通道拆开验证:一条测试 MVT 中的面、线在倾斜摄影或建筑 3D Tiles 上是否连续,另一条测试 GeoJSON 图斑在同一区域是否取得相同的相对关系。

可核查事实

  1. CesiumJS 1.145 的更新日志标注发布日期为 2026 年 9 月 2 日。
  2. MVT 多边形和折线可通过 heightReference 贴附到 3D Tiles 表面。
  3. ClippingPolygons.positions 被 Object.freeze 固化,更新时需移除并重新添加对象。
  4. 新裁剪多边形矢量瓦片技术改善远距离裁剪质量,并降低首次预热开销。
  5. 裁剪多边形支持洞和岛屿等内部拓扑。
  6. MVTDataProvider.fromUrl 与 GeoJsonPrimitive 都新增 heightReference。
  7. 实验性 Scene.snap 增加 surfacePosition,并提供 IonSnapService 与 SnapService。
  8. BufferPolylineCollection.widthUnits 可选 meters 或 screen pixels。
  9. dompurify 最低版本提升到 3.4.5,用于处理 CVE-2026-49458。

把贴地当作数据语义,而不是显示开关

heightReference 的选择应由数据生产规则决定。若管线表示“距模型表面固定偏移”,验收应在建筑立面、桥梁、斜坡和地形模型交界处抽样;若管线表示绝对海拔,不能因为画面贴合就改用贴地。建议每份图层都记录高程基准、偏移单位和目标表面,并将这三项随切片或服务配置一起发布。

一个最小回归样本可包含:一条跨越屋顶和地面的线、一个带孔洞的施工范围面、以及一条与倾斜相机视角近乎平行的边界。分别以 MVT 和 GeoJSON 加载,对比不同缩放级别、俯仰角及模型加载前后的结果。这样可把瓦片解码、表面采样和渲染排序的问题区分开。

裁剪对象需要新的更新模型

此次 ClippingPolygons.positions 变为不可变数组,运行时不能再依赖就地改坐标触发刷新。交互编辑器应在提交时构造新对象:移除旧裁剪多边形、以新坐标创建并添加新对象,然后等待相关瓦片与渲染状态稳定。把这一步封装成明确的“替换”操作,避免界面看似更新而底层裁剪缓存仍引用旧几何。

官方日志同时指出新的裁剪矢量瓦片技术改善远距离质量、降低预热开销,并支持洞和岛屿。验收不能只画一个简单凸多边形:至少要有外环加内洞、两个相离岛屿、边界跨瓦片和远距离相机四种样本。重点记录首帧可用时间、拉远后边界稳定性及洞内是否错误被裁掉。

捕捉与线宽应单独签收

Scene.snap 仍是实验性能力;新增 surfacePosition 以及 IonSnapService、SnapService 代表捕捉结果可能来自不同服务和表面定义。编辑工具不应把捕捉点直接当作已验证的测量坐标:需要记录请求坐标、服务返回坐标、返回类型和所用表面,并在服务不可用时明确回退到本地交互,而不是静默写入错误位置。

BufferPolylineCollection.widthUnits 可在米和屏幕像素间选择。道路缓冲、管线影响范围等业务应使用米并在不同距离下量测;强调视觉可读性的描边可用屏幕像素,但要在高 DPI 与不同缩放下检查。版本日志还修复了矢量折线双倍宽度和抗锯齿问题,升级后应把旧截图基线重新生成,避免把修复误判为样式回归。

上线检查清单

  • 为每个 heightReference 图层写明高程基准、偏移和目标表面。
  • 对 MVT 与 GeoJSON 各做一组贴地、遮挡和模型加载时序测试。
  • 用洞、岛屿、跨瓦片边界验证 ClippingPolygons,并采用移除后重新添加的更新流程。
  • 将远距离裁剪质量和首次预热时间记录为版本升级前后的可比较指标。
  • 为 Scene.snap 保存请求与返回位置,服务失败时验证回退提示。
  • 按业务含义分别测试米制与屏幕像素线宽。
  • 升级依赖后确认 dompurify 不低于 3.4.5,并复跑前端交互冒烟测试。

风险边界

1.145 的贴地能力减少了实现摩擦,却没有统一业务高程模型;把绝对高度、相对地形高度和相对 3D Tiles 高度混用,仍会产生看似正确的错误。裁剪几何不可变也会暴露旧编辑器的隐式状态更新。实验性捕捉服务则应被视为可选增强:发布前需要配置可用性监控、超时和人工校验路径。

结语

CesiumJS 1.145 的价值在于把三维矢量工作流中最容易混在一起的层次分开:数据贴地、裁剪拓扑、交互捕捉和视觉线宽。按这些边界组织测试,升级才能从一次画面验证变成可重复的 GIS 发布验收。

参考资料