Daten gefiltert über Overpass API herunterladen

Hallo,

leider habe ich die im Wiki angegebenen Beispiele zum Herunterladen bestimmter Daten offenbar nicht ganz verstanden. Sind dir die nacheinander anzugebenden Kriterien per UND oder ODER verknüpft? Selektiert das nachfolgende Beispiel aus dem Wiki also alle Teile der Südstraße, die gleichzeitig eine Brücke sind (logisches UND)? Oder die Südstraße und alle Brücken (logisches ODER)?

http://www.overpass-api.de/api/xapi?way[bbox=7.1,51.2,7.2,51.3][name=Südstraße][bridge=yes]

Wenn es ein UND ist, wie lässt sich dann ein ODER realisieren? Wie kann ich bspw. alle Straßen und alle Bahnstrecken in einem Gebiet auf diese Weise herunterladen? (railway=* ODER highway=*)

TIA

Gruß

es ist eine UND Verknüpfung.
Für ODER wüsste ich jetzt nur die Lösung die Sachen einzeln runterzuladen und von Hand die Dateien
zusammenzufrickeln… :frowning:

Hallo margin-auto,

Im Wiki ( http://wiki.openstreetmap.org/wiki/Overpass_API ) wird das Pipe Zeichen für ein ODER bei Werten angegeben.

MfG Georg V.

P.S. Willkommen im Forum

Hallo,

danke für die Antworten. Das mit der Pipe hatte ich gesehen, aber nur für unterschiedliche Werte, nicht für unterschiedliche Schlüssel:

http://www.overpass-api.de/api/xapi?node[bbox=7.1,51.2,7.2,51.3][highway=bus_stop|traffic_signals]

Wie bekäme ich bei sowas nun railway=* integriert? (Abgesehen davon, dass es in obigem Beispiel um Nodes geht und nicht um Wege)

Danke auch für den Hinweis mit dem manuellen Zusammenfügen. Gibt es dazu einen Link, wo beschrieben wird, wie man sowas macht?

Gruß

Hallo margin-auto,

Es gibt zwei Verfahren die API abzufragen, einmal mit der XAPI Variante und einmal mit dem XML Konstrukt. Dort gibt es auch die Möglichkeit eines UNION Blockes.

Für die Möglichkeiten auf der Clientseite die Ergebnisse zusammenzuführen müsstest Du uns schon etwas mehr von Deiner Umgebung und Deine Kenntnissen sagen.

MfG. Georg V.

Das müsste mit osmosis gehen. http://wiki.openstreetmap.org/wiki/Osmosis/Detailed_Usage

Chris

Geht wahrscheinlich auch so, falls es mit Osmosis nicht klappen sollte:
http://wiki.openstreetmap.org/wiki/DE:Osmconvert#Zwei_oder_mehr_geographische_Bereiche_zusammenf.C3.BChren

Und falls das mit der API aus irgendeinem Grund gar nicht klappt, dann besser die regionale Datei von download.geofabrik.de runterladen und lokal filtern:
http://wiki.openstreetmap.org/wiki/DE:Osmfilter#Objekt-Filter

Hallo,

Vielen Dank für eure Hinweise. Ich habe nun testweise über zwei separate API-Aufrufe zwei Dateien heruntergeladen: Landuse und Rail. Diese habe dann gemäß der verlinkten Anleitung mit osmconvert zusammengeführt. Im so erzeugten Output sind mir jedoch zwei kleinere Fehler aufgefallen:

  1. osmconvert erzeugt zu Anfang ein Objekt mit der Id=0, das man manuell entfernen muss, um die Daten in Osmarender verarbeiten zu können.
  2. osmconvert entfernt offenbar die zuvor mühsam heruntergeladenen Metainformationen. Beim Versuch, den Output in JOSM zu öffnen, kam die Fehlermeldung, dass er das Attribut “version” vermisst.

Kann man diesen Fehlerchen noch irgendwie beikommen?

TIA und Gruß

Ich habs bisher immer so gemacht: von download.geofabrik.de die betreffende Region runtergeladen und danach auf meinem PC gefiltert.
Trotzdem müsste dein Weg natürlich auch gehen.

Sollte natürlich nicht passieren. Hast du die genauen Aufrufe, so dass ich den Fall einmal nachstellen kann?

Kann normalerweise nur dann sein, wenn du die Option --drop-version verwendest. Das solltest du nicht machen, wenn du die Daten später mit JOSM öffnen willst. Falls du die Datei nun trotzdem noch verwenden willst, kannst du den Version-Tag mit --fake-version wieder hinzufügen. Hochladen in die OSM-Datenbank mit JOSM geht dann natürlich nicht, aber das war ja auch nicht dein Ziel, wenn ich das richtig verstanden habe.

Das Problem ist, dass die overpass-Api die Meta-Daten nicht mitliefert.

Ah, danke, das erklärt die Schwierigkeiten natürlich.

@margin-auto:

Dann bleiben die beiden Wege:

  1. lokal filtern, wie ursprünglich von mir vorgeschlagen,
    ODER
  2. den Version-Tag mit osmconvert und der Option “–fake-version” wieder (gefaket) hinzufügen.

Tut sie schon, aber nur wenn per “[@meta]” extra angefordert, siehe:

http://wiki.openstreetmap.org/wiki/Overpass_API#Meta_data

Edit: Etwas ausführlicher:

wget -O 0.osm “http://www.overpass-api.de/api/xapi?*[bbox=5.291,47.200,7.367,47.786][landuse=residential|industrial|military][@meta]
wget -O 1.osm “http://www.overpass-api.de/api/xapi?*[bbox=5.291,47.200,7.367,47.786][landuse=forest][@meta]
osmconvert32 0.osm 1.osm --fake-version -o=summe.osm

produziert bei mir eine Datei, die folgendermaßen beginnt:

<?xml version='1.0' encoding='UTF-8'?>

Der erste node mit id=0 ist das Problem für Osmarender. Nach seiner manuellen Entfernung funktioniert alles wie gewünscht.

Danke, damit funktioniert das nun zumindest. Die Metainformationen hatte ich zuvor mit [@meta] erfolgreich aus dem API gezogen gehabt.

Ah, wieder was gelernt, ich hatte immer die Version von 0.6 auf 0.5 geändert um die Dateien
in JOSM öffnen zu können. :wink:

Ui, auch ein guter Trick - wieder was Neues für mich. :slight_smile:

Zu dem Knoten mit ID 0:

Die Overpass-API nutzt einen XML-Tag, der in OSM-Dateien nicht vorgesehen ist:
The data included in this document is from www.openstreetmap.org. It has there been collected by a large group of contributors. For individual attribution of each item please refer to http://www.openstreetmap.org/api/0.6/[node|way|relation]/#id/history

Natürlich ist dieser Tag als XML-Tag zulässig, einzelne Programme werden ihn aber nicht erwarten und möglicherweise damit Probleme haben. osmconvert ist geschwindigkeitsoptimiert und spart dadurch Zeit, dass es den Syntax der .osm-Dateien nicht komplett prüft, sondern davon ausgeht, dass er stimmt:

Nach “<no” denkt sich das Programm “Das muss ein Node sein!” und rechnet nicht damit, dass es danach mit “te>” und nicht mit “de>” weitergeht. :slight_smile:
Ich hab das eben geändert: die Version 0.5W fragt auch den dritten Buchstaben ab und sollte nicht mehr damit auf die Nase fallen.

Danke für den Fix, jetzt funktioniert es.

Zu der Strategie, nur die ersten paar Zeichen zu vergleichen, sage ich jetzt mal nix… :wink:

Gruß

Meine Erfahrung mit der Vervollständigung bei JOSM lehrte mich, dass zwei oft genug nicht reicht (noexit/note) aber auch drei zu wenig sein können (landuse/lanes).

Von daher würde ich sage, immer einen mehr als man denkt, dass es reicht.

Edbert (EvanE)

Hi marqqs,
muss man denn noch angeben, ob das File in JOSM Syntax ist, also ’ statt " als
Stringdelimiter? Oder ist die Option -in-josm obsolet ?

Chris

Naja, das ist entweder schlampiges Programmieren oder der Versuch, das Programm bis zum letzten Bit auf Geschwindigkeit hin zu optimieren. Du kannst es so oder so sehen - und beide Sichtweisen sind irgendwie richtig. :slight_smile:

Muss inzwischen ohne diese Option klappen. Die Option wird nach wie vor akzeptiert, aber ignoriert:

    if(strcmp(a,"--in-josm")==0) {
      // deprecated;
      // this option is still accepted for compatibility reasons;
  continue;  // take next parameter
      }

Grund für diese Änderung waren konkrete Ergänzungsvorschläge für den Quellcode, weil die FOSM-Dateien Hochkommas an Stelle von Anführungszeichen verwendeten. Die Programme sollen ja grundsätzlich für beide Lizenzarten verwendet werden können.

Aber wir schweifen vom Thread-Thema ab. :slight_smile:

Gratulation, du hast es in Fefes Blog geschafft:
http://blog.fefe.de/?ts=b1fa9d42
http://refefe.de/?ts=b1fa9d42
:slight_smile:

Gruß,
Mondschein