新闻详情

新闻详情

首页 / 资讯中心 / 详情

GeoLibre Chrome扩展开发解析:从扫描网页到组装地图URL

发布时间:2026/9/16 16:43:24来源:尧图网络
GeoLibre Chrome扩展开发解析:从扫描网页到组装地图URL
GeoLibre Chrome扩展开发解析从扫描网页到组装地图URL【免费下载链接】GeoLibreA lightweight, cloud-native GIS platform for visualizing, exploring, and analyzing geospatial data. It runs in the web browser, on the desktop, on mobile, and inside Jupyter notebooks.项目地址: https://gitcode.com/GitHub_Trending/ge/GeoLibreGeoLibre 是一款轻量级云原生 GIS 平台而它配套的 Chrome 扩展 Open data in GeoLibre 做了一件很实用的事自动扫描当前网页中的地理空间数据集链接和地图服务请求勾选后一键在 GeoLibre 中打开成地图。本文带你从源码层面看懂这个扩展是如何读懂一个网页、再拼装出可分享地图 URL 的。 极简架构一个扩展只需 6 个文件这个扩展基于 Manifest V3 构建核心文件都在 extensions/geolibre-chrome/ 目录下文件职责manifest.json声明权限与入口权限只有activeTab和scriptingscanner.mjs扫描页面中的数据集链接service-scanner.mjs识别 WMS/WMTS/WFS 等地图服务请求url-builder.mjs组装 GeoLibre 深度链接 URLpopup.mjs弹窗交互与流程编排值得注意的设计是它没有后台 service worker不存储任何数据——一切操作都在你点击工具栏图标的那一刻发生。这种零常驻权限的设计是后文隐私优势的根基。 第一步扫描网页里的数据集链接当你点击图标popup.mjs 会先获取当前标签页再通过chrome.scripting.executeScript把 scanner.mjs 中的scanDocumentForDatasets函数注入页面执行。这里有个 Chrome 扩展开发的小细节函数会被序列化后注入所以所有辅助函数必须定义在这个大函数内部不能引用模块级变量。扫描时它按线索强度给链接分类打分覆盖四个来源a href与link href同时读取type、rel、download、title和链接文字作为提示词data-url/data-href/source src等属性schema.org JSON-LD结构化数据中的contentUrl和downloadUrl字段Source Cooperative 仓库页的特殊处理读取页面内嵌的文件清单找回虚拟滚动列表中不可见的文件。分类规则很直观.geojson结尾识别为 GeoJSON、.pmtiles识别为 PMTiles、.tif/.cog识别为 GeoTIFF栅格并给每种格式赋予置信度分数0~3最终按分数从高到低排序输出。对于 Hugging Face 这类站点它还会把blob、raw等 7 种路由归一化为真正能下载字节的resolve地址避免同一文件出现近重复条目。 第二步读回页面的请求记录Resource Timing文件链接只是冰山一角——网页上的地图是 JavaScript 拉瓦片渲染的这些地址从来不会出现在页面链接里。扩展的答案是读取浏览器的 Resource Timing 缓冲区调用performance.getEntriesByType(resource)拿到本页已经发出过的所有请求 URL。service-scanner.mjs 负责把这些 URL 翻译成人能理解的服务WMS / WMTS / WFS从查询参数里的SERVICE和REQUEST值识别并剥离bbox、LAYERS等操作参数还原出端点WMTS 的GetTile请求还会把瓦片坐标还原成{z}/{x}/{y}模板ArcGIS Feature Service匹配…/FeatureServer/0形式的路径并保留图层索引防止打开时画错图层OGC API Features识别/collections/id/items路径XYZ / TMS 影像瓦片…/13/4096/2048.png这样的路径直接折叠成{z}/{x}/{y}模板几百张瓦片收敛为一个服务PBF 矢量瓦片识别tile.json、tiles.json等 TileJSON同时排除字体文件.pbf字形切片这类长得像瓦片的请求。还有一个巧妙的点矢量瓦片的图层信息不在 URL 里而在样式文档里。因此扩展会先收集所有style.json再按同源原则与瓦片服务配对把样式作为serviceStyle一起带走——这样 GeoLibre 的添加数据对话框打开时图层字段就已经填好了直接可提交。 第三步组装 GeoLibre 地图 URL选中数据集后url-builder.mjs 的buildGeoLibreUrl开始拼装深度链接规则分两种情况文件型数据集把每个数据集追加为?dataURL参数若带有配套样式如name.style.json与同名数据集配对发现则同步追加style参数服务型数据集单独走?add类型serviceUrl端点形式add的值由服务类型映射表决定如 WMS 对应wms、ArcGIS 对应arcgis并携带serviceLayer页面当时渲染的图层名和serviceStyle。组装过程还有明确的防御性约束只允许 HTTP(S) 链接、一次只能打开一个地图服务、地图服务不能与文件混选——这些约束以抛错的方式暴露给弹窗显示而不是静默失败。️ 弹窗交互从扫描到开图的一分钟体验popup.html 是用户唯一看到的界面流程非常克制点击图标后弹窗显示当前站点并进入Reading data links状态扫描结果以列表呈现每项显示名称服务会带图层名区分如WMS service: topp:states、主机名和格式徽章附带的样式还会标出 style顶部提供All / Vector / Raster三个过滤页签配合全选/全不选快捷操作点击Open in GeoLibre新标签页打开组装好的 URL弹窗自动关闭。整个编排逻辑集中在 popup.mjs 的inspectPage()中先扫描文档链接再对所有同源 frame分别读取请求缓冲地图常被嵌在 iframe 里最后合并去重渲染。跨域 frame 会被 Chrome 逐帧拒绝注入但同源的 frame 依然正常返回结果——边界被优雅地接受了。️ 隐私设计为什么它什么都不做扩展的隐私策略写进了 PRIVACY.md核心原则可以总结为activeTab权限只在点击图标那一刻授予当前标签页没有任何常驻站点访问权只读 URL不读响应体——判断 TileJSON 是否矢量瓦片时故意不下载内容因为跨域读取响应需要 host 权限正是这个设计刻意回避的东西转发的是完整 URL含签名参数不转发 Cookie 和会话凭证所以依赖会话认证的链接可能无法打开这是明示的取舍。官方使用文档在 docs/user-guide/chrome-extension.md其中也说明了GeoLibre 会直接抓取选中的链接因此源服务器需允许 CORS 跨域请求。 打包与发布一条命令生成商店安装包发布流程由 scripts/package-chrome-extension.mjs 完成读取 manifest 版本号把 11 个运行时文件4 个脚本 HTML/CSS 4 个图标压缩为固定时间戳的 ZIP输出到dist/目录。在仓库根目录执行npm run build:chrome-extension商店列表文案与权限说明在 STORE_LISTING.md。本地开发则只需打开chrome://extensions开启开发者模式后加载已解压的扩展程序指向extensions/geolibre-chrome目录即可完整说明见 README.md。✅ 总结小而精的参考实现这个扩展总共不到一千行核心代码却把几个关键问题都答得很漂亮怎么发现页面上的数据多来源扫描 置信度分类scanner.mjs怎么发现 JS 渲染的地图服务读 Resource Timing 而非监听网络service-scanner.mjs怎么把结果交给地图参数化深度链接 防御性校验url-builder.mjs怎么做到零隐私负担仅activeTab、无后台、无存储manifest.json。如果你想给自己的项目做一个类似的网页 → 应用桥接工具这套扫描—识别—组装 URL的三段式结构非常值得借鉴。【免费下载链接】GeoLibreA lightweight, cloud-native GIS platform for visualizing, exploring, and analyzing geospatial data. It runs in the web browser, on the desktop, on mobile, and inside Jupyter notebooks.项目地址: https://gitcode.com/GitHub_Trending/ge/GeoLibre创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

