一个 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错误。
显示的范围以度为单位。由于浮点运算,精确的范围限制会有轻微偏差。
否则,返回值为非
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) | +----------------------------------+如果只有一个参数表示一个有效的
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) | +-------------------------------------------+如果只有一个参数表示一个有效的
Point对象p,ST_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) | +-------------------------------------------+