cesium Entity与Primitive效率
作者:互联网
平时我们在cesium地图上添加点、线、面以及其他常见的对象,一般是通过添加entity对象,它包含了我们常见的许多对象。官方接口中举例了许多例子,如图1
图1 entity对象类型
对于创建他们的话,我想看本文章的坑定非常了解了。对象是存在map._viewer.entities中的。对于点击事件的效率是可以的,比如点击对象使其高亮。但是entity到达一定数目,且鼠标事件变成了Hover后,他每时每刻都在改变高亮对象,就会造成卡顿、延迟。是应为cesium对entity封装了较多的对象以及功能。解决办法是用更加底层的primitive。它的效果会更加好,如果你想对每个对象都分离显示不同效果。注意不要融合primitive,因为融合后所有的只能根据id来进行修改且不读到其他的自定义属性。
var instance = new Cesium.GeometryInstance({
geometry: new Cesium.PolygonGeometry({
polygonHierarchy: new Cesium.PolygonHierarchy(
Cesium.Cartesian3.fromDegreesArray(tempPoints)
),
height: height,//高
extrudedHeight: fNum * me.floorHeight - 2.5 + baseHeight,
closeTop: true,
closeBottom: true
}),
attributes: {
color: Cesium.ColorGeometryInstanceAttribute.fromColor(color),
show: new Cesium.ShowGeometryInstanceAttribute(true),
},
id: fNum,
});
instance.Floor = fNum;
instance.EName = feature.properties.Name;
instance.Company = feature.properties.company;//鼠标事件无法读到属性
instances.push(instance);
var inprimitive = me.primitives.add(new Cesium.Primitive({
geometryInstances: instances, //读的是
//某些外观允许每个几何图形实例分别指定某个属性,例如:
appearance: new Cesium.PerInstanceColorAppearance({
translucent: false,
closed: true,
flat: true
})
}));
inprimitive.Floor = fNum;
inprimitive.ORIG_FID = feature.properties.ORIG_FID;
inprimitive.type = "inprimitive";//鼠标事件可以读到的属性
me.inprimitives.push(inprimitive);
这样鼠标Hover事件效率就会大大提升。
本文转自 https://www.jianshu.com/p/8714a0c2c211,如有侵权,请联系删除。
标签:instance,Primitive,inprimitive,对象,Entity,Cesium,cesium,new,true 来源: https://www.cnblogs.com/hustshu/p/16103541.html