GeoLibre 技术路线图全解析:从 v0.1 地图查看器到 v3.0 双引擎渲染,附插件市场设计
【免费下载链接】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
本篇技术指南以 GeoLibre 官方路线图 为骨架,逐版本梳理这个轻量级、云原生 GIS 平台的功能演进主线(v0.1 → v3.0),并深入展开路线图中唯一的详细设计文档——插件市场与注册中心(Plugin marketplace and registry)。读完本文,你将掌握 GeoLibre 各里程碑的能力边界、插件生态的信任模型与安装机制,以及对应实现源码的位置,可直接对照仓库继续深挖。
一、路线图概览:一条从"地图查看器"到"全栈 GIS 平台"的演进主线
GeoLibre 的路线图(docs/roadmap.md)按语义化版本(SemVer)组织,从 v0.1 到 v3.0 共 30 余个里程碑,当前仓库根目录 package.json 中的版本号为3.0.0,与路线图标注的"current"版本一致。整条演进主线可以归纳为四个层次:
- 基础底座(v0.1–v0.2):Tauri + React + MapLibre 外壳,GeoJSON 加载与图层/样式面板,
.geolibre.json项目文件持久化; - 云原生数据能力(v0.3–v0.6):GeoParquet、FlatGeobuf、PMTiles、COG/GeoTIFF、MBTiles 等格式,DuckDB-WASM 空间引擎,STAC 与 PostgreSQL(Martin)工作流;
- 分析纵深(v0.7–v1.3):Whitebox 工具箱、GDAL/Rasterio/GeoPandas 处理管线、SQL Workspace、网络分析、统计工具箱、实时协作与故事地图;
- 平台化与多端(v1.4–v3.0):Jupyter 集成、AI 助手与 Python 包、Android/iOS/桌面/Web 全端、Cesium 双引擎渲染、插件市场。
以下按版本主题做要点梳理,完整条目可直接阅读路线图原文。
二、逐版本要点解析
2.1 v0.1–v0.2:地图查看器、GeoJSON 与项目持久化
- v0.1交付了 Tauri + React + MapLibre 桌面外壳、GeoJSON 加载、图层面板、样式面板、基础属性表,以及处理 UI 与示例插件;
- v0.2引入
.geolibre.json保存/打开、会话内最近项目跟踪、属性表选中要素高亮(可选缩放到选中要素)以及最近项目 UI。
2.2 v0.3–v0.6:云原生格式与数据接入
- v0.3通过 DuckDB-WASM 引入 GeoParquet 与 FlatGeobuf 导入,通过 Components 插件面板引入 PMTiles 与 COG/GeoTIFF 栅格渲染;
- v0.4完成 DuckDB-WASM 集成与
INSTALL spatial/LOAD spatial,打通 Shapefile、KMZ/KML、GeoPackage、GML 等矢量导入路径; - v0.5扩展 Add Data 对话框(XYZ、WMS、矢量文件、GeoJSON URL、矢量瓦片、栅格瓦片模板、COG、MBTiles、ArcGIS 图层),并通过 Tauri 命令实现桌面端 MBTiles 元数据与瓦片读取;
- v0.6引入 URL 型 Web 最近项目、独立的"从文件打开项目"与"从 URL 打开项目"流程、桌面 Martin 服务器支撑的 PostgreSQL 图层工作流,以及 STAC 搜索工作流。
2.3 v0.7–v1.0:识别、设置、处理管线与外部插件系统
- v0.7增加 GPX、分隔文本、WFS GetFeature 加载,WMS GetFeatureInfo 识别,Whitebox 工具箱(托管 Python sidecar),内联属性编辑与设置对话框;
- v0.8上线 Cloudflare Worker 查看器(
web.geolibre.app),支持动态外部插件 zip 加载(应用数据plugins/目录扫描)、plugin.json外部插件清单、3D Tiles(maplibre-gl-3d-tiles)、MSIX 桌面打包; - v0.9是数据集成大版本:SQL Workspace、Planetary Computer 面板、Earth Engine 面板、Overture Maps 插件、Time Slider 插件、Web Services 菜单,以及基于 Turf.js 的矢量工具与基于 rasterio sidecar 的栅格工具;
- v1.0标记"稳定原型":GDAL/Rasterio/GeoPandas 管线、WhiteboxTools 扩展覆盖、外部插件分发工作流、插件市场 MVP、项目 Share 上传、Python 包(anywidget + leafmap 风格 API)、跨平台安装器。
2.4 v1.1–v1.5:矢量样式、分析深度与多端形态
- v1.1通过 Pyodide 在浏览器内运行 GeoPandas 引擎,暴露宿主 deck.gl 给外部插件,支持图层重命名、属性列管理、大气效果插件;
- v1.2增加 OSM PBF 浏览器内解析、kerchunk 引用的 Cloud-Optimized NetCDF/HDF、认证 3D Tiles、地理配准视频叠加、PGlite 内置 PostGIS SQL 引擎、属性表图表面板、H3 工具、Directions 路由、命令面板、打印版式合成器、离线 PWA 构建、国际化框架;
- v1.3增加空间统计工具箱、IDW/克里金插值、栅格分析工具(分区统计、栅格计算器、重分类、镶嵌、焦点统计)、网络分析、故事地图构建器、AI 分割(SamGeo + SAM 3)、自然语言 GIS 助手、Python 自动化 API 与控制台、Homebrew 打包、Android 原生应用(Tauri v2 mobile);
- v1.4引入 Jupyter 面板(Web 端嵌入自托管 JupyterLite,桌面端启动 uv 管理的 JupyterLab)、光谱指数工具箱、栅格地理配准、野外采集工具;
- v1.5增加仪表盘面板、浏览器内 Whitebox(WebAssembly 运行时)、打印版式合成器的地图比例输入与标题块、Time Slider 绑定已有矢量图层、View 菜单(视口历史导航)、服务库、UI 配置文件,以及 macOS 签名公证安装包。
2.5 v1.6–v2.0:多地图、高级符号化与 3D 地球
- v1.6增加多地图网格、规则驱动渲染器、比例符号与填充图案、标注引擎、插件 zip 安装、winget 打包、Microsoft Store 上架;
- v1.7引入插件 UI 宿主 API(右侧栏面板、工具栏菜单、浮动面板)、色带渐变预览、ArcGIS 风格标注控制、Whitebox 分类浏览;
- v1.8增加相机漫游视频录制、实时故事地图、独立 HTML 导出、地图标注图层、地理标签照片导入、协作会话权限与聊天面板、AI 提供方设置;
- v1.9增加 CAD(DXF/DWG)导入、WMS/WFS GetCapabilities 服务发现、通用矢量转换、停靠式 SQL Workspace(带自动补全);
- v2.0是本项目的标志性版本:CesiumJS 3D 地球视图(与 2D 地图相机同步、镜像图层栈)、行星制图(OpenPlanetaryMap、USGS Astrogeology 底图)、OGC SLD/QGIS QML/Mapbox GL 样式往返、矢量图层写回源(GeoPackage/GeoJSON/PostGIS)、Weather 菜单与太阳位置模拟、KML GroundOverlay 与 Collada 模型。
2.6 v2.1–v2.6:数据浏览、样式系统与深链接
- v2.1增加 QGIS 风格 Browser 面板、路径动画(导出 MP4)、浏览器内目标检测(ONNX/YOLO)、维基百科知识卡片、Source Cooperative 数据浏览器;
- v2.2完成样式大改造:规则渲染器、Style Manager、图表情态符号、数据驱动标注、Expression Builder、虚拟字段、属性表单设计器、持久化属性连接、Atlas 地图系列、浏览器原生格式转换、实时 GPS 跟踪、Processing History;
- v2.3增加自动图例面板、GeoLens 目录浏览器、iOS 支持、Google Play 就绪的 Android 构建、新兴热点分析、Time Slider 驱动马赛克源;
- v2.4增加 STAC 目录浏览器、Earthdata GIS 浏览器、Hugging Face 面板、飞行模拟器、Time Slider 动画化瓦片数据与 Zarr 时间维度、
postMessage版本化嵌入 API; - v2.5支持 QGIS/ArcGIS Pro 工程导入、三个 DGGS 插件(A5/DGGRID/DGGAL)、高光谱数据立方、自托管共享与协作(FastAPI 参考实现 + 认证日志)、智能添加样式、矢量瓦片属性分类;
- v2.6引入数据深链接(
?data=/?style=)、ArcGIS MapServer/ImageServer、COG 驱动 3D 地形、中国区底图、协作快照可移植、geolibre-mcpMCP 服务器、无外部 CDN 构建(GEOLIBRE_NO_EXTERNAL_CDN=1)。
2.7 v2.7–v2.9:模型构建器、能力模型与无 Token 地球
- v2.7引入可视化 Model Builder(ArcGIS Model Builder 风格画布)、STAC 全类型资源浏览、按绘制选择要素、Chrome 扩展、Apache Iceberg 矢量图层、编码折线(polyline)格式;
- v2.8增加弹窗设计器、快速筛选、按层能力(只读/增删改限制)、按层混合模式、
@geolibre/core与@geolibre/map发布 npm、Agent skill(skills/geolibre/)、交互式 SamGeo 分割、Python 包 Earth Engine 与 xarray 支持; - v2.9让 3D 地球无需 Cesium Ion Token也能使用并绘制项目自身底图、引入
@geolibre/core能力模型(kiosk/教室部署锁定)、无密钥全球 DEM 下载器、Web Services 插件停靠化、识别弹窗聚合所有可见图层、GeoParquetgeo元数据完整读取、Dash 应用嵌入(DashMap组件)。
2.8 v3.0(当前):Cesium 一等渲染引擎
- View → Rendering engine可将主地图区在 MapLibre 2D 与 Cesium 3D 之间切换,整套应用通过渲染器无关的
MapEngine接口驱动(见 架构文档); - 矢量图层在 3D 地球上的符号化、标注、点聚类、挤出与真实 Z 高程与 2D 保持一致;几乎每种图层类型(COG、栅格/矢量 PMTiles、本地 MBTiles、ArcGIS MapServer、I3S、LiDAR、高斯溅射)都可到达地球;
- 新增 Cesium 原生内容(Ion 资源、CZML 时间动态场景、原生 KML/KMZ)、ArcGIS Feature Service 编辑写回(
applyEdits)、可编辑 SVG 打印版式、视口自适应栅格拉伸、Portolan/CSW/USGS NLDI 数据发现、Dimensions 插件等。
三、插件市场与注册中心(设计)深度解析
路线图唯一以独立小节完整设计的部分,是v1.0 的 "Plugin marketplace / registry" 条目。它建立在既有外部插件基础之上:plugin.json清单契约、HTTPS 清单 URL 加载、桌面端应用数据plugins/目录扫描、以及内置的public/plugins/放置机制。设计要点如下:
3.1 目标
让用户在桌面端与 Web 端都能从**策展注册中心(curated registry)**发现、安装、更新、移除可信的外部插件,无需手输清单 URL,同时保留"插件即受信代码"的既有信任模型。
3.2 注册中心结构
- 索引是策展的、带版本号的静态 JSON(如托管在
geolibre.app的registry.json,或由提交仓库生成),MVP 阶段无需实时后端; - 每个条目包含:
id、name、version、description、author、homepage、manifestUrl、categories、minGeoLibreVersion,以及可选的screenshots; - 索引通过 HTTPS 获取并缓存,条目指向现有加载器已经能理解的同一个
plugin.json清单。
3.3 浏览与安装 UI
- 独立的Manage Plugins 对话框(Settings 菜单 > Manage Plugins),仿照 QGIS,分为 All / Installed / Not installed / Upgradeable / Settings 五个分区,支持搜索与按条目显示安装/更新状态;
- 安装复用现有外部插件加载器:解析条目的
manifestUrl→ 校验 → 注册插件。桌面端把 bundle 下载进应用数据plugins/<id>/目录以便持久化并在启动时扫描加载;Web 端则把manifestUrl记录进设置(共享项目则记录进项目的plugins.manifestUrls); - 移除则删除记录的清单 URL 并在运行时注销插件(拆掉任何活动控件),无需重启。
3.4 更新与版本
- 对比已安装版本与注册中心条目,展示"可更新"状态,一键更新即重新拉取 bundle;
- 遵守
minGeoLibreVersion,不兼容的插件会被标记而不会被安装。
3.5 信任与安全
- 注册中心是允许列表(allowlist):只提供策展条目;
- 仅 HTTPS 清单(沿用
isAllowedPluginManifestUrl规则); - 安装需要显式用户同意,因为插件以受信代码执行(桌面 CSP 有意允许
blob:脚本执行); - 策展注册中心与显式安装同意是两道主要控制。
3.6 与内置插件的关系
内置的public/plugins/<id>/放置机制仍是"零配置"地在构建内分发一方或私有插件的方式;市场覆盖可发现、用户安装的第三方插件。两者互补,共用同一个plugin.json契约与加载器。
3.7 分阶段规划
- 策展静态注册中心 + 通过清单 URL 浏览安装(复用现有加载器,在设置中记录清单 URL)——已完成;
- 版本检查、更新与移除流程;
- 第三方作者的提交工作流。
四、Phase 1 实现的源码级验证
路线图标注 MVP 已完成,且由于同一前端服务于 Web 构建,桌面端与 Web 端同时生效。以下实现细节均可在仓库源码中直接验证:
4.1 注册中心抓取与规范化:plugin-registry.ts
resolveRegistryUrl()读取VITE_GEOLIBRE_PLUGIN_REGISTRY_URL(相对值会以应用 origin 解析),默认回退到托管的https://plugins.geolibre.app/plugin-registry.json;fetchPluginRegistry()采用 10 秒超时 + AbortController(调用方卸载时取消请求),并通过readBodyWithCap()对流式响应体实施5 MB 字节上限(Content-Length只是快速路径,流式读取器才是对分块/压缩响应的真正强制);normalizeEntry()将每个manifestUrl相对解析为绝对 URL,并对所有字段做长度截断(如id/name上限 128、manifestUrl上限 2048、description上限 1024),防止恶意注册中心用超长字符串扭曲 UI 或耗尽内存;- 只接受
http(s)homepage,避免javascript:/data:URL 被渲染成可点击链接执行。
4.2 清单 URL 允许列表:project.ts
isAllowedPluginManifestUrl()规定清单 URL 必须是HTTPS,或回环主机上的 HTTP(localhost、127.0.0.1、[::1])。该规则由设置对话框与工程文件加载共同强制,注册中心的条目也会经过这一校验——例如相对解析后落到tauri://localhost的条目会被直接丢弃,避免"本次会话能装、重启即失效"。
4.3 版本比较逻辑
plugin-registry.ts提供两个方向不同的版本比较:
satisfiesMinVersion(current, required)用于安装门槛:剥掉-rc.1、+sha等前后缀后比较点分数字,非数字/缺失的minGeoLibreVersion视为满足,绝不让格式错误的门槛阻塞安装;isNewerVersion(candidate, current)用于"可更新"徽标:数字核心相等时,预发布 → 稳定版(如1.0.0-rc.1→1.0.0)计为升级,保证 RC 用户能被推送正式版。
4.4 管理对话框:ManagePluginsDialog.tsx
- 对话框通过
fetchPluginRegistry()拉取注册中心,状态机为 loading / error / ready,请求失败(含超时、非 JSON 响应)会给出明确错误信息; - 安装 = 把条目的
manifestUrl追加进desktopSettings.pluginManifestUrls(mergeStringLists去重合并),现有外部插件加载器随后抓取并注册——不引入任何新信任路径; - 卸载(确认后)从设置中移除清单 URL,运行时注销插件并拆掉活动地图控件,Plugins 菜单无需刷新即可更新;
- 更新通过
upgradeExternalPlugin()先抓取新版本再拆除旧版本,失败的更新不会破坏已安装插件(源码注释明确指出这一顺序保证); - 该对话框同时支持手动添加清单 URL、管理额外本地插件目录,以及桌面/Web 两端的 zip 文件安装(桌面复制进应用数据目录,Web 写入 IndexedDB 持久化);
- 对话框会过滤与内置插件 id 冲突的注册条目(避免加载器 id 冲突),但对"先前通过 URL 安装过"的条目保持可见,方便用户移除旧安装。
4.5 加载器契约:external-plugins.ts
外部加载器对每次请求(清单、入口、样式)都强制no-cache重校验,避免"静态主机返回新的plugin.json配上陈旧的缓存入口"导致"Exported plugin version does not match plugin.json"错误;同时校验导出的插件id/name/version与清单一致后才注册。
五、如何在本仓库中继续深挖
- 完整功能清单与设计说明:docs/roadmap.md;
- 插件开发契约:docs/plugin-api.md(含插件 UI 宿主 API、原生栅格/瓦片层注册、共享轨道右侧面板停靠模式);
- 项目文件格式(含
plugins.manifestUrls持久化):docs/project-format.md; - 多端打包与分发:docs/downloads.md、docs/android.md、docs/ios.md;
- 自托管与离线部署:docs/self-hosting.md、docs/server-api.md;
- 关键实现文件:注册中心抓取 apps/geolibre-desktop/src/lib/plugin-registry.ts、管理对话框 apps/geolibre-desktop/src/components/layout/ManagePluginsDialog.tsx、清单 URL 校验 packages/core/src/project.ts、外部插件加载器 apps/geolibre-desktop/src/lib/external-plugins.ts;
- 行为验证:仓库的 tests 目录覆盖插件管理与安装相关测试(如 plugin-manager.test.ts、plugin-install.spec.ts 等),可作为实现行为的可执行说明。
结语
GeoLibre 的路线图不是一份简单的功能清单,而是一部完整的平台演进史:从 v0.1 的 MapLibre 外壳起步,到 v3.0 的 Cesium 双引擎渲染,中间贯穿着云原生数据接入(DuckDB/COG/PMTiles)、分析工具链(Whitebox/GDAL/Pyodide)、协作与 AI 能力,以及一套以"策展注册中心 + 显式信任"为核心的外部插件市场。理解这份路线图及其源码落点,你既能把握每个版本的能力边界,也能在需要时直接定位对应实现,甚至参照plugin.json契约参与插件生态的构建。
【免费下载链接】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),仅供参考