12.16.10 空间 Geohash 函数

Geohash 是用于将任意精度的纬度和经度坐标编码为文本字符串的系统。 Geohash 值是仅包含从"0123456789bcdefghjkmnpqrstuvwxyz"中选择的字符的字符串。

本节中的功能使您能够操纵 geohash 值,从而为应用程序提供导入和导出 geohash 数据以及索引和搜索 geohash 值的功能。

ST_GeoHash(经度,纬度,最大长度), ST_GeoHash(point, max_length)

返回连接字符集和排序规则中的 geohash 字符串。

如果任何参数为NULL,则返回值为NULL。如果任何参数无效,则会发生错误。

对于第一种语法,* longitude 必须是[-180,180]范围内的数字,而 latitude *必须是[-90,90]范围内的数字。对于第二种语法,需要POINT值,其中 X 和 Y 坐标分别在经度和纬度的有效范围内。

结果字符串不超过* max_length 字符(上限为 100)。该字符串可能比 max_length 字符短,这是因为创建 geohash 值的算法会 continue 进行,直到创建的字符串完全相同为止位置的 table 示形式或 max_length *字符,以先到者为准。

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]范围内的DOUBLE值形式。

如果参数为NULL,则返回值为NULL。如果参数无效,则会发生错误。

ST_LatFromGeoHash()解码功能从* geohash_str *参数中读取的字符数不超过 433 个。这代 table 了坐标值内部 table 示中信息的上限。超过 433rd 的字符将被忽略,即使它们是非法的并产生错误。

mysql> SELECT ST_LatFromGeoHash(ST_GeoHash(45,-20,10));
+------------------------------------------+
| ST_LatFromGeoHash(ST_GeoHash(45,-20,10)) |
+------------------------------------------+
|                                      -20 |
+------------------------------------------+

ST_LongFromGeoHash(geohash_str)

从 geohash 字符串值返回经度,以[_180,180]范围内的DOUBLE值形式。

如果参数为NULL,则返回值为NULL。如果参数无效,则会发生错误。

ST_LatFromGeoHash()的描述中有关从* geohash_str *参数处理的最大字符数的说明也适用于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 字符串值,返回包含已解码 geohash 值的POINT值。

该点的 X 坐标和 Y 坐标分别是[-180,180]范围内的经度和[-90,90]范围内的纬度。

如果任何参数为NULL,则返回值为NULL。如果任何参数无效,则会发生错误。

  • srid *参数是一个无符号的 32 位整数。

ST_LatFromGeoHash()的描述中有关从* geohash_str *参数处理的最大字符数的说明也适用于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)                         |
+---------------------------------------+