GIS mit Ruby on Rails - Sourcepole · 2020. 4. 30. · FOSSGIS Osnabrück 3.3.10 GIS mit Ruby on...

42
FOSSGIS Osnabrück 3.3.10 GIS mit Ruby on Rails FOSSGIS 2010 GIS mit Ruby on Rails Pirmin Kalberer Sourcepole AG, Bad Ragaz www.sourcepole.ch

Transcript of GIS mit Ruby on Rails - Sourcepole · 2020. 4. 30. · FOSSGIS Osnabrück 3.3.10 GIS mit Ruby on...

Page 1: GIS mit Ruby on Rails - Sourcepole · 2020. 4. 30. · FOSSGIS Osnabrück 3.3.10 GIS mit Ruby on Rails Ruby - Philosophie eine dynamische, freie Programmiersprache, die sich einfach

FOSSGIS Osnabrück 3.3.10 GIS mit Ruby on Rails

FOSSGIS 2010

GIS mit Ruby on Rails

Pirmin KalbererSourcepole AG, Bad Ragazwww.sourcepole.ch

Page 2: GIS mit Ruby on Rails - Sourcepole · 2020. 4. 30. · FOSSGIS Osnabrück 3.3.10 GIS mit Ruby on Rails Ruby - Philosophie eine dynamische, freie Programmiersprache, die sich einfach

./configure && make && make install

Page 3: GIS mit Ruby on Rails - Sourcepole · 2020. 4. 30. · FOSSGIS Osnabrück 3.3.10 GIS mit Ruby on Rails Ruby - Philosophie eine dynamische, freie Programmiersprache, die sich einfach

apt-get install postgis

Page 4: GIS mit Ruby on Rails - Sourcepole · 2020. 4. 30. · FOSSGIS Osnabrück 3.3.10 GIS mit Ruby on Rails Ruby - Philosophie eine dynamische, freie Programmiersprache, die sich einfach

XML, SOAP

Page 5: GIS mit Ruby on Rails - Sourcepole · 2020. 4. 30. · FOSSGIS Osnabrück 3.3.10 GIS mit Ruby on Rails Ruby - Philosophie eine dynamische, freie Programmiersprache, die sich einfach

Http, REST

Page 6: GIS mit Ruby on Rails - Sourcepole · 2020. 4. 30. · FOSSGIS Osnabrück 3.3.10 GIS mit Ruby on Rails Ruby - Philosophie eine dynamische, freie Programmiersprache, die sich einfach

CVS

Page 7: GIS mit Ruby on Rails - Sourcepole · 2020. 4. 30. · FOSSGIS Osnabrück 3.3.10 GIS mit Ruby on Rails Ruby - Philosophie eine dynamische, freie Programmiersprache, die sich einfach

git

Page 8: GIS mit Ruby on Rails - Sourcepole · 2020. 4. 30. · FOSSGIS Osnabrück 3.3.10 GIS mit Ruby on Rails Ruby - Philosophie eine dynamische, freie Programmiersprache, die sich einfach

Linux?

Page 9: GIS mit Ruby on Rails - Sourcepole · 2020. 4. 30. · FOSSGIS Osnabrück 3.3.10 GIS mit Ruby on Rails Ruby - Philosophie eine dynamische, freie Programmiersprache, die sich einfach

Linux!

Page 10: GIS mit Ruby on Rails - Sourcepole · 2020. 4. 30. · FOSSGIS Osnabrück 3.3.10 GIS mit Ruby on Rails Ruby - Philosophie eine dynamische, freie Programmiersprache, die sich einfach

RUP

Page 11: GIS mit Ruby on Rails - Sourcepole · 2020. 4. 30. · FOSSGIS Osnabrück 3.3.10 GIS mit Ruby on Rails Ruby - Philosophie eine dynamische, freie Programmiersprache, die sich einfach

Agile Software-Entwicklung

