cesium对entity和Primitive的管理思想及常见问题解决

需求

我需要在项目中,对一些绘制的图形进行管理,能够进行分类;比如,我画一类广告牌,广告牌可以进行二次分类;我能根据分类进行删除;数据量不会很大,大概以千位单位;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来控制一系列的东西了

  • 2
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

李卓书

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值