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

函数索引

标量函数

函数 摘要
ST_Area 计算几何图形的面积。
ST_Area_Spheroid 返回几何图形的面积(以米为单位),使用地球的椭球模型
ST_AsGeoJSON 将几何图形返回为GeoJSON片段
ST_AsHEXWKB 将几何图形返回为HEXWKB字符串
ST_AsSVG 将几何图形转换为SVG片段或路径
ST_AsText 将几何图形作为WKT字符串返回
ST_AsWKB 将几何图形作为WKB二进制大对象返回
ST_Boundary 返回几何图形的“边界”
ST_Buffer 返回输入几何体在目标距离处的缓冲区
ST_Centroid 计算几何图形的质心
ST_Collect 将几何图形列表收集到一个集合几何图形中。
ST_CollectionExtract 从GeometryCollection中提取几何体到一个类型化的多几何体中。
ST_Contains 如果geom1包含geom2,则返回true。
ST_ContainsProperly 如果 geom1 "完全包含" geom2,则返回 true
ST_ConvexHull 返回包围几何体的凸包
ST_CoveredBy 如果geom1被geom2“覆盖”,则返回true
ST_Covers 返回 geom1 是否“覆盖” geom2
ST_Crosses 如果geom1“跨越”geom2,则返回true
ST_DWithin 返回两个几何体是否在彼此的目标距离内
ST_DWithin_Spheroid 返回两个POINT_2D是否在地球表面的椭球模型下,以米为单位的距离内
ST_Difference 返回两个几何图形之间的“差异”
ST_Dimension 返回几何体的维度。
ST_Disjoint 返回两个几何体是否不相交
ST_Distance 返回两个几何体之间的距离。
ST_Distance_Sphere 返回两个几何体之间的半正矢距离。
ST_Distance_Spheroid 返回两个几何体之间的距离(以米为单位),使用地球表面的椭球模型
ST_Dump 将几何体转储为子几何体列表及其在原始几何体中的“路径”。
ST_EndPoint 返回一条线的最后一个点。
ST_Envelope 返回输入几何的最小边界框作为多边形几何。
ST_Equals 比较两个几何图形是否相等
ST_Extent 返回包含输入几何图形的最小边界框
ST_ExteriorRing 返回多边形几何体的外环(外壳)。
ST_FlipCoordinates 返回一个新的几何体,其输入几何体的坐标被“翻转”,使得x = y且y = x。
ST_Force2D 强制几何图形的顶点具有X和Y分量
ST_Force3DM 强制几何体的顶点具有X、Y和M分量
ST_Force3DZ 强制几何体的顶点具有X、Y和Z分量
ST_Force4D 强制几何图形的顶点具有X、Y、Z和M分量
ST_GeomFromGeoJSON 从GeoJSON片段反序列化一个几何体。
ST_GeomFromHEXEWKB 从HEXEWKB编码的字符串反序列化一个几何对象
ST_GeomFromHEXWKB 从HEXWKB字符串创建GEOMETRY
ST_GeomFromText 从WKT字符串反序列化一个GEOMETRY,可选择忽略无效的几何体
ST_GeomFromWKB 从WKB编码的二进制大对象中反序列化一个几何图形
ST_GeometryType 返回一个 'GEOMETRY_TYPE' 枚举,用于标识输入几何类型。
ST_HasM 检查输入几何体是否具有M值。
ST_HasZ 检查输入几何体是否具有Z值。
ST_Hilbert 将X和Y值编码为覆盖给定边界框的希尔伯特曲线索引。
ST_Intersection 返回 geom1 和 geom2 的“交集”
ST_Intersects 如果两个几何图形相交,则返回 true
ST_Intersects_Extent 如果两个几何图形的范围相交,则返回true
ST_IsClosed 如果几何体是“闭合的”,则返回true
ST_IsEmpty 如果几何体是“空的”,则返回true
ST_IsRing 如果输入的线几何是一个环(既是ST_IsClosed又是ST_IsSimple),则返回true。
ST_IsSimple 如果输入几何是“简单”的,则返回 true
ST_IsValid 如果几何在拓扑上是“有效的”,则返回true
ST_Length 返回输入线几何的长度
ST_Length_Spheroid 返回输入几何的长度(以米为单位),使用地球的椭球模型
ST_LineMerge “合并”输入的线几何,可选择考虑方向。
ST_M 返回点几何的M值,如果不是点或为空则返回NULL
ST_MMax 返回几何体的最大M值
ST_MMin 返回几何体的最小M值
ST_MakeEnvelope 返回一个包含输入几何体的最小边界框多边形
ST_MakeLine 从一对或一组输入点创建一个LINESTRING几何体
ST_MakePolygon 从外壳几何体和一组可选的孔创建多边形
ST_MakeValid 尝试使无效的几何体有效,而不移除任何顶点
ST_Multi 将单个几何体转换为多几何体。
ST_NGeometries 返回集合几何中的组件几何数量。
ST_NInteriorRings 返回多边形的内部环的数量
ST_NPoints 返回几何图形中的顶点数量
ST_Normalize 返回输入几何的“标准化”版本。
ST_NumGeometries 返回集合几何中的组件几何数量。
ST_NumInteriorRings 返回多边形的内部环的数量
ST_NumPoints 返回几何图形中的顶点数量
ST_Overlaps 如果geom1“重叠”geom2,则返回true
ST_Perimeter 返回几何图形的周长长度
ST_Perimeter_Spheroid 返回使用地球表面椭球模型计算的周长长度(以米为单位)
ST_Point 创建一个几何点
ST_Point2D 创建一个POINT_2D
ST_Point3D 创建一个POINT_3D
ST_Point4D 创建一个POINT_4D
ST_PointN 返回输入几何体的第n个顶点作为点几何体
ST_PointOnSurface 返回一个保证在输入几何体表面上的点。有时是ST_Centroid的有用替代方案。
ST_Points 将几何体中的所有顶点收集到一个多点中
ST_QuadKey 计算给定经纬度点在给定级别下的quadkey
ST_ReducePrecision 返回所有顶点减少到目标精度的几何图形
ST_RemoveRepeatedPoints 返回一个新的几何体,其中重复的点已被移除,可选择在彼此的目标距离内。
ST_Reverse 返回输入几何体的新版本,其顶点的顺序被反转
ST_ShortestLine 返回geom1和geom2之间最近的两个点之间的线
ST_Simplify 通过折叠小于'distance'的边来简化输入几何
ST_SimplifyPreserveTopology 返回一个简化的几何图形,但避免创建无效的拓扑结构
ST_StartPoint 返回线几何的第一个点
ST_Touches 如果 geom1 "接触" geom2,则返回 true
ST_Transform 在两个坐标系之间转换几何图形
ST_Union 返回两个几何图形的并集。
ST_Within 如果geom1在geom2内部,则返回true
ST_X 返回点几何的X值,如果不是点或为空则返回NULL
ST_XMax 返回几何图形的最大X值
ST_XMin 返回几何图形的最小X值
ST_Y 返回点几何的Y值,如果不是点或为空则返回NULL
ST_YMax 返回几何图形的最大Y值
ST_YMin 返回几何图形的最小Y值
ST_Z 返回点几何的Z值,如果不是点或为空则返回NULL
ST_ZMFlag 返回一个标志,指示输入几何体中是否存在Z和M值。
ST_ZMax 返回几何体的最大Z值
ST_ZMin 返回几何体的最小Z值

