O documento discute a adição de funcionalidades geoespaciais em aplicações Ruby usando gems como Geocoder e MongoDB. Ele explica como geocodificar e fazer geolocalização reversa de modelos, além de apresentar DSLs para consultas espaciais e exemplos de como resolver problemas reais usando análise espacial.
2. 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;
3. Primeiro de tudo ... GIS (GeographicInformation 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.
4. Por que GIS? Localização; Condição; Tendência; Rotas; Modelos.
5. 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 .
7. 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.
8. Por quEMongoDB ? Código aberto; Armazenamento de informações desestruturadas; Comunidade ativa; Capacidade de armazenamento de dados geográficos (geometrias); Performance em consultas espaciais.
9. Configurando Mongoid No Gemfile Gem ‘mongoid’, ‘~> 2.2’ Gem ‘bson_ext’, ‘~> 1.3’ bundleinstall rails g mongoid:config No Model include Mongoid::Document field :name, :type => String field :address, :type => String field :coordinates, :type => Array
10. Configurando Geocoder gem “geocoder” bundleinstall No Model Include Geocoder::Model::Mongoid geocoded_by :address (addressor IP) after_validation :geocode # getthecoordinates Or Reverse Geocoding include Geocoder::Model::Mongoid reverse_geocoded_by :coordinates after_validation :reverse_geocode #gettheaddresss rakegeocode:allCLASS=YourModel # Geocodificação em Lote
14. 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
15. # 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]
16. 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;
17. 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;