rubykaigi2011_spatial.key

  • 1,178 views
Uploaded on

Ruby会議2011内の!Rubykaigiでの発表資料

Ruby会議2011内の!Rubykaigiでの発表資料

More in: Technology
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
    Be the first to like this
No Downloads

Views

Total Views
1,178
On Slideshare
0
From Embeds
0
Number of Embeds
0

Actions

Shares
Downloads
1
Comments
0
Likes
0

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
  • Rubyで位置情報のデータを扱う場合に着いて話をします\n
  • 前職はKoozytという会社でARのプラットフォーム開発やってましたが、もともと位置情報好きでKoozytへ入社しました。\n4月末に会社をやめてから3ヶ月ほどニートしています。\n自分でも位置情報系のサービスを作っているんですが、\n位置情報系のサービスを位置情報関連の美味しいお仕事あればご連絡ください\nプレゼンソフトもってなかったので昨日keynote買いました\nなので文字ばっかのプレゼンなので眠いと思います\n\n\n
  • とか闇の方から聞こえてきた気がきがしますが気ににしません\n
  • 今日のプレゼンではこのあたりの話をします\n今作っているサービスのバックエンドの変遷\nでもあります。\n先に結論を話すと、この順番に試して結局Mongoにたどり着きました。\n練習したら20分とかかかったので、頭3つは少し飛ばし気味に話していきます\n
  • coreはOGCで標準化されたsimple features の仕様に基づいて実装されている\n
  • KMLとかもここで決めてます\n
  • RGeoの一世代前のライブラリはこれです。\nこいつはまたあとで顔を出してきます。使わないですが\n
  • ちなみにこのlat/lonは練馬文化センターの位置情報です\nWKTはPoint(x y)の間がスペースなので気をつけてください。\n
  • ポスグレは知りませんが似たようなことはできると思います。\nMySQLの話がでたのでつぎはMysqlについて\n
  • さっき見てもらったとおり\n\nたぶんsqliteでもデータ突っ込むだけなら単純に配列なのでOK(indexがはれないとかあるかも。重要なのはspatial index)\n
  • となるとORマッパーが欲しいですね\n
  • \n
  • Spatial ってのは空間っていう意味です\n
  • \n
  • \n
  • 新しいのはこいつら。\n名前でわかると思いますが、\nsqlite, mysql, mysql2, postgresql\nのアダプタです。\n
  • \n
  • \n
  • このへんはspatialadapterのおかげです\n
  • GeorubyのときはPoint.newとかできたんですが、RGeoになってからファクトリーをつくらなくてはならなくなりました\n
  • \n
  • \n
  • 一応出来るんですが、複雑な計算式をSQLでかかないといけない\n
  • OGC準拠ってのは利点があってDB側でいろんな操作が可能\n
  • \n
  • 階層構造で、グリッドに分割される\n
  • \n
  • \n
  • ということなのでGAEを使うか、自前で前方一致が早い検索エンジンを使うとかしないとSQLでLike文使うとかになっちゃいます。Solrとかならできると思います\n\nGeoHashのruby用ライブラリも増井さんが作成してくれています\n
  • なので、頭から2文字づつとか保存しれやればインデックスも効くし、ひとつの方法としてはありかなと思っています。\n
  • やっと本題です\n
  • \n
  • まずはMongodbについて、このあたりはさらっと流します\n詳しくはdoryokujinさんのブログで\n\nほんといいことずくめのDBです。KVSとは違うって行ってるんですが、まあ考え方は一緒です。\n
  • \n
  • \n
  • \n
  • 最近のmongodbだったら問題ないです\n\n1.3.3 Releasedってのが2010/3/2にメールが流れているのでここ1年くらいに導入したなら対応しています\n\nこのあたりはMysqlがspatial indexのサポートをしているのと同じ\n\nこの例の場合、placesテーブルにlocカラムがあって、それが2D Index => Geospatial Indexとなる\n
  • 僕はMongoidを使いました\n
  • \n
  • \n
  • deviseはメールアドレスなどでログインするフォームなどを簡単に作成してくれるライブラリ。\n位置情報とは関係ないですが、このプラグインがあるのを前提に他を作ってしまってました。\nこれも詳しくはbabieさんのブログ参照\n
  • \n
  • \n
  • 最終的に\n\nこのindexのつけ方もドキュメントにあります。\n
  • こんな感じでfinderとか使えます。\narelと同じ感じでメソッドチェーンできます。\n特にnearの部分が位置情報には大事\ngeomには0にlat、1にlonが入ってます\n
  • \n
  • \n
  • 残念ながら使わなくなったんですが、こいつのパッチを書きました\n何が問題かというと\n
  • これ、多分、だれもコレ使ってテストしてないってことだと思うんですが、どうなんでしょうかね?\n
  • しかも完全じゃない\nwktだけの対応です。\nでもコレ見つけるのかなり苦労しました。\nActiveRecordの中とか読みました\n
  • \n
  • \n

