本节列出的函数不限制其参数,并接受任何类型的几何值。
除非另有说明,本节中的函数处理其几何参数如下
如果任何参数为
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。这些值的含义在 第 13.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 | +------------------------------------------------------+
返回几何值
g
的最小包围矩形 (MBR)。结果以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。第 13.4.2 节,“OpenGIS 几何模型” 下给出的可实例化几何类的描述包括导致类实例被分类为非简单的特定条件。
ST_IsSimple()
按本节介绍部分所述处理其参数,但有以下例外如果几何具有经度或纬度超出范围的地理 SRS,则会发生错误
如果经度值不在 (-180, 180] 范围内,则会发生
ER_GEOMETRY_PARAM_LONGITUDE_OUT_OF_RANGE
错误。如果纬度值不在 [-90, 90] 范围内,则会发生
ER_GEOMETRY_PARAM_LATITUDE_OUT_OF_RANGE
错误。
显示的范围以度为单位。由于浮点运算,确切的范围限制略有偏差。
使用表示有效几何对象的单个参数
g
,ST_SRID()
返回一个整数,指示与g
关联的空间参考系统 (SRS) 的 ID。使用可选的第二个参数表示有效的 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 | +-------------+
可以通过将 MySQL 特定函数用于创建空间值的返回值以及 SRID 值传递给
ST_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 等任务非常有用。