【Cesium入门教程】第三课:Cesium 实体(Entity)与数据源(DataSources)

往期回顾:

【Cesium入门教程】第一课:Cesium简介与快速入门

【Cesium入门教程】第二课:基础操作与地图控制

1、实体(Entity)的概念

在Cesium中,实体(Entity)是用来描述具有几何形状和属性的对象的基类。实体可以是点、线、面、模型等,它们可以包含额外的信息,如名称、描述和标签。实体在Cesium中非常有用,因为它们可以被轻松地添加、更新和删除,从而为场景添加丰富的交互性。

添加实体

下面是如何在Cesium中添加一个点实体的示例:

const pointEntity = viewer.entities.add({
    position: Cesium.Cartesian3.fromDegrees(103.1, 25.0),
    point: {
        color: Cesium.Color.YELLOW,
        pixelSize: 10,
    },
    name: 'Sample Point',
    description: 'This is a description for the sample point.'
});

在这个例子中,我们创建了一个点实体,并设置了其位置、颜色、大小和描述。

删除实体

删除实体可以通过调用remove方法来实现:

viewer.entities.remove(pointEntity);

CallbackProperty

Cesium中的CallbackProperty允许开发者定义一个回调函数,这个函数可以在每个帧中被调用,以动态地更新实体的属性。这对于创建动态效果非常有用,例如:

const dynamicPoint = viewer.entities.add({
    position: new Cesium.CallbackProperty(() => {
        const time = Cesium.JulianDate.now();
        const x = Cesium.Math.lerp(Cesium.Cartesian2.fromDegrees(102.0, 20.0), Cesium.Cartesian2.fromDegrees(103.0, 25.0), (time.secondsOfDay % 86400) / 86400);
        return Cesium.Cartesian3.fromDegrees(x.y, x.x);
    }, false),
    point: {
        color: Cesium.Color.CYAN,
        pixelSize: 10,
    }
});

上述代码创建了一个随时间动态变化位置的点实体。

2、数据源(DataSources)

数据源是Cesium中用于加载和管理地理数据的组件。它可以处理多种格式的数据,包括GeoJSON、TopoJSON、KML和CZML。

加载GeoJSON数据

GeoJSON是一种编码各种地理数据结构的JSON格式。以下是如何加载GeoJSON数据的示例:

const geoJsonData = {
    "type": "FeatureCollection",
    "features": [
        {
            "type": "Feature",
            "geometry": {
                "type": "Point",
                "coordinates": [-122.39, 47.5]
            }
        }
    ]
};

const geoJsonPromise = Cesium.GeoJsonDataSource.load(geoJsonData);
geoJsonPromise.then(function(dataSource) {
    viewer.dataSources.add(dataSource);
    viewer.zoomTo(dataSource);
});

加载TopoJSON数据

TopoJSON是GeoJSON的一种扩展,它通过整合共享边来减少数据冗余。加载TopoJSON数据的步骤与GeoJSON类似,但需要指定TopoJSON数据源:

const topoJsonPromise = Cesium.GeoJsonDataSource.load('path/to/topojson.data');
topoJsonPromise.then(function(dataSource) {
    viewer.dataSources.add(dataSource);
    viewer.zoomTo(dataSource);
});

加载KML数据

KML是Google Earth使用的地理数据格式。在Cesium中加载KML数据,可以使用KmlDataSource:

const kmlPromise = Cesium.KmlDataSource.load('path/to/placemark.kml');
kmlPromise.then(function(dataSource) {
    viewer.dataSources.add(dataSource);
    viewer.zoomTo(dataSource);
});

加载CZML数据

CZML是专为Cesium设计的动态数据格式,它使用JSON数组来描述随时间变化的图形属性:

const czmlPromise = Cesium.CzmlDataSource.load('path/to/document.czml');
czmlPromise.then(function(dataSource) {
    viewer.dataSources.add(dataSource);
    viewer.trackedEntity = dataSource.entities.getById('ID_of_Entity');
});

在上述示例中,除了加载CZML数据源,我们还设置了trackedEntity,这允许相机自动跟踪数据源中的特定实体。

3、结语

本教程详细介绍了Cesium中的实体和数据源的概念、创建、加载和删除方法。

实体和数据源是Cesium中进行地理数据可视化的基础,它们为创建动态和交互式地图提供了强大的工具。

理解这些概念对于开发复杂的Cesium应用十分重要。

在后续教程中,我们将探讨更多高级特性,如图元(Primitive)绘制、交互事件处理以及粒子系统的使用。

本系列教程持续更新,不想错过的同学请关注我!

领取本开源Cesium视频教程的同学加小助手(whxzdjy)备注【cesium】

想学习更多高级cesium开发技能可以了解特训营的课程内容

特训营学员的cesium课程作业:

  • 16
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值