聚合函数

Function Summary
ST_Envelope_Agg ST_Extent_Agg 的别名。
ST_Extent_Agg 计算包含输入几何集合的最小边界框多边形
ST_Intersection_Agg 计算一组几何图形的交集
ST_Union_Agg 计算一组输入几何图形的并集

表函数

Function Summary
ST_Drivers 返回支持的GDAL驱动程序和文件格式列表
ST_Read 使用GDAL库读取并导入多种地理空间文件格式。
ST_ReadOSM ST_ReadOsm() 表函数可以直接从 .osm.pbf 文件中读取压缩的 OpenStreetMap 数据。
ST_Read_Meta 使用GDAL库从各种地理空间文件格式中读取元数据。

标量函数

ST_Area

签名

DOUBLE ST_Area (col0 POINT_2D)
DOUBLE ST_Area (col0 LINESTRING_2D)
DOUBLE ST_Area (col0 POLYGON_2D)
DOUBLE ST_Area (col0 GEOMETRY)
DOUBLE ST_Area (col0 BOX_2D)

描述

计算几何图形的面积。

对于任何不是POLYGONMULTIPOLYGON或包含多边形几何的GEOMETRYCOLLECTION的几何体,返回0.0。 面积与几何体的空间参考系统的单位相同。

此函数的 POINT_2DLINESTRING_2D 重载总是返回 0.0,但为了完整性而包含在内。

Example

SELECT ST_Area('POLYGON((0 0, 0 1, 1 1, 1 0, 0 0))'::GEOMETRY);
	-- 1.0

ST_Area_Spheroid

签名

DOUBLE ST_Area_Spheroid (col0 POLYGON_2D)
DOUBLE ST_Area_Spheroid (col0 GEOMETRY)

描述

返回几何体在地球椭球模型下的面积,单位为米

输入的几何形状假定为在EPSG:4326坐标系(WGS84)中,具有[纬度, 经度]轴顺序,并且面积以平方米返回。此函数使用GeographicLib库,使用地球的椭球模型计算面积。这是一种高度准确的方法,用于计算考虑地球曲率的多边形面积,但也是最慢的。

对于任何不是POLYGONMULTIPOLYGON或包含多边形几何的GEOMETRYCOLLECTION的几何体,返回0.0


ST_AsGeoJSON

签名

JSON ST_AsGeoJSON (col0 GEOMETRY)

Description

将几何体作为GeoJSON片段返回

这不返回完整的GeoJSON文档,仅返回几何片段。要构建完整的GeoJSON文档或特征,请考虑将此函数与DuckDB JSON扩展结合使用。 此函数支持具有Z值的几何体,但不支持M值。

Example

SELECT ST_AsGeoJSON('POLYGON((0 0, 0 1, 1 1, 1 0, 0 0))'::GEOMETRY);
----
{"type":"Polygon","coordinates":[[[0.0,0.0],[0.0,1.0],[1.0,1.0],[1.0,0.0],[0.0,0.0]]]}

-- Convert a geometry into a full GeoJSON feature (requires the JSON extension to be loaded)
SELECT CAST({
	type: 'Feature', 
	geometry: ST_AsGeoJSON(ST_Point(1,2)), 
	properties: { 
		name: 'my_point' 
	} 
} AS JSON);
----
{"type":"Feature","geometry":{"type":"Point","coordinates":[1.0,2.0]},"properties":{"name":"my_point"}}

ST_AsHEXWKB

Signature

VARCHAR ST_AsHEXWKB (col0 GEOMETRY)

Description

将几何体返回为HEXWKB字符串

Example

SELECT ST_AsHexWKB('POLYGON((0 0, 0 1, 1 1, 1 0, 0 0))'::GEOMETRY);
----
01030000000100000005000000000000000000000000000...

ST_AsSVG

Signature

VARCHAR ST_AsSVG (col0 GEOMETRY, col1 BOOLEAN, col2 INTEGER)

Description

将几何图形转换为SVG片段或路径

SVG片段以字符串形式返回。该片段是一个可以在SVG文档中使用的路径元素。 第二个布尔参数指定路径应该是相对还是绝对的。 第三个参数指定用于坐标的最大位数。

点使用绝对坐标格式化为cx/cy,或使用相对坐标格式化为x/y。

Example

SELECT ST_AsSVG('POLYGON((0 0, 0 1, 1 1, 1 0, 0 0))'::GEOMETRY, false, 15);
----
M 0 0 L 0 -1 1 -1 1 0 Z

ST_AsText

Signatures

VARCHAR ST_AsText (col0 POINT_2D)
VARCHAR ST_AsText (col0 LINESTRING_2D)
VARCHAR ST_AsText (col0 POLYGON_2D)
VARCHAR ST_AsText (col0 BOX_2D)
VARCHAR ST_AsText (col0 GEOMETRY)

Description

将几何体作为WKT字符串返回

Example

SELECT ST_AsText(ST_MakeEnvelope(0,0,1,1));
----
POLYGON ((0 0, 0 1, 1 1, 1 0, 0 0))

ST_AsWKB

Signature

WKB_BLOB ST_AsWKB (col0 GEOMETRY)

Description

将几何图形作为WKB blob返回

Example

SELECT ST_AsWKB('POLYGON((0 0, 0 1, 1 1, 1 0, 0 0))'::GEOMETRY)::BLOB;
----
\x01\x03\x00\x00\x00\x01\x00\x00\x00\x05...

ST_Boundary

Signature

GEOMETRY ST_Boundary (col0 GEOMETRY)

Description

返回几何图形的“边界”


ST_Buffer

Signatures

GEOMETRY ST_Buffer (geom GEOMETRY, distance DOUBLE)
GEOMETRY ST_Buffer (geom GEOMETRY, distance DOUBLE, num_triangles INTEGER)
GEOMETRY ST_Buffer (geom GEOMETRY, distance DOUBLE, num_triangles INTEGER, join_style VARCHAR, cap_style VARCHAR, mitre_limit DOUBLE)

Description

返回输入几何体在目标距离周围的缓冲区

geom 是输入的几何体。

distance 是缓冲的目标距离,使用与输入几何相同的单位。

num_triangles 表示将生成多少个三角形来近似一个四分之一圆。数字越大,生成的几何形状越平滑。默认值为8。

join_style 必须是 "JOIN_ROUND"、"JOIN_MITRE"、"JOIN_BEVEL" 中的一个。此参数不区分大小写。

cap_style 必须是 "CAP_ROUND"、"CAP_FLAT"、"CAP_SQUARE" 中的一个。此参数不区分大小写。

mitre_limit 仅在 join_style 为 "JOIN_MITRE" 时适用。它是从角到斜接点的距离与角半径的比率。默认值为 1.0。

这是一个平面操作,不会考虑地球的曲率。


ST_Centroid

Signatures

POINT_2D ST_Centroid (col0 POINT_2D)
POINT_2D ST_Centroid (col0 LINESTRING_2D)
POINT_2D ST_Centroid (col0 POLYGON_2D)
POINT_2D ST_Centroid (col0 BOX_2D)
POINT_2D ST_Centroid (col0 BOX_2DF)
GEOMETRY ST_Centroid (col0 GEOMETRY)

