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、+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坐标被认为是指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) | +-------------------------------------------+ -
使用单个参数,表示有效的
Point对象p,ST_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) | +-------------------------------------------+