Page 12: GIS mit Ruby on Rails - Sourcepole · 2020. 4. 30. · FOSSGIS Osnabrück 3.3.10 GIS mit Ruby on Rails Ruby - Philosophie eine dynamische, freie Programmiersprache, die sich einfach

PHP Web-GIS

Page 13: GIS mit Ruby on Rails - Sourcepole · 2020. 4. 30. · FOSSGIS Osnabrück 3.3.10 GIS mit Ruby on Rails Ruby - Philosophie eine dynamische, freie Programmiersprache, die sich einfach

Web-Framework, Mashup

Page 14: GIS mit Ruby on Rails - Sourcepole · 2020. 4. 30. · FOSSGIS Osnabrück 3.3.10 GIS mit Ruby on Rails Ruby - Philosophie eine dynamische, freie Programmiersprache, die sich einfach

Sourceforge

Page 15: GIS mit Ruby on Rails - Sourcepole · 2020. 4. 30. · FOSSGIS Osnabrück 3.3.10 GIS mit Ruby on Rails Ruby - Philosophie eine dynamische, freie Programmiersprache, die sich einfach

github

Page 16: GIS mit Ruby on Rails - Sourcepole · 2020. 4. 30. · FOSSGIS Osnabrück 3.3.10 GIS mit Ruby on Rails Ruby - Philosophie eine dynamische, freie Programmiersprache, die sich einfach

OSS GIS 2000

Page 17: GIS mit Ruby on Rails - Sourcepole · 2020. 4. 30. · FOSSGIS Osnabrück 3.3.10 GIS mit Ruby on Rails Ruby - Philosophie eine dynamische, freie Programmiersprache, die sich einfach

OSS GIS 2010?

Page 18: GIS mit Ruby on Rails - Sourcepole · 2020. 4. 30. · FOSSGIS Osnabrück 3.3.10 GIS mit Ruby on Rails Ruby - Philosophie eine dynamische, freie Programmiersprache, die sich einfach

FOSSGIS Osnabrück 3.3.10 GIS mit Ruby on Rails

Ruby on Rails

RubyInterpretierte, objektorientierte &

dynamisch typisierte Skriptsprache

RailsFullstack MVC Web-Applikations

Framework

Page 19: GIS mit Ruby on Rails - Sourcepole · 2020. 4. 30. · FOSSGIS Osnabrück 3.3.10 GIS mit Ruby on Rails Ruby - Philosophie eine dynamische, freie Programmiersprache, die sich einfach

FOSSGIS Osnabrück 3.3.10 GIS mit Ruby on Rails

Ruby - Philosophie

eine dynamische, freie Programmiersprache,

die sich einfach anwenden und

produktiv einsetzen lässt.

Sie hat eine elegante Syntax, die man

leicht lesen und schreiben kann.

Page 20: GIS mit Ruby on Rails - Sourcepole · 2020. 4. 30. · FOSSGIS Osnabrück 3.3.10 GIS mit Ruby on Rails Ruby - Philosophie eine dynamische, freie Programmiersprache, die sich einfach

FOSSGIS Osnabrück 3.3.10 GIS mit Ruby on Rails

Ruby - Programmiersprache

> Japan 1995, Yukihiro Matsumoto

> Open Source

> Mischung aus Perl, Smalltalk, Eiffel, Ada und Lisp

> Hohe Qualität der Bibliotheken

Page 21: GIS mit Ruby on Rails - Sourcepole · 2020. 4. 30. · FOSSGIS Osnabrück 3.3.10 GIS mit Ruby on Rails Ruby - Philosophie eine dynamische, freie Programmiersprache, die sich einfach

FOSSGIS Osnabrück 3.3.10 GIS mit Ruby on Rails

Ruby - Syntax

5.times do

puts "ruby ist cool!".upcase

end

RUBY IST COOL!

RUBY IST COOL!

RUBY IST COOL!

RUBY IST COOL!

