MariaDB ST_GEOMETRYN() 函数的基础用法与实例

MariaDB ST_GeometryN() 函数用来从一个几何集合对象中提取指定序号的几何对象。

发布于

MariaDB ST_GeometryN() 函数用来从一个几何集合对象中提取指定序号的几何对象。它常用于处理复合几何数据。

语法

MairaDB ST_GeometryN() 函数的语法如下:

ST_GeometryN(geom, n)
  • geom:一个几何集合对象。
  • n:一个从 1 开始的整数,表示要提取的几何对象的序号。

该函数返回指定序号的几何对象。如果输入的geom不是一个几何集合对象,或者n超出了几何对象的范围,则返回 NULL。

实例

从几何集合中提取指定序号的几何对象

本实例将展示如何从一个几何集合中提取指定序号的几何对象。

SET @g = ST_GeomFromText('GEOMETRYCOLLECTION(POINT(0 0), LINESTRING(0 0,1 1,2 2))');

SELECT ST_AsText(ST_GeometryN(@g, 1)), ST_AsText(ST_GeometryN(@g, 2));

以下是该语句的输出:

+--------------------------------+--------------------------------+
| ST_AsText(ST_GeometryN(@g, 1)) | ST_AsText(ST_GeometryN(@g, 2)) |
+--------------------------------+--------------------------------+
| POINT(0 0)                     | LINESTRING(0 0,1 1,2 2)        |
+--------------------------------+--------------------------------+

从输出可以看到,ST_GeometryN()函数成功地从几何集合中提取了指定序号的几何对象。

当输入不是几何集合时

本实例将展示当输入的不是一个几何集合时,ST_GeometryN()函数的行为。

SET @g = ST_GeomFromText('LINESTRING(0 0,1 1,2 2)');

SELECT ST_AsText(ST_GeometryN(@g, 1));

以下是该语句的输出:

+--------------------------------+
| ST_AsText(ST_GeometryN(@g, 1)) |
+--------------------------------+
| NULL                           |
+--------------------------------+

由于输入的不是一个几何集合,因此函数返回了 NULL。

从表中查询几何集合并提取指定序号的几何对象

本实例将展示如何从表中查询几何集合,并提取指定序号的几何对象。

DROP TABLE IF EXISTS geometries;
CREATE TABLE geometries (
  gid INT AUTO_INCREMENT KEY,
  geom GEOMETRYCOLLECTION
);

INSERT INTO geometries (geom) VALUES
  (ST_GeomFromText('GEOMETRYCOLLECTION(POINT(0 0), LINESTRING(0 0,1 1,2 2))')),
  (ST_GeomFromText('GEOMETRYCOLLECTION(POLYGON((0 0,10 0,10 10,0 10,0 0)), LINESTRING(5 5,7 7))'));

SELECT
  ST_AsText(ST_GeometryN(geom, 1)) AS geom1,
  ST_AsText(ST_GeometryN(geom, 2)) AS geom2
FROM geometries;

以下是该语句的输出:

+------------------------------------+-------------------------+
| geom1                              | geom2                   |
+------------------------------------+-------------------------+
| POINT(0 0)                         | LINESTRING(0 0,1 1,2 2) |
| POLYGON((0 0,10 0,10 10,0 10,0 0)) | LINESTRING(5 5,7 7)     |
+------------------------------------+-------------------------+

在这个示例中,我们首先创建了一个表来存储几何集合数据,然后从表中查询出这些数据,并提取了每个几何集合中的第一个和第二个几何对象。

计算几何集合中各个几何对象的长度或面积

本实例将展示如何计算一个几何集合中各个几何对象的长度或面积。

DROP TABLE IF EXISTS geometries;
CREATE TABLE geometries (
  gid INT AUTO_INCREMENT KEY,
  geom GEOMETRYCOLLECTION
);

INSERT INTO geometries (geom) VALUES
  (ST_GeomFromText('GEOMETRYCOLLECTION(POINT(0 0), LINESTRING(0 0,1 1,2 2), POLYGON((0 0,10 0,10 10,0 10,0 0)))'));

SELECT
  ST_AsText(ST_GeometryN(geom, 1)) AS geom1,
  ST_Length(ST_GeometryN(geom, 2)) AS length2,
  ST_Area(ST_GeometryN(geom, 3)) AS area3
FROM geometries;

以下是该语句的输出:

+------------+--------------------+-------+
| geom1      | length2            | area3 |
+------------+--------------------+-------+
| POINT(0 0) | 2.8284271247461903 |   100 |
+------------+--------------------+-------+

在这个示例中,我们首先从几何集合中提取每个几何对象,然后分别计算它们的长度或面积。

使用超出范围的序号

本实例将展示当使用超出范围的序号时,ST_GeometryN()函数的行为。

SET @g = ST_GeomFromText('GEOMETRYCOLLECTION(POINT(0 0), LINESTRING(0 0,1 1,2 2))');

SELECT ST_AsText(ST_GeometryN(@g, 3));

以下是该语句的输出:

+--------------------------------+
| ST_AsText(ST_GeometryN(@g, 3)) |
+--------------------------------+
| NULL                           |
+--------------------------------+

由于提供的序号超出了几何集合中几何对象的范围,因此函数返回了 NULL。

相关函数

以下是几个与 MairaDB ST_GeometryN() 相关的几个函数:

  • MariaDB ST_NumGeometries() 函数用来计算一个几何集合中包含的几何对象数量。
  • MariaDB ST_GeometryType() 函数用来获取一个几何对象的类型。
  • MariaDB ST_Dimension() 函数用来获取一个几何对象的维度。
  • MariaDB ST_SRID() 函数用来获取一个几何对象的空间参考系统标识符(SRID)。

结论

本文介绍了 MariaDB ST_GeometryN() 函数的用法以及一些实例。通过这些实例,我们学习了如何从几何集合中提取指定序号的几何对象,如何处理输入不是几何集合的情况,如何从表中查询几何集合并提取指定序号的几何对象,如何计算几何集合中各个几何对象的长度或面积,以及当使用超出范围的序号时函数的行为。