解決策
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つとなっている。
出典をたどる
出典
- Geohash (lat/lon encoding) Movable Type Scripts · movable-type.co.uk
- Geo-point field type Elastic · elastic.co
- Geohash Wikipedia · en.wikipedia.org