Documentation Home
MySQL 8.4 Reference Manual
Related Documentation Download this Manual
PDF (US Ltr) - 39.8Mb
PDF (A4) - 39.9Mb
Man Pages (TGZ) - 257.9Kb
Man Pages (Zip) - 364.9Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


MySQL 8.4 Reference Manual  /  ...  /  Polygon and MultiPolygon Property Functions

14.16.7.4 多边形和多边形属性函数

本节中的函数返回PolygonMultiPolygon值的属性。

除非另有指定,以下函数在处理几何形状参数时遵循以下规则:

  • 如果任何参数为NULL或任何几何形状参数为空几何形状,则返回值为NULL

  • 如果任何几何形状参数不是语法正确的几何形状,发生ER_GIS_INVALID_DATA错误。

  • 如果任何几何形状参数是语法正确的几何形状,但在未定义的空间参考系统(SRS)中,则发生ER_SRS_NOT_FOUND错误。

  • 对于需要多个几何形状参数的函数,如果这些参数不在同一个SRS中,则发生ER_GIS_DIFFERENT_SRIDS错误。

  • 否则,返回值不是NULL

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

  • ST_Area({poly|mpoly})

    返回一个双精度数字,表示PolygonMultiPolygon参数的面积,以其空间参考系统为单位。

    ST_Area()根据本节介绍中描述的方式处理其参数,以下例外情况:

    • 如果几何体是几何无效的,则结果可能是一个未定义的面积(即可以是任何数字),或者发生错误。

    • 如果几何体是有效的,但不是PolygonMultiPolygon对象,发生ER_UNEXPECTED_GEOMETRY_TYPE错误。

    • 如果几何体是有效的Polygon在笛卡尔坐标系中,则结果是该多边形的笛卡尔面积。

    • 如果几何体是有效的MultiPolygon在笛卡尔坐标系中,则结果是多个多边形的笛卡尔面积之和。

    • 如果几何体是有效的Polygon在地理坐标系中,则结果是该多边形在该坐标系中的地理面积,以平方米为单位。

    • 如果几何体是有效的MultiPolygon在地理坐标系中,则结果是多个多边形在该坐标系中的地理面积之和,以平方米为单位。

    • 如果面积计算结果为+inf,发生ER_DATA_OUT_OF_RANGE错误。

    • 如果几何体具有地理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})

    返回Polygon或MultiPolygon参数的数学中心点作为Point。结果不保证在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)

    Polygonpoly的外部环返回为LineString

    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)

    Polygonpoly的第N-个内部环返回为LineString。从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 |
    +---------------------------------------------+