RUBY IST COOL!

Page 22: GIS mit Ruby on Rails - Sourcepole · 2020. 4. 30. · FOSSGIS Osnabrück 3.3.10 GIS mit Ruby on Rails Ruby - Philosophie eine dynamische, freie Programmiersprache, die sich einfach

FOSSGIS Osnabrück 3.3.10 GIS mit Ruby on Rails

Rails Framework

> Dänemark 2004, David Heinemeier Hansson

> Open Source MIT Lizenz

> Fullstack MVC Web-Framework

> Wurde aus bestehender Anwendung extrahiert

> 20 Konferenzen 1. Halbjahr 2010

> Bücher: >100

Page 23: GIS mit Ruby on Rails - Sourcepole · 2020. 4. 30. · FOSSGIS Osnabrück 3.3.10 GIS mit Ruby on Rails Ruby - Philosophie eine dynamische, freie Programmiersprache, die sich einfach

FOSSGIS Osnabrück 3.3.10 GIS mit Ruby on Rails

Rails Features

> „Don’t repeat yourself” (DRY)

> Convention over Configuration

> MVC, REST,...

> AJAX

> Test-Framework

> Generatoren, Scaffolding

> Plugins

Page 24: GIS mit Ruby on Rails - Sourcepole · 2020. 4. 30. · FOSSGIS Osnabrück 3.3.10 GIS mit Ruby on Rails Ruby - Philosophie eine dynamische, freie Programmiersprache, die sich einfach

FOSSGIS Osnabrück 3.3.10 GIS mit Ruby on Rails

Rails - MVC

Das Model bildet die zugrundeliegende Datenstruktur

Die View ist die Darstellung der Datenstruktur

Der Controller enthält die eigentliche Programmlogik

Page 25: GIS mit Ruby on Rails - Sourcepole · 2020. 4. 30. · FOSSGIS Osnabrück 3.3.10 GIS mit Ruby on Rails Ruby - Philosophie eine dynamische, freie Programmiersprache, die sich einfach

FOSSGIS Osnabrück 3.3.10 GIS mit Ruby on Rails

Rails Architektur

Model

ControllerBrowser

View

Database

Page 26: GIS mit Ruby on Rails - Sourcepole · 2020. 4. 30. · FOSSGIS Osnabrück 3.3.10 GIS mit Ruby on Rails Ruby - Philosophie eine dynamische, freie Programmiersprache, die sich einfach

FOSSGIS Osnabrück 3.3.10 GIS mit Ruby on Rails

Rails MVC - Model

> ORM: Objektrelationales Mapping

> Enthält Business-Logik

> Beziehungen zwischen Modellen

> Validierung

ActiveRecord

Page 27: GIS mit Ruby on Rails - Sourcepole · 2020. 4. 30. · FOSSGIS Osnabrück 3.3.10 GIS mit Ruby on Rails Ruby - Philosophie eine dynamische, freie Programmiersprache, die sich einfach

FOSSGIS Osnabrück 3.3.10 GIS mit Ruby on Rails

Rails MVC - View

> Repräsentiert die Sicht auf die Daten

> HTML, XML, EMail Inhalte oder Javascript

> kann Ruby Code enthalten

> Helfer Klassen enthalten View Logik

ActionView

Page 28: GIS mit Ruby on Rails - Sourcepole · 2020. 4. 30. · FOSSGIS Osnabrück 3.3.10 GIS mit Ruby on Rails Ruby - Philosophie eine dynamische, freie Programmiersprache, die sich einfach

FOSSGIS Osnabrück 3.3.10 GIS mit Ruby on Rails

Rails MVC - Controller

> steuert den Kontrollfluss der Anwendung

> redirected zu anderen Kontroller Aktionen

> stellt der View Daten und Methoden zur Verfügung

> wählt die View

> sendet View zurück an den Client

ActionController

