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

MariaDB ST_PointN() 函数用来从一个线串中返回指定索引位置的点对象。

发布于

MariaDB ST_PointN() 函数用来从一个线串中返回指定索引位置的点对象。它常用于提取构成线串的单个点,以便进行进一步的空间分析和处理。

语法

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

ST_PointN(ln, index)
  • ln:一个 LINESTRING 的几何对象。
  • index:一个从 1 开始的正整数,表示要返回的点的索引位置。如果索引超出范围,则返回 NULL

该函数返回一个 POINT 类型的几何对象,表示给定线串中指定索引位置的点。

实例

从线串中指定的点

此实例将展示如何从一个线串中获取指定的点。

SET @ls = ST_GeomFromText('LINESTRING(1 1, 2 2, 3 3)');
SELECT ST_AsText(ST_PointN(@ls, 1)) AS p1,
       ST_AsText(ST_PointN(@ls, 2)) AS p2,
       ST_AsText(ST_PointN(@ls, 3)) AS p3;

以下是该语句的输出:

+------------+------------+------------+
| p1         | p2         | p3         |
+------------+------------+------------+
| POINT(1 1) | POINT(2 2) | POINT(3 3) |
+------------+------------+------------+

获取不存在的点索引

此实例将展示当请求一个不存在的点索引时,函数的返回结果。

SET @ls = ST_GeomFromText('LINESTRING(1 1, 2 2, 3 3)');
SELECT ST_PointN(@ls, 0), ST_PointN(@ls, 4);

以下是该语句的输出:

+-------------------+-------------------+
| ST_PointN(@ls, 0) | ST_PointN(@ls, 4) |
+-------------------+-------------------+
| NULL              | NULL              |
+-------------------+-------------------+

从表中获取点

此实例将展示如何从一个表中获取线串的点。

DROP TABLE IF EXISTS geom_table;
CREATE TABLE geom_table (id INT PRIMARY KEY, geom GEOMETRY NOT NULL);
INSERT INTO geom_table VALUES
  (1, ST_GeomFromText('LINESTRING(1 1, 2 2, 3 3)')),
  (2, ST_GeomFromText('POLYGON((0 0, 10 0, 10 10, 0 10, 0 0))'));
SELECT id, ST_AsText(ST_PointN(geom, 1)), ST_AsText(ST_PointN(geom, ST_NumPoints(geom)))
FROM geom_table;

以下是该语句的输出:

+----+-------------------------------+------------------------------------------------+
| id | ST_AsText(ST_PointN(geom, 1)) | ST_AsText(ST_PointN(geom, ST_NumPoints(geom))) |
+----+-------------------------------+------------------------------------------------+
|  1 | POINT(1 1)                    | POINT(3 3)                                     |
|  2 | NULL                          | NULL                                           |
+----+-------------------------------+------------------------------------------------+

由于第二行的数据不是 LINESTRING,因此此函数返回 NULL。

结合其他函数使用

此实例将展示如何将 ST_PointN() 与其他函数结合使用。

SET @ls = ST_GeomFromText('LINESTRING(1 1, 2 2, 3 3, 4 4)');
SELECT ST_AsText(@ls) ls,
       ST_AsText(ST_PointN(@ls, 2)) point2,
       ST_AsText(ST_StartPoint(@ls)) start_point,
       ST_AsText(ST_EndPoint(@ls)) end_point;

以下是该语句的输出:

+-----------------------------+------------+-------------+------------+
| ls                          | point2     | start_point | end_point  |
+-----------------------------+------------+-------------+------------+
| LINESTRING(1 1,2 2,3 3,4 4) | POINT(2 2) | POINT(1 1)  | POINT(4 4) |
+-----------------------------+------------+-------------+------------+

相关函数

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

  • MariaDB ST_NumPoints() 函数用来返回一个线串中点的个数。
  • MariaDB ST_StartPoint() 函数用来返回一个线串的起点。
  • MariaDB ST_EndPoint() 函数用来返回一个线串的终点。
  • MariaDB ST_PointFromWKB() 函数用来从 Well-Known Binary (WKB) 值构造一个点对象。
  • MariaDB ST_PointFromText() 函数用来从 Well-Known Text (WKT) 值构造一个点对象。

结论

MariaDB ST_PointN() 函数是一个非常实用的函数,可以从线串中提取出单个点。通过结合其他几何函数,您可以对点执行各种空间分析和处理操作。无论是在地理信息系统 (GIS) 应用中还是处理空间数据时,ST_PointN() 函数都可以发挥重要作用。