adding where to your ruby apps lt - (q con)

Post on 05-Jul-2015

511 Views

Category:

Technology

0 Downloads

Preview:

Click to see full reader

DESCRIPTION

Lightning Tallk about how to integrate GIS functionalities into Ruby code. Presented at São Paulo QCon 2011.

TRANSCRIPT

ADDING “WHERE” TO YOUR RUBY APPS

Roberto Pepato

Robson Júnior

EM POUCOS SLIDES ...

Entender o que é de fato GIS;

Ir além do entendimento de um simples

geocode e roteirização;

Gems para adicionar “where” na sua

aplicação;

Apresentar um caso de uso de aplicação

massiva de GIS;

PRIMEIRO DE TUDO ...

GIS (Geographic Information System) são

sistemas de informação que permitem e

facilitam a análise, gestão ou representação

do espaço e dos fenômenos que nele

ocorrem.

Não existem limites para sua utilização.

O que limita é sua imaginação.

POR QUE GIS?

Localização;

Condição;

Tendência;

Rotas;

Modelos.

GIS NO SEU DIA A DIA

Geocodificação ( Google Maps );

Geocodificação Reversa ( FourSquare );

Roteirização ( Google Maps );

Mapas temáticos;

E muitas outras aplicações .

UM PEQUENO EXEMPLO

POR QUE EM RUBY ?

Linguagem dinâmica, clara e concisa;

Fácil implementação de dsl‟s;

Comunidade ativa;

Várias implementações base: geokit-gem; geocoder; geokit-rails; graticule; act_as_geocodable; ym4r-gm; postgis_adapter; google_static_maps_helper; etc;

Um longo caminho a ser explorado: análise espacial, operações topológicas, análise de redes, etc.

POR QUE MONGODB ?

Código aberto;

Armazenamento de informações

desestruturadas;

Comunidade ativa;

Capacidade de armazenamento de dados

geográficos (geometrias);

Performance em consultas espaciais.

CONFIGURANDO MONGOID

No Gemfile

Gem „mongoid‟, „~> 2.2‟

Gem „bson_ext‟, „~> 1.3‟

bundle install

rails g mongoid:config

No Model

include Mongoid::Document

field :name, :type => String

field :address, :type => String

field :coordinates, :type => Array

CONFIGURANDO GEOCODER

gem “geocoder”

bundle install

No ModelInclude Geocoder::Model::Mongoid

geocoded_by :address (address or IP)

after_validation :geocode # get the coordinates

Or Reverse Geocoding

include Geocoder::Model::Mongoid

reverse_geocoded_by :coordinates

after_validation :reverse_geocode #get the addresss

rake geocode:all CLASS=YourModel # Geocodificação em Lote

SEU MODEL GEOLOCALIZADO

SEU MODEL GEOLOCALIZADO

VALIDAÇÃO DA GEOLOCALIZAÇÃO

DSL’S (EXEMPLOS GEOCODER)

# venues within 20 miles of Omaha

Venue.near('Omaha, NE, US', 20)

# venues within 20 miles of a point

Venue.near([40.71, 100.23], 20)

# venues with coordinates

Venue.geocoded

# venues without coordinates

Venue.not_geocoded

# other objects within 30 miles

obj.nearbys(30)

# distance from arbitrary point to object

obj.distance_from([40.714,-100.234])

# direction from object to arbitrary point

obj.bearing_to("Paris, France")

# look up coordinates of some location (like searching Google Maps)

Geocoder.coordinates("25 Main St, Cooperstown, NY") => [42.700149, -74.922767]

# distance (in miles) between Eiffel Tower and Empire State Building

Geocoder::Calculations.distance_between([47.858205,2.294359], [40.748433,-

73.985655]) => 3619.77359999382

# find the geographic center (aka center of gravity) of objects or points

Geocoder::Calculations.geographic_center([city1, city2, [40.22,-73.99], city4]) =>

[35.14968, -90.048929]

COMO VOCÊ SAIRIA DESSA ?

Eu preciso construir um hospital na zona sul

de SP:

Considerando que tenho de atender uma

comunidade ainda não atendida por outros

hospitais;

Considerando que as ambulâncias que se

deslocarem pela área de atendimento devem

trafegar num limite máximo de 25 minutos em

condições de trânsito normal;

CONTINUANDO ...

Considerando a infraestrutura viária disponível;

Considerando a infraestrutura de transporte

público disponível;

Considerando que as famílias atendidas por este

hospital devem ter renda máxima de 3 salários

mínimos;

DETERMINE O LOCAL ÓTIMO PARA

CONSTRUÇÃO DESSE HOSPITAL?

BUFFER, ROTA, GEOCODE, ANALISE ESPACIAL,

OPERAÇÃO TOPOLÓGICA, ETC...

@bsao - robson

@rpepato - pepato

OBRIGADO :)

top related