类别:

地理空间函数

ST_GEOHASH

返回 GEOGRAPHYGEOMETRY 对象的 地理哈希 (link removed)。地理哈希是一个短的 base32 字符串,用于标识包含世界上某个位置的测地线矩形。

地理哈希中的字符数决定了精度。从地理哈希末尾删除字符会导致地理哈希精度降低,并且标识较大的矩形区域。

ST_GEOHASH 返回长度为 20 个字符的地理哈希。可选 precision 实参指定返回的地理哈希的精度。例如,把 5 传递给 precision 将返回一个不太精确的较短地理哈希(5 个字符长)。

备注

对于不是点的地理空间对象,该函数可能会返回精度较低的地理哈希,而不考虑 precision 的默认值或指定值。

在这些情况下,精度由地理空间对象的边界框确定。ST_GEOHASH 首先确定边界框左下角和右上角的地理哈希,然后返回这两个地理哈希共有的前缀。

另请参阅:

ST_GEOGFROMGEOHASHST_GEOGPOINTFROMGEOHASH

语法

ST_GEOHASH( <geography_expression> [, <precision> ] )

ST_GEOHASH( <geometry_expression> [, <precision> ] )
Copy

实参

必填:

geography_expression

实参必须是 GEOGRAPHY 类型的表达式。

geometry_expression

实参必须是 GEOMETRY 且 SRID 为 4326 类型的表达式。

可选:

precision

要在地理哈希中使用的字符数。您可以指定一个介于 120 之间的值。

默认情况下,precision20,这会生成一个长度为 20 个字符的地理哈希。

返回

返回指定对象的地理哈希( STRING 类型的值)。

如果对象是多边形,并且边界框的两个点不共享相同的地理哈希前缀,则该函数可能会返回一个空字符串。

示例

以下示例返回 GEOGRAPHY 点的地理哈希:

SELECT ST_GEOHASH(
  TO_GEOGRAPHY('POINT(-122.306100 37.554162)'))
  AS geohash_of_point_a;
Copy
+----------------------+
| GEOHASH_OF_POINT_A   |
|----------------------|
| 9q9j8ue2v71y5zzy0s4q |
+----------------------+

以下示例返回精度较低的同一 GEOGRAPHY 点的地理哈希:

SELECT ST_GEOHASH(
  TO_GEOGRAPHY('POINT(-122.306100 37.554162)'),
  5) AS less_precise_geohash_a;
Copy
+------------------------+
| LESS_PRECISE_GEOHASH_A |
|------------------------|
| 9q9j8                  |
+------------------------+

以下示例返回 GEOMETRY 点的地理哈希:

SELECT ST_GEOHASH(
  TO_GEOMETRY('POINT(-122.306100 37.554162)', 4326))
  AS geohash_of_point_a;
Copy
+----------------------+
| GEOHASH_OF_POINT_A   |
|----------------------|
| 9q9j8ue2v71y5zzy0s4q |
+----------------------+

以下示例显示了共享相同前缀的两个地理哈希,这表示这两个 GEOGRAPHY 点彼此靠近。

SELECT
  ST_GEOHASH(
    TO_GEOGRAPHY('POINT(-122.306100 37.554162)'))
    AS geohash_of_point_a,
  ST_GEOHASH(
    TO_GEOGRAPHY('POINT(-122.323111 37.562333)'))
    AS geohash_of_point_b;
Copy
+----------------------+----------------------+
| GEOHASH_OF_POINT_A   | GEOHASH_OF_POINT_B   |
|----------------------+----------------------|
| 9q9j8ue2v71y5zzy0s4q | 9q9j8qp02yms1tpjesmc |
+----------------------+----------------------+
SELECT
  ST_GEOHASH(
    TO_GEOGRAPHY('POINT(-122.306100 37.554162)'),
    5) AS less_precise_geohash_a,
  ST_GEOHASH(
    TO_GEOGRAPHY('POINT(-122.323111 37.562333)'),
    5) AS less_precise_geohash_b;
Copy
+------------------------+------------------------+
| LESS_PRECISE_GEOHASH_A | LESS_PRECISE_GEOHASH_B |
|------------------------+------------------------|
| 9q9j8                  | 9q9j8                  |
+------------------------+------------------------+

以下示例返回多边形的地理哈希。此多边形的边界框的左下角和右上角与前面示例中使用的两个 GEOGRAPHY 点相同。如此示例所示,ST_GEOHASH 返回边界框左下角和右上角的地理哈希共有的前缀。

SELECT
  ST_GEOHASH(
    TO_GEOGRAPHY(
      'POLYGON((-122.306100 37.554162, -122.306100 37.562333, -122.323111 37.562333, -122.323111 37.554162, -122.306100 37.554162))'
    )
  ) AS geohash_of_polygon;
Copy
+--------------------+
| GEOHASH_OF_POLYGON |
|--------------------|
| 9q9j8              |
+--------------------+
语言: 中文