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) | +---------------------------------------+