- 类别:
ST_GEOHASH¶
返回 GEOGRAPHY 或 GEOMETRY 对象的 地理哈希 (link removed)。地理哈希是一个短的 base32 字符串,用于标识包含世界上某个位置的测地线矩形。
地理哈希中的字符数决定了精度。从地理哈希末尾删除字符会导致地理哈希精度降低,并且标识较大的矩形区域。
ST_GEOHASH 返回长度为 20 个字符的地理哈希。可选 precision
实参指定返回的地理哈希的精度。例如,把 5
传递给 precision
将返回一个不太精确的较短地理哈希(5 个字符长)。
备注
对于不是点的地理空间对象,该函数可能会返回精度较低的地理哈希,而不考虑 precision
的默认值或指定值。
在这些情况下,精度由地理空间对象的边界框确定。ST_GEOHASH 首先确定边界框左下角和右上角的地理哈希,然后返回这两个地理哈希共有的前缀。
语法¶
ST_GEOHASH( <geography_expression> [, <precision> ] )
ST_GEOHASH( <geometry_expression> [, <precision> ] )
实参¶
必填:
geography_expression
实参必须是 GEOGRAPHY 类型的表达式。
geometry_expression
实参必须是 GEOMETRY 且 SRID 为 4326 类型的表达式。
可选:
precision
要在地理哈希中使用的字符数。您可以指定一个介于
1
和20
之间的值。默认情况下,
precision
是20
,这会生成一个长度为 20 个字符的地理哈希。
返回¶
返回指定对象的地理哈希( STRING 类型的值)。
如果对象是多边形,并且边界框的两个点不共享相同的地理哈希前缀,则该函数可能会返回一个空字符串。
示例¶
以下示例返回 GEOGRAPHY 点的地理哈希:
SELECT ST_GEOHASH(
TO_GEOGRAPHY('POINT(-122.306100 37.554162)'))
AS geohash_of_point_a;
+----------------------+
| GEOHASH_OF_POINT_A |
|----------------------|
| 9q9j8ue2v71y5zzy0s4q |
+----------------------+
以下示例返回精度较低的同一 GEOGRAPHY 点的地理哈希:
SELECT ST_GEOHASH(
TO_GEOGRAPHY('POINT(-122.306100 37.554162)'),
5) AS less_precise_geohash_a;
+------------------------+
| LESS_PRECISE_GEOHASH_A |
|------------------------|
| 9q9j8 |
+------------------------+
以下示例返回 GEOMETRY 点的地理哈希:
SELECT ST_GEOHASH(
TO_GEOMETRY('POINT(-122.306100 37.554162)', 4326))
AS geohash_of_point_a;
+----------------------+
| 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;
+----------------------+----------------------+
| 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;
+------------------------+------------------------+
| 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;
+--------------------+
| GEOHASH_OF_POLYGON |
|--------------------|
| 9q9j8 |
+--------------------+