• 首页
  • css3教程
  • html5教程
  • jQuery手册
  • vue手册
  • php手册
  • MySQL手册
  • apache手册
  • redis手册
  • 几何格式转换函数

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

    还有一些功能可以将字符串从WKT或WKB格式转换为内部几何格式。请参见“从WKT值创建几何值的函数”和“从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=valuekeyaxis-orderlat-longlong-latsrid-defined

      如果options参数为NULL,则返回值为NULL。如果options参数无效,则会发生错误以指示原因。

    • 否则,返回值为non-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表示形式,并返回字符串结果。

      函数返回值具有按适用于几何参数的空间参考系统指定的顺序的地理坐标(纬度,经度)。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))   	|
      +---------------------------------	+
      
    • 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) 	|
      +----------------------------	+