ruby opengeodb

Get Version

0.1.0

→ ‘ruby-opengeodb’

What

Dieses Gem erlaubt den Zugriff auf eine OpenGeoDB Datenbank um Geoinformationen daraus zu ermitteln (z.B. GPS-Daten zu einer PLZ) oder Entfernungsberechnung.

Ruby-opengeodb kann verwendet werden, um die Längen- und Breitengrade zu einem Ort zu ermitteln um diesen zum Beispiel auf einer generierten Landkarte anzuzeigen. Es kann zur Entfernungsberechnung verwendet werden: z.B. Suche von Personen oder Objekten, Veranstaltungen, etc. in einem definierten Umkreis. Eine weitere Verwendungsmoeglichkeit wären Location-Based-Services, bei dem z.B. allen Besuchern im Umkreis von 30 km ein bestimmtes Werbebanner eingeblendet wird.

OpenGeoDB ist ein Projekt, welches freie Geoinformationen (hauptsächlich für Deutschland, Oesterreich und die Schweiz) zusammengetragen und in einer flexiblen Datenbankstruktur mit vielen Moeglichkeiten zur Abfrage zur Verfügung stellt.

Ich habe mit diesem Projekt selbst nichts zu tun – deshalb werde ich auch keinen (kostenlosen) Support zum korrekten Einrichten dieser Datenbank oder anderer Fragen, die damit zusammenhängen, leisten. Für diesbezügliche Probleme: OpenGeoDB

Installing

sudo gem install ruby-opengeodb

Um das Gem verwenden zu können, muß die OpenGeoDB Datenbank installiert sein – entweder lokal oder auf einem anderen System auf dem Zugriff auf die Datenbank moeglich ist.

Ich habe mit einer MySQL-Datenbank getestet. Andere Datenbanken sollten auch problemlos möglich sein, solange das Gem Active-Record damit umgehen kann. Ein Ändern der Connect-Parameter sollte eigentlich ausreichen, um eine andere Datenbank zu verwenden. Falls nicht, schreibt mir eine eMail mit der Problembeschreibung oder sogar einer Lösung dafür!

The basics

Da ich mit Test-Driven-Development (TDD) arbeite, sollten für jede Funktion dieses Gems in den mitgelieferten Testfällen ein Beispiel zur Verwendung enthalten sein.

Demonstration of usage


require 'rubygems'
require 'ruby-opengeodb'

# Verbindung zur Datenbank aufbauen
Location.db_connect 
# Achtung: ggf. eigene Parameter fuer DB angeben, 
# falls von meiner Standardbelegung unterschiedlich!

# dies ist die Default-Belegung:
# Location.db_connect(adapter="mysql",
#                     host="localhost",
#                     username="root",
#                     password=nil,
#                     database="opengeodb",
#                     socket="/var/run/mysqld/mysqld.sock" 

# Achtung: die Laengen- und Breitengrade geben die ungefaehre Mitte des PLZ-Bereichs an und koennen leicht von den eigenen Koordinaten abweichen, wenn man in diesem PLZ-Gebiet wohnt.

locations = %w(13359 67059 90459 56068 69115)
# = Berlin, Ludwigshafen, Nuernberg, Koblenz, Heidelberg

locations.each { |plz|
  location = Location.new(plz)
  puts "PLZ: #{plz} Ort: #{location.ort} Lat: #{location.lat} Lon: #{location.lon}" 
}

# Entfernung (Luftlinie) von Ludwigshafen -> Berlin

ludwigshafen = Location.new("67059")
berlin = Location.new("13359")

puts "Entfernung: " + ludwigshafen.distance(berlin).to_s + " km" 

# zur Kontrolle, der umgekehrte Weg muss (zumindest in diesem Universum) gleich lang sein

puts "Entfernung: " + berlin.distance(ludwigshafen).to_s + " km" 

# Eine Distanz kann auch zu einer definierten Koordinate berechnet werden

puts "Entfernung: " + berlin.distance_lat_lon(50.0, 10.0).to_s + " km" 

# liefert ein Array aller passenden Orte einer PLZ

liste = Location.by_plz("27616") # mehrere Orte haben diese PLZ
                                 # liefert ein Array mit [loc_id, plz, ort]
                                 # 'loc_id' ist ein interner Key bei OpenGeoDB

liste = Location.like("Holle%") # alle Orte, die mit Holle beginnen
                                # liefert ein Array mit [loc_id, plz, ort]
                                # s. o.


Dies ist noch eine ziemlich rudimentäre Form dieses Gems – weitere Funktionen werden noch eingebaut.

Die Methode Changelog#changelogs gibt ein Array mit den Datensätzen zurück, die beschreiben, was an der Datenbank zuletzt geändert wurde. Keine Anwendungs methode im eigenlichen Sinne, kann aber ganz nützlich sein, wenn man wissen will, welcher Version verwendet wird, ob bestimmte Aenderungen auch in der Version der Datenbank, die man selbst abfragt, schon eingeflossen sind.

Was wollt ihr unbedingt noch haben – schreibt mir an die untenstehende eMail-Adresse!

Mailinglist

http://groups.google.com/group/ruby-opengeodb

How to submit patches

Read the 8 steps for fixing other people’s code and for section 8b: Submit patch to Google Groups, use the Google Group above.

The trunk repository is svn://rubyforge.org/var/svn/ruby-opengeodb/trunk for anonymous access.

License

This code is free to use under the terms of the MIT license.

Contact

Comments are welcome. Send an email to Thomas Preymesser.

Dr Nic, 30th July 2007
Theme extended from Paul Battley