• 首页
  • css3教程
  • html5教程
  • vue手册
  • php手册
  • MySQL手册
  • redis手册
  • jQuery手册
  • 点属性函数

    Point由X和Y坐标组成,可以分别使用ST_X()ST_Y()函数获得。这些函数还允许使用可选的第二个自变量,该第二个自变量指定X或Y坐标值,在这种情况下,函数结果是Point来自第一个自变量的对象,其相应坐标被修改为等于第二个自变量。

    对于Point具有地理空间参考系统(SRS)的对象,可以分别使用ST_Longitude()ST_Latitude()函数获取经度和纬度。这些函数还允许使用可选的第二个自变量来指定经度或纬度值,在这种情况下,函数结果是Point来自第一个自变量的对象,经修改的经度或纬度等于第二个自变量。

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

    • 如果有任何参数NULL,则返回值为NULL
    • 如果任何几何参数是有效几何但不是Point对象,ER_UNEXPECTED_GEOMETRY_TYPE则将发生错误。
    • 如果任何几何参数都不是语法上格式正确的几何,ER_GIS_INVALID_DATA则会发生错误。
    • 如果任何几何参数的SRID值都引用未定义的空间参考系统(SRS),ER_SRS_NOT_FOUND则会发生错误。
    • 如果提供了一种X或Y坐标的参数和值是-inf+inf,或NaN,一个ER_DATA_OUT_OF_RANGE发生错误。
    • 如果经度或纬度参数超出范围,则会发生错误:

      • 如果任何经度参数不在范围内(-180,180],ER_LONGITUDE_OUT_OF_RANGE则会发生错误。
      • 如果任何纬度参数不在[-90,90]范围内,ER_LATITUDE_OUT_OF_RANGE则会发生错误。

      显示的范围以度为单位。精确的范围限制由于浮点运算而略有不同。

    • 否则,返回值为non-NULL

    这些函数可用于获取点属性:

    • ST_Latitude(p[,new_latitude_val])

      使用单个参数表示具有地理空间参考系统(SRS)的有效Point对象pST_Latitude()将纬度值p作为双精度数返回。

      使用可选的第二个参数表示有效的纬度值,ST_Latitude()返回一个Point对象,如第一个参数,其纬度等于第二个参数。

      ST_Latitude()如本节简介中所述处理其参数,此外,如果Point对象有效但没有地理SRS,ER_SRS_NOT_GEOGRAPHIC则会发生错误。

      mysql> SET @pt = ST_GeomFromText('POINT(45 90)', 4326);
      mysql> SELECT ST_Latitude(@pt);
      +------------------	+
      | ST_Latitude(@pt) 	|
      +------------------	+
      |               45 	|
      +------------------	+
      mysql> SELECT ST_AsText(ST_Latitude(@pt, 10));
      +---------------------------------	+
      | ST_AsText(ST_Latitude(@pt, 10)) 	|
      +---------------------------------	+
      | POINT(10 90)                    	|
      +---------------------------------	+
      

      此功能已添加到MySQL 8.0.12中。

    • ST_Longitude(p[,new_longitude_val])

      使用单个参数表示具有地理空间参考系统(SRS)的有效Point对象pST_Longitude()将经度值p作为双精度数返回。

      使用可选的第二个参数表示有效的经度值,ST_Longitude()返回一个Point对象,如第一个参数,其经度等于第二个参数。

      ST_Longitude()如本节简介中所述处理其参数,此外,如果Point对象有效但没有地理SRS,ER_SRS_NOT_GEOGRAPHIC则会发生错误。

      mysql> SET @pt = ST_GeomFromText('POINT(45 90)', 4326);
      mysql> SELECT ST_Longitude(@pt);
      +-------------------	+
      | ST_Longitude(@pt) 	|
      +-------------------	+
      |                90 	|
      +-------------------	+
      mysql> SELECT ST_AsText(ST_Longitude(@pt, 10));
      +----------------------------------	+
      | ST_AsText(ST_Longitude(@pt, 10)) 	|
      +----------------------------------	+
      | POINT(45 10)                     	|
      +----------------------------------	+
      

      此功能已添加到MySQL 8.0.12中。

    • ST_X(p[,new_x_val])

      使用单个参数表示有效Point对象时pST_X()返回X坐标值p作为双精度数字。从MySQL 8.0.12开始,X坐标被认为是指在Point空间参考系统(SRS)定义中首先出现的轴。

      使用可选的第二个参数,ST_X()返回一个Point对象,如第一个参数,其X坐标等于第二个参数。从MySQL 8.0.12开始,如果Point对象具有地理SRS,则第二个参数必须在经度或纬度值的适当范围内。

      ST_X()按照本节简介中所述处理其参数。

      mysql> SELECT ST_X(Point(56.7, 53.34));
      +--------------------------	+
      | ST_X(Point(56.7, 53.34)) 	|
      +--------------------------	+
      |                     56.7 	|
      +--------------------------	+
      mysql> SELECT ST_AsText(ST_X(Point(56.7, 53.34), 10.5));
      +-------------------------------------------	+
      | ST_AsText(ST_X(Point(56.7, 53.34), 10.5)) 	|
      +-------------------------------------------	+
      | POINT(10.5 53.34)                         	|
      +-------------------------------------------	+
      
    • ST_Y(p[,new_y_val])

      使用单个参数表示有效Point对象时pST_Y()将Y坐标值p作为双精度数字返回。从MySQL 8.0.12开始,Y坐标被认为是指在Point空间参考系统(SRS)定义中第二个出现的轴。

      使用可选的第二个参数,ST_Y()返回一个Point对象,如第一个参数,其Y坐标等于第二个参数。从MySQL 8.0.12开始,如果Point对象具有地理SRS,则第二个参数必须在经度或纬度值的适当范围内。

      ST_Y()按照本节简介中所述处理其参数。

      mysql> SELECT ST_Y(Point(56.7, 53.34));
      +--------------------------	+
      | ST_Y(Point(56.7, 53.34)) 	|
      +--------------------------	+
      |                    53.34 	|
      +--------------------------	+
      mysql> SELECT ST_AsText(ST_Y(Point(56.7, 53.34), 10.5));
      +-------------------------------------------	+
      | ST_AsText(ST_Y(Point(56.7, 53.34), 10.5)) 	|
      +-------------------------------------------	+
      | POINT(56.7 10.5)                          	|
      +-------------------------------------------	+