Datensatz ausgeben lassen

Hallo liebe OSM Gemeinde,

wie kann man sich einen Datensatz für ganz Deutschland vollständig in einer Datei ausgeben lassen?
Beispiel: amenity = bar

Sieht in overpass-turbo.eu bei mir so aus:


[out:json][timeout:500];
// gather results
(
  // query part for: “amenity=bar”
  node["amenity"="bar"]({{bbox}});
  way["amenity"="bar"]({{bbox}});
  relation["amenity"="bar"]({{bbox}});
);
// print results
out body;
>;
out skel qt;

Leider sind die Datensätze zu groß und es wird ein Timeout erzeugt.

Welche Möglichkeiten stehen mir offen? Gibt es ein anderes Tool mit dem ich die Daten direkt in eine Datei schreiben könnte?
Eine geordnete Liste würde schon reichen.

Beispiel:
ID | Name | Adresse
1 | Bla | Blastr. 2
2 | Blub | Blubstr. 3

Viele Grüße

Hi, und erstmal herzlich willkommen im Forum.

Das ist absolut nachvollziehbar.
Zuerst “sagst” du Overpass nicht, dass du nur Daten aus Deutschland haben willst und wenn du das machen würdest, wären das immer noch viel zu viele Daten. Dafür ist die Overpass nicht geeignet.

Ich empfehle dir die Extrakte der Geofabrik, die du herunterladen kannst: http://download.geofabrik.de/
Die Daten von Deutschland sind da übrigens 2.9 GB komprimiert und wohl das 10-fache entpackt gross.

Es wäre nett, zu wissen was du eigentlich machen willst. Dann könnnen wir dir gezielter helfen.

Gruss
walter

z.B. osmfilter

Vielen Dank für eure Antworten.

Also mein Ziel wäre es eine Tabelle mit Name und Strasse einer bestimmten amenity zu erhalten, als Beispiel wäre es hier amenity = bar.
Den Datensatz habe ich mir heruntergeladen und osmfilter auch, leider noch nicht wirklich den Befehl herausgefunden wie ich es anwenden kann.

Kann ich mir aussuchen welches Format ich als Output bekomme? json, xml oder sql wären mir lieb :slight_smile:

N’Abend,

zur grafischen Anzeige via overpass-turbo etwa so: http://overpass-turbo.eu/s/kEQ; das liefert dann das json-Format …
Für [“amenity”=“bar”] zeigt die Abfrage derzeit in Deutschland ca. 8.275 nodes und knapp 500 ways bei einer auf max. 100 s erhöhten Rechenzeitzuweisung. Diese Abfrage allerdings bitte NUR für die “gelegentliche Anwendung” und NICHT für den Einbau in einer App mit einer Vielzahl identischer Abfragen täglich verwenden …

Für die Ausgabe im xml-Format kannst Du z.B. die automatische Reparatur nutzen (–> Export → JOSM → Abfrage reparieren) und ‘schwupp’: zwei Zeilen werden geändert und kommentiert - die Änderungen sind so leicht nachvollziehbar …

Für die Ausgabe der gewünschten Tabelle kannst Du folgende Abfrage nutzen: http://overpass-turbo.eu/s/kFc - hier als Ausgabe im csv-Format. Wenn Du einzelne Spalten nicht brauchst, dann diese einfach aus dem Header werfen - genau so leicht lassen sich auch weitere Spalten mit anderen tags einfügen …

Grüße Rainer

set STATE=germany
set KEY=amenity
set VALUE=bar

set WGETPATH=

%WGETPATH%\wget.exe http://download.geofabrik.de/north-america/canada/%STATE%-latest.osm.pbf
osmconvert64.exe %STATE%-latest.osm.pbf -o=%STATE%.o5m
osmfilter %STATE%.o5m --keep="%KEY%=%VALUE%" --drop-version --drop-author >%STATE%_%VALUE%.osm

pause

Mit oben stehender Windows Kommandosequenz erhälst Du alle amenity=bar in Deutschland als OSM XML Datei.
Du musst nur noch Deinen Pfad zu wget eintragen.
Wenn Du statt Germany ein kleines Bundesland einträgst, lässt sich das Ganze schneller testen.

north-america/kanada müsste aus dem Pfad noch raus, bzw. durch europe ersetzt werden.

osmfilter liefert primär im osm Format, was nichts anders als xml ist.

Cool Danke :slight_smile:
WGETPATH muss einfach nur der Path für die wget exe rein oder?

Wie sieht der Code denn in Linux aus? Sollte doch eigentlich kaum ein unterschied sein oder?
Ich bekomme auf Linux leider den osmfilter nicht zum laufen :confused:

Danke auch an projecter63,
habe die amenity durch restaurant ersetzt und dann geht er leider in die Knie.

Ja, unter Linux sollte es sehr ähnlich aussehen.

%…% durch ${…} ersetzen, dann sollte das im wesentlichen auch unter UNIX laufen.

Hast Du das LINUX Binaray von osmfilter heruntergeladen?

Probier mal:

sudo apt-get install osmctools

Und dann:


osmconvert germany.pbf -o=germany.o5m
osmfilter germany.o5m --keep="amenity=bar" --ignore-dependencies -o=bar.osm

oder, falls die CSV lieber ist:


osmconvert germany.pbf -o=germany.o5m
osmfilter germany.o5m --keep="amenity=bar" --ignore-dependencies -o=bar.o5m
osmconvert bar.o5m --csv="name addr:city addr:street addr:housenumber" -o=bar.csv

Hab die Kommandos jetzt nicht ausprobiert, ich hoffe einfach, dass sie irgendwie funktionieren. :wink:

Näheres hier:
https://wiki.openstreetmap.org/wiki/DE:osmconvert
https://wiki.openstreetmap.org/wiki/DE:osmfilter

Nachtrag:

Vorher müsstest du natürlich die Deutschland-Datei von Geofabrik herunterladen, aber das hat Walter ja schon empfohlen.

wget http://download.geofabrik.de/europe/germany-latest.osm.pbf -O germany.pbf

Und die all-to-nodes Option könnte noch hilfreich sein zur Umwandlung von Flächen-POIs in richtige Punkte (nodes). :wink:

Könnte evtl. daran liegen, dass der Browser beim Anzeigen der Ergebnisse etwas überfordert ist. Mit >50MB Ergebnis bietet es sich an, das Ergebnis stattdessen über Export → "“Rohdaten direkt von Overpass API” als File abzulegen.

Alternativ: http://overpass-turbo.eu/s/kHp liefert nach ein paar Minuten alle Restaurant in .de im PBF Format. Auch hierfür auf “Export” → “Rohdaten direkt von Overpass API” klicken. Das sollte ein 7.8 MB großes PBF liefern.