• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
rubykaigi2011_spatial.key
 

rubykaigi2011_spatial.key

on

  • 1,407 views

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

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

Statistics

Views

Total Views
1,407
Views on SlideShare
1,404
Embed Views
3

Actions

Likes
0
Downloads
1
Comments
0

1 Embed 3

http://twitter.com 3

Accessibility

Categories

Upload Details

Uploaded via as Apple Keynote

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment
  • 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

rubykaigi2011_spatial.key rubykaigi2011_spatial.key Presentation Transcript

  • Geo Ruby ( Rails) @tetsutan ( )
  • about:me• @tetsutan•• 83 82
  • http://gihyo.jp/news/report/01/rubykaigi2011/0001
  • Today’s Recipe• RGeo• Rails/ActiveRecordSpatialAdapter• Rails/GeoHash• Rails/Mongoid
  • 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,”
  • OpenGIS• http://www.opengeospatial.org/• The Open Geospatial Consortium, Inc.• GIS • GIS Geographic Information System
  • 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.”
  • EWKT, EWKB, HexEWKB• EWKT/EWKB • Extended Well-Known Text/Binary • Point(35.739406 139.653755) • x000000000101000000AC3B16DBA4DE414016139B8FEB746140• HexEWKB • EWKB with Hex • “000000000101000000AC3B16DBA4DE414016139B8FEB746140”
  • Create WKB w MySQL
  • MySQL/PostgreSQL•• PostgreSQL PostGIS MySQL GIS• MySQL Doc • http://dev.mysql.com/doc/refman/5.1/ja/spatial-extensions.html
  • • RGeo ‣ Ruby GIS• MySQL ‣ WKT/WKB
  • Today’s Recipe• RGeo• Rails/ActiveRecordSpatialAdapter• Rails/GeoHash• Rails/Mongoid
  • 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)
  • 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)
  • spatial_adapter•• GeoRuby•
  • 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)
  • MySQL
  • Gemfilegem "activerecord-mysql2spatial-adapter"
  • Migratecreate_table :locations do |t| t.string :name, :null => false, :limit => 255 t.point :geom, :null => false t.timestampsend
  • Controllerfactory = RGeo::Cartesian.factory@location.geom = factory.point(3,4)
  • “130.0, 30.0” Point(130.0 30.0) RGeo SpatialAdapterINSERT INTO LOC (geom) values( Point(130.0 30.0) ); MySQL
  • SpatialAdapter
  • SpatialAdapter• ActiveRecord• Mysql• OGC • • Point • z
  • Today’s Recipe• RGeo• Rails/ActiveRecordSpatialAdapter• Rails/GeoHash• Rails/Mongoid
  • GeoHash• http://geohash.org/• “It is a hierarchical spatial data structure which subdivides space into buckets of grid shape”
  • (@masuidrive) http://blog.masuidrive.jp/index.php/2010/01/13/geohash/
  • GeoHash• AABBCCDDEE ∈ AABBCCDD• also AABBCCDDFF ∈ AABBCCDD AABBCCDDEE AABBCCDDFF AABBCCDD
  • • ”GAE DataStore Geohash ” http://blog.masuidrive.jp/index.php/2010/01/13/geohash/
  • GeoHash• String OK
  • Today’s Recipe• RGeo• Rails/ActiveRecordSpatialAdapter• Rails/GeoHash• Rails/Mongoid
  • Mongodb•• indexing••• etc
  • Geospatial Indexing!!
  • 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" } )
  • OR• MongoMapper• Mongoid
  • Mongoid• http://mongoid.org/• MongoMapper• id:babie “ Rails3 Mongoid ” http://d.hatena.ne.jp/babie/20100809/1281316971
  • • Document
  • • Spatial Index• devise
  • • Spatial Index - Mongoid - MM• devise - Mongoid - MM
  • Model
  • Controller
  • Conclusion• 4sq GeoHash MongoDB• MongoDB• Mongoid/MongoMapper Mongoid
  • activerecord-mysql2spatial-adapter (0.3.2)
  • activerecord-mysql2spatial- adapter (0.3.2)fixture geometry
  • 17 https://gist.github.com/1093641
  • • 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