ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

OpenLayers 10.0 升级指南:ImageTile 新基类、Flat Styles 类型提示移除与破坏性变更迁移

OpenLayers 10.0 升级指南:ImageTile 新基类、Flat Styles 类型提示移除与破坏性变更迁移 前端GIS数据可视化【免费下载链接】openlayersOpenLayers项目地址https://gitcode.com/gh_mirrors/op/openlayers点击查看免费下载本指南基于 OpenLayers 官方发布说明 changelog/v10.0.0.md系统梳理 v10.0 的核心改进全新的影像瓦片基础源 ImageTile、Flat Styles 表达式系统去掉类型提示、WebGL 渲染器内存分配修复以及泛型类型的全面稳定化同时详细讲解三处破坏性变更getFeaturesInExtent()迁移、get表达式类型提示移除、opaque选项删除的迁移方法。读完本文你可以评估现有 v9.x 项目是否受破坏性变更影响并按照给出的代码示例完成平滑升级。10.0 版本概览v9.x 用户值得立即升级10.0 是一次破坏性变更非常小的大版本发布官方明确建议所有 v9.x 用户升级到 v10.x。本次发布带来了几项显著改进新的影像瓦片基础源new image tile source为影像瓦片源引入了新的基类性能更好、代码更简洁Flat Styles 处理重构表达式系统不再需要类型提示同时内部实现也做了大量清理WebGL 渲染器修复修复了一个内存分配问题更好的开发者体验改进泛型类型并修复若干类型问题结束了 v9.x 在泛型上来回摇摆的局面。这些改进中有三处属于向后不兼容的变更但迁移工作量都非常小下文逐一给出精确的迁移代码。新的影像瓦片基础源ImageTile10.0 最大的架构级改动是为影像瓦片源引入了一个新的基础源类。从源码结构看新增的 src/ol/source/ImageTile.js 直接继承自DataTileSourceimport DataTileSource from ./DataTile.js取代了以往TileImage承担的部分职责让影像瓦片源的实现更直接、更精简。新基类的Options选项完整覆盖了实际开发中的常见配置选项类型默认值说明urlstring \| string[] \| function—影像 URL 模板可传单个模板、模板数组或返回 URL 的函数函数签名(z, x, y, options) stringloaderfunction—数据加载函数按(z, x, y)调用并返回图片或 Promise若提供了url会自动生成 loaderattributionsAttributionLike—版权归属信息attributionsCollapsiblebooleantrue版权归属是否可折叠maxZoomnumber42最大缩放级别设置了tileGrid时忽略minZoomnumber0最小缩放级别设置了tileGrid时忽略tileSizenumber \| Size[256, 256]源瓦片的像素宽高gutternumber0数据瓦片边缘要忽略的像素宽度用于规避瓦片边缘渲染瑕疵maxResolutionnumber—0 级瓦片网格分辨率设置了tileGrid时忽略projectionProjectionLikeEPSG:3857瓦片投影tileGridTileGrid—自定义瓦片网格wrapXbooleantrue是否在反子午线之外渲染瓦片transitionnumber—新瓦片淡入的过渡时间毫秒interpolatebooleantrue重采样时是否使用插值crossOriginstringanonymous传给图片加载器的crossOrigin属性referrerPolicyReferrerPolicy—加载图片的referrerPolicy属性zDirectionnumber \| function0处于非整数缩放级别时选择更高或更低级别瓦片的方向从 ImageTile.js 的实现 可以看到其核心 loader 通过new Image()配合crossOrigin、referrerPolicy设置监听load/error事件并把renderXYZTemplate(template, z, x, y, options.maxY)渲染出的地址赋给image.srcurl选项则支持字符串、字符串数组和函数三种形态分别通过expandUrl、pickUrl和UrlGetter处理。这解释了为什么新基类可以在保持同等能力的同时让代码大幅简化。Flat Styles 重构get表达式不再需要类型提示10.0 重构了 Flat Styles扁平样式的表达式系统核心变化是get调用表达式不再需要类型提示。在 v9.x 中你可能会写出这样的表达式// v9.x需要显式类型提示 [get, foo, number[]]升级到 v10.0 后类型提示参数已废弃直接写属性名即可// v10.0类型由表达式系统自动推断 [get, foo]这一改动的背后是表达式解析机制的升级官方在提供解析表达式时的预期类型Provide expected type when parsing expressions以及修复match/case表达式与数字类型尺寸的兼容问题等提交中让表达式系统可以在解析阶段自行推断并校验类型无需开发者在样式中手工标注。同时get表达式的能力在 Canvas 渲染器中得到增强。根据 src/ol/expr/expression.js 的官方文档注释[get, attributeName]获取要素属性值等价于feature.get(attributeName)[get, attributeName, keyOrArrayIndex, ...]仅 Canvas 渲染器访问嵌套属性和数组项当指定 key 或索引处无内容时返回undefined。这一支持get表达式访问嵌套属性的增强Support nested properties with the get expression正是 10.0 能够移除类型提示的前提之一——既然get可以精确表达嵌套取值路径额外的类型提示就变成了冗余。如果你的样式代码里大量使用了[get, ..., string]、[get, ..., number]这类带类型提示的写法升级时需要逐一检查并删除类型提示参数。同时注意嵌套属性访问的附加参数仅适用于 Canvas 渲染器WebGL 渲染器的get表达式仍只支持单参数形式。WebGL 渲染器修复内存分配问题10.0 修复了 WebGL 渲染器中的一个内存分配问题WebGL Vector Layer: Clear existing buffers before allocating new ones。问题描述很直白在分配新的缓冲区之前需要先清除已存在的缓冲区。对应实现可以在 src/ol/renderer/webgl/VectorLayer.js 中找到印证渲染器在重建几何数据时通过this.helper.deleteBuffer(buffer)释放旧的 GPU 缓冲区再分配新的缓冲区。若跳过这一步重复渲染时旧的 WebGL buffer 会持续残留导致显存占用不断增长长时间运行的 WebGL 矢量图层会出现内存泄漏。这一修复对两类场景尤为重要动态数据图层频繁增删要素、持续更新几何的 WebGL 矢量图层样式变更场景同一图层的setStyle()反复触发渲染器重建10.0 同时优化了仅在必要时重置已存在的渲染器。如果你的应用使用了 WebGL 矢量图层且经历过内存缓慢增长v10.0 的此项修复值得立即验证。泛型类型全面稳定化v9.x 期间OpenLayers 的泛型类型经历了一轮又一轮的调整给 TypeScript 用户带来了一些困扰。10.0 明确了这一方向一致化矢量瓦片图层、数据源、格式的泛型定义Consistent generics for vector(tile) layers, sources, formats并配合多项类型修复收尾。从 src/ol/layer/VectorTile.js 的源码可以看到 10.0 泛型体系的关键设计// 从数据源的类型参数中提取要素类型 // template T // typedef {T extends import(../source/VectorTile.js).defaultinfer U extends import(../Feature.js).FeatureLike ? U : never} ExtractedFeatureType // 图层类型参数默认值当未显式指定 FeatureType 时 // 自动从 VectorTileSourceType 中提取要素类型 // template {import(../source/VectorTile.js).defaultFeatureType} [VectorTileSourceType...] // template {import(../Feature.js).FeatureLike} [FeatureTypeExtractedFeatureTypeVectorTileSourceType]这套从数据源类型参数自动提取要素类型Extract feature type from the sources type arguments的设计让VectorTileLayerVectorTileSourceMyFeature的写法可以省略第二层泛型参数类型推断更顺滑。同期改进还包括rbush 的泛型更好用了Better generics for rbush、修复 Cluster 的geometryFunction返回类型、开启noImplicitOverride与noImplicitThis检查、删除最后残留的inheritDoc等。这些都属于内部类型质量工程对普通使用者意味着更准确的自动补全与更少的类型报错。破坏性变更详解与迁移指南1.getFeaturesInExtent()从ol/source/VectorTile迁移到ol/layer/VectorTile这是本次升级中影响面最广的一处 API 变更。ol/source/VectorTile的getFeaturesInExtent()方法整体迁移到了ol/layer/VectorTile签名和行为完全不变只需修改调用方代码。迁移前v9.xlayer.getSource().getFeaturesInExtent(extent);迁移后v10.0layer.getFeaturesInExtent(extent);在源码层面src/ol/layer/VectorTile.js 中的新实现非常直接它从this.getRenderer()拿到渲染器并转发给renderer.getFeaturesInExtent(extent)渲染器不存在时返回空数组。而其行为约束与原方法一致只对最后渲染的缩放级别下已缓存的瓦片有效因此该方法只适合查询当前已渲染范围内的瓦片要素要素按瓦片随机顺序返回可能被裁剪、跨瓦片重复且按渲染分辨率做过简化——也就是说它返回的是渲染视角的要素而非严格的几何查询结果。方法返回类型ArrayFeatureType会与图层的泛型参数保持一致return {ArrayFeatureType}得益于上一节提到的泛型提取机制TypeScript 用户无需额外断言即可获得类型正确的要素数组。2. Flat Stylesget表达式的类型提示移除如前文所述所有形如[get, foo, number[]]的表达式都要改为[get, foo]。这一条只影响在get表达式中显式使用过类型提示的开发者大多数只写[get, foo]的样式代码完全不受影响。详见上文Flat Styles 重构一节。3. 所有Tile数据源移除opaque选项opaque选项此前用于告知渲染器该图层完全是不透明的从而启用一些针对已知不透明图层的渲染优化例如跳过某些混合/合成步骤。在 10.0 中渲染器已经不再需要这个提示因此该选项从所有Tile数据源中删除。如果你的代码中存在类似配置// v9.x需要显式声明 new ol.source.XYZ({ url: ..., opaque: true, });升级时需要直接删除opaque: true这一行。渲染器会自动判断图层的实际不透明性不再依赖开发者手动标注行为上通常无需额外调整。该变更同样记录在 changelog/upgrade-notes.md 中与 v6.10.0 时代ol.source.VectorTile移除opaque选项属于同一演进方向。其他值得关注的修复与改进除了上述三大主题v10.0 还包含一批对日常开发有直接影响的修复矢量瓦片渲染重新实现了getFeaturesInExtent()见上文迁移说明移除ol/layer/VectorTile中多余的模板参数。Raster 源修复版权归属attributions相关的多个 bugFix Raster source attributions bugs。数据源加载修复若干createLoader相关 bugFix some source createLoader bugs允许向 Google 数据源传递apiOptions数组Fix allow to pass apiOptions array to Google source。控件修复OverviewMap控件在setView()与useGeographic()场景下的问题点击概览图可重新居中主地图Recenter map on overview map click。交互修复 Snap 交互文档中的拼写错误Draw/Modify 相关内部清理。渲染精度getArea()改为从线段起点计算偏移而非完整坐标提升了面积计算精度Use offset from start instead of full coordinate to improvegetArea()precision。KML只对一层 KML MultiGeometry 做同质化处理Homogenize only one level of KML MultiGeometry。文本样式让非字符串文本样式恢复正常工作Make non-string text styles work again。负尺寸防护不再尝试处理负数地图尺寸Do not try to handle negative map sizes。链表修复修复链表拼接 bugFix Linked list concatenation。样式性能setStyle()只在必要时重置已存在的渲染器Only reset an existing renderer insetStyle()。依赖方面本次版本同步升级了 rollup、mocha、webpack、typescript、rbush3.x → 4.0.0、earcut2.x → 3.0.0、pixelmatch5.x → 6.0.0、pbf3.x → 4.0.1、sinon17.x → 18.0.0等构建与测试依赖详见 changelog/v10.0.0.md 中的 Dependency Updates 折叠区。值得注意的是 rbush 4.0.0 属于大版本变更如果项目直接依赖 rbush 做空间索引升级 OpenLayers 后建议回归验证相关查询逻辑。升级建议与验证清单综合来看v10.0 的迁移成本很低建议 v9.x 用户按以下清单完成升级全局搜索getFeaturesInExtent将xxx.getSource().getFeaturesInExtent(extent)改为xxx.getFeaturesInExtent(extent)搜索 Flat Styles 表达式中的get多参数形式删除[get, ...]中除属性名之外的类型提示参数搜索所有 Tile 数据源的opaque配置直接删除该选项回归测试 WebGL 矢量图层重点验证长时间运行场景下的内存表现对应本次内存分配修复TypeScript 项目享受更稳定的泛型推断同时注意ExtractedFeatureType自动提取机制可能让部分显式泛型写法变成冗余可顺手精简。升级后可关注 changelog/upgrade-notes.md 中 10.0.0 一节官方持续维护的升级说明与本文内容互为印证后续 10.x 各版本10.110.10的变更均可在 changelog 目录下查阅。赞分享前端GIS数据可视化【免费下载链接】openlayersOpenLayers项目地址https://gitcode.com/gh_mirrors/op/openlayers点击查看免费下载相关推荐AutoMapper 10.0 升级指南11 项破坏性变更与迁移要点AutoMapper 10.0 升级指南11 项破坏性变更与迁移要点 本指南基于仓库内 10.0 Upgrade Guide.md https://link.后端GPT4All TypeScript 绑定 v4 破坏性变更EmbeddingResult 与移除的类型如何迁移GPT4All TypeScript 绑定 v4 破坏性变更EmbeddingResult 与移除的类型如何迁移 如果你用 Node.js / TypeScr人工智能大模型本地部署AI 应用桌面应用RAG微调Handsontable 10.0 升级与迁移完全指南Hook 体系重构、默认值变更与破坏性更新解析Handsontable 10.0 升级与迁移完全指南Hook 体系重构、默认值变更与破坏性更新解析 Handsontable 10.0.0 于 2021 年前端UI组件创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表