Datenexport über Overpass und Erfahrungen eines Anwenders

Hallo Miteinander,
seit einigen Jahren nutze ich OSM mit OSMAnd und bin immer wieder begeistert wie gut alles funktioniert. Für den nächsten Urlaub wollte ich mir mal eine POI File mit Motorradhändlern erstellen um einfach im Falle des Falles reagieren zu können.

Über Overpass die folgende Abfrage kreiert:

[out:json][timeout:125];
// gather results
(
// query part for: “brand=KTM”. Do it using Regex expression .* = all before / after and i all small and capital letters
node["shop"="motorcycle"] ["brand"~".*KTM.*",i] ({{bbox}});
node["shop"="motorcycle"] ["name"~".*KTM.*",i] ({{bbox}});
node["shop"="motorcycle"] ["brand"~".*HUSQVA.*",i] ({{bbox}});
node["shop"="motorcycle"] ["name"~".*HUSQVA.*",i] ({{bbox}});
);
// print results
out body;
>;
out skel qt;

Und hier beginnen die Herausforderungen.
viele dieser Händler sind als Punkt aus meinem Blickwinkel richtig getaggt aber ebenfalls eine große Anzahl als Buildings, die aber in dieser Form in OSMAnd und wahrscheinlich auch vielen anderen Programmen nicht dargestellt werden.

Mich interessiert hier natürlich, wich ich das für mich in den Griff bekommen kann, aber auch was zu tun ist, um diese Situation innerhalb von OSM zu diskutieren und gegebenenfalls zu vereinheitlichen. Angenommen, mann könnte in OSM die POIS auf diese Situation (Punkt vs. Building) checken, würde sich zeigen, wieviele POIs aufgrund dieser Taggung nicht sichtbar sind.

Was meinen die Profis dazu?
Liebe Grüße,
Fastboy

Du kannst Deine Abfrage auch auf ways erweitern, mit etwas wie

