Upload
roberto-pepato
View
513
Download
0
Embed Size (px)
DESCRIPTION
Lightning Tallk about how to integrate GIS functionalities into Ruby code. Presented at São Paulo QCon 2011.
Citation preview
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 :)