Cesium基础-(Entity)

文摘   2024-10-28 09:00   宁夏  

2.Entity 实体

在Cesium中,Entity(实体)是一个核心概念,用于表示三维场景中的各种对象。Entity可以是地球上的点、线、面,也可以是飞机、汽车、船舶等动态物体。Entity API的主要目的是定义一组高级对象,它们将可视化和信息存储到统一的数据结果中,使得开发者更加关注数据展示而不是底层的可视化机制。

Entity的操作

Entity提供了丰富的操作方法,支持动态更新和交互。例如,可以通过viewer.entities.add方法添加实体,通过viewer.entities.remove方法删除实体,通过viewer.entities.getById方法获取实体等。

Entity的样式化

Entity API允许开发者通过设置属性来样式化实体。例如,可以通过设置material属性来改变实体的颜色或纹理。此外,Entity还支持时间动态更新,可以根据时间变化来改变实体的外观和位置。

Entity的管理

Entity通常通过viewer.entities集合进行管理。开发者可以手动创建并添加到viewer.entities中,也可以由数据源生成,如CzmlDataSource和GeoJsonDataSource。

总结

Entity是Cesium中用于表示和操作三维场景中各种对象的核心概念。它提供了丰富的属性和方法,支持动态更新和交互,使得开发者可以轻松地创建复杂的地理信息表达和场景构建。通过Entity API,开发者可以更加关注数据展示而不是底层的可视化机制,从而提高开发效率和代码的可维护性。

Cesium中Entity的高级属性有哪些,以及它们的具体用途是什么?

在Cesium中,Entity的高级属性主要通过Property机制来定义和管理。Property是用于描述Entity属性随时间变化的接口和机制,使得Entity的行为可以根据时间进行动态变化。Property可以分为四类:基本类型、坐标类型等。

具体来说,Property系统允许开发者定义属性,并使其与时间相关联,可以在不同的时间点返回不同的属性值。这种机制使得Entity能够感知这些Property的变化,并在不同的时间驱动物体进行动态展示。因此,Property机制是实现数据驱动和时间动态可视化的重要工具。

如何在Cesium中使用Entity API进行时间动态更新和交互?

在Cesium中使用Entity API进行时间动态更新和交互,可以通过以下步骤实现:

  1. 创建Entity对象:首先,使用Entity API创建一个Entity对象。Entity对象可以包含各种属性和样式,用于表示空间数据。
  2. 关联时间轴:将Entity对象与Cesium的时钟系统关联起来。Cesium的时钟系统是动态更新场景的关键。通过设置Entity对象的时间属性(如time),可以使其在不同时间点显示不同的状态。
  3. 添加运动轨迹:为了展示Entity的运动轨迹,可以使用Cesium的数据标记语言CZML。CZML文件可以描述Entity在不同时间点的位置和其他属性变化,从而生成动态的运动轨迹。
  4. 使用DataSource API:Cesium的DataSource API可以处理复杂的空间地理数据格式,并将其转换为Entity对象。通过DataSource API,可以将外部数据源(如GeoJson、KML等)加载到Cesium中,并动态更新这些数据。
  5. 交互性处理:为了实现交互性,可以使用Cesium的拾取(pick)功能。拾取功能可以从3D场景中返回数据对象,当用户在Entity上悬停或点击时,可以改变其样式或执行其他操作。
  6. 时钟的onTick事件:Cesium的时钟系统提供了onTick事件,该事件会在每个时间间隔内触发。通过监听这个事件,可以在每次时间更新时根据当前时间更新Entity的属性,从而实现动态更新场景。

Entity 的公共属性

idString此对象的唯一标识符。如果未提供,则将生成GUID。
nameString要显示给用户的可读名称。它不必是唯一的。
availabilityTimeIntervalCollection与此对象相关联的可用性(如果有)。
showBoolean一个布尔值,指示是否显示该实体及其子代。
descriptionProperty | string一个字符串属性,用于为此实体指定HTML 描述。
positionPositionProperty | Cartesian3指定实体位置的属性。
orientationProperty指定实体方向的属性。
viewFromProperty用于查看该对象的建议初始偏移量。
parentEntity要与此实体相关联的父实体。
propertiesPropertyBag |undefined与此实体相关联的任意属性。

Entity 的公共方法

addProperty (propertyName)

向此对象添加属性。添加属性后,就可以用 Entity#definitionChanged 观察并合成与

CompositeEntityCollection

