# 12.17.10 空间 Geohash 函数
Geohash 是一种用于将任意精度的经纬度坐标编码为文本字符串的系统。Geohash 值是仅包含从以下选项中选择的字符的字符串“0123456789bcdefghjkmnpqrstuvwxyz”
.
本节中的函数支持对 geohash 值的操作,为应用程序提供导入和导出 geohash 数据以及索引和搜索 geohash 值的功能。
除非另有说明,本节中的函数按如下方式处理其几何参数:
如果有任何论据
空值
,返回值为空值
.如果任何参数无效,则会发生错误。
如果任何参数的经度或纬度超出范围,则会发生错误:
如果经度值不在 (−180, 180] 范围内,则
ER_GEOMETRY_PARAM_LONGITUDE_OUT_OF_RANGE
(opens new window)发生错误(ER_LONGITUDE_OUT_OF_RANGE
(opens new window)在 MySQL 8.0.12 之前)。如果纬度值不在范围内[−90, 90], 一个
ER_GEOMETRY_PARAM_LATITUDE_OUT_OF_RANGE
(opens new window)发生错误(ER_LATITUDE_OUT_OF_RANGE
(opens new window)在 MySQL 8.0.12 之前)。显示的范围以度为单位。由于浮点运算,确切的范围限制略有偏差。
如果任何点参数不具有 SRID 0 或 4326,则
ER_SRS_NOT_FOUND
(opens new window)发生错误。*观点
*不检查参数 SRID 有效性。如果任何 SRID 参数引用未定义的空间参考系统 (SRS),则
ER_SRS_NOT_FOUND
(opens new window)发生错误。如果任何 SRID 参数不在 32 位无符号整数的范围内,则
ER_DATA_OUT_OF_RANGE
(opens new window)发生错误。否则,返回值为非
空值
.这些 geohash 函数可用:
-
ST_GeoHash(*
经度*, *
纬度*, *
最长长度*)
,ST_GeoHash(*
观点*, *
最大长度*)
返回连接字符集和排序规则中的geohash字符串。
对于第一种语法*
经度
必须是范围内的数字[−180, 180],以及纬度
*必须是范围内的数字[−90, 90].对于第二种语法指向
值是必需的,其中X和Y坐标分别位于经度和纬度的有效范围内。结果字符串的长度不超过*
最大长度
字符,上限为100。字符串可能比最大长度
字符,因为创建geohash值的算法会一直持续,直到它创建了一个精确表示位置或位置的字符串最大长度
*角色,以先到者为准。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_街*)
从 geohash 字符串值返回纬度,作为范围内的双精度数字[−90, 90].
这
ST_LatFromGeoHash()
解码函数读取不超过 433 个字符*geohash_str
*争论。这代表了坐标值内部表示中信息的上限。超过第 433 个字符将被忽略,即使它们在其他方面是非法的并产生错误。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*, *
斯里德*)
返回一个
观点
包含解码的 geohash 值的值,给定一个 geohash 字符串值。该点的 X 和 Y 坐标是范围内的经度[,180 180]和范围内的纬度[−90, 90], 分别。
这*
斯里德
*参数是一个 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) | +---------------------------------------+