本节中的函数返回 Polygon
或 MultiPolygon
值的属性。
除非另有说明,本节中的函数处理其几何参数如下
如果任何参数为
NULL
或任何几何参数为空几何,则返回值为NULL
。如果任何几何参数不是语法上格式良好的几何,则会发生
ER_GIS_INVALID_DATA
错误。如果任何几何参数是在未定义空间参考系统 (SRS) 中的语法上格式良好的几何,则会发生
ER_SRS_NOT_FOUND
错误。对于接受多个几何参数的函数,如果这些参数不在同一 SRS 中,则会发生
ER_GIS_DIFFERENT_SRIDS
错误。否则,返回值为非
NULL
。
这些函数可用于获取多边形属性
返回一个双精度数,表示
Polygon
或MultiPolygon
参数的面积,以其空间参考系统为单位。ST_Area()
处理其参数的方式如本节介绍中所述,但以下情况除外如果几何在几何上无效,则结果要么是未定义的面积(即可以是任何数字),要么发生错误。
如果几何有效,但不是
Polygon
或MultiPolygon
对象,则会发生ER_UNEXPECTED_GEOMETRY_TYPE
错误。如果几何是笛卡尔 SRS 中的有效
Polygon
,则结果是多边形的笛卡尔面积。如果几何是笛卡尔 SRS 中的有效
MultiPolygon
,则结果是多边形的笛卡尔面积的总和。如果几何是地理 SRS 中的有效
Polygon
,则结果是该 SRS 中多边形的测地线面积,以平方米为单位。如果几何是地理 SRS 中的有效
MultiPolygon
,则结果是该 SRS 中多边形的测地线面积的总和,以平方米为单位。如果面积计算结果为
+inf
,则会发生ER_DATA_OUT_OF_RANGE
错误。如果几何具有经度或纬度超出范围的地理 SRS,则会发生错误
如果经度值不在 (−180, 180] 范围内,则会发生
ER_GEOMETRY_PARAM_LONGITUDE_OUT_OF_RANGE
错误。如果纬度值不在 [−90, 90] 范围内,则会发生
ER_GEOMETRY_PARAM_LATITUDE_OUT_OF_RANGE
错误。
显示的范围以度为单位。由于浮点运算,确切的范围限制略有偏差。
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 | +----------------------------------+
返回
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) | +------------------------+--------------------------------------------+
返回
Polygon
值poly
的外部环作为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) | +----------------------------------------------------+
返回
Polygon
值poly
的第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 | +---------------------------------------------+