ST_NUMPOINTS
描述
返回几何对象中的顶点(点)总数。不同几何类型的计数规则如下:Point 返回 1,LineString 返回顶点数,Polygon 返回所有环上的顶点总数(包含闭合点),MultiPolygon 返回所有子多边形点数之和。
备注
Since 4.1.2
语法
ST_NUMPOINTS( <shape> )
参数
| 参数 | 描述 |
|---|---|
<shape> | 输入几何,类型为 GEOMETRY 或 VARCHAR(WKT 格式),且可转换为 GEOMETRY。 |
返回值
返回一个 BIGINT 值,表示几何对象中的点总数。
ST_NUMPOINTS 具有如下边界情况:
- 如果输入参数为
NULL,返回NULL。 - 如果输入参数无法解析为有效几何对象,返回
NULL。 - 对于
POINT,返回1。 - 对于
LINESTRING,返回线上的顶点数。 - 对于
POLYGON,返回所有环(外环 + 内环)的顶点总数。每个环都包含闭合点。 - 对于
MULTIPOLYGON,返回所有子多边形点数之和。 - 对于
CIRCLE,返回-1(圆没有离散顶点)。
示例
Point 中的点数
SELECT ST_NUMPOINTS(ST_Point(1, 2));
+------------------------------+
| ST_NUMPOINTS(ST_Point(1, 2)) |
+------------------------------+
| 1 |
+------------------------------+
LineString 中的点数
SELECT ST_NUMPOINTS(ST_GeometryFromText('LINESTRING(0 0, 1 1, 2 2)'));
+-------------------------------------------------------------------+
| ST_NUMPOINTS(ST_GeometryFromText('LINESTRING(0 0, 1 1, 2 2)')) |
+-------------------------------------------------------------------+
| 3 |
+-------------------------------------------------------------------+
方形 Polygon 中的点数
SELECT ST_NUMPOINTS(ST_GeometryFromText('POLYGON((0 0, 1 0, 1 1, 0 1, 0 0))'));
+----------------------------------------------------------------------------+
| ST_NUMPOINTS(ST_GeometryFromText('POLYGON((0 0, 1 0, 1 1, 0 1, 0 0))')) |
+----------------------------------------------------------------------------+
| 5 |
+----------------------------------------------------------------------------+
带洞 Polygon 中的点数
SELECT ST_NUMPOINTS(ST_GeometryFromText('POLYGON((0 0, 10 0, 10 10, 0 10, 0 0),(1 1, 2 1, 2 2, 1 2, 1 1))'));
+-----------------------------------------------------------------------------------------------------------+
| ST_NUMPOINTS(ST_GeometryFromText('POLYGON((0 0, 10 0, 10 10, 0 10, 0 0),(1 1, 2 1, 2 2, 1 2, 1 1))')) |
+-----------------------------------------------------------------------------------------------------------+
| 10 |
+-----------------------------------------------------------------------------------------------------------+
MultiPolygon 中的点数
SELECT ST_NUMPOINTS(ST_GeometryFromText('MULTIPOLYGON(((0 0, 1 0, 1 1, 0 1, 0 0)),((2 2, 3 2, 3 3, 2 3, 2 2)))'));
+--------------------------------------------------------------------------------------------------------------+
| ST_NUMPOINTS(ST_GeometryFromText('MULTIPOLYGON(((0 0, 1 0, 1 1, 0 1, 0 0)),((2 2, 3 2, 3 3, 2 3, 2 2)))')) |
+--------------------------------------------------------------------------------------------------------------+
| 10 |
+--------------------------------------------------------------------------------------------------------------+
Circle 中的点数(返回 -1)
SELECT ST_NUMPOINTS(ST_Circle(0, 0, 100));
+--------------------------------------+
| ST_NUMPOINTS(ST_Circle(0, 0, 100)) |
+--------------------------------------+
| -1 |
+--------------------------------------+
NULL 参数
SELECT ST_NUMPOINTS(NULL);
+---------------------+
| ST_NUMPOINTS(NULL) |
+---------------------+
| NULL |
+---------------------+
非法参数(返回 NULL)
SELECT ST_NUMPOINTS(ST_GeometryFromText('INVALID'));
+------------------------------------------------+
| ST_NUMPOINTS(ST_GeometryFromText('INVALID')) |
+------------------------------------------------+
| NULL |
+------------------------------------------------+