Documentation Home
MySQL 8.3 Reference Manual
Related Documentation Download this Manual
PDF (US Ltr) - 40.8Mb
PDF (A4) - 40.9Mb
Man Pages (TGZ) - 294.0Kb
Man Pages (Zip) - 409.0Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb
Excerpts from this Manual

MySQL 8.3 Reference Manual  /  ...  /  Geometry Format Conversion Functions

14.16.6 几何格式转换函数

MySQL支持本节中列出的函数,以将几何值从内部几何格式转换为WKT或WKB格式,或者交换X和Y坐标的顺序。

还有函数可以将WKT或WKB格式的字符串转换为内部几何格式。请参阅第14.16.3节,“从WKT值创建几何值的函数”第14.16.4节,“从WKB值创建几何值的函数”

函数,如ST_GeomFromText(),接受WKT几何集合参数,理解OpenGIS 'GEOMETRYCOLLECTION EMPTY'标准语法和MySQL 'GEOMETRYCOLLECTION()'非标准语法。另一种产生空几何集合的方法是调用GeometryCollection()不带参数。函数,如ST_AsWKT(),产生WKT值,产生'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=value列表组成。唯一允许的key值是axis-order,其允许值为lat-longlong-latsrid-defined(默认)。

    如果options参数为NULL,则返回值为NULL。如果options参数无效,将发生错误以指示为什么。

  • 否则,返回值为非NULL

这些函数可用于格式转换或坐标交换:

  • ST_AsBinary(g [, options]), ST_AsWKB(g [, options])

    将内部几何格式的值转换为其WKB表示,并返回二进制结果。

    函数返回值的地理坐标(纬度、经度)将按照空间参考系统的顺序输出。可选的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表示,并返回字符串结果。

    函数返回值具有地理坐标(纬度、经度),按照 geometry 参数所应用的空间参考系统的顺序排列。可以提供可选的 选项 参数来覆盖默认的轴顺序。

    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))   |
    +---------------------------------+
  • ST_SwapXY(g)

    接受内部几何格式的参数,交换每个坐标对的 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) |
    +----------------------------+