Documentation Home

12.17.7.2 点属性函数

APoint由 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则会发生错误。

  • 如果任何几何参数是未定义空间参考系统 (SRS) 中语法上格式正确的几何, ER_SRS_NOT_FOUND则会发生错误。

  • 如果提供 X 或 Y 坐标参数且值为-inf+infNaNER_DATA_OUT_OF_RANGE则会发生错误。

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

    显示的范围以度为单位。由于浮点运算,确切的范围限制略有偏差。

  • 否则,返回值为非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使用表示有效对象 的单个参数 p, 返回作为双精度数ST_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使用表示有效对象 的单个参数 p, 返回作为双精度数ST_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)                          |
    +-------------------------------------------+