computeModelMatrix (time, result ) → Matrix4

在指定时间为实体的转换计算模型矩阵。如果方向或位置返回未定义未定义。

isAvailable (time) → Boolean

给定时间,如果此对象在该时间内应该有数据,则返回 true。

merge (source)

将此对象上每个未分配的属性分配给该值提供的源对象具有相同属性

removeProperty (propertyName)

删除了以前用 addProperty 添加的属性。

Entity 的 Graphics

billboardBillboardGraphics | BillboardGraphics.ConstructorOptio ns与此实体相关联的广告牌。
boxBoxGraphics | BoxGraphics.ConstructorOptions与该实体关联的框。
corridorCorridorGraphics | CorridorGraphics.ConstructorOption s与此实体相关联的走廊。
cylinderCylinderGraphics | CylinderGraphics.ConstructorOptions要与此实体相关联的圆柱体。
ellipseEllipseGraphics | EllipseGraphics.ConstructorOptions与此实体相关联的椭圆。
ellipsoidEllipsoidGraphics | EllipsoidGraphics.ConstructorOption s与此实体相关联的椭球。
labelLabelGraphics | LabelGraphics.ConstructorOptions与此实体相关联的options.label。
modelModelGraphics | ModelGraphics.ConstructorOptions与此实体相关联的模型。
tilesetCesium3DTilesetGraphics | Cesium3DTilesetGraphics.Co nstructorOptions要与此实体相关联的 3D Tiles 图块。
pathPathGraphics | PathGraphics.ConstructorOptions与此实体相关联的路径。
planePlaneGraphics | PlaneGraphics.ConstructorOptions与此实体相关联的平面。
pointPointGraphics | PointGraphics.ConstructorOptions与该实体关联的点。
polygonPolygonGraphics | PolygonGraphics.ConstructorOptions要与此实体相关联的多边形。
polylinePolylineGraphics | PolylineGraphics.ConstructorOptions与此实体相关联的折线。
polylineVolumePolylineVolumeGraphics | PolylineVolumeGraphics.Cons tructorOptions要与此实体相关联的polylineVolume。
rectangleRectangleGraphics | RectangleGraphics.ConstructorOpti ons与此实体相关联的矩形。
wallWallGraphics | WallGraphics.ConstructorOptions与该实体关联的墙。

Cesium中Entity的性能优化技巧有哪些?

在Cesium中,Entity的性能优化可以通过多种方式实现。以下是一些具体的优化技巧:

  1. 使用事件暂停和恢复:在批量添加或修改实体时,可以使用viewer.entities.suspendEvents ()viewer.entities.resumeEvents ()方法来提高性能。这两个方法分别用于暂停和恢复实体事件,从而减少不必要的渲染更新。
  2. 选择合适的API:根据需求选择合适的API。如果需要更高的性能和更底层的控制,可以使用Primitive API,它允许开发者直接操作几何数据和简单的属性,从而减少内存占用和提高渲染效率。而Entity API则更适合处理复杂的属性和行为,提供一致且易于使用的接口。
  3. 显式渲染模式:启用显式渲染模式可以在场景空闲时显著降低CPU使用率。当Cesium处于空闲状态时,CPU使用率会大幅下降,从而提高整体性能。
  4. 调整相关参数:针对不同场景和模型,可以调整Cesium的相关参数,如maximumScreenSpaceError(最大的屏幕空间误差)和maximumMemoryUsage(最大使用的GPU内存量),以优化渲染性能。
  5. 合并渲染批次:通过将同类的geometry合并成一个渲染批次,可以优化渲染效率。例如,使用loadAsynchronous函数将参数化的geometry转化为三角形,并合并同类的geometry,从而减少渲染命令的数量。
  6. 按需加载数据:使用数据流技术按需加载和卸载数据,以最小化数据传输量和加载时间。这可以通过控制3D Tiles的最大内存使用量来实现,从而在保证数据流畅的前提下尽可能减小内存占用。
欢迎关注我的博客及B站

博客:

https://blog.csdn.net/weixin_44857463/article/details/129157708

B站:

https://space.bilibili.com/610654927?spm_id_from=..0.0


点击蓝字  关注我们
扫码关注
我们一起学习!

GISer世界
热门GIS开源库介绍、GIS开源库实战教程、GIS技术前沿动态(关注GIS技术的最新发展)、GIS行业应用案例分享(分享众多GIS在不同行业中的应用案例)、GIS技术交流互动
 最新文章