空间Geohash函数
Geohash是用于将任意精度的纬度和经度坐标编码为文本字符串的系统。Geohash值是仅包含选自中的字符的字符串"0123456789bcdefghjkmnpqrstuvwxyz"
。
本节中的功能使您能够操纵geohash值,从而为应用程序提供导入和导出geohash数据以及索引和搜索geohash值的功能。
除非另有说明,否则本节中的函数将按以下方式处理其参数:
- 如果有任何参数
NULL
,则返回值为NULL
。 - 如果任何参数无效,则会发生错误。
如果任何参数的经度或纬度超出范围,则会发生错误:
- 如果任何经度参数不在范围内(-180,180],
ER_LONGITUDE_OUT_OF_RANGE
则会发生错误。 - 如果任何纬度参数不在[-90,90]范围内,
ER_LATITUDE_OUT_OF_RANGE
则会发生错误。
显示的范围以度为单位。精确的范围限制由于浮点运算而略有不同。
- 如果任何经度参数不在范围内(-180,180],
- 如果任何点参数不具有SRID 0或4326,
ER_SRS_NOT_FOUND
则会发生错误。point
不检查参数SRID的有效性。 - 如果任何SRID参数都引用了未定义的空间参照系(SRS),
ER_SRS_NOT_FOUND
则会发生错误。 - 如果任何SRID参数不在32位无符号整数的范围内,
ER_DATA_OUT_OF_RANGE
则会发生错误。 - 否则,返回值为non-
NULL
。
这些geohash函数可用:
ST_GeoHash(longitude,latitude,max_length)
,ST_GeoHash(point,max_length)
返回连接字符集和校验规则中的geohash字符串。
对于第一种语法,
longitude
必须为[-180,180]范围内的数字,并且latitude
必须为[-90,90]范围内的数字。对于第二种语法,POINT
需要一个值,其中X和Y坐标分别在经度和纬度的有效范围内。生成的字符串不得超过
max_length
字符(上限为100个字符)。该字符串可能比max_length
字符短,这是因为创建geohash值的算法会继续进行,直到创建的字符串可以精确表示位置或max_length
字符,以先到者为准。ST_GeoHash()
按照本节简介中所述处理其参数。mysql>
SELECT ST_GeoHash(180,0,10), ST_GeoHash(-180,-90,15); +---------------------- +------------------------- + | ST_GeoHash(180,0,10) | ST_GeoHash( -180, -90,15) | +---------------------- +------------------------- + | xbpbpbpbpb | 000000000000000 | +---------------------- +------------------------- +ST_LatFromGeoHash(geohash_str)
从geohash字符串值返回纬度,以[-90,90]范围内的双精度数表示。
该
ST_LatFromGeoHash()
解码函数读取不超过从433个字符geohash_str
的参数。这代表了坐标值内部表示中信息的上限。超过433rd的字符将被忽略,即使它们在其他方面是非法的并产生错误。ST_LatFromGeoHash()
按照本节简介中所述处理其参数。mysql>
SELECT ST_LatFromGeoHash(ST_GeoHash(45,-20,10)); +------------------------------------------ + | ST_LatFromGeoHash(ST_GeoHash(45, -20,10)) | +------------------------------------------ + | -20 | +------------------------------------------ +ST_LongFromGeoHash(geohash_str)
从geohash字符串值返回经度,作为范围为[−180,180]的双精度数字。
ST_LatFromGeoHash()
关于从geohash_str
参数处理的最大字符数的描述中的注释也适用于ST_LongFromGeoHash()
。ST_LongFromGeoHash()
按照本节简介中所述处理其参数。mysql>
SELECT ST_LongFromGeoHash(ST_GeoHash(45,-20,10)); +------------------------------------------- + | ST_LongFromGeoHash(ST_GeoHash(45, -20,10)) | +------------------------------------------- + | 45 | +------------------------------------------- +ST_PointFromGeoHash(geohash_str,srid)
POINT
给定一个geohash字符串值,返回一个包含解码的geohash值的值。该点的X坐标和Y坐标分别是[-180,180]范围内的经度和[-90,90]范围内的纬度。
所述
srid
参数是一个32位无符号整数。ST_LatFromGeoHash()
关于从geohash_str
参数处理的最大字符数的描述中的注释也适用于ST_PointFromGeoHash()
。ST_PointFromGeoHash()
按照本节简介中所述处理其参数。mysql>
SET @gh = ST_GeoHash(45,-20,10); mysql>SELECT ST_AsText(ST_PointFromGeoHash(@gh,0)); +--------------------------------------- + | ST_AsText(ST_PointFromGeoHash(@gh,0)) | +--------------------------------------- + | POINT(45 -20) | +--------------------------------------- +