2008年2月、Gustavo Niemeyerはgeohashを発表し、geohash.orgを立ち上げた。地理的な位置を短い英数字の文字列に符号化する、パブリックドメインのジオコード体系である。狙いは、座標をメールやURL、データベースのキーに書けるものにすることだった。

鍵となるのは接頭辞に宿る階層性だ。geohashは緯度と経度のビットを交互に並べてbase32で符号化する。1文字増えるごとに5ビット分の精度が加わり、直前のセルの32のうちの1つの子セルを特定する。近くの場所は一般に接頭辞を共有し、末尾の文字を削ればコードとして有効なまま領域が狭まる。

この性質がgeohashを標準にした。Elasticsearchは、geo-pointをgeohash、すなわち緯度と経度のビットを交互に並べたbase32文字列として表現できると文書化しており、インデックス作成やグリッド集計に利用している。これにより近接検索は、すでに存在するインデックスに対する文字列の接頭辞検索になる。

接頭辞が近接を意味する1つの文字列

接頭辞の長さが精度と近接性の両方を兼ねるため、1つのフィールドで両方を担える。

短い文字列は座標の組よりも共有しやすい。

既存の文字列インデックスは、地理空間処理のために新たな仕組みを必要としない。

パブリックドメインでの公開により、採用を拒むライセンス上の理由がなくなった。

2次元の問題を1次元のキーに圧縮すれば、既存のあらゆる文字列インデックスが空間インデックスになる。接頭辞の長さが精度と近接性の両方を符号化するため、新たな仕組みは不要だ。

geohashは位置を表現しインデックス化する標準的な方法になった。Elasticsearchはgeohashのgeo-pointとgeohashグリッド集計を文書化しており、文字列形式であることからキャッシュやURL、データベースのキーに自然に使えるようになった。現在では地理空間インデックスを支える既定の符号化の1つとなっている。

出典をたどる

出典

  1. Geohash (lat/lon encoding) Movable Type Scripts · movable-type.co.uk
  2. Geo-point field type Elastic · elastic.co
  3. Geohash Wikipedia · en.wikipedia.org