GPS座標を短い文字列で扱えるGeoHashが面白い
    このエントリをはてなブックマークに登録

位置情報を短い文字列で扱うことのできるGeoHashというのが面白いのでご紹介します。

 

ケータイのGPSなどから取得する座標は通常「緯度・経度」という形で扱われます。
「+141.22.35.364, +43.3.14.112」みたいな感じですね。

ところがGeoHashでは、この座標は文字列で表され「xpssbxt2gpf」となります。

面白いことにこの文字列は、座標のように「点」を表しているのではなく「範囲(グリッド)」を表しています。

そして、この文字列は長ければ長いほど詳細な情報を持ちます。
つまり文字列を短くすると、より広い範囲を表すことになります。

 

例えば上の文字列から3文字削った「xpssbxt2」は、次のような範囲になります。

20100130_geohash1

 

そこから更に2文字削った「xpssbx」は、より広い範囲を表すことになり、次のような範囲になります。(範囲が広すぎて表示しきれないので地図の縮尺も上げています)

20100130_geohash

 

どうも説明が下手なので、恐らくわかるようなわからないような、という感じでしょう。

現在のところmasuidrive氏のブログが、日本語でGeoHashを一番詳しく解説しているのではないかと思われるので、ご紹介させていただきます。
(図解も多くわかりやすいと思います)

→ @masuidrive blog 緯度経度を文字列で表すGeoHash [blog.masuidrive.jp]

 

また同時に実際にGeohashを試すことの出来るデモも公開されているようです。

→ @masuidrive blog geohashデモアプリケーション [blog.masuidrive.jp]

「東京タワー」のような語句を入れて描画ボタンを押すと、GeoHash値とその範囲が表示されるはずです。

 

GeoHashは、既に色んな言語向けに実装が進んでいるようで、上記ブログでもRuby用のライブラリが公開されています。

英語版のWikipediaに各言語向けのリンクがあります。

私も上記リンクから辿ってPHPで試してみたのですが、どうもライブラリが簡素なものしかありませんでした。

 

検索してみたところ、「とりあえずPHP」というブログ内にGeoHashのデコード、エンコード、隣接する領域を取る関数のサンプルコードがありましたので活用させていただきました。

→ とりあえずPHP Geohash関数 [mtcn.ko-me.com]

使い方はソースを見れば一目瞭然だと思いますが、こんな感じです。

// テスト用の座標
$lat_in = '43.06383';
$lon_in = '141.35744';

// 座標からGeoHash形式へ(3番目の引数は精度)
$hash = geohash_encode($lat_in, $lon_in, 6);

// GeoHash形式から座標へ
$geo_arr = geohash_decode_interval($hash);

$grid_x1 = $geo_arr[1][0];		// グリッドの左上の点
$grid_x2 = $geo_arr[1][1];		// グリッドの左下の点
$grid_y1 = $geo_arr[0][0];		// グリッドの右上の点
$grid_y2 = $geo_arr[0][1];		// グリッドの右下の点

 

なお、ケータイから取得できる座標は、度分秒形式なので、あらかじめミリ秒形式に変換する必要があります。
詳しくはこちらの記事を参考にしてください。

 

このGeoHash何が良いのかというと、

  • 場所の絞り込みが簡単に行える、隣接エリアの取得も容易。
  • 範囲が前方一致で検索できるので、文字列マッチやSQLのlike文などとも相性が良く、高速な処理が可能
  • 座標と精度を短い文字列で持つことができるので、URLで扱いやすい

のような点が上げられると思います。

 

これを使えばケータイのGPSでドラクエのすれ違い通信的なものも割と簡単に実装できる気がしているので、現在遊んでみているところです。

 

関連:


 

最近の記事







4 Responses to “GPS座標を短い文字列で扱えるGeoHashが面白い”

  1. […] GPS座標を短い文字列で扱えるGeoHashが面白い | ke-tai.org GPS座標を短い文字列で扱えるGeoHashが面白い | ke-tai.org […]

  2. […] GPS座標を短い文字列で扱えるGeoHashが面白い | ke-tai.org geohashの話 […]

  3. […] GPS座標を短い文字列で扱えるGeoHashが面白い […]

  4. 記事内で紹介されていたデモアプリがandroidやchromeで文字化けするようなのでエリア確認ツールを作成して見ました

コメントを書く