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事件效率就会大大提升。

你可能感兴趣的:(cesium Entity与Primitive效率)