2009-12-09 13 views
7

Sto creando una piccola app in Sinatra e vorrei determinare le città dei miei utenti dal loro codice postale (che avrebbero inserito), la distanza tra loro e gli altri utenti (per codice postale), e possibilmente una mappa termica delle cerniere.Posizione geografica in Ruby/Sinatra?

Come faccio? Ho provato la gemma geoip, ma non sembra fare quello che voglio. Utilizzerei un servizio esterno come Google Maps (ovviamente avrei bisogno di questo per una mappa di calore)?

Grazie per qualsiasi aiuto.

risposta

9

La gemma GeoKit suona come una buona idea per quello che ti piacerebbe fare.

Assorbe le interfacce a vari servizi di geocodifica (Yahoo, Google, ecc.) E fornisce il codice per i calcoli della distanza.

È possibile eseguire il geocoding delle cerniere per ottenere posizioni, accedere alle informazioni sugli indirizzi relative alla posizione e calcolare le distanze tra le posizioni.

Ecco il rapido avvio, senza vergogna copiato dalla pagina collegata, giusto per dare un'idea di come funziona 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

Perfetto, grazie! – user227837

Problemi correlati