Geokit: Rails und Google Maps – Teil 1

Jochen Kächelin, 1. März 2009 16:47

In Teil 1 zeige ich die Installation von Geokit und ein paar einfache Abfragen über die Google Maps-API in der interaktiven irb Konsole. In den weiteren Teilen folgt die Einbindung in ein eigenständiges Rails Projekt.

Geokit macht das Erstellen von Location-Based-Applikationen sehr einfach. Es stellt mittels einer sehr klar strukturierten API nützliche Funktionen zum Ermitteln eines Standortes, Entfernungsberechnungen und Rückwärtsberechnungen zur Verfügung.

In einem aktuellen Projekt verwenden wir Geokit um auf einer Landkarte die Herkunft unserer Besucher darzustellen und um den Aufbau einer Community zu fördern. „Befindet sich in der näheren Umgebung jemand mit den gleichen Interessen?“


1. Falls noch nicht geschehen müssen wir unserem System zuerst mitteilen wo es das Geokit gem finden kann:

gem sources -a http://gems.github.com

2. Installation des Geokit gems:

sudo gem install andre-geokit

3. Erstellen einer neuen Rails Applikation:

rails -d mysql geokit && cd geokit

4. Die interaktive irb Konsole starten:

irb

5. Das Geokit gem einbinden:

require "rubygems"
require "geokit"

Bei einer erfolgreichen Einbindung sollten folgende Zeilen zu sehen sein:

>> require "rubygems"
=> true
>> require "geokit"
=> true
>>

Als erstes teile ich Google mit wo ich mich momentan befinde:

hier = Geokit::Geocoders::MultiGeocoder.geocode("Hauptstrasse 86, Eislingen")
 
#<Geokit::GeoLoc:0x127b9a0 @city="Eislingen", @lng=9.7082073, @country_code="DE", @provider="google", @street_address="Hauptstra\303\237e 86", @lat=48.7015365, @full_address="Hauptstra\303\237e 86, 73054 Eislingen, Germany", @zip="73054", @precision="address", @state="Baden-W\303\274rttemberg", @success=true>

Dann sage ich Google wo sich mein Büro befindet:

office = Geokit::Geocoders::MultiGeocoder.geocode("Stuttgarter strasse 177, uhingen")
 
#<Geokit::GeoLoc:0x121798c @city="Uhingen", @lng=9.5676341, @country_code="DE", @provider="google", @street_address="Stuttgarter Stra\303\237e 177", @lat=48.7137968, @full_address="Stuttgarter Stra\303\237e 177, 73066 Uhingen, Germany", @zip="73066", @precision="address", @state="Baden-W\303\274rttemberg", @success=true>

Übersichtlicher wird das ganze mit folgendem Aufruf:

>> office.display
Provider: google
Street: Stuttgarter Straße 177
City: Uhingen
State: Baden-Württemberg
Zip: 73066
Latitude: 48.7137968
Longitude: 9.5676341
Country: DE

Wenn ich “nur” die Angaben zu den Breiten- und Längengraden habe kann ich auch eine Rückwärtsabfrage durchführen um die Andresse zu ermitteln:

reverse = Geokit::Geocoders::GoogleGeocoder.reverse_geocode "48.7137968,9.5676341"

und ich erhalte wieder die Adresse meines Büros:

#<Geokit::GeoLoc:0x1280838 @city="Uhingen", @lng=9.5676341, @country_code="DE", @provider="google", @street_address="Stuttgarter Stra\303\237e 177", @lat=48.7137968, @full_address="Stuttgarter Stra\303\237e 177, 73066 Uhingen, Germany", @zip="73066", @precision="address", @state="Baden-W\303\274rttemberg", @success=true>

Wenn ich nun wissen will wie weit mein momentaner Standort von meinem Büro entfernt ist benutze ich folgendes:

>> hier.distance_to(office)
=> 6.47237916523715

Ich muss als jeden Tag ca. 6.5 Kilometer fahren um ins Büro zu kommen.

So, hier ist der Teil 1 auch schon zu Ende. In den nächsten Teilen bauen wir uns Stück für Stück eine eigenständige Rails Applikation welche intensiv mit Google Maps arbeitet. Bis denne.

Bookmark and Share

Schlagworte: ,

Autor: Jochen Kächelin, http://www.gissmog.de

Jochen Kächelin ist momentan als System Administrator eines Logistikunternehmens und Online-Shop Betreibers tätig und hauptsächlich mit der Entwicklung eines Rails basierenden Online-Shops beschäftigt. Zuvor war er an der Enwicklung einer auf Linux basierenden Firewall beteiligt und für die Wartung von 30 Webservern und ca. 800 Domains verantwortlich.

Artikel bewerten:

1 Sterne2 Sterne3 Sterne4 Sterne5 Sterne (7 Bewertung(en), durchschnittlich: 4.86 (max. 5)
Loading ... Loading ...

6 Kommentare zu “Geokit: Rails und Google Maps – Teil 1”

  1. spellbound schreibt:

    Hmmm. Also Schritt 2 funktioniert bei mir nur wenn ich das “sudo” weg lasse.

    Und zu Schritt 5: “Bei einer erfolgreichen Einbindung sollten folgende Zeilen zu sehen sein:” ist toll – hinzufügen könntet ihr:

    Bei einer mißglückten Einbindung sollten folgende Zeilen zu sehen sein:
    LoadError: no such file to load — geokit
    from (irb):1:in ‘require’
    from (irb):1

    Was hab ich denn jetzt falsch gemacht?

  2. Jochen Kächelin schreibt:

    Also “sudo” sollte eigentlich bei allen modernen Linux Distributionen Standard sein. Du erlangst hier als “normaler” User für das folgende Kommando root Rechte. Wenn bei Deiner Installation kein “sudo” installiert ist, dann wechsle einfach mit “su root” den Benutzer und führe das Kommando aus: gem install andre-geokit . Ich habe den Punkt 5 geändert – hier hat was entscheidendes gefehlt.

    5.)

    require “rubygems”
    require “geokit”

    in der Reihenfolge sollte es dann klappen.

  3. spellbound schreibt:

    Danke für die schnelle Antwort. Unter Windows gibt es sudo nicht. Kleine Irritation gab es noch, weil require “rubygems” bei mir nicht true lieferte, sondern false. Aber wie ich dann rausgefunden hab macht das nichts. Ab da lief auch alles. Freue mich auf die folgenden Teile dieses Tutorials!

  4. Refactoring von Rails-Anwendungen: Was tun wenn der Laufsteg durchbricht? | RailsMagazin - Alles rund um Ruby on Rails schreibt:

    [...] zur Verfügung gestellt werden. Die Address-Klasse selbst kann dann komplexe Methoden – etwa Geocoding – [...]

  5. spellbound schreibt:

    Ich kann mich irren, aber ich glaube dass die Entfernungsangabe in Meilen ausgegeben wird.

    Wann kommt Teil 2?

  6. Stefan schreibt:

    Netter Artikel,
    aber ich glaube auch, dass die Entferungsangaben nicht in Km ausgegeben werden.