Page 29: GIS mit Ruby on Rails - Sourcepole · 2020. 4. 30. · FOSSGIS Osnabrück 3.3.10 GIS mit Ruby on Rails Ruby - Philosophie eine dynamische, freie Programmiersprache, die sich einfach

FOSSGIS Osnabrück 3.3.10 GIS mit Ruby on Rails

Rails MVC - Code

Modelclass Customer < ActiveRecord::Base has_many :projects validates_presence_of :name, :minimum => 50, :message => "zu kurz!"end

Controllerdef list @customers = Customer.all(:aktiv => true)end

Page 30: GIS mit Ruby on Rails - Sourcepole · 2020. 4. 30. · FOSSGIS Osnabrück 3.3.10 GIS mit Ruby on Rails Ruby - Philosophie eine dynamische, freie Programmiersprache, die sich einfach

FOSSGIS Osnabrück 3.3.10 GIS mit Ruby on Rails

Rails MVC - Code

View<ul> <% for customer in @customers %> <li><%= link_to customer.name, customer %> ( <%= link_to "ändern", edit_customer_path(customer) %>) </li> <% end %></ul>

Page 31: GIS mit Ruby on Rails - Sourcepole · 2020. 4. 30. · FOSSGIS Osnabrück 3.3.10 GIS mit Ruby on Rails Ruby - Philosophie eine dynamische, freie Programmiersprache, die sich einfach

FOSSGIS Osnabrück 3.3.10 GIS mit Ruby on Rails

GIS-Bibliotheken für RoR

> GeoKit, Graticule und acts_as_geocodable: Geokodierung und Distanzberechnungen

> GeoRuby: Spatial DB Adapter

> Ruby bindings: OGR/GDAL, Mapserver

> MapLayers: Integration von OpenLayers und OGC Service-Publikation von Geodaten

> MapFish: Web Mapping Framwork mit REST-Protokoll als Client-Server Schnittstelle

Page 32: GIS mit Ruby on Rails - Sourcepole · 2020. 4. 30. · FOSSGIS Osnabrück 3.3.10 GIS mit Ruby on Rails Ruby - Philosophie eine dynamische, freie Programmiersprache, die sich einfach

FOSSGIS Osnabrück 3.3.10 GIS mit Ruby on Rails

MapLayers

Karte einbinden (Controller):

@map = MapLayers::Map.new("map") do |map, page| page << map.add_layer(MapLayers::GOOGLE) page << map.zoom_to_max_extent end

> Integration von OpenLayers in RoR

> Publizierung von Rails-Models als WFS, KML und GeoRSS

Page 33: GIS mit Ruby on Rails - Sourcepole · 2020. 4. 30. · FOSSGIS Osnabrück 3.3.10 GIS mit Ruby on Rails Ruby - Philosophie eine dynamische, freie Programmiersprache, die sich einfach

FOSSGIS Osnabrück 3.3.10 GIS mit Ruby on Rails

MapLayers

View: <html> <head> <%= map_layers_includes :google => "ABQIAAAA..." %>

</head> <body> <div id="map"/> <%= @map.to_html %> </body></html>

Page 34: GIS mit Ruby on Rails - Sourcepole · 2020. 4. 30. · FOSSGIS Osnabrück 3.3.10 GIS mit Ruby on Rails Ruby - Philosophie eine dynamische, freie Programmiersprache, die sich einfach

FOSSGIS Osnabrück 3.3.10 GIS mit Ruby on Rails

MapLayers

Web-Service publizieren (Controller):

class WeatherStationsController < ApplicationController

map_layer :weather_stations, :geometry => :geom

end > WFS-Service

> KML-Service

> GeoRSS-Service

Page 35: GIS mit Ruby on Rails - Sourcepole · 2020. 4. 30. · FOSSGIS Osnabrück 3.3.10 GIS mit Ruby on Rails Ruby - Philosophie eine dynamische, freie Programmiersprache, die sich einfach

