Geohash是一个将任意精度的纬度和经度坐标编码到文本字符串的系统。Geohash值是仅包含字符的字符串 ""0123456789bcdefghjkmnpqrstuvwxyz"
。
本节中的函数使应用程序能够导入和导出Geohash数据,并对Geohash值进行索引和搜索。
除非另有指定,本节中的函数将其几何参数处理如下:
-
如果任何参数为
NULL
,则返回值为NULL
。 -
如果任何参数无效,将发生错误。
-
如果任何参数的经度或纬度超出范围,将发生错误:
-
如果经度值不在范围(−180,180]内,将发生
ER_GEOMETRY_PARAM_LONGITUDE_OUT_OF_RANGE
错误。 -
如果纬度值不在范围 [−90,90] 内,将发生
ER_GEOMETRY_PARAM_LATITUDE_OUT_OF_RANGE
错误。
显示的范围以度为单位。由于浮点算术的原因,实际范围限制略有偏差。
-
-
如果任何点参数没有 SRID 0 或 4326,将发生
ER_SRS_NOT_FOUND
错误。point
参数 SRID 有效性不被检查。 -
如果任何 SRID 参数引用了未定义的空间参考系统(SRS),将发生
ER_SRS_NOT_FOUND
错误。 -
如果任何 SRID 参数不在 32 位无符号整数范围内,将发生
ER_DATA_OUT_OF_RANGE
错误。 -
否则,返回值不是
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
字符,ichever comes first。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()
解码函数最多读取geohash_str
参数的 433 个字符。该限制表示坐标值的内部表示形式的上限。超过 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
,srid
)返回一个包含解码的geohash值的
POINT
值,给定一个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) | +---------------------------------------+