Description

计算几何图形的质心

Example

SELECT st_centroid('POLYGON((0 0, 0 1, 1 1, 1 0, 0 0))'::GEOMETRY);
----
POINT(0.5 0.5)

ST_Collect

Signature

GEOMETRY ST_Collect (col0 GEOMETRY[])

Description

将几何体列表收集到一个集合几何体中。

  • 如果所有几何都是POINT,则返回一个MULTIPOINT
  • 如果所有几何都是LINESTRING,则返回MULTILINESTRING
  • 如果所有几何都是POLYGON,则返回MULTIPOLYGON
  • 否则,如果输入集合包含混合的几何类型,则返回一个GEOMETRYCOLLECTION

空的几何体和NULL几何体将被忽略。如果所有几何体都是空的或NULL,则返回GEOMETRYCOLLECTION EMPTY

Example

-- With all POINT's, a MULTIPOINT is returned
SELECT ST_Collect([ST_Point(1, 2), ST_Point(3, 4)]);
----
MULTIPOINT (1 2, 3 4)

-- With mixed geometry types, a GEOMETRYCOLLECTION is returned
SELECT ST_Collect([ST_Point(1, 2), ST_GeomFromText('LINESTRING(3 4, 5 6)')]);
----
GEOMETRYCOLLECTION (POINT (1 2), LINESTRING (3 4, 5 6))

-- Note that the empty geometry is ignored, so the result is a MULTIPOINT
SELECT ST_Collect([ST_Point(1, 2), NULL, ST_GeomFromText('GEOMETRYCOLLECTION EMPTY')]);
----
MULTIPOINT (1 2)

-- If all geometries are empty or NULL, a GEOMETRYCOLLECTION EMPTY is returned
SELECT ST_Collect([NULL, ST_GeomFromText('GEOMETRYCOLLECTION EMPTY')]);
----
GEOMETRYCOLLECTION EMPTY

-- Tip: You can use the `ST_Collect` function together with the `list()` aggregate function to collect multiple rows of geometries into a single geometry collection:

CREATE TABLE points (geom GEOMETRY);

INSERT INTO points VALUES (ST_Point(1, 2)), (ST_Point(3, 4));

SELECT ST_Collect(list(geom)) FROM points;
----
MULTIPOINT (1 2, 3 4)

ST_CollectionExtract

Signatures

GEOMETRY ST_CollectionExtract (geom GEOMETRY)
GEOMETRY ST_CollectionExtract (geom GEOMETRY, type INTEGER)

Description

从GeometryCollection中提取几何体到一个类型化的多几何体中。

如果输入的几何体是一个GeometryCollection,函数将返回一个由type参数决定的多几何体。

  • 如果 type = 1,返回一个包含集合中所有点的 MultiPoint
  • 如果 type = 2,返回一个包含集合中所有 LineString 的 MultiLineString
  • 如果 type = 3,返回一个包含集合中所有多边形的 MultiPolygon

如果没有提供type参数,函数将返回一个与包含的几何图形的最高“表面维度”相匹配的多几何图形。例如,如果集合仅包含点,则将返回多点。但如果集合同时包含点和线串,则将返回多线串。同样,如果集合包含多边形,则将返回多多边形。较低表面维度的包含几何图形将被忽略。

如果输入的几何体包含嵌套的几何集合,它们的几何体将被递归提取并包含在最终的多几何体中。

如果输入的几何体不是GeometryCollection,函数将原样返回输入的几何体。

Example

SELECT st_collectionextract('MULTIPOINT(1 2,3 4)'::GEOMETRY, 1);
-- MULTIPOINT (1 2, 3 4)

ST_Contains

Signatures

BOOLEAN ST_Contains (col0 POLYGON_2D, col1 POINT_2D)
BOOLEAN ST_Contains (col0 GEOMETRY, col1 GEOMETRY)

Description

如果geom1包含geom2,则返回true。

Example

SELECT st_contains('POLYGON((0 0, 0 1, 1 1, 1 0, 0 0))'::GEOMETRY, 'POINT(0.5 0.5)'::GEOMETRY);
----
true

ST_ContainsProperly

Signature

BOOLEAN ST_ContainsProperly (col0 GEOMETRY, col1 GEOMETRY)

Description

如果geom1“正确包含”geom2,则返回true


ST_ConvexHull

Signature

GEOMETRY ST_ConvexHull (col0 GEOMETRY)

Description

返回包含几何体的凸包


ST_CoveredBy

Signature

BOOLEAN ST_CoveredBy (col0 GEOMETRY, col1 GEOMETRY)

Description

如果 geom1 被 geom2 "覆盖",则返回 true


ST_Covers

Signature

BOOLEAN ST_Covers (col0 GEOMETRY, col1 GEOMETRY)

Description

返回 geom1 是否“覆盖” geom2


ST_Crosses

Signature

BOOLEAN ST_Crosses (col0 GEOMETRY, col1 GEOMETRY)

Description

如果geom1“跨越”geom2,则返回true


ST_DWithin

Signature

BOOLEAN ST_DWithin (col0 GEOMETRY, col1 GEOMETRY, col2 DOUBLE)

Description

返回两个几何体是否在彼此的目标距离内


ST_DWithin_Spheroid

Signature

DOUBLE ST_DWithin_Spheroid (col0 POINT_2D, col1 POINT_2D, col2 DOUBLE)

Description

返回两个POINT_2D是否在地球表面的椭球模型下的目标距离(以米为单位)内。

输入的几何体假定位于EPSG:4326坐标系(WGS84)中,具有[纬度,经度]轴顺序,并且距离以米为单位返回。此函数使用GeographicLib库来解决逆大地测量问题,使用地球的椭球模型计算两点之间的距离。这是一种高度准确的方法,用于计算考虑地球表面曲率的两个任意点之间的距离,但也是最慢的。


ST_Difference

Signature

GEOMETRY ST_Difference (col0 GEOMETRY, col1 GEOMETRY)

Description

返回两个几何图形之间的“差异”


ST_Dimension

Signature

INTEGER ST_Dimension (col0 GEOMETRY)

Description

返回几何的维度。

Example

SELECT st_dimension('POLYGON((0 0, 0 1, 1 1, 1 0, 0 0))'::GEOMETRY);
----
2

ST_Disjoint

Signature

BOOLEAN ST_Disjoint (col0 GEOMETRY, col1 GEOMETRY)

Description

返回两个几何体是否不相交


ST_Distance

Signatures

DOUBLE ST_Distance (col0 POINT_2D, col1 POINT_2D)
DOUBLE ST_Distance (col0 POINT_2D, col1 LINESTRING_2D)
DOUBLE ST_Distance (col0 LINESTRING_2D, col1 POINT_2D)
DOUBLE ST_Distance (col0 GEOMETRY, col1 GEOMETRY)

Description

返回两个几何体之间的距离。

Example

SELECT st_distance('POINT(0 0)'::GEOMETRY, 'POINT(1 1)'::GEOMETRY);
----
1.4142135623731

ST_Distance_Sphere

Signatures

DOUBLE ST_Distance_Sphere (col0 POINT_2D, col1 POINT_2D)
DOUBLE ST_Distance_Sphere (col0 GEOMETRY, col1 GEOMETRY)

Description

