SuperMap/iClient-JavaScript

希望TileSuperMapRest可传入maxZoom,minZoom参数

luo-geng opened this issue · 4 comments

Request a feature or report a bug? [这是一个需求还是一个缺陷]

缺陷

One-line summary [问题简述]

TileSuperMapRest可传入maxZoom,minZoom。防止layer设置maxZoom,minZoom和source不一致时(特别是当source的maxzoom小于layer的maxzoom时),出现瓦片加载错乱或者不加载的问题

Version [产品及版本]

  • iClient product (for leaflet,for openlayers,for mapboxgl,classic)[iClient 产品]:ol
  • iClient version [iClient 版本]:10.2.0
  • Browser version [浏览器类型和版本]:
  • OS Version [操作系统类型和版本]:

Actual Behavior [当前现象]

layer设置maxZoom,minZoom和source不一致时(特别是当source的maxzoom小于layer的maxzoom时),出现瓦片加载错乱或者不加载的问题,因为上传文件大小有限制,用了灰色gif
这里在node_modules修改TileSuperMapRest的maxZoom,minZoom后,在高级别Zoom下可以加载,为修改之前,高级别Zoom时瓦片加载不了
动画9
image

Expected Behavior [期望现象]

TileSuperMapRest可传入maxZoom,minZoom
之前提过一个pr112

image

Example of reproducing the issue [重现现象的例子]


What is motivation or use case for changing the behavior? [需求的场景和目的是什么?]

感谢您提的issue。可否麻烦您提供demo代码,或者线上实例 (JSFiddle/JSBin/Codepen)。方便我们重现及调试问题,谢谢。

openlayers中一般控制source的 minzoom,maxzoom, tilesize等参数是通过传入tilegrid来实现的,可new ol. tilegrid.tileGrid(),也可通过ol.source.TileSuperMapRest.createTileGridol.tilegrid.createXYZ方法快速创建tilegrid

var layer = new ol.layer.Tile({
        source: new ol.source.TileSuperMapRest({
          url: url,
          wrapX: true,
          tileGrid: ol.source.TileSuperMapRest.createTileGrid([-180, -90, 180, 90], 6, 0, 256)
        }),
        projection: 'EPSG:4326'
});

openlayers中一般控制source的 minzoom,maxzoom, tilesize等参数是通过传入tilegrid来实现的,可new ol. tilegrid.tileGrid(),也可通过ol.source.TileSuperMapRest.createTileGridol.tilegrid.createXYZ方法快速创建tilegrid

var layer = new ol.layer.Tile({
        source: new ol.source.TileSuperMapRest({
          url: url,
          wrapX: true,
          tileGrid: ol.source.TileSuperMapRest.createTileGrid([-180, -90, 180, 90], 6, 0, 256)
        }),
        projection: 'EPSG:4326'
});

嗯,源码里src/openlayers/mapping/TileSuperMapRest.jstileUrlFunction没传入 minzoom,maxzoom,链接

源码中的期望只是在没有传递tilegrid的场景下,生成一个默认的。您遇到这个场景,地图信息比较明确,建议是自己构造tilegrid传入。这样做更符合ol的使用方式,并且不需要通过给source增加其他option参数来