Cesium1.142炸场更新:GeoJsonPrimitive、MVT支持与 CAD线框渲染

CesiumJS1.142炸场更新:GeoJsonPrimitive、MVT支持与 CAD线框渲染

核心关键词:CesiumJS 1.142、GeoJsonPrimitive、MVTDataProvider、EXT_mesh_polygon、EdgeDisplayMode


2026 年 6 月 1 日,CesiumJS 发布了 1.142 版本。这次更新有两个重头戏:GeoJsonPrimitive 让大规模 GeoJSON 加载性能飞跃,MVTDataProvider 为 Mapbox Vector Tile 进入 CesiumJS 打开了新通道。此外 CAD 风格的线框渲染和 glTF 新扩展的实验性支持也值得关注。


一、GeoJsonPrimitive:大规模 GeoJSON 性能飞跃

以往在 CesiumJS 中加载 GeoJSON,必须通过 GeoJsonDataSource,走 Entity 层。Entity 虽使用方便,但数据量大时(数万乃至数十万个要素),创建 Entity 对象的开销会导致明显的卡顿和内存占用。

1.142 新增的 GeoJsonPrimitive 绕过了 Entity/DataSource 层,将 GeoJSON 数据直接加载到 BufferPrimitiveCollection 中:

const viewer = new Cesium.Viewer('cesiumContainer');

const geoJsonPrimitive = new Cesium.GeoJsonPrimitive({
    data: 'path/to/large-data.geojson'
});

viewer.scene.primitives.add(geoJsonPrimitive);

性能提升的关键:无需为每个要素创建 Entity 对象,直接操作 Primitive 级别的渲染管线。官方测试中,10 万个点要素的加载时间从秒级降至毫秒级。

适用场景:智慧城市 POI 标注、车辆轨迹点、地质钻孔数据等大规模 Point/LineString/MultiPoint 数据。


二、MVTDataProvider:Mapbox Vector Tile 原生接入

MVTDataProvider 是本次更新的另一个重磅功能。它能把 Mapbox Vector Tile(MVT)直接加载

const mvt = await Cesium.MVTDataProvider.fromUrl(
  "http://localhost:8082/highway_roads_uncompressed/{z}/{x}/{y}.pbf",
  {
    minZoom: 0,
    maxZoom: 6,
    extent: Cesium.Rectangle.fromDegrees(
      -159.780010, 19.059930, -66.979990, 70.191920
    ),
  },
);

viewer.scene.primitives.add(mvt);
viewer.camera.flyTo({
  destination: Cesium.Rectangle.fromDegrees(
    -159.780010, 19.059930, -66.979990, 70.191920
  ),
});

这对 WebGIS 开发者来说意义重大:MVT 是 MapLibre、Mapbox GL JS 等 2D 地图框架的标配数据格式,现在可以直接在 CesiumJS 的 3D 场景中复用,无需数据格式转换。


三、EdgeDisplayMode:CAD 线框渲染

新增的 EdgeDisplayMode 枚举配合 edgeDisplayMode 属性,支持三种边缘渲染模式:

  • SURFACES_ONLY(默认):仅渲染表面

vector3dtiles

  • SURFACES_AND_EDGES:表面 + 边缘线

vector3dtiles

  • EDGES_ONLY:仅渲染边缘线,纯线框效果

vector3dtiles

model.edgeDisplayMode = Cesium.EdgeDisplayMode.EDGES_ONLY;
model.edges = {
    color: Cesium.Color.WHITE,
    width: 2
};

该功能依赖 EXT_mesh_primitive_edge_visibility glTF 扩展。EDGES_ONLY 模式在建筑 BIM 展示、CAD 模型审查等场景中非常实用——切换一个参数即可在实体渲染和线框预览之间切换。


四、扩展生态:EXT_mesh_polygon 与 glTF Vector 支持

1.142 新增了对两个草稿扩展的实验性支持:

  • EXT_mesh_polygon:glTF 扩展,支持多边形几何体定义
  • 3DTILES_content_gltf_vector:3D Tiles 扩展,允许瓦片内容包含矢量数据

这两个扩展目前处于”实验性”阶段,意味着 API 可能在未来版本中发生变化。但它们释放了一个明确的信号:CesiumJS 正在将 GIS 矢量能力融入 glTF/3D Tiles 标准生态。

vector3dtiles


五、BufferPrimitive 增强与 API 优化

blendOption

BufferPointCollectionBufferPolylineCollectionBufferPolygonCollection 的构造函数新增 blendOption 参数,支持通过 BufferPrimitiveMaterial#color.alpha 控制透明度混合。BufferPointCollection 还额外支持了 outlineColor.alpha

boundingVolume 改进

boundingVolume 现在可以在构造函数中预计算传入,消除频繁自动更新包围盒的性能开销,对大规模动态集合的场景(如粒子系统、动态点位)有明显优化。

Breaking ChangeboundingVolume 属性默认从局部坐标改为了世界空间坐标,升级后需要检查涉及手动设置包围盒的代码。

多键修饰符支持

ScreenSpaceEventHandler.setInputAction 现在支持多个按键修饰符组合,例如 CTRL + SHIFT + 点击

handler.setInputAction(
    (click) => console.log('CTRL+SHIFT+点击', click.position),
    Cesium.ScreenSpaceEventType.LEFT_CLICK,
    [Cesium.KeyboardEventModifier.CTRL, Cesium.KeyboardEventModifier.SHIFT]
);

六、Bug 修复

  • 修复 BufferPointCollection 点位更新后显示未刷新的问题(#13465)

升级建议

升级到 1.142 前,建议关注以下几点:

  1. 检查 boundingVolume 使用:如果手动设置过 BufferPrimitive 的包围盒,确认代码已适配世界空间坐标
  2. 尝试 GeoJsonPrimitive:现有使用 GeoJsonDataSource + 大规模数据的场景,推荐评估迁移收益
  3. 关注扩展状态EXT_mesh_polygon 和 3DTILES_content_gltf_vector 为实验性 API,可用于原型验证,生产环境需谨慎
npm install cesium@1.142

完整变更日志:CHANGES.md 1.142


专业服务

奇小狐工作室 – 3D 数据处理专家

  • 高斯溅射(Gaussian Splat)PLY 数据处理
  • 大批量点云数据处理
  • 3D Tiles 格式转换与优化

联系方式:微信 Elusive57


发表评论