rubyとpost gis

12
Ruby Ruby のののののののの のののののののの Sinatra Sinatra ののののののの ののののののの PostGIS PostGIS のののののの のののののの ののののののののののの ののののののののののの ののののののののの のののの http://www.orkney.co.jp/

Upload: ngi-group

Post on 18-May-2015

3.524 views

Category:

Technology


2 download

DESCRIPTION

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

TRANSCRIPT

Page 1: RubyとPost Gis

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

株式会社オークニー 神谷貴広http://www.orkney.co.jp/

Page 2: RubyとPost Gis

環境環境

開発言語: Rubyフレームワーク: Sinatraモデル部分: Sequelビュー部分: Hamlデータベース: PostgreSQL 8.4.2 + PostGIS 1.4.1

Page 3: RubyとPost Gis

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 アプリケーション

Page 4: RubyとPost Gis

SinatraSinatra とと RackRack の関係の関係

Rack は Ruby のための Web サーバインターフェイスRack は Web アプリ用のフレームワークと、 Web サーバの間を取り持ってくれるライブラリ

[Web ブラウザ ]

IE Firefox

[Web サーバ ]

WEBrickApacheMongrel

⇔[Web アプリ ] [Rack]

[ フレームワーク ]

SinatraRamazeMerb

⇔ ⇔ ⇔

Page 5: RubyとPost Gis

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

Page 6: RubyとPost Gis

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

Page 7: RubyとPost Gis

PostGISPostGIS とは何かとは何か

PostGIS とは、 PostgreSQL データーベースを機能拡張さ せ、空間情報を扱えるようにした空間データベース

空間情報の検索、作成、操作ができる

もちろんオープンソースで、 FOSS4G (Free and Open Source Software for Geospatial) のひとつ。

  http://postgis.refractions.net/

Page 8: RubyとPost Gis

QGISQGIS によるによる PostGISPostGIS の表示例の表示例QuantumGIS による PostGIS の表示例QuantumGIS ももちろんオープンソース、手軽な GIS ソフトです。  http://www.qgis.org/

Page 9: RubyとPost Gis

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

Page 10: RubyとPost Gis

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

Page 11: RubyとPost Gis

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

Page 12: RubyとPost Gis

まとめまとめRuby フレームワークの Sinatra は、小規模なアプリケーションであれば、手軽に簡単に構築できると思いました。

大規模なアプリケーションの場合は、やはり Rails などのフレームワークのほうがいいのかなと思います。

とにかく Ruby は楽だと思いました。特に XML データ形式の作成には感動しました。