Your SlideShare is downloading. ×
  • Like
appengine ja night BT 近くを探す?
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×

Now you can save presentations on your phone or tablet

Available for both IPhone and Android

Text the download link to your phone

Standard text messaging rates apply

appengine ja night BT 近くを探す?

  • 2,052 views
Published

#appengine のレンジスキャンで近傍点を探すアレ

#appengine のレンジスキャンで近傍点を探すアレ

  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
No Downloads

Views

Total Views
2,052
On SlideShare
0
From Embeds
0
Number of Embeds
2

Actions

Shares
Downloads
16
Comments
0
Likes
2

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. 近くを探す? appengine ja night beer talk あらかわ (@ashigeru)
  • 2. テーマ  座標(x, y)に近い点を探す  App Engineのデータストアでどうやる? appengine ja night beer talk - @ashigeru 2
  • 3. App Engineのクエリの特性  1次元のレンジスキャン  1つの値を大小関係で並べて順に取り出すだけ  開始地点(と終了地点)を選べる  (x, y)とかどう見ても2次元座標 appengine ja night beer talk - @ashigeru 3
  • 4. 方法1: 離散化  座標を一定の幅で区切ってブロックに  付近のブロックに含まれているか調べる appengine ja night beer talk - @ashigeru 4
  • 5. 離散化の問題点  濃度によってはダメ  少ない→見つからない, 多い→見つかりすぎ appengine ja night beer talk - @ashigeru 5
  • 6. 方法2: インメモリフィルタ  2次元目はインメモリで処理する  1次元目はデータストアフィルタでやる appengine ja night beer talk - @ashigeru 6
  • 7. インメモリフィルタの問題点  個数によってはダメ  1次元目の結果が爆発しているかも appengine ja night beer talk - @ashigeru 7
  • 8. 空間充填曲線  (x, y)から遠くに向かってスキャンしたい  でも1次元のレンジスキャンしかできない  空間を1本の線で一筆書きする  空間充填曲線(Space Filling Curve)  ヒルベルト曲線、Z曲線などが有名 appengine ja night beer talk - @ashigeru 8
  • 9. Z曲線 (1)  平面の4点をZで結んでブロックにする  むしろN appengine ja night beer talk - @ashigeru 9
  • 10. Z曲線 (2)  ブロック4つをさらにZで結んでブロック にする appengine ja night beer talk - @ashigeru 10
  • 11. Z曲線 (3)  これを繰り返すと平面上のすべての点を 一筆書きできる appengine ja night beer talk - @ashigeru 11
  • 12. 空間充填曲線のスキャン (1)  ある点から前後にスキャンする  ただし、Z曲線の上でスキャン appengine ja night beer talk - @ashigeru 12
  • 13. 空間充填曲線のスキャン (2)  最初のZになければ、ひとつ大きなZで探 す appengine ja night beer talk - @ashigeru 13
  • 14. 空間充填曲線のスキャン (3)  徐々にZを大きくしていけばいつか見つか る  小→大で探すので、近い順に見つかる appengine ja night beer talk - @ashigeru 14
  • 15. Z曲線の作り方 (1)  それぞれの次元の値を2進数で書く appengine ja night beer talk - @ashigeru 15
  • 16. Z曲線の作り方 (2)  1ビットずつ取り出して並べ替える appengine ja night beer talk - @ashigeru 16
  • 17. Z曲線の作り方 (3)  繰り返して順になぞるとZ曲線になる appengine ja night beer talk - @ashigeru 17
  • 18. 多次元空間への拡張  平面じゃなくて4次元とかでも同じ  http://tiling.latest.ashigeru-demo.appspot.com/  http://gist.github.com/398695  4次元の得点空間で、近くの点を探す ≒ 得点が近い人を探す appengine ja night beer talk - @ashigeru 18
  • 19. Z曲線の問題点  アライメントに左右される  隣のZが意外と遠い  なので「一番近いものを探す」というのは難 しい  超立方体の構造で探す  1次元だけ極端に値が違ったりすると非常に遠 い  次元数が多すぎると使いにくい appengine ja night beer talk - @ashigeru 19
  • 20. 参考文献  Geospatial Queries with Google App Engine using GeoModel  http://code.google.com/intl/ja/apis/maps/ articles/geospatial.html  (その他募集中) appengine ja night beer talk - @ashigeru 20