Contenu connexe Similaire à rubykaigi2011_spatial.key (20) rubykaigi2011_spatial.key1. Geo Ruby
( Rails)
@tetsutan ( )
8. EWKT, EWKB,
HexEWKB
• EWKT/EWKB
• Extended Well-Known Text/Binary
• Point(35.739406 139.653755)
• x000000000101000000AC3B16DBA4DE414016139B8FEB746140
• HexEWKB
• EWKB with Hex
• “000000000101000000AC3B16DBA4DE414016139B8FEB746140”
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)
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)
21. “130.0, 30.0”
Point(130.0 30.0)
RGeo
SpatialAdapter
INSERT INTO LOC (geom) values( Point(130.0 30.0) );
MySQL
29. • ”GAE DataStore
Geohash
”
http://blog.masuidrive.jp/index.php/2010/01/13/geohash/
37. 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" } )
50. 17
https://gist.github.com/1093641
52. • 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
Notes de l'éditeur 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