文档首页
MySQL 8.4 参考手册
相关文档 下载本手册
PDF (US Ltr) - 39.9MB
PDF (A4) - 40.0MB
手册页 (TGZ) - 258.5KB
手册页 (Zip) - 365.5KB
信息 (Gzip) - 4.0MB
信息 (Zip) - 4.0MB


MySQL 8.4 参考手册  /  ...  /  多边形和多面几何图形属性函数

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 错误。

    • 如果几何图形是笛卡尔 SRS 中的有效 Polygon,则结果为多边形的笛卡尔面积。

    • 如果几何图形是笛卡尔 SRS 中的有效 MultiPolygon,则结果为多边形笛卡尔面积的总和。

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

    • 如果几何图形是地理 SRS 中的有效 MultiPolygon,则结果为该 SRS 中多边形测地线面积的总和,以平方米为单位。

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

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

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

    Press CTRL+C to copy
    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})

    返回 PolygonMultiPolygon 参数的数学质心作为 Point。不保证结果位于 MultiPolygon 上。

    此函数通过计算集合中最高维度分量的质心点来处理几何图形集合。提取此类组件并将其制成单个 MultiPolygonMultiLineStringMultiPoint 以进行质心计算。

    ST_Centroid() 处理其参数的方式如本节引言中所述,但以下情况除外

    • 对于参数为空几何图形集合的附加条件,返回值为 NULL

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

    Press CTRL+C to copy
    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() 处理其参数的方式如本节引言中所述。

    Press CTRL+C to copy
    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() 处理其参数的方式如本节引言中所述。

    Press CTRL+C to copy
    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)

    返回 Polygonpoly 中的内环数。

    ST_NumInteriorRing()ST_NuminteriorRings() 处理其参数的方式如本节引言中所述。

    Press CTRL+C to copy
    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 | +---------------------------------------------+