⌘+k ctrl+k
1.1.3 (stable)
Search Shortcut cmd + k | ctrl + k
Spatial Extension

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

Installing and Loading

要安装并加载spatial扩展,请运行:

INSTALL spatial;
LOAD spatial;

The GEOMETRY 类型

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

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

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

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

GEOMETRY 目前无法存储其他几何类型,如曲线几何或三角形网络。此外,GEOMETRY 类型不会在每个值的基础上存储 SRID 信息。这些限制可能会在未来得到解决。

本节中的页面