Documentation Home
MySQL 8.4 Reference Manual
Related Documentation Download this Manual
PDF (US Ltr) - 39.8Mb
PDF (A4) - 39.9Mb
Man Pages (TGZ) - 257.9Kb
Man Pages (Zip) - 364.9Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


14.16.7.2 点属性函数

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

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

除非另有指定,以下函数在处理几何参数时遵循以下规则:

  • 如果任何参数是NULL,返回值也是NULL

  • 如果任何几何参数是一个有效的几何对象,但不是一个Point对象,会出现ER_UNEXPECTED_GEOMETRY_TYPE错误。

  • 如果任何几何参数不是一个语法正确的几何对象,会出现ER_GIS_INVALID_DATA错误。

  • 如果任何几何参数是一个语法正确的几何对象,但是在未定义的空间参考系统(SRS)中,会出现ER_SRS_NOT_FOUND错误。

  • 如果提供了X或Y坐标参数,并且该值是-inf+infNaN,会出现ER_DATA_OUT_OF_RANGE错误。

  • 如果经度或纬度值超出范围,会出现错误:

    角度范围显示为度。由于浮点数计算,实际范围限制会有轻微的偏差。

  • 否则,返回值不是NULL

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

  • ST_ Latitude(p [,new_latitude_val])

    带有单个参数,表示有效的Point对象p,该对象具有地理空间参考系统(SRS),ST_ 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)                    |
    +---------------------------------+
  • ST_Longitude(p [new_longitude_val])

    使用单个参数,表示有效的Point对象p,具有地理空间参考系统(SRS),ST_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)                     |
    +----------------------------------+
  • ST_X(p [new_x_val])

    使用单个参数,表示有效的Point对象pST_X()返回p的X坐标值为双精度数字。X坐标被认为是指SRS定义中出现的第一个轴。

    使用可选的第二个参数,ST_X()返回与第一个参数相同的Point对象,但其X坐标值为第二个参数。如果Point对象具有地理SRS,第二个参数必须在 longitude 或 latitude 值的合适范围内。

    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()返回p的Y坐标值为双精度数字。Y坐标被认为是指SRS定义中出现的第二个轴。

    使用可选的第二个参数,ST_Y() 将返回第一个参数一样的 Point 对象,但其 Y 坐标等于第二个参数。如果 Point 对象具有地理 SRS,则第二个参数必须是 longitude 或 latitude 值的合法范围。

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