DataSourceDisplay和DataSourceCollection关系
Cesium Viewer的初始化过程中会创建DataSourceCollection实例和DataSourceDisplay实例。向DataSourceCollection实例中添加DataSource实例(CustomDataSource或其他类型的数据源),Cesium会自动使用DataSourceDisplay实例将这些数据源中的实体渲染到Viewer中。
DataSource和CustomDataSource
DataSource是用于存储和管理一组实体的基类。Cesium 提供了几种内置的 DataSource 实现,如 GeoJsonDataSource,CzmlDataSource和 KmlDataSource。
// GeoJsonDataSource(用于处理GeoJSON数据)
const viewer = new Cesium.Viewer("cesiumContainer");
const dataSource = Cesium.GeoJsonDataSource.load("./source/czml/test1.czml");
viewer.dataSources.add(dataSource);
// CzmlDataSource(用于处理CZML数据)
const viewer = new Cesium.Viewer("cesiumContainer");
const dataSource = Cesium.CzmlDataSource.load("./source/czml/test1.czml");
viewer.dataSources.add(dataSource);
// KmlDataSource(用于处理KML数据)
const viewer = new Cesium.Viewer("cesiumContainer");
const dataSource = Cesium.KmlDataSource.load("./source/czml/test1.czml");
viewer.dataSources.add(dataSource);
CustomDataSource 是 DataSource 的一个子类,可以直接创建和修改实体,而不是从外部文件(如 GeoJSON, CZML 或 KML)加载它们。
// CustomDataSource使用方法:
const viewer = new Cesium.Viewer("cesiumContainer");
const dataSource = new Cesium.CustomDataSource("myData");
const entity = dataSource.entities.add({
position: Cesium.Cartesian3.fromDegrees(119.55179, 32.14358, 200),
billboard: {
image: "./images/img.png",
width: 30,
height: 30
}
});
viewer.dataSources.add(dataSource);
ps1: 上面viewer.dataSources.add(dataSource),就是向DataSourceCollection实例中添加DataSource实例
ps2: 平常开发添加实体可能是直接调用viewer.entities.add({Entity}),其实是直接调用dataSourceDisplay.defaultDataSource.entities,相当于Cesium为我们内置的一个CustomDataSource,实际上还是由dataSourceDisplay来渲染的。