• 首页
  • vue
  • TypeScript
  • JavaScript
  • scss
  • css3
  • html5
  • php
  • MySQL
  • redis
  • jQuery
  • 多边形和多多边形属性函数

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

    除非另有说明,否则本节中的函数将按以下方式处理其参数:

    • 如果任何自变量为NULL或任何几何自变量为空几何,则返回值为NULL
    • 如果任何几何参数都不是语法上格式正确的几何,ER_GIS_INVALID_DATA则会发生错误。
    • 如果任何几何参数的SRID值都引用未定义的空间参考系统(SRS),ER_SRS_NOT_FOUND则会发生错误。
    • 对于带有多个几何参数的函数,如果这些参数不具有相同的SRID,ER_GIS_DIFFERENT_SRIDS则会发生错误。
    • 否则,返回值为non-NULL

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

    • ST_Area({poly|mpoly})

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

      从MySQL 8.0.13开始,ST_Area()按照本节简介中的描述处理其参数,但以下情况除外:

      • 如果几何在几何上是无效的,则结果是未定义的区域(即可以是任何数字),或者发生错误。
      • 如果几何有效,但不是PolygonMultiPolygon对象,ER_UNEXPECTED_GEOMETRY_TYPE则会发生错误。
      • 如果几何Polygon在笛卡尔SRS中有效,则结果为多边形的笛卡尔区域。
      • 如果几何MultiPolygon在笛卡尔SRS中有效,则结果是多边形的笛卡尔面积之和。
      • 如果几何Polygon在地理SRS中有效,则结果为该SRS中多边形的大地面积,以平方米为单位。
      • 如果几何MultiPolygon在地理SRS中有效,则结果为该SRS中多边形的大地测量面积之和,以平方米为单位。
      • 如果进行面积计算+infER_DATA_OUT_OF_RANGE则会发生错误。
      • 如果几何图形的经度或纬度超出范围,则将发生错误:

        • 如果任何经度参数不在范围内(-180,180],ER_LONGITUDE_OUT_OF_RANGE则会发生错误。
        • 如果任何纬度参数不在[-90,90]范围内,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})

      以形式返回PolygonMultiPolygon参数的数学质心Point。结果不保证在上MultiPolygon

      此函数通过计算集合中最大维度的组件的质心点来处理几何集合。这样的成分被提取并制作成单个MultiPolygonMultiLineStringMultiPoint为质心计算。

      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)

      NPolygon值的第-个内部环poly作为a返回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)

      返回内部环的数量Polygonpoly

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