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

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

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

-   如果有任何论据`空值`或任何几何参数是空几何，返回值为`空值`.

-   如果任何几何参数不是语法上格式良好的几何，则[`ER_GIS_INVALID_DATA`](https://dev.mysql.com/doc/mysql-errors/8.0/en/server-error-reference.html#error_er_gis_invalid_data)发生错误。

-   如果任何几何参数是未定义的空间参考系统 (SRS) 中的语法结构良好的几何，则[`ER_SRS_NOT_FOUND`](https://dev.mysql.com/doc/mysql-errors/8.0/en/server-error-reference.html#error_er_srs_not_found)发生错误。

-   对于采用多个几何参数的函数，如果这些参数不在同一个 SRS 中，则[`ER_GIS_DIFFERENT_SRIDS`](https://dev.mysql.com/doc/mysql-errors/8.0/en/server-error-reference.html#error_er_gis_different_srids)发生错误。

-   否则，返回值为非`空值`.

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

-   [](<>)

    [`ST_Area({*`聚`*|*`多聚`*})`](gis-polygon-property-functions.html#function_st-area)

    [](<>)

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

    从 MySQL 8.0.13 开始，[`ST_Area()`](gis-polygon-property-functions.html#function_st-area)如本节介绍中所述处理其参数，但有以下例外：

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

    -   如果几何有效但不是`多边形`要么`多多边形`对象，一个[`ER_UNEXPECTED_GEOMETRY_TYPE`](https://dev.mysql.com/doc/mysql-errors/8.0/en/server-error-reference.html#error_er_unexpected_geometry_type)发生错误。

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

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

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

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

    -   如果面积计算导致`+信息`， 一个[`ER_DATA_OUT_OF_RANGE`](https://dev.mysql.com/doc/mysql-errors/8.0/en/server-error-reference.html#error_er_data_out_of_range)发生错误。

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

        -   如果经度值不在 (−180, 180] 范围内，则[`ER_GEOMETRY_PARAM_LONGITUDE_OUT_OF_RANGE`](https://dev.mysql.com/doc/mysql-errors/8.0/en/server-error-reference.html#error_er_geometry_param_longitude_out_of_range)发生错误（[`ER_LONGITUDE_OUT_OF_RANGE`](https://dev.mysql.com/doc/mysql-errors/8.0/en/server-error-reference.html#error_er_longitude_out_of_range)在 MySQL 8.0.12 之前）。

        -   如果纬度值不在范围内[−90, 90]， 一个[`ER_GEOMETRY_PARAM_LATITUDE_OUT_OF_RANGE`](https://dev.mysql.com/doc/mysql-errors/8.0/en/server-error-reference.html#error_er_geometry_param_latitude_out_of_range)发生错误（[`ER_LATITUDE_OUT_OF_RANGE`](https://dev.mysql.com/doc/mysql-errors/8.0/en/server-error-reference.html#error_er_latitude_out_of_range)在 MySQL 8.0.12 之前）。

            显示的范围以度为单位。由于浮点运算，确切的范围限制略有偏差。

        在 MySQL 8.0.13 之前，[`ST_Area()`](gis-polygon-property-functions.html#function_st-area)如本节介绍中所述处理其参数，但有以下例外：

    -   对于维度为 0 或 1 的参数，结果为 0。

    -   如果几何为空，则返回值为 0 而不是`空值`.

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

    -   如果几何具有地理空间参考系统 (SRS) 的 SRID 值，则[`ER_NOT_IMPLEMENTED_FOR_GEOGRAPHIC_SRS`](https://dev.mysql.com/doc/mysql-errors/8.0/en/server-error-reference.html#error_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({*`聚`*|*`多聚`*})`](gis-polygon-property-functions.html#function_st-centroid)

    [](<>)

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

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

    [`ST_Centroid()`](gis-polygon-property-functions.html#function_st-centroid)如本节介绍中所述处理其参数，但有以下例外：

    -   返回值为`空值`对于参数是空几何集合的附加条件。

    -   如果几何具有地理空间参考系统 (SRS) 的 SRID 值，则[`ER_NOT_IMPLEMENTED_FOR_GEOGRAPHIC_SRS`](https://dev.mysql.com/doc/mysql-errors/8.0/en/server-error-reference.html#error_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(*`聚`*)`](gis-polygon-property-functions.html#function_st-exteriorring)

    [](<>)

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

    [`ST_ExteriorRing()`](gis-polygon-property-functions.html#function_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(*`聚`*, *`ñ`*)`](gis-polygon-property-functions.html#function_st-interiorringn)

    [](<>)

    返回*`ñ`*-th 内环`多边形`价值*`聚`*作为一个`线串`.戒指从 1 开始编号。

    [`ST_InteriorRingN()`](gis-polygon-property-functions.html#function_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(*`聚`*)`](gis-polygon-property-functions.html#function_st-numinteriorrings),[`ST_NumInteriorRings(*`聚`*)`](gis-polygon-property-functions.html#function_st-numinteriorrings)

    [](<>)[](<>)

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

    [`ST_NumInteriorRing()`](gis-polygon-property-functions.html#function_st-numinteriorrings)和[`ST_NuminteriorRings()`](gis-polygon-property-functions.html#function_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 |
    +---------------------------------------------+
    ```
