GeoLibre 云原生 GIS 完整指南:5 分钟出图、不下载查询远程数据、嵌入网页
【免费下载链接】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 平台,能跑在浏览器、桌面、移动端和 Jupyter Notebook 里,数据默认留你在本地的设备上处理。这篇文章不按官方教程的顺序,而是按真实任务流带你过四件事:出图、接远程数据、做空间分析、发布与嵌入,每部分都标注哪些操作浏览器就能跑、哪些必须装桌面应用。
先出图:从空工作区到一张带样式、可查属性的地图
能做什么:几分钟内把一个数据集加进地图、设成填色或分级统计图、检查属性表,然后保存或生成公开链接。
需要什么:零安装,官方浏览器构建版(web.geolibre.app)就够;想本地落盘保存项目文件则用桌面应用。
操作路径很短:
- 加数据:在Add Data → Vector Layer面板里粘贴一个矢量 URL。官方多个教程共用一份公开的世界国家 GeoParquet 示例:
https://data.source.coop/giswqs/opengeos/countries.parquet,用它把本节全部跑通最省事。 - 设样式:在图层面板选中该图层,样式面板里调填充颜色、轮廓颜色、填充不透明度。想做分级统计图,把样式类型切到Graduated,选一个数值属性(示例数据里有
POP_EST、GDP_MD_EST),定好类别数、配色方案和色带后应用。 - 查数据:点状态栏的Attribute table展开,选中图层载入记录。可以按列排序、在Search attributes里搜关键词,选中某行地图会高亮对应要素;点Explore一次性看每个字段的类型、完整度和值分布。再打开Identify features,点地图上的任一国家就能在弹窗里看它的属性。
- 保存或分享:桌面应用用Project → Save写出
.geolibre.json项目文件;任何环境都能用Project → Share上传拿公开链接(细节见后文"发布与嵌入"一节)。
易错点:别把示例数据集的列名当成你自己的字段。这份文件的字段是 Natural Earth 的
NAME、CONTINENT、POP_EST、GDP_MD_EST,几何列叫geom;换一份数据列名就变了,拿不准时先在 SQL 工作区跑一句DESCRIBE SELECT * FROM '你的文件URL'探一下。
完整流程见 docs/tutorials/first-map.md。
接数据:远程文件用 Range 请求原地查询,不用整包下载
能做什么:直接从 URL 加载云原生格式(GeoParquet、FlatGeobuf、COG),按需读取需要的部分。
远程数据集要先下载吗?不需要。云原生格式的要点就是文件本身组织好了,客户端只取需要的片段:
| 格式 | 类型 | 读取行为 |
|---|---|---|
| GeoParquet | 矢量,列式存储 | 可开Stream GeoParquet (no copy),用 HTTP range 请求原地查询;若文件行按空间排序(例如 GeoLibre 自带转换工具写出的 Hilbert 序),只抓取相关 row group |
| FlatGeobuf | 矢量,自带空间索引 | 格式允许时只抓取当前视图内的要素 |
| COG | 栅格,按瓦片组织 | 只读需要的瓦片;加载后可在样式面板调亮度、对比度、饱和度与色相 |
加载入口都统一在Add Data下(GeoParquet / FlatGeobuf / Raster 图层),填 URL、点加载即可。本地 GeoTIFF 或 COG 也可以直接拖进地图当栅格图层加。
流式读取的实现位于桌面端 DuckDB 加载管线 apps/geolibre-desktop/src/lib/duckdb-vector-loader.ts。
把本地文件变成云原生格式
Processing → GeoLibre Toolbox → Conversion里有转换入口,引擎差异是关键:
- Vector to GeoParquet、CSV to GeoParquet:DuckDB-WASM 在浏览器里跑,零安装;
- Vector to FlatGeobuf、Vector to PMTiles、Raster to COG:走 Python 侧车,需要桌面应用。
比如把本地 GeoJSON 发布为 GeoParquet:打开Vector to GeoParquet,选输入文件和输出路径,运行,再把产出的文件加回地图验证即可。
完整流程见 docs/tutorials/cloud-native-data.md。
跑分析:矢量、地形、SQL 三条路
不写代码的缓冲与叠加
能做什么:缓冲、裁剪、相交、差集、合并、空间连接、属性连接,结果自动成为地图上的新图层。
工具都放在Processing → GeoLibre Toolbox → Vector下:选输入图层、选叠加图层、挑引擎、Run。缓冲的引擎选择最容易迷惑,直接列清楚:
| 引擎 | 运行位置 | 特点 |
|---|---|---|
| 客户端(Turf.js) | 浏览器 | 零配置,但在地理坐标下做缓冲 |
| 侧车(GeoPandas) | 桌面 Python 侧车 | 先重投影再缓冲,公制距离精确 |
| Python(Pyodide) | 浏览器 | 跑与侧车相同的 GeoPandas 代码,结果与侧车一致;首次使用下载一次运行时 |
技巧:大范围、要求公制距离精确时,选两个 GeoPandas 引擎之一——桌面用侧车,浏览器版用 Pyodide。客户端引擎适合快速近似。
叠加类工具一句话说明:Clip保留落在叠加层内部的输入部分并保留输入属性;Intersection只留两块多边形的重叠区;Difference从输入里扣掉叠加层区域;Union合并两层(任何引擎下都不保留属性);Spatial join按空间关系(相交、包含、位于内部)把连接层属性挂到每个输入要素上,任何几何类型都行;Attribute join靠关键字段匹配挂属性、不涉及几何(例如用共享的 FIPS 代码把人口普查统计挂到边界多边形上),一对一、第一个匹配的连接行胜出,可选内连接或左连接。
每次运行都会记进Processing → History,可一键重跑,也能复制等价的 Python 代码。
易错点:Processing 菜单里分隔线上方也有一个 "Vector",那是 Whitebox 工具箱的矢量类别(1000+ 个 WebAssembly 工具);本节的对话框在Processing → GeoLibre Toolbox → Vector下,两者不是重复项。区别见 docs/user-guide/processing.md。
地形产品:从 DEM 派生山体阴影、坡度与等高线
能做什么:从高程栅格(GeoTIFF/COG 格式的 DEM)派生山体阴影、坡度、坡向和等高线。
先加一个 DEM 图层,然后进Processing → GeoLibre Toolbox → Raster:
- Hillshade(山体阴影):可调方位角、高度角、z 因子控制光照,运行后着色浮雕栅格自动上图。把它压到其他图层下面、把上层混合模式设为Multiply,能让浮雕透过颜色显示,效果比降透明度把两层一起洗淡好得多。
- Slope(坡度)/ Aspect(坡向):分别算陡峭程度和最陡坡的罗盘方向。给输出配一个色带样式,再从控件菜单打开Colorbar显示数值标尺。
- Contour(等高线):设间距(相邻两条线的高程差),产出是矢量图层,可以像普通矢量数据一样标注和样式化。
- 裁剪到研究区:Clip by extent是边界框、浏览器也能跑;Clip by mask layer是矢量掩膜、仅侧车。
引擎即浏览器/桌面之分:Hillshade、Slope、Aspect 都有Client (browser)引擎,前三项在浏览器里零安装跑完;Contour和Clip by mask layer没有客户端引擎,需要桌面应用管理的 rasterio Python 侧车。大栅格或地理坐标系下的地形,建议优先用侧车。每个工具顶部的引擎选择器会显示当前可用的选项。
或者写一句 SQL:远程文件直接查
能做什么:SQL 工作区基于 DuckDB-WASM 运行 DuckDB Spatial SQL,ST_*空间函数全部可用,查询结果能直接变成地图图层。浏览器和桌面都支持,从Processing → SQL Workspace进入。
每个已加载的矢量图层就是一张可查询的表。查预估 GDP 前十的国家:
SELECT NAME, CONTINENT, GDP_MD_EST FROM countries ORDER BY GDP_MD_EST DESC LIMIT 10;更有意思的是可以先不加载文件。工作区会检测FROM子句里的裸 URL,自动包上对应的读取器,再用 range 请求流式读:
SELECT COUNT(*) AS n FROM https://data.source.coop/giswqs/opengeos/countries.parquet;空间函数自然也可用:算非洲各国面积并把结果上图,记得保留geom列;注意 EPSG:4326 下面积单位是平方度,要平方千米请用ST_Area_Spheroid(geom)再除以 1e6。查询返回几何列时,点Add as layer就能从结果建图层(可一次加多个);结果图层和任何矢量图层一样支持识别、选择和属性表。Export CSV与Export GeoParquet按钮就在Add as layer旁边,结果当场就能带走。起步用Sample queries菜单,重跑旧查询用history。
工作区所在处理管线实现见 packages/processing,完整参考见 docs/user-guide/sql-workspace.md。
发布与嵌入:一个公开链接,或能被页面驱动的地图
能做什么:项目上传后拿公开 URL,用 iframe 嵌进任意网页,还能从自己的页面在运行时持续控制地图。
发布前先配一次令牌:把你的个人 API 令牌粘到Settings → Environment Variables的Share.GeoLibre API token字段(令牌在share.geolibre.app/settings的 "Settings → API tokens" 下创建,只需设置一次)。
然后Project → Share...:确认标题、上传,GeoLibre 会返回指向.geolibre.json文件的公开 URL,例如https://share.geolibre.app/you/my-map.geolibre.json。分享文件捕获的内容与本地保存完全一致——图层、样式、插件状态、地图视图。例外是读取你电脑本地文件的图层:分享前对话框会列出它们为"缺失",因为分享服务只存项目文件,绝不上传你的数据。
任何人用浏览器版打开分享项目的方式:
https://web.geolibre.app/?url=https://share.geolibre.app/you/my-map.geolibre.json一行 iframe 嵌入网页
要干净、纯地图的嵌入,加maponly参数:
<iframe src="https://web.geolibre.app/?url=https://share.geolibre.app/you/my-map.geolibre.json&maponly" title="GeoLibre map" width="100%" height="600" style="border: 0;" loading="lazy" allow="fullscreen; geolocation" ></iframe>外观由 URL 参数控制,参数可自由组合:
| 参数 | 效果 |
|---|---|
maponly | 隐藏所有界面外壳,只留地图——适合"地图只是页面插图" |
layout=viewer | 只读:图层、视图、控件、底图、搜索/识别保留,一切改项目的部分隐藏——适合"读者可探索但不可改" |
layout=compact | 保留一条细的纯图标工具栏 |
toolbar=none | 隐藏顶部工具栏,保留面板和状态栏 |
panels=none | 隐藏侧边与底部面板,保留工具栏 |
theme=dark | 加载时强制深色主题 |
运行时跟地图对话
URL 参数只在加载时生效一次。想持续"对话"——比如读者在你的 UI 里点了某条记录,地图就飞过去,同时你还想监听他在图内的操作——装类型化客户端:
npm install @geolibre/embedconnect到 iframe 之后,用map.on("selectionChanged", ...)监听选中变化,map.setView({ bbox })飞行到范围,map.highlightFeature({ layerId, filter, fit: true })高亮定位某个要素。注意:这只对被白名单允许你页面 origin 的部署生效——官方浏览器版没有白名单,运行时 API 面向的是你自己托管的构建版。客户端实现见 packages/embed,完整参数表与免依赖的postMessage协议见 docs/user-guide/embedding.md。
环境对照:哪些浏览器能跑、哪些必须桌面端
| 任务 | 浏览器版 | 桌面应用 |
|---|---|---|
| 加图层、样式、属性表、分享公开链接 | ✅ | ✅ |
| 远程 GeoParquet / FlatGeobuf / COG 流式加载 | ✅ | ✅ |
| SQL 工作区(DuckDB-WASM) | ✅ | ✅ |
| 矢量缓冲(Turf.js 或 Pyodide 引擎) | ✅ | ✅ |
| 山体阴影、坡度、坡向(客户端引擎) | ✅ | ✅ |
| Whitebox 1000+ 工具(WebAssembly) | ✅ | ✅ |
打开 / 保存.geolibre.json项目文件 | — | ✅ |
| 本地 MBTiles、本地栅格读取 | — | ✅ |
| 等高线、矢量掩膜裁剪、栅格转 COG、矢量转 FlatGeobuf / PMTiles | — | ✅(rasterio 侧车) |
| 矢量转 GeoParquet、CSV 转 GeoParquet(DuckDB-WASM) | ✅ | ✅ |
一句话:分析与浏览器数据大多浏览器能跑,本地文件与侧车工具才需要桌面端。Python 侧车由桌面应用自动管理,见 docs/getting-started.md。
常见问题
哪些步骤必须桌面应用?打开/保存项目文件、读本地 MBTiles 与栅格、rasterio 侧车工具(等高线、矢量掩膜裁剪、栅格转 COG、矢量转 FlatGeobuf / PMTiles 等转换)。Whitebox 工具箱除外——它的 1000+ 工具在浏览器里以 WebAssembly 运行。
大范围缓冲该选哪个引擎?客户端 Turf.js 快但在地理坐标下缓冲;要公制距离精确就选侧车(桌面)或 Pyodide(浏览器),两者都会先重投影。
COG 序列怎么动起来?打开时间滑块插件(Time Slider)对栅格序列做时间动画,见 docs/user-guide/data-integrations.md。
延伸入口
- 视频教程:官方还维护一组带章节和总结的实操演示,覆盖 1.0 完整走查(浏览器/桌面/Jupyter 三构建、180 GB 数据集流式加载)、浏览器地理处理(1000+ 工具零安装)、免费高分辨率灾害卫星影像、建筑足迹规整化、GeoLens 自托管栈、Model Builder + AI 助手、2026 尼泊尔洪水制图、影像地理配准等。见 docs/tutorials/videos.md。
- 教程总入口:docs/tutorials/index.md,六篇官方教程(首张地图 / 云原生数据 / 矢量分析 / 地形分析 / 空间 SQL / 分享与嵌入)都在那里。
- 用户指南:界面、添加数据、样式、属性表、处理工具等参考页在 docs/user-guide/ 下。
- 核心源码:渲染与交互在 packages/map,处理管线在 packages/processing,桌面壳在 apps/geolibre-desktop。
练习顺序建议:先用浏览器版把"出图 + SQL 查询"跑通,遇到需要本地文件或侧车的步骤再切桌面应用继续。
【免费下载链接】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),仅供参考