Skip to content

Punkte der OpenStreetMap in Garmin POI konvertieren

OpenStreetMap Immer wieder kommt in Foren die Frage auf wie man einfach Punkte aus der OpenStreetMap in POI für das Garmin konvertieren kann.

Auch Forscher an meiner Dienststelle wünschten sich kürzlich POI aus der OpenStreetMap von Hotels, Autovermietung, Supermärkten, Kneipen und anderem auf dem Navi zu haben.

Das geht recht einfach und lässt sich mit den drei Programmen wget, ImageMagick und GPSBabel auf der Linux-Shell sogar automatisieren. Natürlich kann man auch alle Schritte auf einer klickbaren Oberfläche nacheinander ausführen.

Als erstes holen wir uns die POI aus dem Untersuchungsgebiet mit der Overpass-API:
wget "http://overpass-api.de/api/interpreter?data=node[tourism=hotel](-18,-61,2,-46);out meta;" -O hotel.osm


Wer kein wget auf einer Shell verwendet kopiert einfach den Text zwischen den Anführungszeichen als URL komplett in den Browser seiner Wahl speichert die OSM-Datei ab.

Dann brauchen wir noch ein Icon, dabei greife ich in die OpenClipart und hole es dazu:
wget "http://openclipart.org/image/800px/svg_to_png/129925/1301476335.png" -O hotel.png


Das Icon muss noch das richtige Format bekommen, hier wird der convert von ImageMagick verwendet:
convert hotel.png -compress none -type truecolor -resize 24x24 hotel.bmp


Schließlich macht GPSBabel die GPI-Datei für Garmin fertig:
gpsbabel -i osm -f "hotel.osm" -o garmin_gpi,category="Hotel",bitmap="hotel.bmp",position -F "hotel.gpi"


Das Beispiel lässt sich beliebig für andere Features der OpenStreetMap übertragen. Die Sache hat nur einen Haken: POI die als Fläche gemappt sind werden auf diese Weise nicht berücksichtigt.

Klassenbildung beim Geocaching

Geocaching Zu meine Artikel gestern wurde gewünscht, die Klassengesellschaft beim Geocaching farblich darzustellen. Es gibt ja die Anhänger des tradionellen Geocaching, zu denen ich mich auch zähle, andere wollen nur Multicaches nach Art der Schnitzeljagd im Wald machen und wieder andere brauchen knifflige Mystery-Rätselaufgaben.

QGIS kann natürlich auch klassifizieren, als Hintergrund verwende ich in diesem Beispiel die WMS-Luftbilder für Berlin von 2011, die in Berlin der Senat für Stadtentwicklung zur Verfügung stellt. Dabei muss darauf geachtet werden, dass die Luftbilder in der Projektion angefordert werden, die auch die darüber liegenden Layer haben, also in diesem Fall UTM 33N.



Der Puffer-Layer von gestern passt dann elegant darüber und lässt sich in bunten Farben nach dem Geocache-Typ klassifizieren.



In meinem Beispiel fehlen dabei Klassen, die in der Ausgangsdatei (PQ als GPX von Groundspeak) nicht enthalten waren. Warum das so ist kann sich der geneigte Leser sicher denken.

Abstand halten beim Geocaching

Geocaching In der grünen Hölle wurde kürzlich gefragt, wie man einfach auf einer Karte sehen kann, wo gemäß der Abstandsregel (eine zehntel Meile darf rund um jeden Geocache kein weiterer Geocache oder eine physische Station eines solchen sein) noch Platz ist.

Es gibt verschiedene Möglichkeiten, so etwas zu machen, ich greife hier natürlich zu QGIS. Damit kann man sich eine PQ (Pocket Query, eine GPX-Datei die für Premium Member von Groundspeak abgerufen werden kann) mit allen traditionellen Geocaches (also wo die Koordinate auf den Geocache zeigt) und den "additional Waypoints" laden.



Da die Angaben hier in Grad vorliegen (auch ellipsoidische Koordinaten genannt) werden diese erst einmal als Shape exportiert um damit arbeiten zu können und dabei als UTM umprojeziert. UTM hat den Vorteil dass man Koordinaten bekommt mit denen man so etwa in Meter rechnen kann. Man muss dafür die richtige Zone auswählen, bei uns ist das 33N.



