Auflisten von POIs aus Openstreetmap mit XAPI und XSL

Vor einiger Zeit wurde ich auf das Schorndorfer Stadtwiki Schopedia aufmerksam, dass von ein paar Freiwilligen betreut wird. Mir fiel auf, dass im Wiki einige Seiten mit Listen von z.B. Gastätten oder Museen angelegt wurden.

Als aktiver Openstreetmap Mapper habe ich mich natürlich gleich gefragt, ob es nicht möglich wäre die Daten einfach aus Openstreetmap auszulesen, da diese dort größtenteils schon vorhanden sind. Damit könnte man sich das aufwendige Pflegen der Daten im Wiki sparen.

Für die Abfragen von POIs aus Openstreetmap kann man die XAPI verwenden. An die API-Server kann man über http sehr leicht Anfragen schicken. Als Antwort erhält man die gewünschten Daten im XML Format.

Beispiel:

Folgender Link liefert alle Nodes vom Typ amenity=restaurant im XML-Format zurück. Die bounding box (bbox) schränkt das Gebiet auf Schorndorf ein:

http://xapi.openstreetmap.org/api/0.6/node[amenity=restaurant][bbox=9.4908142,48.7810801,9.5660019,48.8387351]

Hier ein Ausschnitt aus den zurückgelieferten Daten:

<?xml version='1.0' standalone='no'?>
<osm version='0.6' generator='xapi: OSM Extended API 2.0' xmlns:xapi='http://www.informationfreeway.org/xapi/0.6' xapi:uri='/api/0.6/node[amenity=restaurant|fast_food|pub|cafe][bbox=9.4908142,48.7810801,9.5660019,48.8387351]' xapi:planetDate='20100824' xapi:copyright='2010 OpenStreetMap contributors' xapi:license='Creative commons CC-BY-SA 2.0' xapi:bugs='For assistance or to report bugs contact 80n80n@gmail.com' xapi:instance='zappyOsm'>
 <node id='721241970' lat='48.830856' lon='9.5116892' user='mabe75' timestamp='2010-05-04T19:01:28Z' uid='260302' version='1' changeset='4607010'>
 <tag k='amenity' v='restaurant'/>
 <tag k='name' v='Lamm'/>
 </node>
 <node id='392682646' lat='48.8315734' lon='9.5468864' user='MattGPS' timestamp='2010-05-11T19:00:20Z' uid='12973' version='3' changeset='4671372'>
 <tag k='amenity' v='restaurant'/>
 <tag k='name' v='Gasthaus an der Wieslauf'/>
 </node>
 <node id='319597380' lat='48.8277913' lon='9.5477029' timestamp='2008-12-17T21:13:15Z' version='1' changeset='444629'>
 <tag k='amenity' v='restaurant'/>
 <tag k='name' v='Gasthaus zur Linde'/>
 </node>
[...]

Nun haben wir die Daten im XML Format. Die Daten lassen sich nun mit Hilfe einer XSL Transformation (XSLT) z.B. in ansprechenden HTML-Code umwandeln.

Hierfür habe ich ein einfaches XSL Stylesheet (nodes.xsl) erstellt. Dieses erzeugt eine einfache HTML-Datei, die eine Openlayer Karte und eine Tabelle mit allen gefundenen Nodes enthält. Für jede Node befindet sich in der Karte ein Marker. Ich verwende zum Durchführen der XSL-Transformation die Anwendung xsltproc.

wget 'http://xapi.openstreetmap.org/api/0.6/node[amenity=restaurant][bbox=9.4908142,48.7810801,9.5660019,48.8387351]'
xsltproc nodes.xsl nodes.xml  > nodes.html

Den Quellcode für das XSL Stylesheet gibts hier als PDF: nodes.xsl.

Doku über die XAPI von Openstreetmap findet ihr hier: http://wiki.openstreetmap.org/wiki/Xapi

Hier ist ein einfaches Beispiel zum Anzeigen einer Karte mit Markern (wird auch in meinem XSL Code verwendet): http://wiki.openstreetmap.org/wiki/OpenLayers_Marker

Update: Inzwischen gibt es hier eine Demo Seite mit obigem Beispiel

<?xml version=’1.0′ standalone=’no’?>
<osm version=’0.6′ generator=’xapi: OSM Extended API 2.0′ xmlns:xapi=’http://www.informationfreeway.org/xapi/0.6&#8242; xapi:uri=’/api/0.6/node[amenity=restaurant|fast_food|pub|cafe][bbox=9.4908142,48.7810801,9.5660019,48.8387351]’ xapi:planetDate=’20100824′ xapi:copyright=’2010 OpenStreetMap contributors’ xapi:license=’Creative commons CC-BY-SA 2.0′ xapi:bugs=’For assistance or to report bugs contact 80n80n@gmail.com’ xapi:instance=’zappyOsm’>
<node id=’721241970′ lat=’48.830856′ lon=’9.5116892′ user=’mabe75′ timestamp=’2010-05-04T19:01:28Z’ uid=’260302′ version=’1′ changeset=’4607010′>
<tag k=’amenity’ v=’restaurant’/>
<tag k=’name’ v=’Lamm’/>
</node>
<node id=’392682646′ lat=’48.8315734′ lon=’9.5468864′ user=’MattGPS’ timestamp=’2010-05-11T19:00:20Z’ uid=’12973′ version=’3′ changeset=’4671372′>
<tag k=’amenity’ v=’restaurant’/>
<tag k=’name’ v=’Gasthaus an der Wieslauf’/>
</node>
<node id=’319597380′ lat=’48.8277913′ lon=’9.5477029′ timestamp=’2008-12-17T21:13:15Z’ version=’1′ changeset=’444629′>
<tag k=’amenity’ v=’restaurant’/>
<tag k=’name’ v=’Gasthaus zur Linde’/>
</node>

3 Responses to Auflisten von POIs aus Openstreetmap mit XAPI und XSL

  1. Schönes Beispiel für die effiktive Anwendung von XSL!

  2. matze says:

    toller Artikel – super gut erklärt und sehr schoen illustriert. Allerdings bin ich etwas unsicher- hab das mit dem XAPI-Request versucht nachzuvollziehen – bei mir gibts mit obigem Link eine blank-site. Muesste ich da nicht die Ergebnisse deines Beispiels bekommen!? In einem XML-format. Die du dann noch umwandelst ich probierst nochmals …

    würd mich über nen Tipp freuen – gruss Matze

  3. Hi, i think that i saw you visited my site so i came to
    “return the favor”.I’m trying to find things to improve my web site!I suppose its ok to use some of your ideas!!

Leave a comment