rubyとpost gis
DESCRIPTION
Ruby のフレームワークSinatraとデータベースPostGISによる小規模なアプリケーションの例TRANSCRIPT
Ruby Ruby のフレームワークのフレームワーク SinatraSinatra とデータベースとデータベースPostGISPostGIS による小規模なアプリケーションの例による小規模なアプリケーションの例
株式会社オークニー 神谷貴広http://www.orkney.co.jp/
環境環境
開発言語: Rubyフレームワーク: Sinatraモデル部分: Sequelビュー部分: Hamlデータベース: PostgreSQL 8.4.2 + PostGIS 1.4.1
SinatraSinatra (( Ruby Ruby フレームワーク)フレームワーク)
小規模なアプリケーションに特化したフレームワークSinatra は Rack フレームワーク用の 最小限の標準インターフェース上で動作している。
http://www.sinatrarb.com/intro-jp.html
# myapp.rb require 'rubygems' require 'sinatra'
get '/' do 'Hello world!' end
Sinatra による Hello World アプリケーション
SinatraSinatra とと RackRack の関係の関係
Rack は Ruby のための Web サーバインターフェイスRack は Web アプリ用のフレームワークと、 Web サーバの間を取り持ってくれるライブラリ
[Web ブラウザ ]
IE Firefox
[Web サーバ ]
WEBrickApacheMongrel
⇔[Web アプリ ] [Rack]
[ フレームワーク ]
SinatraRamazeMerb
⇔ ⇔ ⇔
SequelSequel (( RubyRuby 用用 O/RO/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
HamlHaml (テンプレート)(テンプレート)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
PostGISPostGIS とは何かとは何か
PostGIS とは、 PostgreSQL データーベースを機能拡張さ せ、空間情報を扱えるようにした空間データベース
空間情報の検索、作成、操作ができる
もちろんオープンソースで、 FOSS4G (Free and Open Source Software for Geospatial) のひとつ。
http://postgis.refractions.net/
QGISQGIS によるによる PostGISPostGIS の表示例の表示例QuantumGIS による PostGIS の表示例QuantumGIS ももちろんオープンソース、手軽な GIS ソフトです。 http://www.qgis.org/
PostGISPostGIS によるによる SQLSQL の例の例(ほんの一部です)(ほんの一部です) 矩形範囲を指定して、指定した空間範囲についてのデータを取
得する。
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
SinatraSinatra によるによる JSONJSON 、、 RSSRSS の作成例の作成例 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 endend
SinatraSinatra によるによる HamlHaml の利用例の利用例 地図データの東京都の道路データの情報を表示する場合の例
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 viewend
まとめまとめRuby フレームワークの Sinatra は、小規模なアプリケーションであれば、手軽に簡単に構築できると思いました。
大規模なアプリケーションの場合は、やはり Rails などのフレームワークのほうがいいのかなと思います。
とにかく Ruby は楽だと思いました。特に XML データ形式の作成には感動しました。