14.16.6 几何格式转换函数
MySQL 支持本节中列出的函数,以将几何值从内部几何格式转换为WKT或WKB格式,或者交换X和Y坐标的顺序。
此外,还有函数可以将字符串从WKT或WKB格式转换为内部几何格式。请参阅第14.16.3节,“从 WKT 值创建几何值的函数”,和第14.16.4节,“从 WKB 值创建几何值的函数”。
接受WKT几何集合参数的函数,如ST_GeomFromText(),理解OpenGIS标准语法'GEOMETRYCOLLECTION EMPTY'和MySQL非标准语法'GEOMETRYCOLLECTION()'。另一种方式是通过调用GeometryCollection()无参数来生产空几何集合。产生WKT值的函数,如ST_AsWKT(),生产'GEOMETRYCOLLECTION EMPTY'标准语法:
mysql> SET @s1 = ST_GeomFromText('GEOMETRYCOLLECTION()');
mysql> SET @s2 = ST_GeomFromText('GEOMETRYCOLLECTION EMPTY');
mysql> SELECT ST_AsWKT(@s1), ST_AsWKT(@s2);
+--------------------------+--------------------------+
| ST_AsWKT(@s1) | ST_AsWKT(@s2) |
+--------------------------+--------------------------+
| GEOMETRYCOLLECTION EMPTY | GEOMETRYCOLLECTION EMPTY |
+--------------------------+--------------------------+
mysql> SELECT ST_AsWKT(GeomCollection());
+----------------------------+
| ST_AsWKT(GeomCollection()) |
+----------------------------+
| GEOMETRYCOLLECTION EMPTY |
+----------------------------+
除非另有指定,否则本节中的函数将其几何参数处理如下:
-
如果任何参数为
NULL,返回值为NULL。 -
如果任何几何参数不是语法正确的几何,会出现
ER_ GIS_INVALID_DATA错误。 -
如果任何几何参数在未定义的空间参考系统中,输出轴将按照几何中的顺序出现,并出现
ER_WARN_SRS_NOT_FOUND_AXIS_ORDER警告。 -
默认情况下,地理坐标(纬度、经度)将按照几何参数的空间参考系统指定的顺序解释。可以给出可选的
options参数来覆盖默认轴顺序。options由逗号分隔的组成。唯一允许的key=valuekey值是axis-orderlat-long,long-lat和srid-defined(默认)。如果options参数为NULL,返回值将是NULL。如果options参数无效,将出现错误,以指示原因。 -
否则,返回值将不是NULL。
这些函数可用于格式转换或坐标交换:
-
ST_AsBinary(,g[,options])ST_AsWKB(g[,options])将值从内部几何格式转换为WKB表示形式,并返回二进制结果。
函数返回值具有 geography坐标(纬度、经度),按照适用于几何参数的空间参考系统指定的顺序。可选的
options参数可以用来覆盖默认的轴顺序。ST_AsBinary()和ST_AsWKB()按照本节介绍中描述的方式处理其参数。mysql> SET @g = ST_LineFromText('LINESTRING(0 5,5 10,10 15)', 4326); mysql> SELECT ST_AsText(ST_GeomFromWKB(ST_AsWKB(@g))); +-----------------------------------------+ | ST_AsText(ST_GeomFromWKB(ST_AsWKB(@g))) | +-----------------------------------------+ | LINESTRING(5 0,10 5,15 10) | +-----------------------------------------+ mysql> SELECT ST_AsText(ST_GeomFromWKB(ST_AsWKB(@g, 'axis-order=long-lat'))); +----------------------------------------------------------------+ | ST_AsText(ST_GeomFromWKB(ST_AsWKB(@g, 'axis-order=long-lat'))) | +----------------------------------------------------------------+ | LINESTRING(0 5,5 10,10 15) | +----------------------------------------------------------------+ mysql> SELECT ST_AsText(ST_GeomFromWKB(ST_AsWKB(@g, 'axis-order=lat-long'))); +----------------------------------------------------------------+ | ST_AsText(ST_GeomFromWKB(ST_AsWKB(@g, 'axis-order=lat-long'))) | +----------------------------------------------------------------+ | LINESTRING(5 0,10 5,15 10) | +----------------------------------------------------------------+ -
ST_AsText(,g[,options])ST_AsWKT(g[,options])将值从内部几何格式转换为WKT表示形式,并返回字符串结果。
函数返回值具有 geography坐标(纬度、经度),按空间参考系统对 geometry参数所指定的顺序。可选的
options参数可以用来覆盖默认的轴顺序。ST_AsText()和ST_AsWKT()按照本节介绍中描述的方式处理其参数。mysql> SET @g = 'LineString(1 1,2 2,3 3)'; mysql> SELECT ST_AsText(ST_GeomFromText(@g)); +--------------------------------+ | ST_AsText(ST_GeomFromText(@g)) | +--------------------------------+ | LINESTRING(1 1,2 2,3 3) | +--------------------------------+对
MultiPoint值的输出包括每个点周围的括号。例如:mysql> SELECT ST_AsText(ST_GeomFromText(@mp)); +---------------------------------+ | ST_AsText(ST_GeomFromText(@mp)) | +---------------------------------+ | MULTIPOINT((1 1),(2 2),(3 3)) | +---------------------------------+ -
接受内部几何格式的参数,交换每个坐标对中的 X 和 Y 值,并返回结果。
ST_SwapXY()按照本节介绍中描述的方式处理其参数。mysql> SET @g = ST_LineFromText('LINESTRING(0 5,5 10,10 15)'); mysql> SELECT ST_AsText(@g); +----------------------------+ | ST_AsText(@g) | +----------------------------+ | LINESTRING(0 5,5 10,10 15) | +----------------------------+ mysql> SELECT ST_AsText(ST_SwapXY(@g)); +----------------------------+ | ST_AsText(ST_SwapXY(@g)) | +----------------------------+ | LINESTRING(5 0,10 5,15 10) | +----------------------------+