DataSource
是 Cesiumjs 中一个用于加载和显示数据的类。它提供了一种简单而强大的方式来加载、解析和显示各种形式的数据,包括 3D 模型、点云、地形数据、矢量数据等。
本文将介绍 DataSource
类的基本概念、用法和常用属性方法。
DataSource
的基本结构DataSource
定义了加载和解析数据的接口和规范,而数据则是直接从 DataSource
派生出来的。Cesiumjs 提供了一些默认的数据源,例如 CzmlDataSource
、KmlDataSource
和 GeoJsonDataSource
等。此外,用户还可以通过继承 DataSource
类自定义数据源。
所有从 DataSource
派生出来的数据对象都会被添加到场景中,并提供了一些基本的操作方法,例如从场景中删除、改变可见性、调整透明度等。
DataSource
首先,我们需要引入 DataSource
类,并创建一个数据源对象:
import { DataSource } from 'cesium';
var dataSource = new DataSource();
接下来,我们需要将创建的数据源添加到地图场景中:
viewer.dataSources.add(dataSource);
这样,数据源就会被添加到场景中并开始驻留,并且该数据源中的所有数据对象也会被加入到场景中。
DataSource
提供了几种常见的加载数据方式,常用的有:
load
方法:使用这种方式加载的数据可以是 URL 或者一个包含数据的对象(例如一个 JSON 对象)。process
方法:使用这种方式加载的数据都是以对象的形式传入 process
方法中,而不需要从 URL 加载。在使用这些方法之前,我们需要将数据源添加到场景中。例如,我们从一个 Cesium坐标文本中加载数据:
var data = `{"id":"MyShape","polygon":{"hierarchy":{"positions":[{"cartographicDegrees":[-74.01881302800248,40.69114333714821,0,-74.01501566853815,40.68985201456782,0,-74.01081016310914,40.689680434360645,0,-74.01225781419098,40.69219427742796,0,-74.01881302800248,40.69114333714821,0]}]}}}`;
dataSource.load(data, {
czml: {
polygon: {
material: {
solidColor: {
color: { rgba: [0, 255, 255, 128] }
}
}
}
}
});
我们定义了一个名为 MyShape
的多边形,并将其加载到数据源中。通过将数据源对象作为第一个参数传递给 load
方法,我们可以确保数据加载到正确的源中。 剩余的参数是描绘此多边形的 JSON 对象以及材质等的样式信息。
如果要从 URL 加载数据,则使用以下方式:
dataSource.load('https://something.com/data.json');
此方法将返回一个 Promise
对象,基本用法如下:
dataSource.load('https://something.com/data.json').then(function(result) {
console.log(result); // 成功加载后的回调
}).catch(function(error) {
console.log(error); // 错误处理回调
});
这个例子也使用到了 Promise
,Promise 是一个异步编程的主要模式之一,常常作用是处理处理异步操作后的结果和错误。
DataSource
常用属性和方法entities
entities
属性是一个 EntityCollection
对象,它包含了 DataSource
中所有的实体(entities)对象。实体代表了场景中的实际对象,并定义了它们的位置、外观和行为等属性。
var entities = dataSource.entities;
isLoading
isLoading
属性判断当前数据源是否正在加载,若在加载返回 true
,否则返回 false
。
if (dataSource.isLoading) {
console.log('Data is still loading.');
}
show
show
属性控制数据源的可见性。如果将其设置为 true
,则数据源将显示在场景中,如果是 false
,则数据源将不可见。
dataSource.show = false;
name
name
属性是一个字符串,代表数据源的名称。
dataSource.name = 'My Data';
console.log(dataSource.name); // My Data
remove
remove
方法将数据源从场景中删除。
viewer.dataSources.remove(dataSource);
update
update
方法通过重新加载数据源中的所有实体来更新场景。
dataSource.update();
changedEvent
changedEvent
是一个事件,每当数据源中的属性发生变化时,都会触发此事件。
dataSource.changedEvent.addEventListener(function(changedObject) {
console.log(changedObject); // 显示被修改的对象
});
本文简要介绍了 DataSource
类的基本概念、用法和常用属性方法。 DataSource
是 Cesiumjs 中一个用于加载和显示各种数据的类,提供了便捷的方式来加载、解析和显示各种形式的数据。在实际开发中, DataSource
的场景和用法是非常丰富和多样的,希望本文能对初学者和使用者有所帮助。