# 12.17.7.4 多边形和多多边形属性函数

本节中的函数返回的属性多边形要么多多边形价值观。

除非另有说明,本节中的函数按如下方式处理其几何参数:

  • 如果有任何论据空值或任何几何参数是空几何,返回值为空值.

  • 如果任何几何参数不是语法上格式良好的几何,则ER_GIS_INVALID_DATA (opens new window)发生错误。

  • 如果任何几何参数是未定义的空间参考系统 (SRS) 中的语法结构良好的几何,则ER_SRS_NOT_FOUND (opens new window)发生错误。

  • 对于采用多个几何参数的函数,如果这些参数不在同一个 SRS 中,则ER_GIS_DIFFERENT_SRIDS (opens new window)发生错误。

  • 否则,返回值为非空值.

    这些函数可用于获取多边形属性:

  • ST_Area({**|*多聚*})

    返回一个双精度数,指示区域的面积多边形要么多多边形论据,在其空间参考系中测量。

    从 MySQL 8.0.13 开始,ST_Area()如本节介绍中所述处理其参数,但有以下例外:

    • 如果几何在几何上无效,则结果要么是未定义的区域(即,它可以是任意数字),要么发生错误。

    • 如果几何有效但不是多边形要么多多边形对象,一个ER_UNEXPECTED_GEOMETRY_TYPE (opens new window)发生错误。

    • 如果几何是有效的多边形在笛卡尔 SRS 中,结果是多边形的笛卡尔区域。

    • 如果几何是有效的多多边形在笛卡尔 SRS 中,结果是多边形的笛卡尔面积之和。

    • 如果几何是有效的多边形在地理 SRS 中,结果是该 SRS 中多边形的大地测量面积,以平方米为单位。

    • 如果几何是有效的多多边形在地理 SRS 中,结果是该 SRS 中多边形的大地测量面积之和,以平方米为单位。

    • 如果面积计算导致+信息, 一个ER_DATA_OUT_OF_RANGE (opens new window)发生错误。

    • 如果几何图形的地理 SRS 的经度或纬度超出范围,则会发生错误:

      在 MySQL 8.0.13 之前,ST_Area()如本节介绍中所述处理其参数,但有以下例外:

    • 对于维度为 0 或 1 的参数,结果为 0。

    • 如果几何为空,则返回值为 0 而不是空值.

    • 对于几何集合,结果是所有组件的面积值之和。如果几何集合为空,则其面积返回为 0。

    • 如果几何具有地理空间参考系统 (SRS) 的 SRID 值,则ER_NOT_IMPLEMENTED_FOR_GEOGRAPHIC_SRS (opens new window)发生错误。

    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({**|*多聚*})

    返回的数学质心多边形要么多多边形论据作为观点.结果不保证在多多边形.

    此函数通过计算集合中最高维度的组件的质心点来处理几何集合。这些组件被提取并制成一个单一的多多边形,多行字符串, 要么多点用于质心计算。

    ST_Centroid()如本节介绍中所述处理其参数,但有以下例外:

    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(**)

    返回的外环多边形价值**作为一个线串.

    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(**, *ñ*)

    返回*ñ-th 内环多边形价值*作为一个线串.戒指从 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(**),ST_NumInteriorRings(**)

    返回内部环的数量多边形价值**.

    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 |
    +---------------------------------------------+