返回两个几何体之间的半正矢距离。

  • 仅支持POINT几何类型。
  • 返回以米为单位的距离。
  • 输入应为WGS84 (EPSG:4326)坐标,使用[纬度, 经度]轴顺序。

ST_Distance_Spheroid

Signature

DOUBLE ST_Distance_Spheroid (col0 POINT_2D, col1 POINT_2D)

Description

返回使用地球表面椭球模型计算的两个几何体之间的距离(以米为单位)

输入的几何体假定为EPSG:4326坐标系(WGS84),轴顺序为[纬度, 经度],距离限制预期以米为单位。此函数使用GeographicLib库来解决逆大地测量问题,使用地球的椭球模型计算两点之间的距离。这是一种高度精确的方法,用于计算考虑地球表面曲率的任意两点之间的距离,但也是最慢的。

Example

-- Note: the coordinates are in WGS84 and [latitude, longitude] axis order
-- Whats the distance between New York and Amsterdam (JFK and AMS airport)?
SELECT st_distance_spheroid(
st_point(40.6446, -73.7797),
st_point(52.3130, 4.7725)
);
----
5863418.7459356235
-- Roughly 5863km!

ST_Dump

Signature

STRUCT(geom GEOMETRY, path INTEGER[])[] ST_Dump (col0 GEOMETRY)

Description

将几何体转储为子几何体列表及其在原始几何体中的“路径”。

Example

SELECT st_dump('MULTIPOINT(1 2,3 4)'::GEOMETRY);
----
[{'geom': 'POINT(1 2)', 'path': [0]}, {'geom': 'POINT(3 4)', 'path': [1]}]

ST_EndPoint

Signatures

GEOMETRY ST_EndPoint (col0 GEOMETRY)
POINT_2D ST_EndPoint (col0 LINESTRING_2D)

Description

返回一条线的最后一个点。

Example

SELECT ST_EndPoint('LINESTRING(0 0, 1 1)'::GEOMETRY);
-- POINT(1 1)

ST_Envelope

Signature

GEOMETRY ST_Envelope (col0 GEOMETRY)

Description

返回输入几何体的最小边界框作为多边形几何体。


ST_Equals

Signature

BOOLEAN ST_Equals (col0 GEOMETRY, col1 GEOMETRY)

Description

比较两个几何体是否相等


ST_Extent

Signatures

BOX_2D ST_Extent (col0 GEOMETRY)
BOX_2D ST_Extent (col0 WKB_BLOB)

Description

返回包含输入几何体的最小边界框


ST_ExteriorRing

Signatures

LINESTRING_2D ST_ExteriorRing (col0 POLYGON_2D)
GEOMETRY ST_ExteriorRing (col0 GEOMETRY)

Description

返回多边形几何的外部环(外壳)。


ST_FlipCoordinates

Signatures

POINT_2D ST_FlipCoordinates (col0 POINT_2D)
LINESTRING_2D ST_FlipCoordinates (col0 LINESTRING_2D)
POLYGON_2D ST_FlipCoordinates (col0 POLYGON_2D)
BOX_2D ST_FlipCoordinates (col0 BOX_2D)
GEOMETRY ST_FlipCoordinates (col0 GEOMETRY)

Description

返回一个新的几何体,其输入几何体的坐标被“翻转”,使得x = y且y = x。


ST_Force2D

Signature

GEOMETRY ST_Force2D (col0 GEOMETRY)

Description

强制几何体的顶点具有X和Y分量

此函数将从输入几何体中删除任何Z和M值(如果存在)。如果输入几何体已经是2D的,它将按原样返回。


ST_Force3DM

Signature

GEOMETRY ST_Force3DM (col0 GEOMETRY, col1 DOUBLE)

Description

强制几何体的顶点具有X、Y和M分量

以下情况适用:

  • 如果输入几何体具有Z分量但没有M分量,Z分量将被新的M值替换。
  • 如果输入几何体具有M分量但没有Z分量,它将按原样返回。
  • 如果输入几何体同时具有Z分量和M分量,Z分量将被移除。
  • 否则,如果输入几何体既没有Z也没有M分量,新的M值将被添加到输入几何体的顶点中。

ST_Force3DZ

Signature

GEOMETRY ST_Force3DZ (col0 GEOMETRY, col1 DOUBLE)

Description

强制几何体的顶点具有X、Y和Z分量

以下情况适用:

  • 如果输入几何具有M分量但没有Z分量,M分量将被新的Z值替换。
  • 如果输入几何具有Z分量但没有M分量,它将按原样返回。
  • 如果输入几何体同时具有Z分量和M分量,M分量将被移除。
  • 否则,如果输入几何体既没有Z也没有M分量,新的Z值将被添加到输入几何体的顶点中。

ST_Force4D

Signature

GEOMETRY ST_Force4D (col0 GEOMETRY, col1 DOUBLE, col2 DOUBLE)

Description

强制几何体的顶点具有X、Y、Z和M分量

以下情况适用:

  • 如果输入几何具有Z分量但没有M分量,新的M值将被添加到输入几何的顶点中。
  • 如果输入几何具有M分量但没有Z分量,新的Z值将被添加到输入几何的顶点中。
  • 如果输入几何体同时具有Z分量和M分量,则几何体将按原样返回。
  • 否则,如果输入几何体既没有Z也没有M分量,新的Z和M值将被添加到输入几何体的顶点中。

ST_GeomFromGeoJSON

Signatures

GEOMETRY ST_GeomFromGeoJSON (col0 VARCHAR)
GEOMETRY ST_GeomFromGeoJSON (col0 JSON)

Description

从GeoJSON片段反序列化一个GEOMETRY。

Example

SELECT ST_GeomFromGeoJSON('{"type":"Point","coordinates":[1.0,2.0]}');
----
POINT (1 2)

ST_GeomFromHEXEWKB

Signature

GEOMETRY ST_GeomFromHEXEWKB (col0 VARCHAR)

Description

从HEXEWKB编码的字符串反序列化一个GEOMETRY


ST_GeomFromHEXWKB

Signature

GEOMETRY ST_GeomFromHEXWKB (col0 VARCHAR)

Description

从HEXWKB字符串创建GEOMETRY


ST_GeomFromText

Signatures

GEOMETRY ST_GeomFromText (col0 VARCHAR)
GEOMETRY ST_GeomFromText (col0 VARCHAR, col1 BOOLEAN)

Description

从WKT字符串反序列化一个GEOMETRY,可以选择忽略无效的几何体


ST_GeomFromWKB

Signatures

GEOMETRY ST_GeomFromWKB (col0 WKB_BLOB)
GEOMETRY ST_GeomFromWKB (col0 BLOB)

Description

从WKB编码的二进制大对象中反序列化一个GEOMETRY


ST_GeometryType

Signatures

ANY ST_GeometryType (col0 POINT_2D)
ANY ST_GeometryType (col0 LINESTRING_2D)
ANY ST_GeometryType (col0 POLYGON_2D)
ANY ST_GeometryType (col0 GEOMETRY)
ANY ST_GeometryType (col0 WKB_BLOB)

Description

返回一个'GEOMETRY_TYPE'枚举,用于识别输入几何类型。


ST_HasM

Signatures

BOOLEAN ST_HasM (col0 GEOMETRY)
BOOLEAN ST_HasM (col0 WKB_BLOB)

Description

检查输入几何体是否具有M值。

