首页 / 浏览问题 / 云GIS / 问题详情
iServer 创建分布式切图任务时勾选“配置到此地图服务”不生效
8EXP 2023年12月05日

iServer 创建分布式切图任务时勾选“配置到此地图服务”,发现实际浏览地图时没有使用生成的切片

执行成功了,数据自动生成到这个文件夹下:

但是我浏览地图时发现加载慢,图片还是现生成的,服务器temp目录下一直在生成新文件:

1个回答

您好,您使用的iserver具体是什么版本呢(小版本号,例如:11.1.1)。您预览地图是在前端自己加载的还是iserver预览呢?看您截图的两个缓存目录部分比例尺不一致,切好瓦片之后需要按照切瓦片发比例尺进行前端加载。
3,143EXP 2023年12月05日

supermap-iserver-11.1.1a-windows-x64-deploy 这个版本,我是自己系统里浏览的,下面是我前代码:

  

您没有设置resolutions,所以加载的比例尺和切瓦片的比例尺不一致。您前端加载时需要设置瓦片对应比例尺的resolutions,这样前端出图就会直接获取output目录下已有瓦片。
iServer预览确实用缓存了,我程序里必须设置resolutions吗,resolutions默认不会根据minZoom,maxZoom自动计算吗
resolution会根据设置的坐标系信息生成一个默认的,但是这个默认的和您切瓦片的比例尺是不一致的。iserver预览比例尺正确的话,您可以在iserver用classic预览,然后控制台layer.resolutions获取到resolutions数组,前端加载时设置即可。

我尝试代码设置了resolutions,也还是在temp文件夹里生成图片:

这是我取到的resolutions:

temp文件夹里我全删除了,我用我程序浏览地图,就又自动生成了,

可否帮我远程看看是我代码哪里不对还是切片设置哪里问题

对比检查请求的瓦片参数和iserver是否一致,判断是否生效。ol设置resolutions代码示例如下:

 proj4.defs("EPSG:4326","+proj=longlat +datum=WGS84 +no_defs");
    var extent = [72.42 , 1.76, 136.23 , 53.85];
    var map, url = "http://localhost:8090/iserver/services/map-mongodb-China/rest/maps/China";
    var res = [
        0.16763802876761358,
        0.08381901438380679,
        0.041909507191903395,
        0.02095475359595355,
        0.010477378414195226,
        0.006427085468380875,
        0.0023767925225662337,
        0.0011883962612831169,
        4.7535850451324666E-4];
    var projection = new ol.proj.Projection({
        code:'EPSG:4326',
        extent:extent,
        units: 'degrees'
    });
    map = new ol.Map({
        target: 'map',
        controls: ol.control.defaults({attributionOptions: {collapsed: false}})
            .extend([new ol.supermap.control.Logo()]),
        view: new ol.View({
            center: [104.33 , 27.81],
            zoom: 1,
            resolutions: res,
            projection: projection,
            multiWorld: true,
            origin: [72.42, 53.85]
        })
    });
    var layer = new ol.layer.Tile({
        source: new ol.source.TileSuperMapRest({
            url: url,
            projection: projection,
            tileGrid: new ol.tilegrid.TileGrid({
                resolutions: res,
                origin: [72.42, 53.85],
                tileSize: 256,
                extent: [72.42 , 1.76, 136.23 , 53.85]
            }),
            wrapX: true
        })
    });
    map.addLayer(layer);
    map.addControl(new ol.supermap.control.ScaleLine());

左边是我程序的请求参数,右边是iServer openlayers预览 的,参数都有啊

比例尺不一样呢

终于好了,View需要设置constrainResolution: true,鼠标滚动缩放才是整数,我是用的iserver ol3 的预览页面控制台 map.getView().getResolutions()获取的分辨率列表。

...