Documentation Home
MySQL 8.3 Reference Manual
Related Documentation Download this Manual
PDF (US Ltr) - 40.8Mb
PDF (A4) - 40.9Mb
Man Pages (TGZ) - 294.0Kb
Man Pages (Zip) - 409.0Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb
Excerpts from this Manual

MySQL 8.3 Reference Manual  /  ...  /  Spatial Geohash Functions

14.16.10 空间Geohash函数

Geohash是一个将任意精度的纬度和经度坐标编码到文本字符串的系统。Geohash值是仅包含字符的字符串 ""0123456789bcdefghjkmnpqrstuvwxyz"

本节中的函数使应用程序能够导入和导出Geohash数据,并对Geohash值进行索引和搜索。

除非另有指定,本节中的函数将其几何参数处理如下:

  • 如果任何参数为 NULL,则返回值为 NULL

  • 如果任何参数无效,将发生错误。

  • 如果任何参数的经度或纬度超出范围,将发生错误:

    显示的范围以度为单位。由于浮点算术的原因,实际范围限制略有偏差。

  • 如果任何点参数没有 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)                         |
    +---------------------------------------+