(siehe https://overpass-turbo.eu/s/wKG )

[out:json][timeout:25];
// gather results
(
  
node["shop"="motorcycle"] ["brand"~".*KTM.*",i] ({{bbox}});
node["shop"="motorcycle"] ["name"~".*KTM.*",i] ({{bbox}});
node["shop"="motorcycle"] ["brand"~".*HUSQVA.*",i] ({{bbox}});
node["shop"="motorcycle"] ["name"~".*HUSQVA.*",i] ({{bbox}});

way["shop"="motorcycle"] ["brand"~".*KTM.*",i] ({{bbox}});
way["shop"="motorcycle"] ["name"~".*KTM.*",i] ({{bbox}});
way["shop"="motorcycle"] ["brand"~".*HUSQVA.*",i] ({{bbox}});
way["shop"="motorcycle"] ["name"~".*HUSQVA.*",i] ({{bbox}});
  
);
// print results
out body center;

kriegst du dann auch nur die Zentroide der Ways. Ich nehme an das ist das was du willst.

Datentechnisch ist beides korrekt, Punkt und Fläche.

das Zauberwort sollte hier einfach nur “center” heißen, siehe dieses Beispiel hier, oder eben die Dokumentation.

Das Problem was es aber dabei geben dürfte ist, dass der “Zentrumspunkt” der Fläche aber nicht normal unter lat/lon sondern in einem verschachtelten Untertag als lat/lon ausgegeben wird :confused:

Siehe z.B. das Beispiel von gormo von München, da gibt es im Südwest einen Shop als way/Polygon/Fläche getaggt, sieht dann in den Daten so aus


{
  "type": "way",
  "id": 199096592,
  "center": {
    "lat": 48.0917297,
    "lon": 11.4900555
  },
  "nodes": [
    2091371865,
    2091371861,
    2091371862,
    2091371868,
    2091371865
  ],
  "tags": {
    "addr:city": "München",
    "addr:country": "DE",
    "addr:housenumber": "66",
    "addr:postcode": "81476",
...

Und da ist eben das lat/lon unterhalb von center zu finden, im Gegensatz zu einem Node-Shop


{
  "type": "node",
  "id": 1460456479,
  "lat": 48.1130571,
  "lon": 11.6942280,
  "tags": {
    "brand": "KTM; Gas Gas; Beta; Enduro, MX",
    "name": "ERC Baumann",
    "opening_hours": "Tu-Fr 12:00-18:00",
    "operator": "Michael Baumann",
    "parts": "yes",
...

@mmd: du hast nicht zufällig einen “Zauberschalter”, mit dem man das center lat/lon eine Ebene höher bringt? :wink:

Osmfilter hat eine Option alle Objekte in einen Punkt zu verwandeln. Oder anders ausgedrückt: Overpass-API ist für den genannten Anwendungsfall eher ungünstig.

Ist das wirklich ein Problem? Kann osmand kein gpx, kml oder geojson importieren? Dann sollte die Export Funktion in Turbo doch weiterhelfen.

out center gibt doch nur Punkte aus, nur die Formatierung ist leicht abweichend. Komplett einheitlich formatiert wird mit 0.7.55 möglich sein, oder man nimmt halt csv als Ausgabeformat.

Danke für Eure aktive Hilfe. Bin sehr erfreut.

In OSMAnd werden die mit Building getaggten Points gar nicht angezeigt. Wenn ich das Ganze über KML und Maps anzeige werden alle Building Tags miteinander als Route verbunden - das ist dann auch Banane.

Ich muss leider auch dazusagen, bin eher Anwender als Programmierer.

Wenn toc-rox sagt: “Overpass-API ist für den genannten Anwendungsfall eher ungünstig.” was würdet Ihr für einen solchen Fall eher empfehlen?

In Eurer DB sind so viele nützliche Dinge vergraben, es wäre schade, wenn das nicht intensiver nutzbar wäre.

Danke an alle

Also ich habe es gerade mit meiner oben erwähnten Beispielabfrage von München getestet: als GPX exportiert und auf meiner SD Karte die Datei in den tracks Ordner kopiert … alle 3 Münchner Shops werden nun als rote Sterne (Waypoints) angezeigt … auch der im Südwesten als “Building” getaggte Shop

Hier mal ein Beispiel um alle Shops (Nodes, Ways, Rels) für den Regierungsbezirk Münster zu ermitteln. Das Ergebnis ist eine OSM-Datei die nur Nodes enthält:


echo "OSM-Daten für den Regierungsbezirk Münster laden (geofabrik) ..."
curl --location --url http://download.geofabrik.de/europe/germany/nordrhein-westfalen/muenster-regbez-latest.osm.pbf --output muenster-regbez-latest.osm.pbf
echo " "

echo "Tags fuer 'bBoxArea' und 'bBoxWeight' hinzufuegen; Daten vom pbf- ins o5m-Format konvertieren ..."
./osmconvert muenster-regbez-latest.osm.pbf --max-objects=600000000 --add-bboxarea-tags --add-bboxweight-tags --verbose -o=muenster-regbez-latest.bbox.o5m
echo " "

echo "Alle Wege und Relationen in Nodes umwandeln (loescht die umgewandelten Objekte) ..."
./osmconvert muenster-regbez-latest.bbox.o5m --max-objects=600000000 --verbose --all-to-nodes -o=muenster-regbez-latest.alltonodes.o5m
echo " "

echo "Daten auf Nodes mit dem Tag shop=* reduzieren ..."
./osmfilter muenster-regbez-latest.alltonodes.o5m --keep-nodes="shop=*" -o=muenster-regbez-latest.shops.osm
echo " "


Und so wird das mit 0.7.55 aussehen: http://overpass-turbo.eu/s/wLh

Das separate “<point lat=“51.5597680” lon=“7.0911309”/” versteht zwar im Moment noch kein Tool, aber das kann sich ja noch ändern.

Hallo Harald, vielen Dank. Ich habe das nach Deinem Vorschlag gemacht und es hat prima funktioniert. Gibt es vielleicht eine einfache Möglichkeit die Anzahl der POIs auszugeben um hier ein Gefühl zu bekommen? Bereits gefunden → out count; :wink:

Ich werde mir jetzt mal die Overpass Doku anschauen, danke für den Link weiter oben.
Freue mich, wenn diese Diskussion auch anderen hilft.

(Falls ich es nicht falsch verstanden habe:) Schau mal auf der Kartendarstellung in die untere rechte Ecke.

Ja, Danke habe ich gefunden.

@mmd: Ja, das Overpass-Beispiel sieht im Ergebnis gut aus, die Abfragesyntax allerdings eher kryptisch.

Seit ein paar Tagen kann man das auch deutlich kompakter schreiben: http://overpass-turbo.eu/s/x8Y

Leicht OT:

Dieses nwr ist hübsch, wird das in den Code der “Produktiv”-server zurückfliessen oder geht das nicht?

Ja, es soll in 0.7.55 drin sein und kommt demnächst auch in die Produktion.