跳到主要内容

_ST_GeoHash

描述

GeoHash 是一种地理编码系统(Geocode System),通过将纬度和经度坐标转换为字符串格式(字母和数字的组合),它为地理位置提供了一种文本表示。GeoHash 不指向一个精确的点位置,而是代表一个矩形区域,在该区域中的所有点都会分配相同的 GeoHash 值。这种特性允许 GeoHash 在保护个人位置隐私的前提下,支持地理位置的近似描述和快速处理。Geohash 核心思想是区间二分:将地球编码看成一个二维平面,分别对经度和纬度进行递归二分,得到更小的子块,并对每个子块进行编码。可以看出,geohash 越长,对经纬度的划分次数就越多。划分的次数越多,矩形的子块就越小,即位置精度越高。

在本文中,_ST_GeoHash 函数用于将几何对象(Geometry)转换为一个字符串表示的 geohash 值。

语法

_ST_GeoHash(geometry, [precision])

参数解释

  • geometry:表示要转换为 GeoHash 值几何对象。

  • precision:可选项,接受整数(int)格式的输入,是 GeoHash 的计算精度,即返回的 GeoHash 字符串的长度。数值越大,表示的地理范围越精确。

    • 如果不指定 precision 或者指定 precision 为 0,返回的 GeoHash 的精度将根据输入的几何对象进行计算,精度为最小的能包含输入几何对象的子块的精度。Point 会返回精度为 20 个字符的 GaoHash。
    • 如果指定 precision,返回的 GeoHash 精度为指定的 precision。对于非点,计算的起点是几何体边界框的中心。

示例

  • 将点转换为由字母和数字组成的短字符串 GeoHash 值,精度为 20。

    SELECT _ST_GeoHash(Point(-126.002,48.348), 20) AS geohash;

    返回结果如下:

    +----------------------+
    | geohash |
    +----------------------+
    | c0w7hc2ps87jfvwhesrb |
    +----------------------+
    1 row in set (0.001 sec)
  • 将多边形转换为由字母和数字组成的短字符串 GeoHash 值,精度为 10。

    1. ST_GEOMFROMTEXT 函数接受一个 WKT(Well-Known Text)格式的字符串并返回一个几何对象。本示例中使用了 POLYGON((10 10, 20 20, 10 30, 0 20, 10 10)) 作为输入参数,这个字符串定义了一个多边形的五个顶点坐标;最后一个坐标与第一个坐标相同,因此它是一个闭合的多边形。
    2. 10 是 GeoHash 的精确度参数,指示返回的 GeoHash 字符串应该有多长。
    3. 它将查询结果列命名为 geohash
    SELECT _ST_GeoHash(ST_GEOMFROMTEXT('POLYGON((10 10, 20 20, 10 30, 0 20, 10 10))'), 10) AS geohash;

    返回结果如下:

    +------------+
    | geohash |
    +------------+
    | s5x1g8cu2y |
    +------------+
    1 row in set (0.001 sec)

相关文档