Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

RubyとPost Gis

4,174 views

Published on

Ruby のフレームワークSinatraとデータベースPostGISによる小規模なアプリケーションの例

Published in: Technology
  • Be the first to comment

RubyとPost Gis

  1. 1. Ruby のフレームワーク Sinatra とデータベース PostGIS による小規模なアプリケーションの例 株式会社オークニー 神谷貴広 http://www.orkney.co.jp/
  2. 2. 環境 開発言語: Ruby フレームワーク: Sinatra モデル部分: Sequel ビュー部分: Haml データベース : PostgreSQL 8.4.2 + PostGIS 1.4.1
  3. 3. Sinatra ( Ruby フレームワーク) <ul><li>小規模なアプリケーションに特化したフレームワーク </li></ul><ul><li>Sinatra は Rack フレームワーク用の 最小限の標準インターフェース上で動作している。 </li></ul><ul><li>  http://www.sinatrarb.com/intro-jp.html </li></ul># myapp.rb require 'rubygems' require 'sinatra' get '/' do   'Hello world!' end Sinatra による Hello World アプリケーション
  4. 4. Sinatra と Rack の関係 <ul><li>Rack は Ruby のための Web サーバインターフェイス </li></ul><ul><li>Rack は Web アプリ用のフレームワークと、 Web サーバの間を取り持ってくれるライブラリ </li></ul><ul><li>[ Web ブラウザ ] </li></ul><ul><li>IE </li></ul><ul><li>Firefox </li></ul><ul><li>[Web サーバ ] </li></ul><ul><li>WEBrick </li></ul><ul><li>Apache </li></ul><ul><li>Mongrel </li></ul>⇔ [Web アプリ ] [Rack] <ul><li>[ フレームワーク ] </li></ul><ul><li>Sinatra </li></ul><ul><li>Ramaze </li></ul><ul><li>Merb </li></ul>⇔ ⇔ ⇔
  5. 5. Sequel ( Ruby 用 O/R マッピング) <ul><li>モデル部分に関しては Sinatra でのサポートは特にないため、 ActiveRecord 、 DataMapper 、 Sequel といった Ruby 用の O/R マッピングライブラリを一つ選んで使用することになる。 </li></ul><ul><li>Ruby のコードで SQL を書くことを目指したライブラリで、データベースのきめ細かい操作が得意。 </li></ul><ul><li>  http://sequel.rubyforge.org/ </li></ul>require 'sequel' require 'logger' # 接続例 log = Logger.new('log/database.log' , 'daily') DB = Sequel.postgres(:adapter=>'postgres', :host=>'localhost', :database=>’geo', :user=>'postgres', :password=>'postgres', :logger => log) #Insert 例 items = DB[:geotable] items.insert(:name => name , :tag=> tag, :url => url, :create_date => Time.now) items.all # SELECT 例 data = DB.fetch('SELECT *, ST_AsText(the_geom) AS geometry FROM road').all
  6. 6. Haml (テンプレート) <ul><li>Haml は HTML/XHTML を生成するためのマークアップ言語 </li></ul><ul><li>インデントや簡略構文によって簡潔な記述が行える。 </li></ul><ul><li>Haml は Rails を始めとする様々なフレームワークでサポートされている。 </li></ul><ul><li>  * Ruby on Rails </li></ul><ul><li>  * Merb </li></ul><ul><li>  * Ramaze </li></ul><ul><li>  * Sinatra </li></ul><ul><li>  * and more... </li></ul><ul><li>  http://haml-lang.com/ </li></ul>!!! %html %head %title Hello, Haml! %body #header %h1 Hello, Haml! #content %p I use Haml %span.version= Haml::VERSION
  7. 7. PostGIS とは何か <ul><li>PostGIS とは、 PostgreSQL データーベースを機能拡張さ せ、空間情報を扱えるようにした空間データベース </li></ul><ul><li>空間情報の検索、作成、操作ができる </li></ul><ul><li>もちろんオープンソースで、 FOSS4G (Free and Open Source Software for Geospatial) のひとつ。 </li></ul><ul><li>  http://postgis.refractions.net/ </li></ul>
  8. 8. QGIS による PostGIS の表示例 <ul><li>QuantumGIS による PostGIS の表示例 </li></ul><ul><li>QuantumGIS ももちろんオープンソース、手軽な GIS ソフトです。 </li></ul><ul><li>  http://www.qgis.org/ </li></ul>
  9. 9. PostGIS による SQL の例 (ほんの一部です) <ul><li>矩形範囲を指定して、指定した空間範囲についてのデータを取得する。 </li></ul><ul><li>m 単位の検索半径を問い合わせて、位置周辺にあるデータを取得する。 </li></ul>data = DB.fetch('SELECT *, ST_AsText(the_geom) AS geometry FROM geotable WHERE the_geom && ST_Transform(ST_buffer(ST_Transform((SELECT the_geom FROM point WHERE gid = 230), 32654), 200), 4326)').all data = DB.fetch('SELECT *, ST_AsText(area) as geometry FROM geotable WHERE area && GeometryFromText('POLYGON((31.4693359375 133.0384765625, 31.4693359375 143.9369140625, 37.8853515625 143.9369140625, 37.8853515625 133.0384765625, 31.4693359375 133.0384765625))', 4326)').all
  10. 10. Sinatra による JSON 、 RSS の作成例 <ul><li>300m 単位の検索半径を問い合わせて、位置周辺にあるデータを取得する場合の例 </li></ul><ul><li>http://localhost:4567/ 施設データ / 施設 / 施設 :01/R/300/georss.xml </li></ul><ul><li>http://localhost:4567/ 施設データ / 施設 / 施設 :15/R/300/geojson.geojson </li></ul># GeoJSON 作成 , GeoRSS 作成の例 get ‘/ 施設データ /:name/*' do    :    :   param = params[:splat][0].split(&quot;/&quot;)    :    :   # GeoJSON 作成   if (geoName == &quot;geojson.geojson&quot;)    geojson = GeoJSON.new    geojson_data = geojson.get_geojson(ary_data)    content_type :json    geojson_data   # GeoRSS 作成   elsif (geoName == &quot;georss.xml&quot;)    georss = GeoRSS.new    doc = georss.get_georss(ary_data)    content_type :xml    doc.to_s   end end
  11. 11. Sinatra による Haml の利用例 <ul><li>地図データの東京都の道路データの情報を表示する場合の例 </li></ul><ul><li>  http://localhost:4567/ 地図データ / 東京都道路データ </li></ul># 地図データ一覧 get '/ 地図データ /:name' do   map = map_data.new   @data = map.get_data(params[:name])   @field_item = map.get_field_item(params[:name])   @title = params[:name]   haml :result_list # use views/result_list.haml for view end
  12. 12. まとめ <ul><li>Ruby フレームワークの Sinatra は、小規模なアプリケーションであれば、手軽に簡単に構築できると思いました。 </li></ul><ul><li>大規模なアプリケーションの場合は、やはり Rails などのフレームワークのほうがいいのかなと思います。 </li></ul><ul><li>とにかく Ruby は楽だと思いました。特に XML データ形式の作成には感動しました。 </li></ul>

×