本节列出的函数不限制其参数,并接受任何类型的几何值。
除非另有说明,本节中的函数处理其几何参数如下
如果任何参数为
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 节,“Geometry 类” 中给出。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 等任务很有用。