Your SlideShare is downloading. ×

RubyとPost Gis

3,500
views

Published on

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

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

Published in: Technology

0 Comments
3 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
3,500
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
8
Comments
0
Likes
3
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

Transcript

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