Example

-- HasM for a 2D geometry
SELECT ST_HasM(ST_GeomFromText('POINT(1 1)'));
----
false

-- HasM for a 3DZ geometry
SELECT ST_HasM(ST_GeomFromText('POINT Z(1 1 1)'));
----
false

-- HasM for a 3DM geometry
SELECT ST_HasM(ST_GeomFromText('POINT M(1 1 1)'));
----
true

-- HasM for a 4D geometry
SELECT ST_HasM(ST_GeomFromText('POINT ZM(1 1 1 1)'));
----
true

ST_HasZ

Signatures

BOOLEAN ST_HasZ (col0 GEOMETRY)
BOOLEAN ST_HasZ (col0 WKB_BLOB)

Description

检查输入几何体是否具有Z值。

Example

-- HasZ for a 2D geometry
SELECT ST_HasZ(ST_GeomFromText('POINT(1 1)'));
----
false

-- HasZ for a 3DZ geometry
SELECT ST_HasZ(ST_GeomFromText('POINT Z(1 1 1)'));
----
true

-- HasZ for a 3DM geometry
SELECT ST_HasZ(ST_GeomFromText('POINT M(1 1 1)'));
----
false

-- HasZ for a 4D geometry
SELECT ST_HasZ(ST_GeomFromText('POINT ZM(1 1 1 1)'));
----
true

ST_Hilbert

Signatures

UINTEGER ST_Hilbert (col0 DOUBLE, col1 DOUBLE, col2 BOX_2D)
UINTEGER ST_Hilbert (col0 GEOMETRY, col1 BOX_2D)
UINTEGER ST_Hilbert (col0 BOX_2D, col1 BOX_2D)
UINTEGER ST_Hilbert (col0 BOX_2DF, col1 BOX_2DF)
UINTEGER ST_Hilbert (col0 GEOMETRY)

Description

将X和Y值编码为覆盖给定边界框的希尔伯特曲线索引。 如果提供了几何体,则使用近似边界框的中心作为要编码的点。 如果未提供边界框,则希尔伯特曲线索引映射到单精度浮点数的整个范围。 对于BOX_2D和BOX_2DF变体,使用框的中心作为要编码的点。


ST_Intersection

Signature

GEOMETRY ST_Intersection (col0 GEOMETRY, col1 GEOMETRY)

Description

返回 geom1 和 geom2 的“交集”


ST_Intersects

Signatures

BOOLEAN ST_Intersects (col0 BOX_2D, col1 BOX_2D)
BOOLEAN ST_Intersects (col0 GEOMETRY, col1 GEOMETRY)

Description

如果两个几何图形相交,则返回true


ST_Intersects_Extent

Signature

BOOLEAN ST_Intersects_Extent (col0 GEOMETRY, col1 GEOMETRY)

Description

如果两个几何图形的范围相交,则返回 true


ST_IsClosed

Signature

BOOLEAN ST_IsClosed (col0 GEOMETRY)

Description

如果几何体是“闭合的”,则返回 true


ST_IsEmpty

Signatures

BOOLEAN ST_IsEmpty (col0 LINESTRING_2D)
BOOLEAN ST_IsEmpty (col0 POLYGON_2D)
BOOLEAN ST_IsEmpty (col0 GEOMETRY)

Description

如果几何体是“空的”,则返回 true


ST_IsRing

Signature

BOOLEAN ST_IsRing (col0 GEOMETRY)

Description

如果输入的线几何是一个环(同时满足ST_IsClosed和ST_IsSimple),则返回true。


ST_IsSimple

Signature

BOOLEAN ST_IsSimple (col0 GEOMETRY)

Description

如果输入几何是“简单”的,则返回 true


ST_IsValid

Signature

BOOLEAN ST_IsValid (col0 GEOMETRY)

Description

如果几何在拓扑上是“有效的”,则返回 true


ST_Length

Signatures

DOUBLE ST_Length (col0 LINESTRING_2D)
DOUBLE ST_Length (col0 GEOMETRY)

Description

返回输入线几何的长度


ST_Length_Spheroid

Signatures

DOUBLE ST_Length_Spheroid (col0 LINESTRING_2D)
DOUBLE ST_Length_Spheroid (col0 GEOMETRY)

Description

返回输入几何的长度(以米为单位),使用地球的椭球模型

输入的几何图形假定为EPSG:4326坐标系(WGS84),具有[纬度,经度]轴顺序,并且长度以平方米为单位返回。此函数使用GeographicLib库,使用地球的椭球模型计算长度。这是一种高度准确的方法,用于计算考虑地球曲率的线几何图形的长度,但也是最慢的。

对于任何不是LINESTRINGMULTILINESTRING或包含线几何的GEOMETRYCOLLECTION的几何体,返回0.0


ST_LineMerge

Signatures

GEOMETRY ST_LineMerge (col0 GEOMETRY)
GEOMETRY ST_LineMerge (col0 GEOMETRY, col1 BOOLEAN)

Description

“合并”输入线的几何形状,可选择考虑方向。


ST_M

Signature

DOUBLE ST_M (col0 GEOMETRY)

Description

返回点几何的M值,如果不是点或为空则返回NULL


ST_MMax

Signature

DOUBLE ST_MMax (col0 GEOMETRY)

Description

返回几何体的最大M值


ST_MMin

Signature

DOUBLE ST_MMin (col0 GEOMETRY)

Description

返回几何体的最小M值


ST_MakeEnvelope

Signature

GEOMETRY ST_MakeEnvelope (col0 DOUBLE, col1 DOUBLE, col2 DOUBLE, col3 DOUBLE)

Description

返回一个包含输入几何体的最小边界框多边形


ST_MakeLine

Signatures

GEOMETRY ST_MakeLine (col0 GEOMETRY[])
GEOMETRY ST_MakeLine (col0 GEOMETRY, col1 GEOMETRY)

Description

从一对或一组输入点创建LINESTRING几何


ST_MakePolygon

Signatures

GEOMETRY ST_MakePolygon (col0 GEOMETRY, col1 GEOMETRY[])
GEOMETRY ST_MakePolygon (col0 GEOMETRY)

Description

从外壳几何体和一组可选的孔创建一个多边形


ST_MakeValid

Signature

GEOMETRY ST_MakeValid (col0 GEOMETRY)

Description

尝试使无效的几何体有效,而不删除任何顶点


ST_Multi

Signature

GEOMETRY ST_Multi (col0 GEOMETRY)

Description

将单个几何体转换为多几何体。

如果几何已经是多几何,则按原样返回。

Example

SELECT ST_Multi(ST_GeomFromText('POINT(1 2)'));
-- MULTIPOINT (1 2)

SELECT ST_Multi(ST_GeomFromText('LINESTRING(1 1, 2 2)'));
-- MULTILINESTRING ((1 1, 2 2))

SELECT ST_Multi(ST_GeomFromText('POLYGON((0 0, 0 1, 1 1, 1 0, 0 0))'));
-- MULTIPOLYGON (((0 0, 0 1, 1 1, 1 0, 0 0)))

ST_NGeometries

Signature

INTEGER ST_NGeometries (col0 GEOMETRY)

Description

返回集合几何中的组件几何数量。 如果输入的几何不是集合,则根据几何是否为空,此函数返回0或1。


ST_NInteriorRings

Signatures

