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

MariaDB ST_PointOnSurface() 函数用来从一个多边形或多重几何对象中返回一个点坐标,该点位于给定对象的面上。

发布于

MariaDB ST_PointOnSurface() 函数用来从一个多边形或多重几何对象中返回一个点坐标,该点位于给定对象的面上。它常用于需要从复杂几何形状中获取一个代表性点的场景。

语法

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

ST_PointOnSurface(polygon)
  • polygon:一个 POLYGONMULTIPOLYGON 类型的几何值。

该函数返回一个 POINT 类型的几何值,表示给定多边形或多重多边形上的一个点。如果输入参数为空或不是有效的多边形,则返回 NULL

实例

从多边形中获取一个点

此实例将展示如何从一个多边形中获取一个点。

SET @poly = ST_GeomFromText('POLYGON((0 0, 10 0, 10 10, 0 10, 0 0))');
SELECT ST_AsText(ST_PointOnSurface(@poly));

以下是该语句的输出:

+-------------------------------------+
| ST_AsText(ST_PointOnSurface(@poly)) |
+-------------------------------------+
| POINT(5 5)                          |
+-------------------------------------+

从多重多边形中获取一个点

此实例将展示如何从一个多重多边形中获取一个点。

SET @mpoly = ST_GeomFromText('MULTIPOLYGON(((0 0, 10 0, 10 10, 0 10, 0 0)), ((20 20, 30 20, 30 30, 20 30, 20 20)))');
SELECT ST_AsText(ST_PointOnSurface(@mpoly));

以下是该语句的输出:

+--------------------------------------+
| ST_AsText(ST_PointOnSurface(@mpoly)) |
+--------------------------------------+
| POINT(5 5)                           |
+--------------------------------------+

处理空或无效输入

此实例将展示当输入为空或无效时,函数的返回结果。

SELECT ST_PointOnSurface(NULL) null_value,
ST_PointOnSurface(ST_GeomFromText('LINESTRING(0 0, 1 1)')) ls;

以下是该语句的输出:

+------------+------+
| null_value | ls   |
+------------+------+
| 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('POLYGON((0 0, 10 0, 10 10, 0 10, 0 0))')),
  (2, ST_GeomFromText('MULTIPOLYGON(((0 0, 10 0, 10 10, 0 10, 0 0)), ((20 20, 30 20, 30 30, 20 30, 20 20)))'));
SELECT id, ST_AsText(ST_PointOnSurface(geom)) FROM geom_table;

以下是该语句的输出:

+----+------------------------------------+
| id | ST_AsText(ST_PointOnSurface(geom)) |
+----+------------------------------------+
|  1 | POINT(5 5)                         |
|  2 | POINT(5 5)                         |
+----+------------------------------------+

结合其他函数使用

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

SET @poly = ST_GeomFromText('POLYGON((0 0, 10 0, 10 10, 0 10, 0 0))');
SELECT ST_AsText(@poly) poly,
       ST_AsText(ST_PointOnSurface(@poly)) p,
       ST_Area(@poly) area,
       ST_AsText(ST_Centroid(@poly)) centroid;

以下是该语句的输出:

+------------------------------------+------------+------+------------+
| poly                               | p          | area | centroid   |
+------------------------------------+------------+------+------------+
| POLYGON((0 0,10 0,10 10,0 10,0 0)) | POINT(5 5) |  100 | POINT(5 5) |
+------------------------------------+------------+------+------------+

相关函数

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

  • MariaDB ST_Centroid() 函数用来返回一个几何对象的质心。
  • MariaDB ST_PointFromWKB() 函数用来从 Well-Known Binary (WKB) 值构造一个点对象。
  • MariaDB ST_PointFromText() 函数用来从 Well-Known Text (WKT) 值构造一个点对象。
  • MariaDB ST_Area() 函数用来计算一个多边形的面积。

结论

MariaDB ST_PointOnSurface() 函数是一个非常实用的函数,可以从复杂的几何形状中获取一个代表性的点。通过结合其他几何函数,您可以对该点执行各种空间分析和处理操作。无论是在地理信息系统 (GIS) 应用中还是处理空间数据时,ST_PointOnSurface() 函数都可以发挥重要作用。