Transcript

  • 1. Geo Ruby ( Rails) @tetsutan ( )
  • 2. about:me• @tetsutan•• 83 82
  • 3. http://gihyo.jp/news/report/01/rubykaigi2011/0001
  • 4. Today’s Recipe• RGeo• Rails/ActiveRecordSpatialAdapter• Rails/GeoHash• Rails/Mongoid
  • 5. RGeo• http://virtuoso.rubyforge.org/rgeo/• gem install rgeo• RGeo is a geospatial data library for Ruby.• “At its core is an implementation of the industry standard OGC Simple Features Specification,”
  • 6. OpenGIS• http://www.opengeospatial.org/• The Open Geospatial Consortium, Inc.• GIS • GIS Geographic Information System
  • 7. GeoRuby• http://georuby.rubyforge.org/• “The data model roughly follows the OGC Simple Features for SQL specification”• “The library inputs and outputs EWKB, HexEWKB and EWKT.”
  • 8. EWKT, EWKB, HexEWKB• EWKT/EWKB • Extended Well-Known Text/Binary • Point(35.739406 139.653755) • x000000000101000000AC3B16DBA4DE414016139B8FEB746140• HexEWKB • EWKB with Hex • “000000000101000000AC3B16DBA4DE414016139B8FEB746140”
  • 9. Create WKB w MySQL
  • 10. MySQL/PostgreSQL•• PostgreSQL PostGIS MySQL GIS• MySQL Doc • http://dev.mysql.com/doc/refman/5.1/ja/spatial-extensions.html
  • 11. • RGeo ‣ Ruby GIS• MySQL ‣ WKT/WKB
  • 12. Today’s Recipe• RGeo• Rails/ActiveRecordSpatialAdapter• Rails/GeoHash• Rails/Mongoid
  • 13. Spatial Adapter• gem search --remote spatial • spatial_adapter (1.2.0) • activerecord-spatialite-adapter (0.3.3) • activerecord-mysqlspatial-adapter (0.3.2) • activerecord-mysql2spatial-adapter (0.3.2)• postgres • activerecord-postgis-adapter (0.3.5)
  • 14. Spatial Adapter• gem search --remote spatial • spatial_adapter (1.2.0) • activerecord-spatialite-adapter (0.3.3) • activerecord-mysqlspatial-adapter (0.3.2) • activerecord-mysql2spatial-adapter (0.3.2)• postgres • activerecord-postgis-adapter (0.3.5)
  • 15. spatial_adapter•• GeoRuby•
  • 16. Spatial Adapter• gem search --remote spatial • spatial_adapter (1.2.0) • activerecord-spatialite-adapter (0.3.3) • activerecord-mysqlspatial-adapter (0.3.2) • activerecord-mysql2spatial-adapter (0.3.2)• postgres • activerecord-postgis-adapter (0.3.5)
  • 17. MySQL
  • 18. Gemfilegem "activerecord-mysql2spatial-adapter"
  • 19. Migratecreate_table :locations do |t| t.string :name, :null => false, :limit => 255 t.point :geom, :null => false t.timestampsend
  • 20. Controllerfactory = RGeo::Cartesian.factory@location.geom = factory.point(3,4)
  • 21. “130.0, 30.0” Point(130.0 30.0) RGeo SpatialAdapterINSERT INTO LOC (geom) values( Point(130.0 30.0) ); MySQL
  • 22. SpatialAdapter
  • 23. SpatialAdapter• ActiveRecord• Mysql• OGC • • Point • z
  • 24. Today’s Recipe• RGeo• Rails/ActiveRecordSpatialAdapter• Rails/GeoHash• Rails/Mongoid
  • 25. GeoHash• http://geohash.org/• “It is a hierarchical spatial data structure which subdivides space into buckets of grid shape”
  • 26. (@masuidrive) http://blog.masuidrive.jp/index.php/2010/01/13/geohash/
  • 27. GeoHash• AABBCCDDEE ∈ AABBCCDD• also AABBCCDDFF ∈ AABBCCDD AABBCCDDEE AABBCCDDFF AABBCCDD
  • 28. • ”GAE DataStore Geohash ” http://blog.masuidrive.jp/index.php/2010/01/13/geohash/
  • 29. GeoHash• String OK
  • 30. Today’s Recipe• RGeo• Rails/ActiveRecordSpatialAdapter• Rails/GeoHash• Rails/Mongoid
  • 31. Mongodb•• indexing••• etc
  • 32. Geospatial Indexing!!
  • 33. Geospatial Indexing• mongoDB 1.3.3 or later• { loc : [ 50 , 30 ] } { loc : { x : 50 , y : 30 } } { loc : { foo : 50 , y : 30 } } { loc : { long : 40.739037, lat: 73.992964 } }• db.places.ensureIndex( { loc : "2d" } )
  • 34. OR• MongoMapper• Mongoid
  • 35. Mongoid• http://mongoid.org/• MongoMapper• id:babie “ Rails3 Mongoid ” http://d.hatena.ne.jp/babie/20100809/1281316971
  • 36. • Document
  • 37. • Spatial Index• devise
  • 38. • Spatial Index - Mongoid - MM• devise - Mongoid - MM
  • 39. Model
  • 40. Controller
  • 41. Conclusion• 4sq GeoHash MongoDB• MongoDB• Mongoid/MongoMapper Mongoid
  • 42. activerecord-mysql2spatial-adapter (0.3.2)
  • 43. activerecord-mysql2spatial- adapter (0.3.2)fixture geometry
  • 44. 17 https://gist.github.com/1093641
  • 45. • RGeo • http://virtuoso.rubyforge.org/rgeo/• OpenGIS • http://www.opengeospatial.org• GeoHash • http://geohash.org/ • masuidrive http://blog.masuidrive.jp/index.php/2010/01/13/geohash/• Mongoid • http://mongoid.org • babie http://d.hatena.ne.jp/babie/20100809/1281316971• my gist • https://gist.github.com/1093641