INTEGER ST_NInteriorRings (col0 POLYGON_2D)
INTEGER ST_NInteriorRings (col0 GEOMETRY)

Description

返回多边形的内环数量


ST_NPoints

Signatures

UBIGINT ST_NPoints (col0 POINT_2D)
UBIGINT ST_NPoints (col0 LINESTRING_2D)
UBIGINT ST_NPoints (col0 POLYGON_2D)
UBIGINT ST_NPoints (col0 BOX_2D)
UINTEGER ST_NPoints (col0 GEOMETRY)

Description

返回几何体内的顶点数量


ST_Normalize

Signature

GEOMETRY ST_Normalize (col0 GEOMETRY)

Description

返回输入几何体的“标准化”版本。


ST_NumGeometries

Signature

INTEGER ST_NumGeometries (col0 GEOMETRY)

Description

返回集合几何中的组件几何数量。 如果输入的几何不是集合,则根据几何是否为空,此函数返回0或1。


ST_NumInteriorRings

Signatures

INTEGER ST_NumInteriorRings (col0 POLYGON_2D)
INTEGER ST_NumInteriorRings (col0 GEOMETRY)

Description

返回多边形的内环数量


ST_NumPoints

Signatures

UBIGINT ST_NumPoints (col0 POINT_2D)
UBIGINT ST_NumPoints (col0 LINESTRING_2D)
UBIGINT ST_NumPoints (col0 POLYGON_2D)
UBIGINT ST_NumPoints (col0 BOX_2D)
UINTEGER ST_NumPoints (col0 GEOMETRY)

Description

返回几何体内的顶点数量


ST_Overlaps

Signature

BOOLEAN ST_Overlaps (col0 GEOMETRY, col1 GEOMETRY)

Description

如果geom1“重叠”geom2,则返回true


ST_Perimeter

Signatures

DOUBLE ST_Perimeter (col0 BOX_2D)
DOUBLE ST_Perimeter (col0 POLYGON_2D)
DOUBLE ST_Perimeter (col0 GEOMETRY)

Description

返回几何图形的周长长度


ST_Perimeter_Spheroid

Signatures

DOUBLE ST_Perimeter_Spheroid (col0 POLYGON_2D)
DOUBLE ST_Perimeter_Spheroid (col0 GEOMETRY)

Description

使用地球表面的椭球模型返回周长长度(以米为单位)

输入的几何体假定位于EPSG:4326坐标系(WGS84)中,具有[纬度, 经度]轴顺序,并且长度以米为单位返回。此函数使用GeographicLib库,通过地球的椭球模型计算周长。这是一种高度精确的方法,用于计算考虑地球曲率的多边形周长,但也是最慢的。

Returns 0.0 for any geometry that is not a POLYGON, MULTIPOLYGON or GEOMETRYCOLLECTION containing polygon geometries.


ST_Point

Signature

GEOMETRY ST_Point (col0 DOUBLE, col1 DOUBLE)

Description

创建一个GEOMETRY点


ST_Point2D

Signature

POINT_2D ST_Point2D (col0 DOUBLE, col1 DOUBLE)

Description

创建一个POINT_2D


ST_Point3D

Signature

POINT_3D ST_Point3D (col0 DOUBLE, col1 DOUBLE, col2 DOUBLE)

Description

创建一个POINT_3D


ST_Point4D

Signature

POINT_4D ST_Point4D (col0 DOUBLE, col1 DOUBLE, col2 DOUBLE, col3 DOUBLE)

Description

创建一个POINT_4D


ST_PointN

Signatures

GEOMETRY ST_PointN (col0 GEOMETRY, col1 INTEGER)
POINT_2D ST_PointN (col0 LINESTRING_2D, col1 INTEGER)

Description

返回输入几何中的第n个顶点作为点几何


ST_PointOnSurface

Signature

GEOMETRY ST_PointOnSurface (col0 GEOMETRY)

Description

返回一个保证位于输入几何体表面上的点。有时是ST_Centroid的有用替代方案。


ST_Points

Signature

GEOMETRY ST_Points (col0 GEOMETRY)

Description

将几何中的所有顶点收集到一个多点中

Example

SELECT st_points('LINESTRING(1 1, 2 2)'::GEOMETRY);
----
MULTIPOINT (1 1, 2 2)

SELECT st_points('MULTIPOLYGON Z EMPTY'::GEOMETRY);
----
MULTIPOINT Z EMPTY

ST_QuadKey

Signatures

VARCHAR ST_QuadKey (col0 DOUBLE, col1 DOUBLE, col2 INTEGER)
VARCHAR ST_QuadKey (col0 GEOMETRY, col1 INTEGER)

Description

计算给定经纬度点在给定级别的quadkey。 请注意,参数顺序是经度纬度

level 必须在1到23之间,包括1和23。

输入的坐标将被限制在地球的经度/纬度范围内(经度在-180到180之间,纬度在-85.05112878到85.05112878之间)。

如果输入的几何图形不是POINT,几何重载会抛出错误

Example

SELECT ST_QuadKey(st_point(11.08, 49.45), 10);
----
1333203202

ST_ReducePrecision

Signature

GEOMETRY ST_ReducePrecision (col0 GEOMETRY, col1 DOUBLE)

Description

返回所有顶点减少到目标精度的几何体


ST_RemoveRepeatedPoints

Signatures

LINESTRING_2D ST_RemoveRepeatedPoints (col0 LINESTRING_2D)
LINESTRING_2D ST_RemoveRepeatedPoints (col0 LINESTRING_2D, col1 DOUBLE)
GEOMETRY ST_RemoveRepeatedPoints (col0 GEOMETRY)
GEOMETRY ST_RemoveRepeatedPoints (col0 GEOMETRY, col1 DOUBLE)

Description

返回一个新的几何体,其中重复的点已被移除,可选择在彼此的目标距离内。


ST_Reverse

Signature

GEOMETRY ST_Reverse (col0 GEOMETRY)

Description

返回输入几何体的新版本,其顶点顺序被反转


ST_ShortestLine

Signature

GEOMETRY ST_ShortestLine (col0 GEOMETRY, col1 GEOMETRY)

Description

返回geom1和geom2之间最近两点之间的线


ST_Simplify

Signature

GEOMETRY ST_Simplify (col0 GEOMETRY, col1 DOUBLE)

Description

通过折叠小于'distance'的边来简化输入几何


ST_SimplifyPreserveTopology

Signature

GEOMETRY ST_SimplifyPreserveTopology (col0 GEOMETRY, col1 DOUBLE)

Description

返回一个简化的几何图形,但避免创建无效的拓扑结构


ST_StartPoint

Signatures

GEOMETRY ST_StartPoint (col0 GEOMETRY)
POINT_2D ST_StartPoint (col0 LINESTRING_2D)

Description

返回线几何的第一个点

Example

SELECT ST_StartPoint('LINESTRING(0 0, 1 1)'::GEOMETRY);
-- POINT(0 0)

ST_Touches

Signature

BOOLEAN ST_Touches (col0 GEOMETRY, col1 GEOMETRY)

Description

如果 geom1 "接触" geom2,则返回 true


ST_Transform

Signatures