conda env config vars unset 详解:Conda 环境变量的移除与恢复机制 2026/9/16 17:16:31

conda env config vars unset 详解:Conda 环境变量的移除与恢复机制

conda env config vars unset 详解:Conda 环境变量的移除与恢复机制 【免费下载链接】conda A system-level, binary package and environment manager running on all major operating systems and platforms. 项目地址: https://gitcode.com/GitHub_Trending/co…

阅读更多 →
基于MATLAB的说话人识别系统:MFCC特征提取与VQ码本实现 2026/9/16 17:16:31

基于MATLAB的说话人识别系统:MFCC特征提取与VQ码本实现

简介:这套基于MATLAB的说话人识别系统毕业设计项目,主要面向计算机、电子信息类专业正在完成毕业设计或课程设计的学生,也适合需要语音识别实战经验的中高级学习者。项目经导师指导并调试通过,属于评分98分的优秀毕设案例&#xf…

阅读更多 →
Hydra 插件开发实战指南:深入理解插件注册机制与基于示例的完整开发流程 2026/9/16 17:16:31

Hydra 插件开发实战指南:深入理解插件注册机制与基于示例的完整开发流程

Hydra 插件开发实战指南:深入理解插件注册机制与基于示例的完整开发流程 【免费下载链接】hydra Hydra is a framework for elegantly configuring complex applications 项目地址: https://gitcode.com/GitHub_Trending/hyd/hydra 本指南以 Hydra 官方文档&…

阅读更多 →
MATLAB实现相干衍射成像:从衍射图反演物体复振幅 2026/9/16 17:16:31

MATLAB实现相干衍射成像:从衍射图反演物体复振幅

简介:本资源是一套面向光学成像与计算成像方向的MATLAB仿真代码包,专为电子信息、自动化、人工智能及物理光学等相关专业学生与初学者设计,用于理解并实践相干衍射成像(CDI)的核心原理与数值模拟流程。资源共3个文件&a…

阅读更多 →
GenieX SDK 端到端测试体系深度解析:pytest 套件、模型矩阵与云端真机 CI 2026/9/16 17:16:31

GenieX SDK 端到端测试体系深度解析:pytest 套件、模型矩阵与云端真机 CI

GenieX SDK 端到端测试体系深度解析:pytest 套件、模型矩阵与云端真机 CI 【免费下载链接】GenieX Run frontier LLMs and VLMs locally on Qualcomm devices across NPU, GPU, and CPU with a few lines of code 项目地址: https://gitcode.com/GitHub_Trending/…

阅读更多 →
es-toolkit compat trim 详解:Lodash 兼容版字符串裁剪的用法、参数语义与源码实现 2026/9/16 17:13:30

es-toolkit compat trim 详解:Lodash 兼容版字符串裁剪的用法、参数语义与源码实现

es-toolkit compat trim 详解:Lodash 兼容版字符串裁剪的用法、参数语义与源码实现 【免费下载链接】es-toolkit A modern JavaScript utility library thats 2-3 times faster and up to 97% smaller, a major upgrade to lodash. 项目地址: https://gitcode.com…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