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

MariaDB ST_NumInteriorRings() 函数用来获取一个多边形内环的个数。

发布于

MariaDB ST_NumInteriorRings() 函数用来获取一个多边形内环的个数。在处理复杂的地理空间数据时,这个函数能够提供很有帮助的信息。

语法

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

ST_NumInteriorRings(poly)
  • poly:一个 POLYGON 值。

该函数返回一个整数,表示给定多边形内环的个数。如果输入的不是多边形,则返回 NULL。

实例

获取简单多边形的内环个数

本实例将展示如何获取一个简单多边形的内环个数。

SET @g1 = ST_GeomFromText('POLYGON((0 0,1 1,1 0,0 0))');
SET @g2 = ST_GeomFromText('POLYGON((0 0,3 0,3 3,0 3,0 0),(1 1,2 1,2 2,1 2,1 1))');
SELECT ST_NumInteriorRings(@g1), ST_NumInteriorRings(@g2);

以下是该语句的输出:

+--------------------------+--------------------------+
| ST_NumInteriorRings(@g1) | ST_NumInteriorRings(@g2) |
+--------------------------+--------------------------+
|                        0 |                        1 |
+--------------------------+--------------------------+

第一个多边形没有内环,因此返回 0;第二个多边形有一个内环,因此返回 1。

获取多环多边形的内环个数

本实例将展示获取多环多边形内环个数的情况。

SET @poly = ST_GeomFromText('POLYGON((0 0,10 0,10 10,0 10,0 0),(4 4,4 8,8 8,8 4,4 4),(6 6,6 7,7 7,7 6,6 6))');
SELECT ST_NumInteriorRings(@poly);

以下是该语句的输出:

+----------------------------+
| ST_NumInteriorRings(@poly) |
+----------------------------+
|                          2 |
+----------------------------+

对于有多个内环的多边形,函数返回内环的总数。

输入非多边形的情况

本实例将展示输入非多边形时的情况。

SELECT ST_NumInteriorRings(ST_GeomFromText('POINT(0 0)'));

以下是该语句的输出:

+----------------------------------------------------+
| ST_NumInteriorRings(ST_GeomFromText('POINT(0 0)')) |
+----------------------------------------------------+
|                                               NULL |
+----------------------------------------------------+

当输入的不是多边形时,函数返回 NULL。

结合其他函数使用

本实例将展示如何结合其他函数使用 ST_NumInteriorRings()

SELECT ST_NumInteriorRings(ST_ExteriorRing(ST_GeomFromText('POLYGON((0 0,3 0,3 3,0 3,0 0),(1 1,2 1,2 2,1 2,1 1))'))) result;

以下是该语句的输出:

+--------+
| result |
+--------+
|   NULL |
+--------+

通过结合 ST_ExteriorRing(),可以获取多边形的外环,外环本身没有内环,因此结果为 NULL。

使用空间索引

本实例将展示在使用空间索引时的情况。

DROP TABLE IF EXISTS poly_table;
CREATE TABLE poly_table (id INT PRIMARY KEY, p POLYGON NOT NULL, SPATIAL INDEX(p));
INSERT INTO poly_table (id, p) VALUES
    (1, ST_GeomFromText('POLYGON((0 0,1 1,1 0,0 0))')),
    (2, ST_GeomFromText('POLYGON((0 0,3 0,3 3,0 3,0 0),(1 1,2 1,2 2,1 2,1 1))')),
    (3, ST_GeomFromText('POLYGON((0 0,10 0,10 10,0 10,0 0),(4 4,4 8,8 8,8 4,4 4),(6 6,6 7,7 7,7 6,6 6))'));

SELECT id, ST_NumInteriorRings(p) FROM poly_table;

以下是该语句的输出:

+----+------------------------+
| id | ST_NumInteriorRings(p) |
+----+------------------------+
|  1 |                      0 |
|  2 |                      1 |
|  3 |                      2 |
+----+------------------------+

通过在表上建立空间索引,可以加速空间操作的执行速度。

相关函数

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

  • MariaDB ST_NumGeometries() 函数用来获取一个几何体集合中包含的几何体个数。
  • MariaDB ST_NumPoints() 函数用来获取一个线串或多边形中的点的个数。
  • MariaDB ST_InteriorRingN() 函数用来获取一个多边形的指定索引的内环。

结论

ST_NumInteriorRings() 是 MariaDB 中处理多边形时一个非常有用的函数。通过本文的介绍和实例,相信您已经对它的用法有了较为全面的了解。在处理复杂的空间数据时,掌握这些空间函数将会给您带来很大的帮助。