第 11 章:SQL 工作区与高级查询
[事实与研判分离说明] 本章信息源:GeoLibre 官方用户指南 SQL 工作区(https://geolibre.app/user-guide/sql-workspace/)、Roadmap 标注说明:[已核实] = 有明确来源;[待核实] = 来源单一或存疑;[推断] = 合理推测 手册内容最后更新:2026-09-04
11.1 SQL 工作区概览
SQL 工作区文档页,展示多引擎查询环境
11.1.1 什么是 SQL 工作区
SQL 工作区是 GeoLibre 的 SQL 查询执行环境,支持在浏览器内运行空间 SQL 查询,分析已加载图层、本地文件和远程 URL。[已核实] https://geolibre.app/user-guide/sql-workspace/
核心特点:
- 无需安装数据库服务器
- 多个 SQL 引擎可选
- 查询结果可直接添加到地图
- 支持导出为 CSV 或 GeoParquet
11.1.2 支持的 SQL 引擎
GeoLibre 提供三种 SQL 引擎:[已核实] https://geolibre.app/user-guide/sql-workspace/
| 引擎 | 实现 | 特点 |
|---|---|---|
| DuckDB Spatial | DuckDB-WASM + Spatial 扩展 | 默认引擎,功能最全面 |
| PGlite | PostgreSQL + PostGIS (WASM) | PostGIS 兼容语法 |
| Apache Sedona | Sedona (WASM) | 大数据空间分析 |
11.1.3 打开 SQL 工作区
- Tools -> SQL Workspace
- 或工具栏 SQL 图标
[已核实] https://geolibre.app/user-guide/sql-workspace/
11.2 DuckDB Spatial SQL
11.2.1 DuckDB Spatial 概述
DuckDB Spatial 是 GeoLibre 的默认 SQL 引擎,基于 DuckDB-WASM 运行。[已核实] https://geolibre.app/user-guide/sql-workspace/
特点:
- 列式存储,查询速度快
- 支持 GeoParquet 原生读写
- 空间函数丰富
- 支持 HTTP 范围请求读取远程文件
11.2.2 加载空间 扩展
首次使用 DuckDB Spatial 时,自动执行:
INSTALL spatial;
LOAD spatial;
[已核实] https://geolibre.app/
11.2.3 核心空间函数
DuckDB Spatial 提供以下空间函数类别:[推断] 基于 DuckDB Spatial 文档和 GeoLibre 功能推断
几何构造:
ST_Point(x, y):创建点ST_LineFromText(wkt):从 WKT 创建线ST_GeomFromGeoJSON(json):从 GeoJSON 创建几何
几何访问:
ST_X(geom)、ST_Y(geom):获取坐标ST_Area(geom):计算面积ST_Length(geom):计算长度ST_Perimeter(geom):计算周长ST_Centroid(geom):计算质心ST_Boundary(geom):获取边界
空间关系:
ST_Intersects(a, b):判断是否相交ST_Contains(a, b):判断是否包含ST_Within(a, b):判断是否在内部ST_Distance(a, b):计算距离ST_Buffer(geom, distance):缓冲区
空间变换:
ST_Transform(geom, crs):坐标变换ST_Simplify(geom, tolerance):几何简化ST_Union(a, b):几何并集
11.2.4 查询加载的图层
已加载的 GeoLibre 图层在 DuckDB 中注册为虚拟表,可直接查询:
-- 查看图层所有记录
SELECT * FROM cities;
-- 条件筛选
SELECT name, population FROM cities WHERE population > 1000000;
-- 空间筛选
SELECT * FROM cities
WHERE ST_Intersects(geom, ST_Buffer(ST_Point(116.4, 39.9), 50000));
[推断] 图层注册为虚拟表的行为基于 GeoLibre 的 DuckDB-WASM 集成推断。
11.2.5 加载外部文件
DuckDB Spatial 可直接读取远程和本地文件:
-- 读取远程 GeoParquet
SELECT * FROM read_parquet('https://example.com/data.parquet');
-- 读取远程 FlatGeobuf
SELECT * FROM ST_Read('https://example.com/data.fgb');
-- 读取本地 Shapefile(桌面端)
SELECT * FROM ST_Read('/path/to/data.shp');
[已核实] DuckDB Spatial 的 ST_Read 支持 FlatGeobuf、Shapefile、GeoJSON、KML 等格式。https://geolibre.app/
11.2.6 自动 URL 包装
GeoLibre 的 SQL 工作区支持自动 URL 包装:裸 URL 自动匹配到对应读取器并执行 HTTP 范围请求。[已核实] https://geolibre.app/user-guide/sql-workspace/
-- 以下 URL 自动识别为 GeoParquet 并加载
SELECT * FROM 'https://example.com/data.parquet';
11.3 PGlite PostGIS
11.3.1 PGlite 概述
PGlite 是在浏览器内运行的 PostgreSQL + PostGIS,通过 WASM 实现。[已核实] https://geolibre.app/user-guide/sql-workspace/
特点:
- 完全兼容 PostGIS 语法
- 支持 PostGIS 的全部空间函数
- 适合已有 PostGIS 经验的用户
11.3.2 与 DuckDB Spatial 的差异
| 维度 | DuckDB Spatial | PGlite PostGIS |
|---|---|---|
| 语法 | DuckDB 方言 | PostgreSQL/PostGIS 方言 |
| 性能 | 列式,分析快 | 行式,事务强 |
| 空间函数 | 核心函数 | PostGIS 全套 |
| 扩展性 | 有限 | 丰富 |
[推断] 差异对比基于两种数据库的公开特性推断。
11.4 Apache Sedona
11.4.1 Sedona 概述
Apache Sedona 是 Apache 基金会的开源空间数据处理系统。GeoLibre 通过 WASM 版本集成。[已核实] https://geolibre.app/user-guide/sql-workspace/
特点:
- 针对大数据优化
- 支持分布式空间连接
- 适合复杂的空间分析查询
[推断] Sedona 的具体功能基于 Apache Sedona 公开文档推断,GeoLibre 中 WASM 版本的功能可能有所裁剪。