当前位置: 首页 > article >正文

CustomDataSource、Entity 和 Primitive 区别

CustomDataSource、Entity 和 Primitive 区别

在 Cesium 中,CustomDataSource、Entity 和 Primitive 是用于管理和渲染不同类型数据的三种机制,各自具有不同的功能和用途。它们的主要区别如下:

1. CustomDataSource

  • 简介:CustomDataSource 是一种数据源,可以包含多个 Entity 实例。主要用于动态加载和管理自定义数据,以便将其添加到 Cesium 的 DataSourceCollection 中。
  • 用途:用于批量管理和组织多个 Entity 对象。
  • 特点
    • 可以批量管理 Entity,比如添加、删除、更新。
    • 通常用于需要动态更新的场景。
    • 可以轻松启用或禁用数据集群、更新显示模式等。

示例:

const dataSource = new Cesium.CustomDataSource('myDataSource');
viewer.dataSources.add(dataSource);

const entity = dataSource.entities.add({
  position: Cesium.Cartesian3.fromDegrees(-75.59777, 40.03883),
  point: { pixelSize: 10, color: Cesium.Color.RED }
});

2. Entity

  • 简介:Entity 是一种高级的抽象类,用于封装和表示实际要显示的图形对象(如点、线、面等)。它为多种可视化对象提供了统一的接口。
  • 用途:用于描述单个数据对象(如一个建筑、一条线路)。
  • 特点
    • 可以设置为动态的,比如路径、视锥体等。
    • 支持属性的动态绑定,适用于时间动态数据。
    • 提供高级接口,不需要处理底层渲染细节。
    • Entity 会在 EntityCollection 中进行管理,可以绑定到 CustomDataSource 中使用。

示例:

const entity = viewer.entities.add({
  position: Cesium.Cartesian3.fromDegrees(-75.59777, 40.03883),
  point: { pixelSize: 10, color: Cesium.Color.BLUE }
});

3. Primitive

  • 简介:Primitive 是 Cesium 中的底层图形渲染机制,直接与 WebGL 对接,因此具有更高的性能和渲染控制。
  • 用途:用于精细控制渲染效果,特别是需要手动控制、优化渲染性能的情况下。
  • 特点
    • 不支持动态更新(需手动移除再添加)。
    • 高性能,适合大量渲染或高性能需求的场景。
    • 由于其底层特性,使用较复杂且灵活性低。
    • 不能直接使用 Entity 提供的时间动态特性。

示例:

const primitive = viewer.scene.primitives.add(new Cesium.Primitive({
  geometryInstances: new Cesium.GeometryInstance({
    geometry: new Cesium.BoxGeometry({
      dimensions: new Cesium.Cartesian3(100000.0, 100000.0, 100000.0)
    }),
    modelMatrix: Cesium.Transforms.eastNorthUpToFixedFrame(
      Cesium.Cartesian3.fromDegrees(-75.59777, 40.03883)
    ),
    attributes: {
      color: Cesium.ColorGeometryInstanceAttribute.fromColor(Cesium.Color.RED)
    }
  }),
  appearance: new Cesium.PerInstanceColorAppearance()
}));

总结

特性CustomDataSourceEntityPrimitive
渲染性能一般
数据管理批量管理多个Entity单独描述一个对象
动态更新支持支持不支持
场景适用动态管理多个对象单个对象需要多样显示效果高性能需求、手动渲染控制
复杂度较低较高
  • CustomDataSource 用于批量管理 Entity,适合动态应用场景。
  • Entity 是面向用户的高层次对象,适合描述单个动态图形。
  • Primitive 用于高性能渲染需求,但缺少动态和易用性。

http://www.kler.cn/a/382702.html

相关文章:

  • 如何把子组件的v-model修改数据,进行接收然后定义数据格式,子传父的实现
  • el-select 的默认选中 以及后端返回的数据进行默认选中
  • 哈希表(Hash Table)、跳表(Skip List) 和 有序字典(Ordered Dictionary) 的详细介绍
  • 告别复杂协作:Adobe XD的简化替代方案
  • QT创建按钮篇
  • ReactPress—基于React的免费开源博客CMS内容管理系统
  • MongoDB笔记02-MongoDB基本常用命令
  • 小程序 + AI 自动直播:一部手机开启抖音挂载小程序流量主变现之旅
  • 搭建react项目
  • Markdown转HTML
  • 前深度学习时代-经典的推荐算法
  • 《JVM第7课》堆区
  • qt QTextStream详解
  • ssm基于Web的汽车客运订票系统的设计与实现+vue
  • 解决return code from pthread_create() is 22报错问题
  • 《运维网络安全》
  • 对比Java和TypeScript中的服务注册和查找机制
  • 在 JavaScript 中,`Array.prototype.filter` 方法用于创建一个新数组,该数组包含通过测试的所有元素
  • 机器人助力Bridge Champ游戏:1.4.2版本如何提升玩家体验
  • java 实训第12天 (git版本控制继续)
  • 【无标题】特征降维的常见方法
  • 3D互动+AR试戴,重塑线上珠宝营销新体验!
  • 【题解】—— LeetCode一周小结44
  • 效果框架(效果ID3DXEffect)
  • ML 系列:机器学习和深度学习的深层次总结( 19)— PMF、PDF、平均值、方差、标准差
  • 浮动路由:实现出口线路的负载均衡冗余备份。