BOX_2D ST_Transform (geom BOX_2D, source_crs VARCHAR, target_crs VARCHAR)
BOX_2D ST_Transform (geom BOX_2D, source_crs VARCHAR, target_crs VARCHAR, always_xy BOOLEAN)
POINT_2D ST_Transform (geom POINT_2D, source_crs VARCHAR, target_crs VARCHAR)
POINT_2D ST_Transform (geom POINT_2D, source_crs VARCHAR, target_crs VARCHAR, always_xy BOOLEAN)
GEOMETRY ST_Transform (geom GEOMETRY, source_crs VARCHAR, target_crs VARCHAR)
GEOMETRY ST_Transform (geom GEOMETRY, source_crs VARCHAR, target_crs VARCHAR, always_xy BOOLEAN)

Description

在两个坐标系之间转换几何体

源坐标系和目标坐标系可以使用PROJ库支持的任何格式来指定。

第三个可选的always_xy参数可用于强制将输入和输出几何体解释为具有[easting, northing]坐标轴顺序,而不管源和目标坐标系定义如何。这在转换到/从WGS84/EPSG:4326坐标系(大多数人听到“经度”/“纬度”或“GPS坐标”时想到的)时特别有用,该坐标系定义为具有[纬度, 经度]轴顺序,尽管在实践中通常使用[经度, 纬度](例如,在GeoJSON中)。更多详细信息可在PROJ文档中找到。

DuckDB 空间提供了其自己的静态副本的 PROJ 坐标系数据库,因此如果您的系统上安装了 PROJ,可用的坐标系可能与其他 GIS 软件中的可用坐标系不同。

Example

-- Transform a geometry from EPSG:4326 to EPSG:3857 (WGS84 to WebMercator)
-- Note that since WGS84 is defined as having a [latitude, longitude] axis order
-- we follow the standard and provide the input geometry using that axis order,
-- but the output will be [easting, northing] because that is what's defined by
-- WebMercator.

SELECT ST_AsText(
    ST_Transform(
        st_point(52.373123, 4.892360),
        'EPSG:4326',
        'EPSG:3857'
    )
);
----
POINT (544615.0239773799 6867874.103539125)

-- Alternatively, let's say we got our input point from e.g., a GeoJSON file,
-- which uses WGS84 but with [longitude, latitude] axis order. We can use the
-- `always_xy` parameter to force the input geometry to be interpreted as having
-- a [northing, easting] axis order instead, even though the source coordinate
-- reference system definition (WGS84) says otherwise.

SELECT ST_AsText(
    ST_Transform(
        -- note the axis order is reversed here
        st_point(4.892360, 52.373123),
        'EPSG:4326',
        'EPSG:3857',
        always_xy := true
    )
);
----
POINT (544615.0239773799 6867874.103539125)

ST_Union

Signature

GEOMETRY ST_Union (col0 GEOMETRY, col1 GEOMETRY)

Description

返回两个几何体的并集。

Example

SELECT ST_AsText(
    ST_Union(
        ST_GeomFromText('POINT(1 2)'),
        ST_GeomFromText('POINT(3 4)')
    )
);
----
MULTIPOINT (1 2, 3 4)

ST_Within

Signatures

BOOLEAN ST_Within (col0 POINT_2D, col1 POLYGON_2D)
BOOLEAN ST_Within (col0 GEOMETRY, col1 GEOMETRY)

Description

如果 geom1 在 geom2 内,则返回 true


ST_X

Signatures

DOUBLE ST_X (col0 POINT_2D)
DOUBLE ST_X (col0 GEOMETRY)

Description

返回点几何的X值,如果不是点或为空则返回NULL


ST_XMax

Signatures

DOUBLE ST_XMax (col0 BOX_2D)
FLOAT ST_XMax (col0 BOX_2DF)
DOUBLE ST_XMax (col0 POINT_2D)
DOUBLE ST_XMax (col0 LINESTRING_2D)
DOUBLE ST_XMax (col0 POLYGON_2D)
DOUBLE ST_XMax (col0 GEOMETRY)

Description

返回几何体的最大X值


ST_XMin

Signatures

DOUBLE ST_XMin (col0 BOX_2D)
FLOAT ST_XMin (col0 BOX_2DF)
DOUBLE ST_XMin (col0 POINT_2D)
DOUBLE ST_XMin (col0 LINESTRING_2D)
DOUBLE ST_XMin (col0 POLYGON_2D)
DOUBLE ST_XMin (col0 GEOMETRY)

Description

返回几何图形的最小X值


ST_Y

Signatures

DOUBLE ST_Y (col0 POINT_2D)
DOUBLE ST_Y (col0 GEOMETRY)

Description

返回点几何的Y值,如果不是点或为空则返回NULL


ST_YMax

Signatures

DOUBLE ST_YMax (col0 BOX_2D)
FLOAT ST_YMax (col0 BOX_2DF)
DOUBLE ST_YMax (col0 POINT_2D)
DOUBLE ST_YMax (col0 LINESTRING_2D)
DOUBLE ST_YMax (col0 POLYGON_2D)
DOUBLE ST_YMax (col0 GEOMETRY)

Description

返回几何图形的最大Y值


ST_YMin

Signatures

DOUBLE ST_YMin (col0 BOX_2D)
FLOAT ST_YMin (col0 BOX_2DF)
DOUBLE ST_YMin (col0 POINT_2D)
DOUBLE ST_YMin (col0 LINESTRING_2D)
DOUBLE ST_YMin (col0 POLYGON_2D)
DOUBLE ST_YMin (col0 GEOMETRY)

Description

返回几何图形的最小Y值


ST_Z

Signature

DOUBLE ST_Z (col0 GEOMETRY)

Description

返回点几何的Z值,如果不是点或为空则返回NULL


ST_ZMFlag

Signatures

UTINYINT ST_ZMFlag (col0 GEOMETRY)
UTINYINT ST_ZMFlag (col0 WKB_BLOB)

Description

返回一个标志,指示输入几何中是否存在Z和M值。 0 = 没有Z或M值 1 = 只有M值 2 = 只有Z值 3 = 有Z和M值

Example

-- ZMFlag for a 2D geometry
SELECT ST_ZMFlag(ST_GeomFromText('POINT(1 1)'));
----
0

-- ZMFlag for a 3DZ geometry
SELECT ST_ZMFlag(ST_GeomFromText('POINT Z(1 1 1)'));
----
2

-- ZMFlag for a 3DM geometry
SELECT ST_ZMFlag(ST_GeomFromText('POINT M(1 1 1)'));
----
1

-- ZMFlag for a 4D geometry
SELECT ST_ZMFlag(ST_GeomFromText('POINT ZM(1 1 1 1)'));
----
3

ST_ZMax

Signature

DOUBLE ST_ZMax (col0 GEOMETRY)

Description

返回几何体的最大Z值


ST_ZMin

Signature

DOUBLE ST_ZMin (col0 GEOMETRY)

Description

返回几何体的最小Z值


聚合函数

ST_Envelope_Agg

Signature

GEOMETRY ST_Envelope_Agg (col0 GEOMETRY)

Description

ST_Extent_Agg 的别名。

计算包含输入几何集合的最小边界框多边形。

Example

SELECT ST_Extent_Agg(geom) FROM UNNEST([ST_Point(1,1), ST_Point(5,5)]) AS _(geom);
-- POLYGON ((1 1, 1 5, 5 5, 5 1, 1 1))

ST_Extent_Agg

Signature

