12.16.7.4 多边形和多重多边形属性函数

原文链接:dev.mysql.com/doc/refman/8.0/en/gi...

本节中的函数返回 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 协议》,转载必须注明作者和本文链接
讨论数量: 4
sanders

最近在研究根据多边形来匹配数据,一边读文档,一边翻译。

6个月前 评论
徵羽宫 5个月前
sanders (作者) (楼主) 5个月前
徵羽宫 5个月前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!