文档首页
MySQL 9.0 参考手册
相关文档 下载本手册
PDF (US Ltr) - 40.0Mb
PDF (A4) - 40.1Mb
手册页 (TGZ) - 258.2Kb
手册页 (Zip) - 365.3Kb
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 对象 p,则 ST_X() 会以双精度数的形式返回 p 的 X 坐标值。X 坐标被认为是指在 Point 空间参考系统 (SRS) 定义中首先出现的轴。

    如果包含可选的第二个参数,则 ST_X() 会返回一个类似于第一个参数的 Point 对象,其 X 坐标等于第二个参数。如果 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() 会返回 p 的 Y 坐标值,该值是一个双精度数。Y 坐标被认为是指 Point 空间参考系统 (SRS) 定义中第二个出现的轴。

    如果包含可选的第二个参数,ST_Y() 会返回一个与第一个参数类似的 Point 对象,其 Y 坐标等于第二个参数。如果 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)                          |
    +-------------------------------------------+