2009-12-09 7 views
7

Ich erstelle eine kleine App in Sinatra und möchte die Städte meiner Benutzer anhand ihrer Postleitzahl (die sie eingeben würden), der Entfernung zwischen ihnen und anderer Benutzer (nach Postleitzahl) und möglicherweise bestimmen eine Heatmap der Reißverschlüsse.Geografische Lage in Ruby/Sinatra?

Wie würde ich das tun? Ich habe das geoip Juwel versucht, aber es scheint nicht zu tun, was ich will. Würde ich einen externen Service wie Google Maps nutzen (offensichtlich würde ich das für eine Heatmap benötigen)?

Danke für jede Hilfe.

Antwort

9

Der Edelstein GeoKit klingt wie eine gute Passform für das, was Sie tun möchten.

Es abstrahiert die Schnittstellen zu verschiedenen Geocoding-Diensten (Yahoo, Google usw.) und stellt Code für Entfernungsberechnungen zur Verfügung.

Sie können die Postleitzahlen geocodieren, um Standorte abzurufen, Adressinformationen über den Standort abzurufen und die Entfernungen zwischen Ihren Standorten zu berechnen.

Hier ist der Quick-Start, schamlos aus der gelinkten Seite kopiert, nur Sie, wie die Bibliothek Werke eine Idee zu geben:

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

Perfect, danke! – user227837