SlideShare a Scribd company logo
近くを探す?

appengine ja night beer talk
あらかわ (@ashigeru)
テーマ
   座標(x, y)に近い点を探す
     App   Engineのデータストアでどうやる?




               appengine ja night beer talk - @ashigeru   2
App Engineのクエリの特性
   1次元のレンジスキャン
     1つの値を大小関係で並べて順に取り出すだけ
     開始地点(と終了地点)を選べる
     (x,   y)とかどう見ても2次元座標




               appengine ja night beer talk - @ashigeru   3
方法1: 離散化
   座標を一定の幅で区切ってブロックに
     付近のブロックに含まれているか調べる




         appengine ja night beer talk - @ashigeru   4
離散化の問題点
   濃度によってはダメ
     少ない→見つからない,                   多い→見つかりすぎ




          appengine ja night beer talk - @ashigeru   5
方法2: インメモリフィルタ
   2次元目はインメモリで処理する
     1次元目はデータストアフィルタでやる




         appengine ja night beer talk - @ashigeru   6
インメモリフィルタの問題点
   個数によってはダメ
     1次元目の結果が爆発しているかも




          appengine ja night beer talk - @ashigeru   7
空間充填曲線
   (x, y)から遠くに向かってスキャンしたい
     でも1次元のレンジスキャンしかできない



   空間を1本の線で一筆書きする
     空間充填曲線(Space Filling Curve)
     ヒルベルト曲線、Z曲線などが有名




             appengine ja night beer talk - @ashigeru   8
Z曲線 (1)
   平面の4点をZで結んでブロックにする
     むしろN




             appengine ja night beer talk - @ashigeru   9
Z曲線 (2)
   ブロック4つをさらにZで結んでブロック
    にする




          appengine ja night beer talk - @ashigeru   10
Z曲線 (3)
   これを繰り返すと平面上のすべての点を
    一筆書きできる




          appengine ja night beer talk - @ashigeru   11
空間充填曲線のスキャン (1)
   ある点から前後にスキャンする
     ただし、Z曲線の上でスキャン




          appengine ja night beer talk - @ashigeru   12
空間充填曲線のスキャン (2)
   最初のZになければ、ひとつ大きなZで探
    す




         appengine ja night beer talk - @ashigeru   13
空間充填曲線のスキャン (3)
   徐々にZを大きくしていけばいつか見つか
    る
     小→大で探すので、近い順に見つかる




         appengine ja night beer talk - @ashigeru   14
Z曲線の作り方 (1)
   それぞれの次元の値を2進数で書く




         appengine ja night beer talk - @ashigeru   15
Z曲線の作り方 (2)
   1ビットずつ取り出して並べ替える




         appengine ja night beer talk - @ashigeru   16
Z曲線の作り方 (3)
   繰り返して順になぞるとZ曲線になる




         appengine ja night beer talk - @ashigeru   17
多次元空間への拡張
   平面じゃなくて4次元とかでも同じ
     http://tiling.latest.ashigeru-demo.appspot.com/

     http://gist.github.com/398695


   4次元の得点空間で、近くの点を探す
    ≒ 得点が近い人を探す




                 appengine ja night beer talk - @ashigeru   18
Z曲線の問題点
   アライメントに左右される
     隣のZが意外と遠い
     なので「一番近いものを探す」というのは難
    しい
   超立方体の構造で探す
     1次元だけ極端に値が違ったりすると非常に遠
      い
     次元数が多すぎると使いにくい



          appengine ja night beer talk - @ashigeru   19
参考文献
   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

More Related Content

Similar to appengine ja night BT 近くを探す?

LINQ を使ったナンプレの解法を作ったお話
LINQ を使ったナンプレの解法を作ったお話LINQ を使ったナンプレの解法を作ったお話
LINQ を使ったナンプレの解法を作ったお話
Fumihito Yokoyama
 
プログラミングコンテストでの乱択アルゴリズム
プログラミングコンテストでの乱択アルゴリズムプログラミングコンテストでの乱択アルゴリズム
プログラミングコンテストでの乱択アルゴリズムTakuya Akiba
 
WAVE_WITH_GLSL
WAVE_WITH_GLSLWAVE_WITH_GLSL
WAVE_WITH_GLSL
理玖 川崎
 
WUPC2012
WUPC2012WUPC2012
WUPC2012
Dai Hamada
 
文字列曖昧検索によるマルウェアバイナリ解析
文字列曖昧検索によるマルウェアバイナリ解析文字列曖昧検索によるマルウェアバイナリ解析
文字列曖昧検索によるマルウェアバイナリ解析
Preferred Networks
 

Similar to appengine ja night BT 近くを探す? (6)

Comp geom20131107open
Comp geom20131107openComp geom20131107open
Comp geom20131107open
 
LINQ を使ったナンプレの解法を作ったお話
LINQ を使ったナンプレの解法を作ったお話LINQ を使ったナンプレの解法を作ったお話
LINQ を使ったナンプレの解法を作ったお話
 
プログラミングコンテストでの乱択アルゴリズム
プログラミングコンテストでの乱択アルゴリズムプログラミングコンテストでの乱択アルゴリズム
プログラミングコンテストでの乱択アルゴリズム
 
WAVE_WITH_GLSL
WAVE_WITH_GLSLWAVE_WITH_GLSL
WAVE_WITH_GLSL
 
