14.16.7.1 常规几何属性函数
本节中列出的函数不对其参数进行限制,可以接受任何类型的几何值。
除非另有指定,否则本节中的函数将其几何参数处理如下:
-
如果任何参数为
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
错误。
-
-
返回一个二进制字符串,表示.geometry实例
g
的几何类型名称。该名称对应于可实例化的<code class="literal">Geometry</code>子类。ST_GeometryType()
按照本节介绍中描述处理其参数。mysql> SELECT ST_GeometryType(ST_GeomFromText('POINT(1 1)')); +------------------------------------------------+ | ST_GeometryType(ST_GeomFromText('POINT(1 1)')) | +------------------------------------------------+ | POINT | +------------------------------------------------+
-
该函数是一个占位符,返回1表示空geometry集合值,否则返回0。
MySQL 不支持GIS<code class="literal">EMPTY</code>值,如<code class="literal">POINT EMPTY</code>。唯一有效的空geometry是以empty geometry collection值形式表示的。
ST_IsEmpty()
按照本节介绍中描述处理其参数。 -
返回1,如果.geometry值
g
根据ISOSQL/MM Part 3: Spatial标准是简单的。<a class="link" href="gis-一般属性函数.html#function_st-issimple">ST_IsSimple()
返回0,如果参数不是简单的。《OpenGIS 几何模型》第13.4.2节中关于可实例化几何类的描述包括了导致类实例被分类为非简单的特定条件。
ST_IsSimple()
按照本节介绍中描述处理其参数,以下是例外:-
如果几何对象具有地理SRS,并且经度或纬度超出范围,错误发生:
-
如果经度值不在(-180, 180]范围内,将出现
ER_GEOMETRY_PARAM_LONGITUDE_OUT_OF_RANGE
错误。 -
如果纬度值不在[−90, 90]范围内,将出现
ER_GEOMETRY_PARAM_LATITUDE_OUT_OF_RANGE
错误。
显示的范围是度数。由于浮点算术精度,实际范围略有不同。
-
-
-
单个参数表示有效几何对象
g
,<a class="link" href="gis-general-property-functions.html#function_st-srid"><code class="literal">ST_SRID()</code></a>返回表示与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 的几何体非常有用。 -