# 12.17.6 几何格式转换函数

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

还有一些函数可以将字符串从 WKT 或 WKB 格式转换为内部几何格式。看第 12.17.3 节,“从 WKT 值创建几何值的函数”, 和第 12.17.4 节,“从 WKB 值创建几何值的函数”.

功能如ST_GeomFromText()接受 WKT 几何集合参数的人理解 OpenGIS'几何集合为空'标准语法和 MySQL'几何集合()'非标准语法。另一种生成空几何集合的方法是调用几何集合()没有论据。功能如ST_AsWKT()产生 WKT 值的产生'几何集合为空'标准语法:

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   |
+----------------------------+

除非另有说明,否则本节中的函数按如下方式处理其几何参数:

  • 如果有任何论据空值,返回值为空值.

  • 如果任何几何参数不是语法上格式良好的几何,则ER_GIS_INVALID_DATA (opens new window)发生错误。

  • 如果任何几何参数位于未定义的空间参考系中,则轴按照它们在几何中出现的顺序输出,并且ER_WARN_SRS_NOT_FOUND_AXIS_ORDER (opens new window)出现警告。

  • 默认情况下,地理坐标(纬度、经度)按照几何参数的空间参考系统指定的顺序进行解释。一个可选的*选项可以给出参数以覆盖默认轴顺序。选项由逗号分隔的列表组成*钥匙*=*价值*.唯一允许的钥匙*值为轴序, 允许的值为经纬度,长纬度网格定义(默认)。

    如果*选项论据是空值,返回值为空值.如果选项*参数无效,发生错误以说明原因。

  • 否则,返回值为非空值.

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

  • ST_AsBinary(*g* [, *选项*]),ST_AsWKB(*g* [, *选项*])

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

    函数返回值具有地理坐标(纬度、经度),其顺序由应用于几何参数的空间参考系统指定。一个可选的*选项*可以给出参数以覆盖默认轴顺序。

    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* [, *选项*]),ST_AsWKT(*g* [, *选项*])

    将内部几何格式的值转换为其 WKT 表示形式并返回字符串结果。

    函数返回值具有地理坐标(纬度、经度),其顺序由应用于几何参数的空间参考系统指定。一个可选的*选项*可以给出参数以覆盖默认轴顺序。

    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)        |
    +--------------------------------+
    

    输出为多点values 包括每个点周围的括号。例如:

    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) |
    +----------------------------+