Wenn man sich nun eine Grundkarte eigener Wahl (ich nehme hier mal OpenStreetMap, es geht auch Google oder was auch immer es sein soll) mit dem OpenLayers-Plugin und danach die Punkte als Shape lädt sieht das schon mal ganz gut und nicht mehr so verzerrt aus. Jetzt können Pufferzonen von 161 Metern rund um die Punkte gebildet werden.



Die Pufferzonen lassen sich nun als Layer über die Karte legen und in Gebieten mit hoher Cachedichte kann man sehr schön erkennen wie dicht die Dosen hier teilweise beieinander liegen.



Mit einer solchen Karte lassen sich Powertrails sehr schön erkennen, ebenfalls Lücken in der urbanen Bedosung. In solchen Lücken kann jedoch trotzdem ein Mystery liegen, dessen Koordinaten erst errätselt werden müssen. Ebenfalls könnte hier ein Multicache seinen Weg entlang führen.

Geocacher helfen OpenStreetMap

OpenStreetMap Eine schwere Umstellung hat die beliebte OpenStreetMap nun hinter sich - auch wenn es nicht so schlimm ist, wie Heise uns zum 1. April berichtete.

Auch bei den Geocachern ist die OpenStreetMap sehr beliebt, vor allem die fertigen Lösungen wie die Kleineisel-Karte oder die Freizeitkarte, die man nur schnell aufs Garmin kopieren muss, werden gern verwendet.

Es ist an der Zeit, dass Geocacher die OpenStreetMap unterstützen!. Nun liegt es nicht jedem sich in die üblichen Programme wie JOSM oder Potlatch einzuarbeiten. Ich habe mir daher ein kleines Programm mit dem Namen YAPIS ausgedacht, mit dem sogar meine Oma Punkte in die OpenStreetMap hätte eintragen können.

Damit mögen Geocacher bitte POI, also Orte von Interesse in die OpenStreetMap eintragen. Dabei ist egal um was es sich dabei handelt. Es muss auch kein YAPIS verwendet werden, sondern wer das anders machen will, soll das auch tun.

Sowohl Geocaching als auch OpenStreetMap haben mir in meiner beruflichen Entwicklung sehr geholfen. Als Anreiz habe ich deshalb einen dicken Stapel Geocoins spendiert, und zwar nicht irgendeine, sondern die zum 8-jährigen Jubiläum der grünen Hölle von Sepp&Berta!


Unter allen Geocachern, die bis Ende April 2012 mindestens 10 Punkte in die OpenStreetmap eingetragen haben, werden 50 (fünfzig!) dieser Geocoin ausgelost. Um mitmachen zu können, hier zu dem Artikel bitte im Kommentar (oder für Blogger: Trackback) bitte den OpenStreetMap-Namen angeben, mit dem die Einträge erfolgen.

Gehen mehr als 50 Kommentare ein werden die Geocoins unter den Teilnehmern verlost. Die 10 eingetragenen Punkte in der OpenStreetMap werden natürlich auch überprüft! Die Gewinner werden per E-Mail benachrichtigt und erhalten die unaktivierte Geocoin mit normalem Postbrief. Ich und meine Verwandschaft dürfen nicht mitmachen, der Rechtsweg ist ausgeschlossen.

Und nun: Frohes kartieren und viel Glück!

FTP-Server für GeoNetwork

Linux GeoNetwork ist ein Server für Metadaten von Geodaten. Also Daten die beschreiben was in Geodaten drin ist, wo die Informationen her kommen, was man damit machen darf und vielleicht auch noch wie gut sie sind.

Vor allem natürlich, auf welches Gebiet sie sich beziehen, denn man will ja später mit dem GeoNetwork räumlich suchen können. Also ein Gebiet auf der Karte auswählen und nicht nur nach einen Stichwort suchen müssen.

Um die Daten anzubieten bringt GeoNetwork den GeoServer mit, der zu ziemlich alle gängigen Formate an Geodaten von Shape bis GeoTIFF verwerten und einheitlich als WMS und WFS in allen Karten-Projektionen ausliefern kann, damit man sich die Daten komfortabel in das GIS-Programm eigener Wahl als Layer ziehen kann.

