メインコンテンツまでスキップ
メインコンテンツまでスキップ

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エンコードされた文字列。

返される値

  • Float64型の経度と緯度のタプル(longitude, latitude)Tuple(Float64)

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のいずれか。

返される値

  • 提供されたエリアをカバーする精度が長いgeohashボックスの文字列の配列。アイテムの順序には依存しないでください。 Array(String).
  • [] — 最小緯度と経度の値が対応する最大値よりも小さくない場合は空の配列。
注記

結果の配列が10'000'000アイテムを超えると、関数は例外をスローします。

クエリ:

SELECT geohashesInBox(24.48, 40.56, 24.785, 40.81, 4) AS thasos;

結果:

┌─thasos──────────────────────────────────────┐
│ ['sx1q','sx1r','sx32','sx1w','sx1x','sx38'] │
└─────────────────────────────────────────────┘