Python geohash 紹介

13
python-geohash紹介 Hiroaki Kawai

description

python-geohash 解説。神戸ITフェスティバル2011 #kobe_it_fes LT にて発表。 http://kobe-it-fes.org/

Transcript of Python geohash 紹介

Page 1: Python geohash 紹介

python-geohash紹介

Hiroaki Kawai

Page 2: Python geohash 紹介

地球上の位置を表現するテクニック

geohash?

Page 3: Python geohash 紹介

位置情報検索

位置情報をデータベースに格納し、検索する…データベース ?

…専用設計のものも存在するが 汎用の RDBMS を使いたい

Google AppEngine を使いたい

Page 4: Python geohash 紹介

やってみよう

CREATE TABLE geolog ( lat DOUBLE, lon DOUBLE, tm TIMESTAMP);

SELECT * FROM geolog WHERE lat >= 40.0 AND lat < 45.0 AND lon >= 140.0 AND lon < 145.0

…手元にロガーがあって、まったりと記録していったとしよう

ある場所の付近をいつ移動したか調べてみたかったとする

Page 5: Python geohash 紹介

Index問題

レコードを効率的に絞り込む 緯度経度を使うと、数字は二つ。効率的な index

が作れない。ひとつ制約を許す。

Page 6: Python geohash 紹介

地球の測り方(二進数)

東経西経

北緯

南緯

0 bit = 1 領域

Page 7: Python geohash 紹介

地球の測り方(二進数)

東経西経

北緯

南緯

1 bit = 2 領域

Page 8: Python geohash 紹介

地球の測り方(二進数)

東経西経

北緯

南緯

2 bit = 4 領域

Page 9: Python geohash 紹介

地球の測り方(二進数)

東経西経

北緯

南緯

3 bit = 8 領域

Page 10: Python geohash 紹介

geohash

以上のビット列を文字列で表現するBit 列 0100101011101

5 区切り 01001 01011 10100

文字列に置き換え 9cn

Page 11: Python geohash 紹介

python-geohash

実は、この計算は大幅に高速化できる浮動小数点の二進数1+2+4+8+16+.....

0.5 + 0.25 + 0.125 + 0.0625 + .....

メモリ上には初めから欲しいビット列がある→直接取り出してしまえ

そこで python-geohash C extension

C の簡単なインターフェースがあるので他に使ってもok

Page 12: Python geohash 紹介

領域絞込み

二進数で絞り込んでいく = geohash prefix match

Page 13: Python geohash 紹介

Project

http://code.google.com/p/python-geohash/

Supports Python 2.6~