首页 / 浏览问题 / 云GIS / 问题详情
iClientClassic设置图层显示时请求url中的参数问题
251EXP 2023年03月20日
通过iCLientClassic的SetLayerStatusService对map中的图层设置显隐后显示。但实际操作时发现设置图层的visible明明都相同,但图层有时候会无法显示

打开浏览器的network查看请求时,无法显示的时候的url如下:

https://localhost:8090/iserver/services/map-testmap/rest/maps/RoadMap/tileImage.png?transparent=true&cacheEnabled=false&layersID=wwwn_8917_2b3883dbba544bdcb83b1cb65953b590&width=256&height=256&x=16&y=74&scale=-1&redirect=false&t=1679286331900&overlapDisplayed=false

然后正常显示时的url如下:

https://localhost:8090/iserver/services/map-testmap/rest/maps/RoadMap/tileImage.png?transparent=true&cacheEnabled=false&layersID=wwwn_8917_8475b06c827f41809976088bc4f8561c&width=256&height=256&x=16&y=75&scale=0.000055383279935350536&redirect=false&t=1679286715076&overlapDisplayed=false

唯一的区别是scale分别为-1和0.000055383279935350536。但设置参数时我这边并没有设置过scale。

另外,成功显示出一次后刷新页面后也可以正常显示。

请问造成这样的效果是什么原因导致的。

1个回答

您好:

各个图层显示的可见比例尺范围不同,会导致在当前比例尺下,部分图层显示,部分图层不显示

您可以通过SuperMap.Layer的maxScale/minScale设置图层实例化的时的最大/小比例尺

详细信息请参考Classic在线文档:https://iclient.supermap.io/web/libs/iclient8c/apidoc/files/SuperMap/Map-js.html

希望可以帮助到您!

220EXP 2023年03月20日
您好,我现在想要显示的图层在iDesktop中设置过显示的最小比例尺

在地图上显示时移动地图可以获取上面的url,但如果超过了最小比例尺,图层会自动隐藏,此时移动地图也不会出现上面的url。

所以我觉得和比例尺没有直接的关系,因为现象不一样。

请问什么情况会导致上面scale=-1的场合

您好:

您这边是通过什么方式获取地图服务呢?

通过REST api进行访问需要设置scale参数

您这边方便把代码私信发我吗?这边帮您看看

希望可以帮助到您!

您好,我是使用以下代码新建动态图层然后追加到地图上去的:

roadLayer = new SuperMap.Layer.TiledDynamicRESTLayer(
        "RoadMap",
        roadUrl,
        {
            transparent: true,
            cacheEnabled: false
        },
        {
            maxResolution: "auto",
            bufferImgCount: 0
        }
    );

然后获取这个地图中每一个图层的名字,通过LayerStatus设置每一个图层的显隐

layerStatusTrue = new SuperMap.REST.LayerStatus({
                                layerName: roadLayer.LayersName2[i],
                                isVisible: true
                            });

然后运行后获得筛选后的图层

var setLayerStatusParameters = new SuperMap.REST.SetLayerStatusParameters({
                layerStatusList: layersStatus
            });
            var setLayerStatusService = new SuperMap.REST.SetLayerStatusService(roadUrl, {
                eventListeners: { "processCompleted": setLayerCompleted }
            });
            setLayerStatusService.processAsync(setLayerStatusParameters);

然后更新这个动态图层

function setLayerCompleted(setLayerServiceEventArgs) {
    roadLayer.params.layersID = setLayerServiceEventArgs.result.newResourceID;
    roadLayer.redraw();
    if (roadLayer.visibility === false) {
        roadLayer.setVisibility(true);
    }
}

流程是这样的

您好:

您这边设置一下scales参数

希望可以帮助到您!

您好,请问这个scale参数一般应该如何设置,设置完后如果这个动态图层里每个图层可以显示的最小比例尺不同的话,是否会造成什么影响?
您好,这边私信您!
好,麻烦您了
...