本节中列出的函数不限制其参数并接受任何类型的几何值。
除非另有说明,本节中的函数按如下方式处理它们的几何参数:
如果任何参数是
NULL
,则返回值为NULL
。如果任何几何参数不是语法上格式正确的几何,
ER_GIS_INVALID_DATA
则会发生错误。如果任何几何参数是未定义空间参考系统 (SRS) 中语法上格式正确的几何,
ER_SRS_NOT_FOUND
则会发生错误。如果任何 SRID 参数不在 32 位无符号整数的范围内,
ER_DATA_OUT_OF_RANGE
则会发生错误。如果任何 SRID 参数引用未定义的 SRS,
ER_SRS_NOT_FOUND
则会发生错误。否则,返回值为非
NULL
。
这些函数可用于获取几何属性:
返回几何值的固有维度
g
。维度可以是 −1、0、1 或 2。这些值的含义在 第 11.4.2.2 节“几何类”中给出。ST_Dimension()
如本节介绍中所述处理其参数。mysql> SELECT ST_Dimension(ST_GeomFromText('LineString(1 1,2 2)')); +------------------------------------------------------+ | ST_Dimension(ST_GeomFromText('LineString(1 1,2 2)')) | +------------------------------------------------------+ | 1 | +------------------------------------------------------+
返回几何值的最小边界矩形 (MBR)
g
。结果作为Polygon
由边界框的角点定义的值返回:POLYGON((MINX MINY, MAXX MINY, MAXX MAXY, MINX MAXY, MINX MINY))
mysql> SELECT ST_AsText(ST_Envelope(ST_GeomFromText('LineString(1 1,2 2)'))); +----------------------------------------------------------------+ | ST_AsText(ST_Envelope(ST_GeomFromText('LineString(1 1,2 2)'))) | +----------------------------------------------------------------+ | POLYGON((1 1,2 1,2 2,1 2,1 1)) | +----------------------------------------------------------------+
如果参数是点或垂直或水平线段,
ST_Envelope()
则返回点或线段作为其 MBR,而不是返回无效的多边形:mysql> SELECT ST_AsText(ST_Envelope(ST_GeomFromText('LineString(1 1,1 2)'))); +----------------------------------------------------------------+ | ST_AsText(ST_Envelope(ST_GeomFromText('LineString(1 1,1 2)'))) | +----------------------------------------------------------------+ | LINESTRING(1 1,1 2) | +----------------------------------------------------------------+
ST_Envelope()
如本节介绍中所述处理其参数,但以下情况除外:如果几何具有地理空间参考系统 (SRS) 的 SRID 值,
ER_NOT_IMPLEMENTED_FOR_GEOGRAPHIC_SRS
则会发生错误。
返回一个二进制字符串,指示几何实例所属的几何类型的名称
g
。该名称对应于可实例化的Geometry
子类之一。ST_GeometryType()
如本节介绍中所述处理其参数。mysql> SELECT ST_GeometryType(ST_GeomFromText('POINT(1 1)')); +------------------------------------------------+ | ST_GeometryType(ST_GeomFromText('POINT(1 1)')) | +------------------------------------------------+ | POINT | +------------------------------------------------+
此函数是一个占位符,它为空几何集合值返回 1,否则返回 0。
唯一有效的空几何以空几何集合值的形式表示。MySQL 不支持 GIS
EMPTY
值,例如POINT EMPTY
.ST_IsEmpty()
如本节介绍中所述处理其参数。g
根据 ISO SQL/MM 第 3 部分:空间标准 , 如果几何值是简单的,则返回 1 。ST_IsSimple()
如果参数不简单,则返回 0。在第 11.4.2 节“OpenGIS 几何模型” 下给出的可实例化几何类的描述包括导致类实例被分类为不简单的特定条件。
ST_IsSimple()
如本节介绍中所述处理其参数,但以下情况除外:如果几何图形的地理 SRS 的经度或纬度超出范围,则会发生错误:
如果经度值不在 (−180, 180] 范围内,
ER_GEOMETRY_PARAM_LONGITUDE_OUT_OF_RANGE
则会发生错误(ER_LONGITUDE_OUT_OF_RANGE
MySQL 8.0.12 之前)。如果纬度值不在 [−90, 90] 范围内,
ER_GEOMETRY_PARAM_LATITUDE_OUT_OF_RANGE
则会发生错误(ER_LATITUDE_OUT_OF_RANGE
MySQL 8.0.12 之前)。
显示的范围以度为单位。由于浮点运算,确切的范围限制略有偏差。
使用表示有效几何对象的单个参数
g
,ST_SRID()
返回一个整数,指示与关联的空间参考系统 (SRS) 的 IDg
。使用表示有效 SRID 值的可选第二个参数,
ST_SRID()
返回一个与其第一个参数具有相同类型且 SRID 值等于第二个参数的对象。这仅设置对象的 SRID 值;它不执行坐标值的任何转换。ST_SRID()
如本节介绍中所述处理其参数,但以下情况除外:对于单参数语法,
ST_SRID()
返回几何 SRID,即使它引用未定义的 SRS。ER_SRS_NOT_FOUND
不会发生错误 。
ST_SRID(
区别 如下:g
,target_srid
)ST_Transform(
g
,target_srid
)ST_SRID()
更改几何 SRID 值而不转换其坐标。ST_Transform()
除了更改其 SRID 值外,还会变换几何坐标。
mysql> SET @g = ST_GeomFromText('LineString(1 1,2 2)', 0); mysql> SELECT ST_SRID(@g); +-------------+ | ST_SRID(@g) | +-------------+ | 0 | +-------------+ mysql> SET @g = ST_SRID(@g, 4326); mysql> SELECT ST_SRID(@g); +-------------+ | ST_SRID(@g) | +-------------+ | 4326 | +-------------+
ST_SRID()
通过将用于创建空间值的 MySQL 特定函数之一的结果与 SRID 值一起 传递,可以在特定 SRID 中创建几何图形。例如:SET @g1 = ST_SRID(Point(1, 1), 4326);
但是,该方法在 SRID 0 中创建几何体,然后将其转换为 SRID 4326 (WGS 84)。一个更好的替代方法是首先使用正确的空间参考系统创建几何体。例如:
SET @g1 = ST_PointFromText('POINT(1 1)', 4326); SET @g1 = ST_GeomFromText('POINT(1 1)', 4326);
的双参数形式
ST_SRID()
对于更正或更改具有不正确 SRID 的几何图形的 SRS 等任务很有用。