GEOMETRY ST_Extent_Agg (col0 GEOMETRY)

Description

计算包含输入几何集合的最小边界框多边形

Example

SELECT ST_Extent_Agg(geom) FROM UNNEST([ST_Point(1,1), ST_Point(5,5)]) AS _(geom);
-- POLYGON ((1 1, 1 5, 5 5, 5 1, 1 1))

ST_Intersection_Agg

Signature

GEOMETRY ST_Intersection_Agg (col0 GEOMETRY)

Description

计算一组几何图形的交集


ST_Union_Agg

Signature

GEOMETRY ST_Union_Agg (col0 GEOMETRY)

Description

计算一组输入几何图形的并集


Table Functions

ST_Drivers

Signature

ST_Drivers ()

Description

返回支持的GDAL驱动程序和文件格式列表

请注意,并非所有这些驱动程序都经过了适当的测试,有些可能需要传递额外的选项才能按预期工作。如果您遇到任何问题,请首先查阅GDAL文档

Example

SELECT * FROM ST_Drivers();

ST_Read

Signature

ST_Read (col0 VARCHAR, keep_wkb BOOLEAN, max_batch_size INTEGER, sequential_layer_scan BOOLEAN, layer VARCHAR, sibling_files VARCHAR[], spatial_filter WKB_BLOB, spatial_filter_box BOX_2D, allowed_drivers VARCHAR[], open_options VARCHAR[])

Description

使用GDAL库读取并导入各种地理空间文件格式。

ST_Read 表函数基于 GDAL 翻译库,能够从各种地理空间矢量文件格式中读取空间数据,就像它们是 DuckDB 表一样。

请参阅ST_Drivers以获取支持的文件格式和驱动程序的列表。

除了path参数外,所有参数都是可选的。

参数 类型 描述
path VARCHAR 要读取的文件的路径。必填
sequential_layer_scan BOOLEAN 如果设置为true,表函数将顺序扫描所有层,并返回与给定层名称匹配的第一个层。这对于某些驱动程序正常工作是必需的,例如OSM驱动程序。
spatial_filter WKB_BLOB 如果设置为WKB blob,表函数将仅返回与给定WKB几何体相交的行。某些驱动程序可能原生支持高效的空间过滤,在这种情况下,过滤将被下推。否则,过滤将由GDAL完成,这可能会慢得多。
open_options VARCHAR[] 传递给GDAL驱动程序的键值对列表,用于控制文件的打开。例如,GeoJSON驱动程序支持FLATTEN_NESTED_ATTRIBUTES=YES选项来展平嵌套属性。
layer VARCHAR 要从文件中读取的图层的名称。如果为NULL,则返回第一个图层。也可以是图层索引(从0开始)。
allowed_drivers VARCHAR[] 允许用于打开文件的GDAL驱动程序名称列表。如果为空,则允许所有驱动程序。
sibling_files VARCHAR[] 打开文件所需的兄弟文件列表。例如,ESRI Shapefile 驱动程序需要存在 .shx 文件。尽管大多数情况下这些可以自动发现。
spatial_filter_box BOX_2D 如果设置为BOX_2D,表函数将仅返回与给定边界框相交的行。类似于spatial_filter。
keep_wkb BOOLEAN 如果设置,表函数将返回一个类型为WKB_BLOB(可以转换为BLOB)的wkb_geometry列中的几何体,而不是GEOMETRY类型。这在你想使用DuckDB与DuckDB空间尚不支持在GEOMETRY类型中表示的更奇特的几何子类型时非常有用。

请注意,GDAL是单线程的,因此此表函数将无法充分利用并行性。

通过使用ST_Read,空间扩展还提供了常见地理空间文件格式的“替换扫描”,允许您像直接查询表一样查询这些格式的文件。

SELECT * FROM './path/to/some/shapefile/dataset.shp';

实际上,这只是调用ST_Read的语法糖,因此在性能上没有区别。如果你想传递额外的选项,你应该直接使用ST_Read表函数。

以下格式目前通过其文件扩展名被识别:

格式 扩展名
ESRI ShapeFile .shp
GeoPackage .gpkg
FlatGeoBuf .fgb

Example

-- Read a Shapefile
SELECT * FROM ST_Read('some/file/path/filename.shp');

-- Read a GeoJSON file
CREATE TABLE my_geojson_table AS SELECT * FROM ST_Read('some/file/path/filename.json');

ST_ReadOSM

Signature

ST_ReadOSM (col0 VARCHAR)

Description

ST_ReadOsm() 表函数可以直接从 .osm.pbf 文件中读取压缩的 OpenStreetMap 数据。

此函数使用多线程和零拷贝的protobuf解析,这使得它比使用ST_Read() OSM驱动快得多,然而它只输出原始的OSM数据(节点、路径、关系),而不构建任何几何图形。对于简单的节点实体(如兴趣点),你可以轻松地构建点几何图形,但也可以通过手动在SQL中连接引用和节点来构建线串和多边形几何图形,尽管可用内存通常是一个限制因素。 ST_ReadOSM()函数还提供了一个“替换扫描”功能,使得可以直接从文件中读取数据,就像它是一个表一样。这实际上只是调用ST_ReadOSM()的语法糖。示例:

SELECT * FROM 'tmp/data/germany.osm.pbf' LIMIT 5;

Example

SELECT *
FROM ST_ReadOSM('tmp/data/germany.osm.pbf')
WHERE tags['highway'] != []
LIMIT 5;
----
┌──────────────────────┬────────┬──────────────────────┬─────────┬────────────────────┬────────────┬───────────┬────────────────────────┐
         kind            id            tags           refs           lat             lon      ref_roles        ref_types        
 enum('node', 'way'   int64   map(varchar, varch   int64[]        double          double    varchar[]  enum('node', 'way',   
├──────────────────────┼────────┼──────────────────────┼─────────┼────────────────────┼────────────┼───────────┼────────────────────────┤
 node                  122351  {bicycle=yes, butt                    53.5492951    9.977553                                    
 node                  122397  {crossing=no, high            53.520990100000006  10.0156924                                    
 node                  122493  {TMC:cid_58:tabcd_            53.129614600000004   8.1970173                                    
 node                  123566  {highway=traffic_s            54.617268200000005   8.9718171                                    
 node                  125801  {TMC:cid_58:tabcd_            53.070685000000005   8.7819939                                    
└──────────────────────┴────────┴──────────────────────┴─────────┴────────────────────┴────────────┴───────────┴────────────────────────┘

ST_Read_Meta

Signature

ST_Read_Meta (col0 VARCHAR)
ST_Read_Meta (col0 VARCHAR[])

Description

使用GDAL库从各种地理空间文件格式中读取元数据。

ST_Read_Meta 表函数与 ST_Read 表函数一起使用,但它不是读取文件的内容,而是扫描元数据。 由于底层 GDAL 库的数据模型非常灵活,大多数有趣的元数据都在返回的 layers 列中,这是一个稍微复杂的 DuckDB STRUCTLIST 类型的嵌套结构。

Example

-- Find the coordinate reference system authority name and code for the first layers first geometry column in the file
SELECT
    layers[1].geometry_fields[1].crs.auth_name as name,
    layers[1].geometry_fields[1].crs.auth_code as code
FROM st_read_meta('../../tmp/data/amsterdam_roads.fgb');