为ol.layer.Tile设置extent触发tilesByZ[z]不可迭代错误求助
解决OpenLayers设置TileLayer extent后触发“tilesByZ[z] is not iterable”的问题
你提到的Bug#16038对应的修复PR#16044虽已合并,但OpenLayers 10.0.0发布时该修复尚未纳入,所以升级到10.0.0后仍会触发这个错误。
目前有几个处理方式:
- 手动补全修复:找到OpenLayers源码中
ol/source/TileImage.js文件里的瓦片缓存处理逻辑,在遍历tilesByZ[z]前添加空值判断,确保它是可迭代的数组后再执行遍历操作。 - 等待后续正式版本:该修复会包含在OpenLayers 10.0.0之后的小版本中,可关注官方版本发布日志,待对应版本推出后升级。
- 临时规避方案:暂时不在
TileLayer上设置extent,转而通过自定义tileGrid并绑定到瓦片源上实现范围限制,示例代码如下:import { TileLayer, XYZ } from 'ol/layer'; import { XYZ as XYZTileGrid } from 'ol/tilegrid'; export const CreateTileLayer = (params) => { // 自定义tileGrid并设置范围 const tileGrid = new XYZTileGrid({ extent: params.extent, resolutions: [/* 根据你的需求定义分辨率数组 */], tileSize: 256 }); const source = new XYZ({ url: params.url, tileGrid: tileGrid }); const layer = new TileLayer({ source: source, properties: { id: params.id, label: params.label, groupId: params.groupId, type: params.type, }, }); layer.setZIndex(params.zIndex); layer.setVisible(params.visible); return layer; };
内容的提问来源于stack exchange,提问作者ArashMad
相关产品推荐
相关产品推荐

