1. 程式人生 > 其它 >cesium Entity與Primitive效率

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,如有侵權,請聯絡刪除。