首页 / 浏览问题 / WebGIS / 问题详情
可视域和动态电子围栏有冲突,直接webgl卡死了,也不报错。。。
245EXP 2025年11月17日

bug过程,我首页首先加载了动态立体墙体,然后飞行定位到可视域点位,加载可视域范围,操作关闭可视域(到这里一切正常),然后操作隐藏电子围栏隐藏show=false,无任何其他操作,过大概一秒整个webgl页面卡死。控制台没有任何错误。

有时间的话我可以给你远程演示复现一下
我贴一下代码

墙体相关代码

/**
 * 渐变色围栏
 * @param viewer
 * @param name  名称(保证唯一性)
 * @param points  点位数据
 * @param size  点位个数
 * @param trailImage 渐变效果贴图
 * @param color 墙体颜色
 * @returns {Entity}
 */
export function addGradientColorWall(viewer, {name,points,size,trailImage,color}){
    let flag = 100;
    return viewer.entities.add({
        id: name,
        name: name,
        wall: {
            positions: Cesium.Cartesian3.fromDegreesArray(points),
            maximumHeights: new Array(size).fill(160),
            //minimumHeights : new Array(size).fill(100),
            minimumHeights :  new Cesium.CallbackProperty(function (time) {
                flag += 1;
                if (flag > 160) {
                    flag = 100;
                }
                return new Array(size).fill(flag);
            }, false),
            material: new Cesium.ImageMaterialProperty({
                image: trailImage,
                transparent: true,
                color: color? Cesium.Color.fromCssColorString(color) : Cesium.Color.ORANGERED
            })
        },
    });
}

//关闭可视域代码
let viewShed3D = this.getViewShed3D && this.getViewShed3D()
      if(viewShed3D){
        viewShed3D.distance = 0.1;
        viewShed3D.clear();
        viewShed3D.destroy();
        viewShed3D = null;
      }

加载可视域代码

/**
 * 构建单个可视域
 * @param viewer
 * @param option
 */
export function createViewShed3D(viewer,option){
    let viewShed3D = new Cesium.ViewShed3D(viewer.scene);
    viewShed3D.viewPosition = [option.viewPoint.x, option.viewPoint.y, option.viewPoint.z]; //可视点位
    viewShed3D.setDistDirByPoint([option.targetPoint.x, option.targetPoint.y, option.targetPoint.z]); //可视域目标点
    viewShed3D.visibleAreaColor = Cesium.Color.fromCssColorString('rgba(104,255,54,0.2)');//可见区域
    viewShed3D.hiddenAreaColor = Cesium.Color.fromCssColorString('rgba(204,28,28,0.7)');//隐藏区域
    return viewShed3D;
}


 

1个回答

我找到问题代码了,但是具体原因未知,这样一来我就无法构建动态的墙体了
 minimumHeights : new Array(size).fill(100),
// minimumHeights :  new Cesium.CallbackProperty(function (time) {
//     flag += 1;
//     if (flag > 160) {
//         flag = 100;
//     }
//     return new Array(size).fill(flag);
// }, false),

245EXP 2025年11月17日
...