用于 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 编码字符串数组,这些字符串落在给定框的边界内并与之相交,基本上是将 2D 网格展平为数组。
语法
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'] │
└─────────────────────────────────────────────┘