美文网首页开源
cesium Entity与Primitive效率

cesium Entity与Primitive效率

作者: gardenlike2 | 来源:发表于2019-07-22 16:09 被阅读66次
    平时我们在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效率

        本文链接:https://www.haomeiwen.com/subject/bqgdkctx.html