
前端GIS数据可视化【免费下载链接】openlayersOpenLayers项目地址https://gitcode.com/gh_mirrors/op/openlayers点击查看免费下载本文以 OpenLayers 仓库中的 changelog/v3.16.0.md 为主体结合仓库源码对 v3.16.0 引入的新 API、行为变更与升级注意事项进行深入解读。读者将掌握 ArcGIS REST 影像源、绘制交互finishCondition、WFS OGC 过滤器、VectorTile 渲染模式等新能力的用法并了解瓦片源 URL 更新行为、typedef 重命名等破坏性变更的迁移方案。一、版本概览v3.16.0 是 OpenLayers 3.x 系列的一个重要功能版本自 v3.15.1 以来共合入了95 个 Pull Request涵盖新功能、Bug 修复、性能优化与代码库重构。从变更列表看该版本的一大主题是逐步移除对 Closure Library / Closure Compiler 的依赖大量goog.*调用被原生实现替换代码库被大幅简化和重构。主要新特性包括新增ol.source.ImageArcGISRest支持 ArcGIS REST 影像图层#3880ol.interaction.Draw新增finishCondition选项可自定义结束绘制的触发条件#5261ol.format.WFS#writeGetFeature新增基于 OGC 过滤器的查询 API#5252ol.layer.VectorTile新增renderMode选项用于在渲染性能与渲染质量之间取得平衡#5177attribution logo 配置支持直接传入 HTML 元素灵活性更强#5274UTFGrid 源更新支持 Mapbox API v4#5329ol.interaction.Modify新增condition选项与其他交互组合使用时可靠性更好#5320。二、新特性详解2.1 新增ol.source.ImageArcGISRest接入 ArcGIS REST 影像服务v3.16.0 为 Image 类源家族新增了ol.source.ImageArcGISRest用于加载 ArcGIS Server 的 Map Service / Image Service 影像是长期维护的 ArcGIS REST 影像支持#3880。在 src/ol/source/ImageArcGISRest.js 中可以看到它的核心配置项与 OpenLayers 其他 Image 类源保持一致配置项说明urlArcGIS REST 服务的 Map Service 或 Image Service URL必填paramsArcGIS REST 参数对象服务端附加参数可覆盖默认参数crossOrigin加载影像时的crossOrigin属性跨域请求时使用hidpi默认true是否使用ol/Map#pixelRatio的值请求更高分辨率影像ratio默认1.5请求影像尺寸与地图视口尺寸的比例1表示与视口等大resolutions若指定则按给定的分辨率数组请求影像projection投影默认使用视图投影interpolate默认true重采样时是否使用插值imageLoadFunction自定义影像加载函数attributions版权归属信息典型用法var imageArcGISRest new ol.source.ImageArcGISRest({ url: https://sampleserver6.arcgisonline.com/arcgis/rest/services/USA/MapServer, params: { layers: show:2 } });该源继承自ImageSource构造时会将用户传入的params与内部生成的参数如format、bbox、size等合并最终拼出 ArcGIS REST 服务可识别的请求 URL。由于它属于影像源服务端返回的通常是整幅地图影像而非分块瓦片适合直接使用 ArcGIS Server 出图能力的场景。2.2ol.interaction.Draw新增finishCondition精细化控制绘制结束时机绘制交互默认通过点击最后一个顶点多边形闭合或双击来结束一个几何图形。v3.16.0 新增的finishCondition选项允许开发者传入一个条件函数由它来决定当前动作是否结束绘制。在 src/ol/interaction/Draw.js 中源码对该选项的注释为A function that takes aMapBrowserEventand returns a boolean to indicate whether the drawing can be finished. Not used when drawing POINT or MULTI_POINT geometries.即该函数接收一个MapBrowserEvent返回boolean表示是否允许结束绘制绘制点POINT / MULTI_POINT时不生效。实现上finishCondition在构造函数中被保存为this.finishCondition_src/ol/interaction/Draw.js并在处理指针事件时被调用src/ol/interaction/Draw.jsif (this.finishCondition_(event)) { // 结束当前几何图形的绘制 }典型场景是默认的单击结束策略容易在快速连续点击时误触开发者可以要求指针抬起且位移足够小时才结束或结合按键条件。例如仅当按住Shift键点击时结束绘制import {shiftKeyOnly} from ol/events/condition.js; var draw new ol.interaction.Draw({ source: vectorSource, type: Polygon, finishCondition: shiftKeyOnly });同样在 v3.16.0 中Draw 交互还做了配套改进removeVertex_被暴露为公开方法removePoint#5288并在拖拽过程中阻止移除顶点#5293修复了关闭绘制多边形时的报错#5264。2.3ol.format.WFS#writeGetFeature支持 OGC 过滤器查询WFS 格式此前主要通过bbox参数进行空间范围查询。v3.16.0 为writeGetFeature增加了filter选项#5252支持将 OpenLayers 的ol/format/filter构造出的 OGC Filter 编码进 GetFeature 请求。在 src/ol/format/WFS.js 中filter选项的文档说明为Filter condition. Seeol/format/filterfor more information.实现层面src/ol/format/WFS.jswriteGetFeature会读取options.filter若同时提供了bbox则通过combineBboxAndFiltersrc/ol/format/WFS.js将两者用逻辑 AND 合并为一个过滤器再通过writeFilterConditionsrc/ol/format/WFS.js序列化为 XML 中的Filter节点。import WFS from ol/format/WFS.js; import {equalTo} from ol/format/filter.js; var wfs new WFS(); var featureRequest wfs.writeGetFeature({ srsName: EPSG:4326, featureNS: http://example.com/ns, featurePrefix: ex, featureTypes: [parcels], filter: equalTo(owner, Jane) });这样请求 XML 中会生成ogc:PropertyIsEqualTo过滤器把属性过滤下沉到服务端避免把大量要素拉到前端再过滤。该版本同时修复了 WFS 解析多个不同类型featureMember元素的处理#5358。2.4ol.layer.VectorTile新增renderMode性能与质量的权衡矢量瓦片渲染在逐要素精细渲染与按瓦片批量渲染之间存在取舍。v3.16.0 为ol.layer.VectorTile引入renderMode选项#5177该选项在今天的主干代码中仍然保留。在 src/ol/layer/VectorTile.js 中源码定义了两种模式renderMode— Render mode for vector tiles:hybrid(default) orvector.hybrid默认同时保留影像渲染与矢量渲染兼顾瓦片纹理缓存与要素交互能力vector纯矢量渲染不保留影像渲染结果可获得更高的渲染性能。构造函数中会校验取值合法性src/ol/layer/VectorTile.js只允许hybrid或vector否则抛出异常const renderMode options.renderMode || hybrid; if (renderMode ! hybrid renderMode ! vector) { throw new Error(renderMode must be hybrid or vector); }搭配同版本合入的跳过不必要的渲染函数#5286以及矢量瓦片测试的补充#5287开发者可以在交互密集的场景下选择vector换取更快的渲染帧率。2.5 attribution logo 支持 HTML 元素此前版权attributionlogo 配置只能传字符串 URL。v3.16.0 允许在 logo 选项中直接传入 HTML 元素#5274便于插入内联 SVG、自定义图标或其他 DOM 内容var logo document.createElement(div); logo.innerHTML span stylecolor:#fffMyLogo/span; var source new ol.source.XYZ({ url: ..., attributions: ..., logo: logo });2.6 UTFGrid 源更新支持 Mapbox API v4ol.source.TileUTFGrid在本版本完成了对 Mapbox API v4 的支持#5329核心变化是默认改用 XMLHttpRequest 加载 UTFGrid 瓦片不再依赖 JSONP。这部分在升级注意事项中有专门说明详见下文 3.4 节。2.7ol.interaction.Modify新增condition选项Modify 交互此前默认以主鼠标键primaryAction触发修改。当多个交互叠加时容易与绘制、选择等交互冲突。v3.16.0 新增condition选项#5320允许指定触发修改的条件函数。在 src/ol/interaction/Modify.js 中源码注释说明该选项默认为primaryAction即主键按下开发者可改用singleClick、altKeyOnly等内置条件或自定义组合从而避免与其他交互抢事件。指针事件处理入口src/ol/interaction/Modify.js会先检查this.condition_(evt)不满足条件则直接跳过处理。import {singleClick} from ol/events/condition.js; var modify new ol.interaction.Modify({ source: vectorSource, condition: singleClick });2.8 其他值得关注的改进ol.View#getResolutions()新增公开方法#5352可直接读取视图的分辨率数组ol.interaction.Translate新增layers选项#5228可限定只平移指定图层getClosestFeatureToCoordinate支持可选过滤函数#5215在查找最近要素时可排除无关要素ol.source.Source#setProjection被移除#5213投影应在构造时指定KML 格式修复修复GeometryCollection的写入#5212并补充 MultiGeometry 处理的文档#5296Snap 交互修复了无几何要素时的异常#5044ScaleLine 控件补充了大量测试#5285。三、升级注意事项Upgrade Notesv3.16.0 包含若干行为变更与破坏性变更从旧版本升级前务必逐条核对。3.1 瓦片源 URL 更新不再清空已渲染瓦片行为变更这是本版本最重要的行为变化之一。此前调用source.setUrl()时地图会先清空所有已渲染的瓦片再加载并渲染新瓦片在平滑更新瓦片源的场景下这种闪白是开发者不想要的。v3.16.0 之后调用source.setUrl()或source.setUrls()不会清空当前已渲染的瓦片而是让旧瓦片继续显示直到新瓦片加载完成后再替换实现平滑过渡对应 PR #5364。如果确实需要旧行为换源前先渲染空白地图有两种替代方式// 方式一显式刷新源 source.setUrl(newUrl); source.refresh(); // 方式二用新源整体替换 var newSource new ol.source.XYZ({url: newUrl}); layer.setSource(newSource);3.2 typedef 移出代码并重命名潜在编译期破坏v3.16.0 将大量类型定义typedef从源码中移入独立的typedefs.js文件#5335、#5368并将所有 typedef 统一为 CamelCase 命名#5363。对绝大多数应用开发者没有影响但如果你的代码与库一起编译以下两个 API typedef 已被重命名可能需要同步修改旧名称新名称ol.format.WFS.FeatureCollectionMetadataol.WFSFeatureCollectionMetadataol.format.WFS.TransactionResponseol.WFSTransactionResponse同时typedef 对应的goog.require不再必要普通非 API子命名空间的 typedef 也被重命名#5343。若编译时出现相关报错或警告请按新名称调整引用。3.3ol.source.VectorTile移除opaque选项opaque选项在 v3.16.0 中已从 API 中移除参见 src/ol/source/VectorTile.js 当前的选项定义其中已无opaque字段。该选项原本用于告知渲染器瓦片是否不透明以便优化合成随着渲染管线的重构已不再需要直接删除代码中的opaque: true/false即可。3.4ol.source.TileUTFGrid默认改为 XHR 加载UTFGrid 瓦片默认通过XMLHttpRequest加载可直接配合 Mapbox API v4 使用v4 的 TileJSON 端点已支持 CORS若仍在使用 v3 API则必须显式开启新的jsonp选项。在 src/ol/source/UTFGrid.js 中jsonp选项说明为Use JSONP with callback to load the TileJSON. Useful when the server does not support CORS.实现上src/ol/source/UTFGrid.jsjsonp为true时走requestJSONP脚本加载否则用XMLHttpRequest直接 GET TileJSON 端点。// 配合 v4 API默认 XHR 加载 var v4source new ol.source.TileUTFGrid({ url: https://api.tiles.mapbox.com/v4/example.json?access_token YOUR_KEY_HERE }); // 配合 v3 API必须开启 jsonp var v3source new ol.source.TileUTFGrid({ jsonp: true, // --- 使用 v3 API 时必须开启 url: http://api.tiles.mapbox.com/v3/example.json });四、其他变更精选除上述内容外v3.16.0 还包含大量细节改进这里按主题归类列出依赖升级jquery 升级到 2.2.4、vector-tile 升级到 1.2.1、rbush 升级到 1.4.3、eslint 升级到 2.10.2、sinon 升级到 1.17.4、closure-util 升级到 1.13.1、browserify 升级到 13.0.1、proj4js 等示例依赖同步更新事件机制允许once监听器派发同类型事件#5291渲染性能RasterSource帧状态范围修复#5313、复用帧状态数组#5230、跳过不必要的渲染函数#5286Closure 依赖清理移除goog.partial、goog.string、goog.global、goog.functions等的大量使用#5302、#5132、#5178、#5187统一改用ol.functions等内部实现#5267示例与文档示例页新增版本警告与过期文档重定向#5330、#5339、修复 export-pdf 示例中 jspdf.min.js 链接#5377、maki 图标 URL 修复#5361MVT 实验性 APIol.format.MVT增加readFeatures与readProjection#5257构建工具链CI 切换到 Node 6#5328移除 check-requires 脚本#4644。五、总结v3.16.0 是一个功能与重构并重的版本一方面补齐了 ArcGIS REST 影像、WFS OGC 过滤器、绘制结束条件、矢量瓦片渲染模式等实用能力让 OpenLayers 在数据源接入与交互定制上更加灵活另一方面大规模清理 Closure 依赖、统一 typedef 命名、优化渲染帧状态为后续版本向现代 JavaScript 架构演进铺平了道路。对于升级者而言最需要关注的三点是瓦片源setUrl()行为变更不再清空已渲染瓦片、WFS typedef 重命名ol.WFSFeatureCollectionMetadata/ol.WFSTransactionResponse、以及UTFGrid 默认 XHR 加载旧版 Mapbox v3 需显式开启jsonp。以上全部变更细节均可在仓库的 changelog/v3.16.0.md 与对应源码src/ol/interaction/Draw.js、src/ol/source/UTFGrid.js、src/ol/format/WFS.js、src/ol/layer/VectorTile.js、src/ol/source/ImageArcGISRest.js中找到可验证的依据。赞分享前端GIS数据可视化【免费下载链接】openlayersOpenLayers项目地址https://gitcode.com/gh_mirrors/op/openlayers点击查看免费下载相关推荐OpenLayers v3.14.0 版本指南新特性、升级注意点与源码实现剖析OpenLayers v3.14.0 版本指南新特性、升级注意点与源码实现剖析 本指南以 OpenLayers 仓库 changelog/v3.14.0.md前端GIS数据可视化ClickHouse 21.7 版本解读核心新特性、关键配置与运维要点全解析ClickHouse 21.7 版本解读核心新特性、关键配置与运维要点全解析 本篇文章基于 ClickHouse 官方发布说明 v21.7.1.7283 pr数据库OLAP列式数据库大数据实时分析数据分析pytest 7.2.0 版本全解析核心新特性、弃用预警与源码级深度解读pytest 7.2.0 版本全解析核心新特性、弃用预警与源码级深度解读 pytest 7.2.0 于 2022 10 23 正式发布是 pytest 7.测试开发工具创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考