本节列出的函数不限制其参数,并接受任何类型的几何值。
除非另有说明,本节中的函数将其几何参数处理如下:
-
如果任何参数为
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 Class” 中给出。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()
按照本节介绍处理其参数。 -
如果geometry值
g
根据ISO SQL/MM Part 3: Spatial 标准是简单的,则返回 1。ST_IsSimple()
如果参数不是简单的,则返回 0。在 第 13.4.2 节,“OpenGIS 几何模型” 中,instantiable 几何类的描述包括特定条件,导致类实例被分类为不简单。
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 特定的函数结果传递给
ST_SRID()
,连同 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 很有用。 -