首页 / 浏览问题 / WebGIS / 问题详情
动态单体化矢量面贴合高程和拉伸高度设置
18EXP 2020年07月06日

// 矢量面贴对象的底部高程
Cesium.GroundPrimitive.bottomAltitude
// 矢量面贴对象的拉伸高度
Cesium.GroundPrimitive.extrudeHeight

经过测试,发现"拉伸高度"这个属性的生效是有一点延迟的,如果频繁的执行下面的代码添加entity,会出现一种情况,就是这一次贴图的拉伸高度是上一次设置的,设置延时1秒之后不会有异常,请问有什么解决办法吗

// 矢量面贴对象的底部高程

Cesium.GroundPrimitive.bottomAltitude = Number(bottomAltitude)

// 矢量面贴对象的拉伸高度

Cesium.GroundPrimitive.extrudeHeight = Number(buildHeight)

viewer.entities.add({

    id: id,

    name: id,

    polygon: {

        hierarchy: Cesium.Cartesian3.fromDegreesArray(point3D),

        material: color

    },

    clampToS3M: true // 贴在S3M模型表面

})

问题关闭原因: 已解决

1个回答

您好,是不是因为回调函数没执行完就修改了。您可以添加的时候remove掉原来的避免这种情况,如果不行您可以把延时设置成0-1之间自行调整。
jjz
4,720EXP 2020年07月06日
设置属性Cesium.GroundPrimitive.extrudeHeight 还有回调函数的吗
根据您之前描述设置属性生效有延迟,一般是因为js执行的顺序出了问题,有可能不是单纯设置属性那一句造成的。您看看每次把原来的拉伸高度清除还有这种问题吗。

您看看以前这个问题有没有帮助:

http://ask.supermap.com/45760

每次都有移除的

这个问题我看过了,我的情况有点不太一样,我之所以设置这两个属性的原因是因为,有的建筑比较特殊,比如裙楼,底面是重合了的,如果不设置拉伸高度的话,那么在给底部建筑上色的同时,上面的建筑也会有一部分被覆盖掉。
那您现在想达到的效果是在选中裙楼的时候,红色的面只覆盖到裙楼中比较矮的建筑,但是现在选中裙楼的时候不论高矮都会覆盖在红色的面内吗?然后设置了拉伸高度就可以限制选中的高度?我可能理解的不太准确,方便的话您给截个图,或者再说详细一点。
"那您现在想达到的效果是在选中裙楼的时候,红色的面只覆盖到裙楼中比较矮的建筑",没错就是这样,我想要的效果就是点击比较矮的建筑时,只会覆盖比较矮的建筑,用拉伸高度来进行限制。现在遇到的问题是,本次点击完实际覆盖的高度是上一次点击的建筑高度,也就是说本次设置的拉伸高度属性值没有生效,还是使用上一次设置的值。
我仔细研究了一下,如果您觉得设置延时效果实在不理想,可以在代码里用await/async来控制代码的调用,可能其它部分的代码比如增加新的实体比拉伸高度更快的执行,同步异步可以有效控制类似问题。或者您先在官网示例中增加这两条属性,用自己的服务的地址测试,看能不能达到需要的效果。
我试试看,谢谢你的耐心答复。
您太客气了,这是我应该做的,希望您能成功完成需要的功能。
...