cesium的api文档写的一般,需要一点时间来踩坑。label是标签的意思,一般是配合geojson等数据做注解用。
LabelCollection
LabelCollection是label容器的意思,其实可理解为es6的Map或Set,但是,其使用的方式有点诡异:
let labels = this.viewer.scene.primitives.add(new Cesium.LabelCollection());//label容器
let labelArr = [];
for (let i = 0; i < features.length; i++) {
const currentLabel = this.labels.add({ //添加label上球
position: new Cesium.Cartesian3.fromDegrees(...features[i].properties.centroid.map(Number), 200),
text: '' + features[i].properties.filetotal,
font: '22px sans-serif',
// outlineColor:Cesium.Color.WHITE,
// outlineWidth:2,
style: Cesium.LabelStyle.FILL_AND_OUTLINE,
fillColor: Cesium.Color.WHITE,
scaleByDistance: new Cesium.NearFarScalar(1.5e2, 1.5, 30.0e6, 0.0),
horizontalOrigin: Cesium.HorizontalOrigin.CENTER,
verticalOrigin: Cesium.VerticalOrigin.CENTER,
eyeOffset: new Cesium.Cartesian3(0, 0, -10000)
});
labelArr.push(currentLabel);// 缓存label
for(let item of this.labelArr) { //删除label
if(item.code !== '100000'){
labels.remove(item);//从球上删除
}
}
}
如上所示,如果声明 let labels = new Cesium.LabelCollection(),句柄无法直接使用,下面也是如此,其实是利用了链式调用的原理,cesium几乎所有的容器api都是这样的套路,估计开发者之前是玩jquery的,需要慢慢习惯。