一个 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、+inf 或 NaN,会发生 ER_DATA_OUT_OF_RANGE 错误。■ 如果经度值不在 (−180, 180] 范围内,则会出现 ER_LONGITUDE_OUT_OF_RANGE 错误。■ 如果纬度值不在 [−90, 90] 范围内,则发生 ER_LATITUDE_OUT_OF_RANGE 错误。● 所示范围以度数表示。由于浮点运算,精确的范围限制略有偏差。● ST_Latitude(p [, new_latitude_val])使用一个具有地理空间参照系统(SRS)的有效 Point 对象 p 的参数,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) |
+---------------------------------+
这个函数是在 MySQL 8.0.12 中添加的。● ST_Longitude(p [, new_longitude_val])使用一个具有地理空间参照系统(SRS)的有效 Point 对象 p 参数,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) |
+----------------------------------+
这个函数是在 MySQL 8.0.12 中添加的。ST_X() 使用一个表示有效 Point 对象的 p 参数,以双精度数值返回 p 的 X 坐标值。从 MySQL 8.0.12 开始,X 坐标被认为是指在点空间参照系统(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() 使用一个表示有效 Point 对象 p 的参数,以双精度数值返回 p 的 Y 坐标值。从 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) |
+-------------------------------------------+
https://dev.mysql.com/doc/refman/8.0/en/gis-point-property-functions.html