⌘+k ctrl+k
1.3 (稳定版)
搜索快捷键 cmd + k | ctrl + k
空间扩展

spatial 扩展为 DuckDB 中的地理空间数据处理提供支持。有关该扩展的概述,请参阅我们的博客文章

安装和加载

要安装 spatial 扩展,请运行

INSTALL spatial;

请注意,spatial 扩展不是自动加载的。因此,在使用它之前需要加载它

LOAD spatial;

GEOMETRY 类型

空间扩展的核心是 GEOMETRY 类型。如果您不熟悉地理空间数据和 GIS 工具,这种类型的工作方式可能与您预期的有很大不同。

从表面上看,GEOMETRY 类型是“几何”数据的二进制表示,由顶点集(X 和 Y double 精度浮点数的对)组成。但它有点特别之处在于,它实际上用于存储几种不同的几何子类型之一。这些包括 POINTLINESTRINGPOLYGON,以及它们的“集合”等效类型:MULTIPOINTMULTILINESTRINGMULTIPOLYGON。最后是 GEOMETRYCOLLECTION,它可以包含任何其他子类型,以及递归地包含其他 GEOMETRYCOLLECTION

这起初可能看起来很奇怪,因为 DuckDB 已经有诸如 LISTSTRUCTUNION 等可以以类似方式使用的类型,但 GEOMETRY 类型的设计和行为实际上是基于 Simple Features 几何模型,该模型是许多其他数据库和 GIS 软件使用的标准。

空间扩展还包括一些实验性的非标准显式几何类型,例如 POINT_2DLINESTRING_2DPOLYGON_2DBOX_2D,这些类型基于 DuckDB 的原生嵌套类型,如 STRUCTLIST。由于这些类型具有固定且可预测的内部内存布局,理论上可以在操作这些类型时,显著优化许多地理空间算法,使其比操作 GEOMETRY 类型快得多。然而,到目前为止,空间扩展中只有少数函数专门针对这些类型进行了优化。所有这些新类型都可以隐式转换为 GEOMETRY,但会产生少量转换成本,因此如果您计划使用许多不同的空间函数,目前仍建议使用 GEOMETRY 类型。

GEOMETRY 目前无法存储额外的几何类型,例如曲线几何或三角网络。此外,GEOMETRY 类型不按值存储 SRID 信息。这些限制可能会在未来得到解决。

本节页面