本节中的函数返回 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错误。 -
如果几何体是一个有效的
Polygon在笛卡尔 SRS 中,结果是多边形的笛卡尔面积。 -
如果几何体是一个有效的
MultiPolygon在笛卡尔 SRS 中,结果是多边形的笛卡尔面积之和。 -
如果几何体是一个有效的
Polygon在地理 SRS 中,结果是多边形在该 SRS 中的地理面积,单位为平方米。 -
如果几何体是一个有效的
MultiPolygon在地理 SRS 中,结果是多边形在该 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) | +------------------------+--------------------------------------------+ -
-
返回多边形值
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) | +----------------------------------------------------+ -
返回多边形值
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)返回多边形值
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 | +---------------------------------------------+