Für die eingetragenen Benutzer des GeoNetwork-Knoten ist es aber auch praktisch, die Geodaten selbst auf den Server hochladen zu können. Dafür bietet sich FTP an, ein Protokoll fast so alt wie das Internet selbst und älter als die meisten seiner Benutzer.

Ich stand vor der Aufgabenstellung, nun dem GeoNetwork noch einen FTP-Server zur Seite zu stellen. So ein FTP-Server ist schnell installiert, die Benutzer des GeoNetwork sollten sich auch dort mit dem selben Namen und Passwort einloggen können.

Glücklicherweise ist der proftpd so flexibel, dass er sich auch gegenüber einem SQL-Server authentifizieren kann. Dazu werden Benutzer und Gruppen in zwei Tabellen gehalten. Die Gruppen hab ich mir erspart und die Tabelle nur entsprechend dem Howto angelegt und leer gelassen:

CREATE TABLE ftpgroups (
groupname character varying(30) NOT NULL,
gid integer NOT NULL,
members character varying(255)
)


Für die Benutzer war der erste Plan, die Tabelle anzulegen und einen Trigger zu definieren, der bei Insert/Update auch die Tabelle ftpusers aktualisiert. Mit einer Abfrage gehts aber noch einfacher und vor allem klappt das auch bei einfachen Datenbank-Systemen:

CREATE OR REPLACE VIEW ftpusers AS
SELECT users.id AS pkid, users.username AS userid, users.password AS passwd, 10000+users.id AS uid, NULL::integer AS gid, NULL::text AS homedir, NULL::text AS shell
FROM users;


Wie man leicht erkennen kann wird das SHA1-verschlüsselte Passwort aus der Benutzertabelle des Geonetwork in die Tabelle der FTP-Benutzer gespiegelt, die Benutzer-ID ist der Primärschlüssel plus 10000 (möglicherweise will man hier auch NULL angeben um die Vorgabe der Konfiguration verwenden zu lassen).

Eine passende Konfigurationsdatei für den proftpd lädt nun nur noch die notwendigen Module und weist den FTP-Server an nur noch den Daten aus den Tabellen zu glauben. Die Defaults für UID und GID sind meiner Installation openSUSE 12.1 entnommen und müssen bei Bedarf angepasst werden.

ServerName "CarBioCial FTP Server"
ServerType standalone
DefaultServer on
Port 21
PassivePorts 49152 65534
DebugLevel 0
SystemLog /var/log/proftpd/proftpd.log
UseIPv6 off
Umask 022
MaxInstances 30
User ftp
Group ftp
LogFormat default "%h %l %u %t \"%r\" %s %b"
LogFormat auth "%v [%P] %h %t \"%r\" %s"
LogFormat write "%h %l %u %t \"%r\" %s %b"
LoadModule mod_sql.c
LoadModule mod_sql_postgres.c
LoadModule mod_sql_passwd.c
AuthOrder mod_sql.c
RootLogin off
AuthPAM off
DefaultRoot ~
RequireValidShell off
SQLBackend postgres
SQLAuthenticate on
SQLEngine on
SQLAuthenticate users*
SQLPasswordEngine on
SQLPasswordEncoding hex
SQLAuthTypes SHA1
SQLConnectInfo geonetwork@localhost geonetwork geopasswd
SQLDefaultUID 40
SQLDefaultGID 49
SQLDefaultHomedir /data/ftp
SQLUserInfo ftpusers userid passwd uid NULL NULL NULL
SQLGroupInfo ftpgroups groupname gid members
SQLUserWhereClause true
SQLNegativeCache off
SQLLogFile /var/log/proftpd/proftpd-sql.log


Danach noch den FTP-Server neu starten und die Benutzer können sich mit ihrem universellen GDI-Passwort einloggen und dies auch im GeoNetwork selbst ändern. Diese wäre mit LDAP nicht möglich gewesen, denn GeoNetwork kann sich nicht an den LDAP-Server binden, sondern nur die Anmeldung darüber durchführen lassen.

Noch ein letzter Tipp: Was hier gebaut wurde geht auch mit so ziemlich jeder Web-Anwendung, die Benutzer in einer SQL-Datenbank speichert. Man kann also genau so einfach ein Forum oder ein Blog mit einem FTP-Server erweitern.
tweetbackcheck