位置情報サービスのはじめ方

第6回 位置情報を保存しよう(後編)

この記事を読むのに必要な時間:およそ 3 分

前回は,位置情報を数値型やGeometry型でデータベースへ保存する方法について解説しました。今回は,文字列としてデータベースへ保存する方法について解説します。

Geohash

文字列として扱うといっても,緯度経度をそのまま⁠35.0116, 135.768⁠という文字列として扱うわけではありません。緯度経度を文字列として表現する方法はいくつかありますが,今回はGeohashを紹介します。

Geohashは,地図上の矩形エリアをあるルールにしたがって,文字列化するという手法です。Geohashの値が「短く」なると矩形エリアは「広く」⁠値が「長く」なると矩形エリアは「狭く」なります。またGeohashには,先頭文字列が一致するGeohashの矩形エリアは,その一致している文字列が示す矩形エリアに内包されている,という特徴があります。

百聞は一見に如かず,ということで,例を見てみましょう。以下のテーブルの,Geohashという列にあるのがGeohashの値で,矩形エリア列にあるのが,そのGeohashが指す矩形エリア(赤色部分)になります。

No Geohash 矩形エリア
1 xn76u 画像
2 xn76u4 画像
3 xn76u4z 画像
4 xn76u4zs 画像
5 xn76u4zsz 画像

Geohashの桁が1つ増えると,その矩形エリアが32分割されます。図示すると,以下のようになります。

画像

緑色の矩形のGeohashは⁠xn76ukb” となり,その下の赤い矩形はそれぞれ,⁠xn76ukb[BASE32String]⁠(※2)という8桁のGeohashになります。

※2
Geohashは,[0-9bcdefghjkmnpqrstuvwzyz]という32種類の文字列から構成され,大文字小文字の区別はありません。

Goehashは,緯度経度のような点の情報ではありませんが,その桁数が10桁を超えると,矩形の一辺が1m以下になるので,緯度経度の代わりとして十分利用可能です。

Geohashのエンコード・デコード方法については,以下のブログが参考になります。

上記ブログでは,Geohashのデコード方法が紹介されていますが,エンコードはデコードの逆の手順で実現できます。Geohashは,すでに各言語でライブラリが提供されているので,自分で一から実装しなくても,手軽に利用できます。

著者プロフィール

栗栖義臣(くりすよしおみ)

株式会社はてな。Java, JavaScript, ActionScript, Perlなどをたしなむ。

優秀な若手エンジニアたちに囲まれながら奮闘する毎日。

URL : http://d.hatena.ne.jp/chris4403/

技術ネタ : http://d.hatena.ne.jp/chris4403+tech/

コメント

コメントの記入