cesium对entity和Primitive的管理思想及常见问题解决

本文探讨了在Cesium项目中对绘制图形进行管理和分类的方法,重点研究了Entity和Primitive的使用,通过实例演示如何利用EntityCollection和CustomDataSource实现图形的动态管理和控制。

需求

我需要在项目中,对一些绘制的图形进行管理,能够进行分类;比如,我画一类广告牌,广告牌可以进行二次分类;我能根据分类进行删除;数据量不会很大,大概以千位单位;80%的问题都是可以解决的.

需求分析

相当于就是对绘制图形的一个管理,cesium在绘制图形时,基本开放了两个套路;一个是entity,一个是Primitive的管理方式;后者一般是给底层用的;前者是高度集合的,用于业务开发比较方便;这里我会重点研究entity,顺便了解下primitive的相关思想.

用到的技术

在这里插入图片描述在这里插入图片描述
在这里插入图片描述在这里插入图片描述
在这里插入图片描述这里,我为什么把这些api列出来;因为我们要重点搞清楚这些api的使用方法,基本就解决所有问题了.

需要验证的问题

那么我们需要验证哪些问题呢?
1 viewer.entities我们

Cesium 中,`Entity` `Primitive` 是两个核心概念,它们分别用于不同的场景目的。理解它们之间的区别对于高效使用 Cesium 构建三维地理空间可视化应用非常重要。 --- ## 一、`Entity` `Primitive` 的区别 ### 1. `Entity` - **定位**:`Entity` 是 Cesium 提供的高级 API,面向用户开发者,适合快速构建可视化场景。 - **特点**: - 更易于使用,封装了大量底层细节。 - 支持时间动态数据(如动画、轨迹)。 - 自动管理图形资源(如几何、材质、图形状态)。 - 支持多种图形类型(点、线、面、模型等)。 - 可以与 `DataSource` 配合使用(如 GeoJsonDataSource、KmlDataSource 等),实现数据驱动的图形渲染。 - **适用场景**: - 快速开发。 - 动态数据展示(如飞行路径、时间序列数据)。 - 交互式应用(如点击实体显示信息)。 #### 示例代码:创建一个 Entity(点 + 标签) ```javascript const viewer = new Cesium.Viewer('cesiumContainer'); const entity = viewer.entities.add({ position: Cesium.Cartesian3.fromDegrees(-115.0, 37.0), point: { pixelSize: 10, color: Cesium.Color.RED }, label: { text: 'Hello Cesium', font: '14pt monospace', style: Cesium.LabelStyle.FILL_AND_OUTLINE } }); viewer.entities.add(entity); viewer.zoomTo(viewer.entities); ``` --- ### 2. `Primitive` - **定位**:`Primitive` 是 Cesium 的底层 API,面向图形开发者,适合需要精细控制图形渲染的场景。 - **特点**: - 更接近图形硬件,性能更高。 - 需要手动管理图形资源(如几何体、材质、着色器等)。 - 不支持时间动态数据自动更新。 - 更加灵活,但使用复杂。 - **适用场景**: - 对性能要求极高的场景。 - 自定义图形渲染(如自定义着色器)。 - 大规模数据渲染(如地形、图像、模型批处理)。 #### 示例代码:创建一个 Primitive(红色点) ```javascript const viewer = new Cesium.Viewer('cesiumContainer'); const pointPrimitive = new Cesium.PointPrimitive({ position: Cesium.Cartesian3.fromDegrees(-115.0, 32.0), pixelSize: 10, color: Cesium.Color.RED }); viewer.scene.primitives.add(pointPrimitive); ``` --- ## 二、总结对比表 | 特性 | Entity | Primitive | |------|--------|-----------| | 层级 | 高级 API | 底层 API | | 易用性 | 高(封装好) | 低(需手动管理) | | 动态数据支持 | ✅ 支持时间动态 | ❌ 不支持自动时间更新 | | 图形控制 | 自动管理 | 手动精细控制 | | 适用场景 | 快速开发、交互式应用 | 高性能、自定义渲染 | | 渲染效率 | 相对较低 | 更高 | --- ## 三、何时使用 Entity?何时使用 Primitive? - **使用 Entity**: - 开发周期短、功能多。 - 数据驱动、动态更新。 - 交互需求多(如点击、弹窗)。 - **使用 Primitive**: - 对性能要求极高。 - 需要自定义图形渲染。 - 处理大规模数据(如点云、图像图层)。 --- ## 四、相关问题
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

李卓书

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值