多边形和多多边形属性函数
本节中的函数返回Polygon
或MultiPolygon
值的属性。
除非另有说明,否则本节中的函数将按以下方式处理其参数:
- 如果任何自变量为
NULL
或任何几何自变量为空几何,则返回值为NULL
。 - 如果任何几何参数都不是语法上格式正确的几何,
ER_GIS_INVALID_DATA
则会发生错误。 - 如果任何几何参数的SRID值都引用未定义的空间参考系统(SRS),
ER_SRS_NOT_FOUND
则会发生错误。 - 对于带有多个几何参数的函数,如果这些参数不具有相同的SRID,
ER_GIS_DIFFERENT_SRIDS
则会发生错误。 - 否则,返回值为non-
NULL
。
这些函数可用于获取多边形属性:
ST_Area({poly|mpoly})
返回一个双精度数字,该数字指示
Polygon
orMultiPolygon
参数的面积,以其空间参考系统为单位。从MySQL 8.0.13开始,
ST_Area()
按照本节简介中的描述处理其参数,但以下情况除外:- 如果几何在几何上是无效的,则结果是未定义的区域(即可以是任何数字),或者发生错误。
- 如果几何有效,但不是
Polygon
或MultiPolygon
对象,ER_UNEXPECTED_GEOMETRY_TYPE
则会发生错误。 - 如果几何
Polygon
在笛卡尔SRS中有效,则结果为多边形的笛卡尔区域。 - 如果几何
MultiPolygon
在笛卡尔SRS中有效,则结果是多边形的笛卡尔面积之和。 - 如果几何
Polygon
在地理SRS中有效,则结果为该SRS中多边形的大地面积,以平方米为单位。 - 如果几何
MultiPolygon
在地理SRS中有效,则结果为该SRS中多边形的大地测量面积之和,以平方米为单位。 - 如果进行面积计算
+inf
,ER_DATA_OUT_OF_RANGE
则会发生错误。 如果几何图形的经度或纬度超出范围,则将发生错误:
- 如果任何经度参数不在范围内(-180,180],
ER_LONGITUDE_OUT_OF_RANGE
则会发生错误。 - 如果任何纬度参数不在[-90,90]范围内,
ER_LATITUDE_OUT_OF_RANGE
则会发生错误。
显示的范围以度为单位。精确的范围限制由于浮点运算而略有不同。
- 如果任何经度参数不在范围内(-180,180],
在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})
以形式返回
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)
返回的外环
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) | +---------------------------------------------------- +ST_InteriorRingN(poly,N)
N
将Polygon
值的第-个内部环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)
返回内部环的数量
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 | +--------------------------------------------- +