Your SlideShare is downloading. ×
0
rubykaigi2011_spatial.key
rubykaigi2011_spatial.key
rubykaigi2011_spatial.key
rubykaigi2011_spatial.key
rubykaigi2011_spatial.key
rubykaigi2011_spatial.key
rubykaigi2011_spatial.key
rubykaigi2011_spatial.key
rubykaigi2011_spatial.key
rubykaigi2011_spatial.key
rubykaigi2011_spatial.key
rubykaigi2011_spatial.key
rubykaigi2011_spatial.key
rubykaigi2011_spatial.key
rubykaigi2011_spatial.key
rubykaigi2011_spatial.key
rubykaigi2011_spatial.key
rubykaigi2011_spatial.key
rubykaigi2011_spatial.key
rubykaigi2011_spatial.key
rubykaigi2011_spatial.key
rubykaigi2011_spatial.key
rubykaigi2011_spatial.key
rubykaigi2011_spatial.key
rubykaigi2011_spatial.key
rubykaigi2011_spatial.key
rubykaigi2011_spatial.key
rubykaigi2011_spatial.key
rubykaigi2011_spatial.key
rubykaigi2011_spatial.key
rubykaigi2011_spatial.key
rubykaigi2011_spatial.key
rubykaigi2011_spatial.key
rubykaigi2011_spatial.key
rubykaigi2011_spatial.key
rubykaigi2011_spatial.key
rubykaigi2011_spatial.key
rubykaigi2011_spatial.key
rubykaigi2011_spatial.key
rubykaigi2011_spatial.key
rubykaigi2011_spatial.key
rubykaigi2011_spatial.key
rubykaigi2011_spatial.key
rubykaigi2011_spatial.key
rubykaigi2011_spatial.key
rubykaigi2011_spatial.key
rubykaigi2011_spatial.key
rubykaigi2011_spatial.key
rubykaigi2011_spatial.key
rubykaigi2011_spatial.key
rubykaigi2011_spatial.key
rubykaigi2011_spatial.key
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

rubykaigi2011_spatial.key

1,220

Published on

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

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

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
1,220
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
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

    ×