使用 Geohash 的函数
Geohash
Geohash 是地理编码系统,它将地球表面细分为网格形状的存储桶,并将每个单元格编码为一个简短的字母和数字字符串。它是一种分层数据结构,因此 geohash 字符串越长,地理位置就越精确。
如果需要手动将地理坐标转换为 geohash 字符串,可以使用 geohash.org。
geohashEncode
将经度和纬度编码为 geohash 字符串。
语法
geohashEncode(longitude, latitude, [precision])
输入值
longitude
— 要编码的坐标的经度部分。范围为[-180°, 180°]
的浮点数。 Float。latitude
— 要编码的坐标的纬度部分。范围为[-90°, 90°]
的浮点数。 Float。precision
(可选)— 生成的编码字符串的长度。默认为12
。范围为[1, 12]
的整数。 Int8。
注意
- 所有坐标参数必须是相同类型:
Float32
或Float64
。 - 对于
precision
参数,任何小于1
或大于12
的值都会静默转换为12
。
返回值
- 编码坐标的字母数字字符串(使用 base32 编码字母表的修改版本)。 String。
示例
查询
SELECT geohashEncode(-5.60302734375, 42.593994140625, 0) AS res;
结果
┌─res──────────┐
│ ezs42d000000 │
└──────────────┘
geohashDecode
将任何 geohash 编码字符串解码为经度和纬度。
语法
geohashDecode(hash_str)
输入值
hash_str
— Geohash 编码字符串。
返回值
示例
SELECT geohashDecode('ezs42') AS res;
┌─res─────────────────────────────┐
│ (-5.60302734375,42.60498046875) │
└─────────────────────────────────┘
geohashesInBox
返回一个给定精度的 geohash 编码字符串数组,这些字符串位于给定框的边界内并与之相交,基本上是一个二维网格展平为数组。
语法
geohashesInBox(longitude_min, latitude_min, longitude_max, latitude_max, precision)
参数
longitude_min
— 最小经度。范围:[-180°, 180°]
。 Float。latitude_min
— 最小纬度。范围:[-90°, 90°]
。 Float。longitude_max
— 最大经度。范围:[-180°, 180°]
。 Float。latitude_max
— 最大纬度。范围:[-90°, 90°]
。 Float。precision
— Geohash 精度。范围:[1, 12]
。 UInt8。
注意
所有坐标参数必须是相同类型:Float32
或 Float64
。
返回值
注意
如果生成的数组超过 10’000’000 个项目,则函数会抛出异常。
示例
查询
SELECT geohashesInBox(24.48, 40.56, 24.785, 40.81, 4) AS thasos;
结果
┌─thasos──────────────────────────────────────┐
│ ['sx1q','sx1r','sx32','sx1w','sx1x','sx38'] │
└─────────────────────────────────────────────┘