2009-12-09 14 views
7

Estoy creando una aplicación pequeña en Sinatra, y me gustaría determinar las ciudades de mis usuarios desde su código postal (que ingresarían), la distancia entre ellos y el de otros usuarios (por código postal), y posiblemente un mapa de calor de las cremalleras.Ubicación geográfica en Ruby/Sinatra?

¿Cómo voy a hacer esto? He probado la gema geoip, pero parece que no hago lo que quiero. ¿Usaría un servicio externo como Google Maps (obviamente necesitaría esto para un mapa de calor)?

Gracias por cualquier ayuda.

Respuesta

9

La gema GeoKit parece una buena opción para lo que le gustaría hacer.

Extrae las interfaces de varios servicios de geocodificación (Yahoo, Google, etc.) y proporciona el código para los cálculos de distancia.

Puede geocodificar las cremalleras para obtener ubicaciones, acceder a la información de la dirección sobre la ubicación y calcular las distancias entre sus ubicaciones.

Aquí está el inicio rápido, descarado copiado de la página vinculada, sólo para darles una idea de cómo funciona la biblioteca:

irb> require 'rubygems' 
irb> require 'geokit' 
irb> a=Geokit::Geocoders::YahooGeocoder.geocode '140 Market St, San Francisco, CA' 
irb> a.ll 
=> 37.79363,-122.396116 
irb> b=Geokit::Geocoders::YahooGeocoder.geocode '789 Geary St, San Francisco, CA' 
irb> b.ll 
=> 37.786217,-122.41619 
irb> a.distance_to(b) 
=> 1.21120007413626 
irb> a.heading_to(b) 
=> 244.959832435678 
irb(main):006:0> c=a.midpoint_to(b)  # what's halfway from a to b? 
irb> c.ll 
=> "37.7899239257175,-122.406153503469" 
irb(main):008:0> d=c.endpoint(90,10)  # what's 10 miles to the east of c? 
irb> d.ll 
=> "37.7897825005142,-122.223214776155" 
+0

Perfecto, gracias! – user227837

Cuestiones relacionadas