WUPC2012
WUPC2012WUPC2012
WUPC2012
 
文字列曖昧検索によるマルウェアバイナリ解析
文字列曖昧検索によるマルウェアバイナリ解析文字列曖昧検索によるマルウェアバイナリ解析
文字列曖昧検索によるマルウェアバイナリ解析
 

Recently uploaded

FIDO Alliance Osaka Seminar: Welcome Slides.pdf
FIDO Alliance Osaka Seminar: Welcome Slides.pdfFIDO Alliance Osaka Seminar: Welcome Slides.pdf
FIDO Alliance Osaka Seminar: Welcome Slides.pdf
FIDO Alliance
 
This is the company presentation material of RIZAP Technologies, Inc.
This is the company presentation material of RIZAP Technologies, Inc.This is the company presentation material of RIZAP Technologies, Inc.
This is the company presentation material of RIZAP Technologies, Inc.
chiefujita1
 
CS集会#13_なるほどわからん通信技術 発表資料
CS集会#13_なるほどわからん通信技術 発表資料CS集会#13_なるほどわからん通信技術 発表資料
CS集会#13_なるほどわからん通信技術 発表資料
Yuuitirou528 default
 
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアルLoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
CRI Japan, Inc.
 
JSAI_類似画像マッチングによる器への印象付与手法の妥当性検証_ver.3_高橋りさ
JSAI_類似画像マッチングによる器への印象付与手法の妥当性検証_ver.3_高橋りさJSAI_類似画像マッチングによる器への印象付与手法の妥当性検証_ver.3_高橋りさ
JSAI_類似画像マッチングによる器への印象付与手法の妥当性検証_ver.3_高橋りさ
0207sukipio
 
FIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdf
FIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdfFIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdf
FIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdf
FIDO Alliance
 
論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...
論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...
論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...
Toru Tamaki
 
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
Matsushita Laboratory
 
FIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdf
FIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdfFIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdf
FIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdf
FIDO Alliance
 
単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...
単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...
単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...
Fukuoka Institute of Technology
 
【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching
【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching
【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching
harmonylab
 
FIDO Alliance Osaka Seminar: CloudGate.pdf
FIDO Alliance Osaka Seminar: CloudGate.pdfFIDO Alliance Osaka Seminar: CloudGate.pdf
FIDO Alliance Osaka Seminar: CloudGate.pdf
FIDO Alliance
 
FIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdf
FIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdfFIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdf
FIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdf
FIDO Alliance
 
ReonHata_便利の副作用に気づかせるための発想支援手法の評価---行為の増減の提示による気づきへの影響---
ReonHata_便利の副作用に気づかせるための発想支援手法の評価---行為の増減の提示による気づきへの影響---ReonHata_便利の副作用に気づかせるための発想支援手法の評価---行為の増減の提示による気づきへの影響---
ReonHata_便利の副作用に気づかせるための発想支援手法の評価---行為の増減の提示による気づきへの影響---
Matsushita Laboratory
 

Recently uploaded (14)

FIDO Alliance Osaka Seminar: Welcome Slides.pdf
FIDO Alliance Osaka Seminar: Welcome Slides.pdfFIDO Alliance Osaka Seminar: Welcome Slides.pdf
FIDO Alliance Osaka Seminar: Welcome Slides.pdf
 
This is the company presentation material of RIZAP Technologies, Inc.
This is the company presentation material of RIZAP Technologies, Inc.This is the company presentation material of RIZAP Technologies, Inc.
This is the company presentation material of RIZAP Technologies, Inc.
 
CS集会#13_なるほどわからん通信技術 発表資料
CS集会#13_なるほどわからん通信技術 発表資料CS集会#13_なるほどわからん通信技術 発表資料
CS集会#13_なるほどわからん通信技術 発表資料
 
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアルLoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
 
JSAI_類似画像マッチングによる器への印象付与手法の妥当性検証_ver.3_高橋りさ
JSAI_類似画像マッチングによる器への印象付与手法の妥当性検証_ver.3_高橋りさJSAI_類似画像マッチングによる器への印象付与手法の妥当性検証_ver.3_高橋りさ
JSAI_類似画像マッチングによる器への印象付与手法の妥当性検証_ver.3_高橋りさ
 
FIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdf
FIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdfFIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdf
FIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdf
 
論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...
論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...
論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...
 
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
 
FIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdf
FIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdfFIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdf
FIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdf
 
単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...
単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...
単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...
 
【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching
【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching
【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching
 
FIDO Alliance Osaka Seminar: CloudGate.pdf
FIDO Alliance Osaka Seminar: CloudGate.pdfFIDO Alliance Osaka Seminar: CloudGate.pdf
FIDO Alliance Osaka Seminar: CloudGate.pdf
 
FIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdf
FIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdfFIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdf
FIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdf
 
ReonHata_便利の副作用に気づかせるための発想支援手法の評価---行為の増減の提示による気づきへの影響---
ReonHata_便利の副作用に気づかせるための発想支援手法の評価---行為の増減の提示による気づきへの影響---ReonHata_便利の副作用に気づかせるための発想支援手法の評価---行為の増減の提示による気づきへの影響---
ReonHata_便利の副作用に気づかせるための発想支援手法の評価---行為の増減の提示による気づきへの影響---
 

appengine ja night BT 近くを探す?

  • 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