Geohash使ってmysqlで近隣検索

この前はmysqlが空間データ型に対応していたことに感動したが、今回Geohash(ジオハッシュ)というものを使えば高速で近隣検索できることを知ってしまったので即試した。これ考えた人マジ天才。

iPhoneで現在地取得してから近隣スポットをDBから検索している。
Geohashとは、位置情報をグリッドを参照する文字列で表し、その文字列の長さでグリッドのスケールを表すというもの。いちいち距離計算しなくても文字列の一致を検索するだけで近隣検索ができるからmysqlと相性がいい。説明は @masuidrive blog が分かりやすい。実装するためのPHPライブラリはいくつかあったけど、 LordElph’s Ramblings のやつが簡潔だったから使ってみた。ちなみにsh_spotテーブルにはgeohash用のカラムを増やしてデータ入れ直した。
スポットまでの距離を表示したい場合はDBから取り出した後で別途緯度経度使って距離計算すれば良いのかなー
あとこのデモ、わかりやすい(utf8じゃないと化ける)。

iPhoneで結果表示の図↓↓(近隣のガソリンスタンドの住所が表示された)

参考URL ・WikiPedia - ジオハッシュLordElph’s Ramblings - Geohash PHP Classke-tai.org - GPS座標を短い文字列で扱えるGeoHashが面白い@masuidrive blog - 緯度経度を文字列で表すGeoHashCirius Lab. - sa2da さんの GeoHex がイケている件