cesium Entity與Primitive效率
阿新 • • 發佈:2022-04-05
平時我們在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,如有侵權,請聯絡刪除。