FOSSGIS Osnabrück 3.3.10 GIS mit Ruby on Rails

„Web 2.0 GIS-Architektur“

Web

ser

ver

Raster files(TIFF)

Raster files(TIFF)

Clie

nts

BrowserJavacript viewer

BrowserJavacript viewer

Mapserver(WMS)

Mapserver(WMS)

Application server

PostgreSQL/PostGIS

Javascript-API

goog

le

yaho

o

etc.

Geo module(WFS/ GeoJSON)

Page 36: GIS mit Ruby on Rails - Sourcepole · 2020. 4. 30. · FOSSGIS Osnabrück 3.3.10 GIS mit Ruby on Rails Ruby - Philosophie eine dynamische, freie Programmiersprache, die sich einfach

FOSSGIS Osnabrück 3.3.10 GIS mit Ruby on Rails

UMN Mapserver

WMS/WFS Server:require "mapscript"

class Mapserver include Mapscript

def initialize(app, mapfile) @wms = MapObj.new(mapfile) end

def call(env) req = OWSRequest.new #... retval = @wms.OWSDispatch(req) #... endend

Page 37: GIS mit Ruby on Rails - Sourcepole · 2020. 4. 30. · FOSSGIS Osnabrück 3.3.10 GIS mit Ruby on Rails Ruby - Philosophie eine dynamische, freie Programmiersprache, die sich einfach

FOSSGIS Osnabrück 3.3.10 GIS mit Ruby on Rails

Mapfish

Generator:script/generate mapfish_resource Summit

Generierte Controller-Code:def index @summits = Summit.find_by_mapfish_filter(params)

render :json => @summits.to_geojsonend

Page 38: GIS mit Ruby on Rails - Sourcepole · 2020. 4. 30. · FOSSGIS Osnabrück 3.3.10 GIS mit Ruby on Rails Ruby - Philosophie eine dynamische, freie Programmiersprache, die sich einfach

FOSSGIS Osnabrück 3.3.10 GIS mit Ruby on Rails

Mapfish

Page 39: GIS mit Ruby on Rails - Sourcepole · 2020. 4. 30. · FOSSGIS Osnabrück 3.3.10 GIS mit Ruby on Rails Ruby - Philosophie eine dynamische, freie Programmiersprache, die sich einfach

FOSSGIS Osnabrück 3.3.10 GIS mit Ruby on Rails

Mapfish – Unterschiede Pylon

> Client kompatibel / REST-Schnittstelle

> Riesige Auswahl an Rails-Plugins

> Literatur, Schulungen, etc.

> Automatisches OR-Mapping

> Migrations

> Integriertes Test-Framework

Page 40: GIS mit Ruby on Rails - Sourcepole · 2020. 4. 30. · FOSSGIS Osnabrück 3.3.10 GIS mit Ruby on Rails Ruby - Philosophie eine dynamische, freie Programmiersprache, die sich einfach

FOSSGIS Osnabrück 3.3.10 GIS mit Ruby on Rails

Links

> http://rubyonrails.org/

> http://wiki.github.com/pka/map_layers

> http://mapfish.org/doc/implementations/rails.html

Page 41: GIS mit Ruby on Rails - Sourcepole · 2020. 4. 30. · FOSSGIS Osnabrück 3.3.10 GIS mit Ruby on Rails Ruby - Philosophie eine dynamische, freie Programmiersprache, die sich einfach

OSS GIS 2010?

Ruby on Rails!

Page 42: GIS mit Ruby on Rails - Sourcepole · 2020. 4. 30. · FOSSGIS Osnabrück 3.3.10 GIS mit Ruby on Rails Ruby - Philosophie eine dynamische, freie Programmiersprache, die sich einfach

FOSSGIS Osnabrück 3.3.10 GIS mit Ruby on Rails

FOSSGIS 2010

Danke!

Pirmin Kalberer<pka at sourcepole.ch>