首页 / 浏览问题 / 三维GIS / 问题详情
扫描线设置不生效,报错渲染失败
28EXP 2020年01月21日

使用ScanEffect扫描线效果时,viewer.scene.scanEffect.show = true;报错如下图:

1个回答

您好,您这边能否将您这边的代码粘贴出来,光是看渲染看不出问题所在。
4,186EXP 2020年01月23日

您好,我的代码如下:

<!DOCTYPE html>
<head>
    <meta charset="utf-8">
    <title>扫描效果</title>
    <link href="../Build/Cesium/Widgets/widgets.css" rel="stylesheet">
    <link href="./css/pretty.css" rel="stylesheet">
    <script type="text/javascript" src="./js/jquery.min.js"></script>
    <script src="./js/config.js"></script>
    <script src="./js/tooltip.js"></script>
    <script src="./js/spectrum.js"></script>
    <script type="text/javascript" src="./js/require.min.js" data-main="js/main"></script>
</head>
<body>
<div id="cesiumContainer"></div>

<script>
    function onload(Cesium) {

        $(".params-setting-anchor").click(function(){
            $(".params-setting").toggleClass("params-setting-hide");
        });

        var viewer = new Cesium.Viewer('cesiumContainer',{
            infobox:false
        });
        viewer.imageryLayers.addImageryProvider(new Cesium.BingMapsImageryProvider({
            url : 'https://dev.virtualearth.net',
            mapStyle : Cesium.BingMapsStyle.AERIAL,
            key : URL_CONFIG.BING_MAP_KEY
        }));

        var scene = viewer.scene;
        scene.fxaa = true;
        scene.skyAtmosphere.show = false;

        var promise = scene.open(URL_CONFIG.SCENE_CBD);
        Cesium.when(promise,function(layers){
            var tooltip = createTooltip(document.body);
            var tooltipMsg = "";
            var clickCount = 0;
            var refLayer = layers[0];
			
			viewer.scene.scanEffect.show = true;
			var pos = new Cesium.Cartesian3.fromDegrees(refLayer.lon,refLayer.lat,10.0);
            viewer.scene.scanEffect.centerPostion = pos;
			viewer.scene.scanEffect.mode = Cesium.ScanEffectMode.CIRCLE;
			viewer.scene.scanEffect.period = 5;
			viewer.scene.scanEffect.speed = 100;
				
            //设置相机位置,定位至模型
            scene.camera.setView({
                destination : new Cesium.Cartesian3(-2180733.097675902, 4379639.149392802, 4092613.146140101),
                orientation:{
                    heading: 4.419871112141432,
                    pitch: -0.40767078314183536,
                    roll: 1.0658141036401503e-14
                }
            });
			
			// 初始化颜色选择控件
            var initialScanColor = "#2263e6";
            viewer.scene.scanEffect.color = Cesium.Color.fromCssColorString(initialScanColor);
            $("#scan-color").spectrum({
                color: initialScanColor,
                chooseText: "确定",
                cancelText: "取消",
                showAlpha: true,
                change: function(color){
                    var colorObj = color.toRgb();
                    viewer.scene.scanEffect.color = new Cesium.Color(colorObj.r / 255, colorObj.g / 255, colorObj.b /255, colorObj.a);
                }
            });
			
  
        });
    }
</script>
</body>

您好,您看一下您的这段代码:

reflayer这个是您获取到的一个图层,您这边通过reflayer.lon来获取的经度吗,你可以打印一下看一下reflayer.lon是否是经度值

您这边可以参考一下下面的来设置扫描线的中心点

您好,打印了refLayer.lon和refLayer.lat,确实是经纬度,然后我用您上面说的那样设置中心位置,代码如下:

viewer.scene.scanEffect.show = true;
var startPosition = new Cesium.Cartesian3.fromDegrees(116.45811047729649,39.91229850123048,10.0);
viewer.scene.scanEffect.centerPostion = startPosition;
viewer.scene.scanEffect.mode = Cesium.ScanEffectMode.CIRCLE;
viewer.scene.scanEffect.period = 5;
viewer.scene.scanEffect.speed = 100;

还是会报错:

   而且,并不是每次运行代码都会报错,有时会报错,有时可以运行。

您这边看一下直接运行您这边的webgl包中的范例里面的扫描线是否回报错,scanLine..html。
您好,运行示例程序没有报错。我的代码跟示例程序的一个区别是,示例程序是通过开关控制开启或关闭扫描线,而我是设置始终开启扫描线,不过这一点应该没什么影响,而且报错也不是每次都报错。

我这边测试的自动开始的扫描线是没有报错的,不知您这边的webgl包是多久下载下来的呢,能否压一个webgl包以网盘的形式发给我验证一下呢

您好,我把webgl包放到网盘上了:

链接:https://pan.baidu.com/s/1s6DX2b-cZUtfi8BXzAEBVg
提取码:inm9
收到,稍后回复您

您好,我这边用您上面的代码,删除一些,只留下关键性的代码是没有任何报错的,建议您这边再检查一下您这边的是否是其他的代码的问题

您好,能麻烦把您修改后的代码发我一份吗,我再对比之前的试一试。

问题解决了么?我也碰到了这个问题sad

...