首页 / 浏览问题 / 三维GIS / 问题详情
iClientWebGL在添加rest地图服务时如何控制子图层的初始显隐
260EXP 2023年02月14日
在三维场景中通过Cesium.SuperMapImageryProvider添加了一个发布在iServer上的map服务,map中包含了大量的子图层,一次性全部显示了出来。 假设里面有100个子图层,请问有无类似二维地图上的layersID的方法,在添加地图时只想显示其中6,7个图层,其他图层全部想设置成非显示,如果有需求了再显示出来、请问这种效果应该如何实现

1个回答

您好!对 SuperMapImageryProvider 加载的地图服务您可以通过setLayerStatusParameters设置子图层显隐,可以参考这篇博客https://blog.csdn.net/supermapsupport/article/details/123997680。对子图层的显示控制,需要先与iserver交互得到子图层信息,然后根据需要对子图层进行显隐控制操作。

希望可以帮助到您!

1,457EXP 2023年02月14日
您好,我尝试了一下上述方法,

在图层数比较少的时候可以正常显示

但图层数比较多然后需要一个个把isVisible设置成false的话最后请求url的长度会超过上限导致无法正常请求到结果

请问这种应该如何解决

目前代码如下:

for (var i = 0; i < getLayersInfoEventArgs.result.subLayers.layers.length; i++) {
                    if (getLayersInfoEventArgs.result.subLayers.layers[i].caption == "aaa") {
                        var param = {
                            layerName: getLayersInfoEventArgs.result.subLayers.layers[i].name,
                            isVisible: true
                        };
                        filter.push(param);
                    }
                    else {
                        var param = {
                            layerName: getLayersInfoEventArgs.result.subLayers.layers[i].name,
                            isVisible: false
                            //displayFilter: "SmID = 0"
                        };
                        filter.push(param);
                    }

}
filterLayer.setLayerStatusParameters(filter);
var roadLayer = viewer.imageryLayers.addImageryProvider(filterLayer);
先用 addImageryProvider 加载地图后,再用setLayerStatusParameters设置子图层过滤,这样能满足吗
试过了,还是一样
如果是因为请求url的长度会超过上限导致无法正常请求到结果的话,您可以私聊我您的联系方式,我这边上报个缺陷,等研发解决。
...