12.16.7.4 多边形和多重多边形属性函数
本节中的函数返回 Polygon 或 MultiPolygon 属性值。
除非另有说明,本节中的函数按如下方式处理其几何参数:
如果任何参数是 NULL 或任何几何参数是空几何,则返回值为 NULL。
如果任何几何参数不符合正确的几何语法格式,则会发生错误 ER_GIS_INVALID_DATA。
如果任何几何参数在未定义的空间参考系统 (SRS) 中的几何语法格式,则会发生错误 ER_SRS_NOT_FOUND。
对于采用多个几何参数的函数,如果这些参数不在同一个 SRS 中,则会发生错误 ER_GIS_DIFFERENT_SRIDS。
否则,返回值为 non-NULL。
这些函数可用于获取多边形属性:
ST_Area({poly|mpoly})
返回一个双精度数字,指示 Polygon 或 MultiPolygon 参数在其空间参考系统中测量的面积。
从 MySQL 8.0.13 开始,ST_Area() 按照本节简介中所述处理其参数,但有以下例外:
如果几何图形在几何上无效,则结果要么是未定义的区域(即可以是任意数字),要么会发生错误。
如果几何图形有效但不是 Polygon 或 MultiPolygon 对象,则会发生错误 ER_UNEXPECTED_GEOMETRY_TYPE。
如果几何图形在笛卡尔坐标系中有效的 Polygon,则结果是这个多边形的笛卡尔面积。
如果几何图形在笛卡尔坐标系中有效的 MultiPolygon,则结果是这些多边形的笛卡尔面积之和。
如果几何图形在地理坐标系中有效的 Polygon,则结果是该坐标系中多边形的大地测量面积(以平方米为单位)。
如果几何在地理坐标系中有效的 MultiPolygon,则结果是该坐标系中多边形的大地面积总和(以平方米为单位)。
如果面积计算结果为 +inf,则会发生错误 ER_DATA_OUT_OF_RANGE。
如果几何图形的地理坐标系的经度或纬度超出范围,则会出现错误:
如果经度值不在范围 (−180, 180] 内,则会发生错误 ER_GEOMETRY_PARAM_LONGITUDE_OUT_OF_RANGE(在 MySQL 8.0.12 之前是 ER_LONGITUDE_OUT_OF_RANGE)。
如果纬度值不在 [−90, 90] 范围内,则会发生错误 ER_GEOMETRY_PARAM_LATITUDE_OUT_OF_RANGE (在 MySQL 8.0.12 之前是 ER_LATITUDE_OUT_OF_RANGE )。
显示的范围以度为单位。由于浮点运算,精确范围限制略有偏差。
在 MySQL 8.0.13 之前, ST_Area()按照本节介绍中所述处理其参数,但有以下例外:对于维度为 0 或 1 的参数,结果为 0。
如果几何图形为空,则返回值为 0 而不是NULL。
对于几何集合,结果是所有组件的面积值之和。如果几何集合为空,则其面积返回为 0。
如果几何图形具有地理空间参考系统 (SRS) 的 SRID 值,则会发生错误 ER_NOT_IMPLEMENTED_FOR_GEOGRAPHIC_SRS。
mysql> SET @poly =
'Polygon((0 0,0 3,3 0,0 0),(1 1,1 2,2 1,1 1))';
mysql> SELECT ST_Area(ST_GeomFromText(@poly));
+---------------------------------+
| ST_Area(ST_GeomFromText(@poly)) |
+---------------------------------+
| 4 |
+---------------------------------+
mysql> SET @mpoly =
'MultiPolygon(((0 0,0 3,3 3,3 0,0 0),(1 1,1 2,2 2,2 1,1 1)))';mysql> SELECT ST_Area(ST_GeomFromText(@mpoly));
+----------------------------------+
| ST_Area(ST_GeomFromText(@mpoly)) |
+----------------------------------+
| 8 |
+----------------------------------+
ST_Centroid({poly|mpoly})
使用一个 Point 返回 Polygon 和 MultiPolygon 参数的数学质心。MultiPolygon 的结果一定会出现在其上面.
该函数通过计算集合中最高维度组件的质心点来处理几何集合。这些分量被提取并制成单个MultiPolygon、 MultiLineString、 或 MultiPoint 用于质心计算。
ST_Centroid()按照本节简介中的描述处理其参数,但有以下例外:
返回值 NULL 适用于参数是空几何集合的附加条件。
如果几何图形具有地理空间参考系统 (SRS) 的 SRID 值,则会发生错误 ER_NOT_IMPLEMENTED_FOR_GEOGRAPHIC_SRS。
mysql> SET @poly =
ST_GeomFromText('POLYGON((0 0,10 0,10 10,0 10,0 0),(5 5,7 5,7 7,5 7,5 5))');
mysql> SELECT ST_GeometryType(@poly),ST_AsText(ST_Centroid(@poly));
+------------------------+--------------------------------------------+
| ST_GeometryType(@poly) | ST_AsText(ST_Centroid(@poly)) |
+------------------------+--------------------------------------------+
| POLYGON | POINT(4.958333333333333 4.958333333333333) |
+------------------------+--------------------------------------------+
ST_ExteriorRing(poly)
使用 LineString 格式 返回 poly 参数的外环。
ST_ExteriorRing() 按照本节简介中的描述处理其参数。
mysql> SET @poly =
'Polygon((0 0,0 3,3 3,3 0,0 0),(1 1,1 2,2 2,2 1,1 1))';
mysql> SELECT ST_AsText(ST_ExteriorRing(ST_GeomFromText(@poly)));
+----------------------------------------------------+
| ST_AsText(ST_ExteriorRing(ST_GeomFromText(@poly))) |
+----------------------------------------------------+
| LINESTRING(0 0,0 3,3 3,3 0,0 0) |
+----------------------------------------------------+
ST_InteriorRingN(poly, N)
返回值为 LineString 是以 Polygon 类型的 poly 参数的第 N 个内环。环的编号从 1 开始。
ST_InteriorRingN() 按照本节简介中的描述处理其参数。
mysql> SET @poly =
'Polygon((0 0,0 3,3 3,3 0,0 0),(1 1,1 2,2 2,2 1,1 1))';
mysql> SELECT ST_AsText(ST_InteriorRingN(ST_GeomFromText(@poly),1));
+-------------------------------------------------------+
| ST_AsText(ST_InteriorRingN(ST_GeomFromText(@poly),1)) |
+-------------------------------------------------------+
| LINESTRING(1 1,1 2,2 2,2 1,1 1) |
+-------------------------------------------------------+
ST_NumInteriorRing(poly), ST_NumInteriorRings(poly)
返回 Polygon 类型参数 poly 的内环数量。
ST_NumInteriorRing() 与 ST_NuminteriorRings() 按照本节简介中的描述处理他们的论点。
mysql> SET @poly =
'Polygon((0 0,0 3,3 3,3 0,0 0),(1 1,1 2,2 2,2 1,1 1))';
mysql> SELECT ST_NumInteriorRings(ST_GeomFromText(@poly));
+---------------------------------------------+
| ST_NumInteriorRings(ST_GeomFromText(@poly)) |
+---------------------------------------------+
| 1 |
+---------------------------------------------+
本作品采用《CC 协议》,转载必须注明作者和本文链接
最近在研究根据多边形来匹配数据,一边读文档,一边翻译。