在Cesium的官方图标聚合例子中,我们通过添加监听可以很容易的获取到当前聚合的实体列表,见 官方例子。
但在我的项目中,需要对当前脱离聚合的图标再进行一些处理,哪些实体脱离了聚合呢?Cesium并没有给出接口获取。
翻看了dataSource的数据结构后,发现了一个有意思的地方:
我是使用cluster.point来展示聚合效果的
function (clusteredEntities, cluster) {
cluster.point.show = true;
cluster.point.id = cluster.label.id;
cluster.label.show = true;
cluster.label.text = (clusteredEntities.length ).toLocaleString();
// 。。。设置一些效果
然后我发现在dataSource.clustering._clusterPointCollection._pointPrimitives中放置了当前的聚合数据;因此可以通过以下代码获取
let arrCluster = dataSource.clustering._clusterPointCollection._pointPrimitives.map(e=> { return e.id}).flat();
这个arrCluster 就是当前参与了聚合的所有实体了,然后再与自己的标绘数据比较就可以找到所有未参与聚合的实体并进行处理了。这个方法也算是无奈之中的下策了,毕竟还是要多耗费查找的资源。希望Cesium以后可以提供脱离聚合的数据吧