需求
我需要在项目中,对一些绘制的图形进行管理,能够进行分类;比如,我画一类广告牌,广告牌可以进行二次分类;我能根据分类进行删除;数据量不会很大,大概以千位单位;80%的问题都是可以解决的.
需求分析
相当于就是对绘制图形的一个管理,cesium在绘制图形时,基本开放了两个套路;一个是entity,一个是Primitive的管理方式;后者一般是给底层用的;前者是高度集合的,用于业务开发比较方便;这里我会重点研究entity,顺便了解下primitive的相关思想.
用到的技术
这里,我为什么把这些api列出来;因为我们要重点搞清楚这些api的使用方法,基本就解决所有问题了.
需要验证的问题
那么我们需要验证哪些问题呢?
1 viewer.entities我们常用,其实它就是
顾明思议,实体集合类中,包含了各个实体;
这里我们以广告牌为例,验证以下推论:
(1) viewer.entities与 entityCollection是一样的功能;
(2) entityCollection的相关方法
验证截图
1 确定entitycollection与viewer.entities的区别
发现返回的东西差不多,不过直接用entitycollection没有渲染出来
然后去查阅了下资料,握草,发现要知道的东西还不少;
这里首先需要搞懂的就是这几个概念:
Viewer
DataSourceDisplay
DataSourceCollection
CustomDataSource
EntityCollection
Entity
相关概念可以推荐看下这里的讲解,还挺生动有趣的:
https://www.cnblogs.com/fuckgiser/p/6091040.html
然后这片文章是可以帮助我们理顺思路的
https://www.jianshu.com/p/9a71186edd5b
看了下讲解,一知半解吧;然后需要解决我们的问题,就是通过entitycollection添加模型到项目中,怎么搞呢?
哎,搞了半天,也没有把EntityCollection搞到图像上;算了,还是直接用viewer.entities吧
终于,黄天不负有心人;通过datasources实现了对entities的区别管理:
// let bl=new Cesium.BillboardCollection(viewer);
let ety = new Cesium.EntityCollection();
// viewer.dataSources.entities.add(ety)
// viewer.scene.primitives.add(ety);
let dataSource = new Cesium.CustomDataSource("name");
viewer.dataSources.add(dataSource);
dataSource.entities.add({
position: Cesium.Cartesian3.fromDegrees(data.lng, data.lat),
label: {
heightReference: Cesium.HeightReference.CLAMP_TO_GROUND,
disableDepthTestDistance: Number.POSITIVE_INFINITY,
text: "datasource",
showBackground: true,
pixelOffset: new Cesium.Cartesian2(0, -50),
scaleByDistance: new Cesium.NearFarScalar(0, 1, 5000, 0.5),
},
});
viewer.entities.add({
position: Cesium.Cartesian3.fromDegrees(data.lng+1, data.lat+1),
label: {
heightReference: Cesium.HeightReference.CLAMP_TO_GROUND,
disableDepthTestDistance: Number.POSITIVE_INFINITY,
text: "viewer",
showBackground: true,
pixelOffset: new Cesium.Cartesian2(0, -50),
scaleByDistance: new Cesium.NearFarScalar(0, 1, 5000, 0.5),
},
});
setTimeout(()=>{
dataSource.entities.removeAll();
},5000)
这样我就可以通过控制dataSource来控制一系列的东西了