SimpleXMLElement::xpath - Daten einer OSM-Abfrage behandeln

hallo Community,

von einem .Osm File. das ich hier über die Abfrage bei turbo-overpass-Api abgefragt habe habe ich folgende DATEN erhalten - http://overpass-turbo.eu/

etwa so etwas hier… .- und das sind schon die DATEN die ich extrahieren & speichern will:

darüber hinaus sind noch viele andere Daten dabei - in dem xml-file. Die brauch ich nicht.

Ich denk dass das Tool der Wahl hier SimpleXMLElement::xpath ist - um die o.g. Werte zu erhalten:

Die Frage ist wie genau ich hier SimpleXMLElement::xpath einsetze?

Ein demo-Befehl zeigt eine komplette Ausgabe hier http://overpass-turbo.eu/

Dann gibt es die resultate:

Frage; wie speichere ich obiges Datenset in entweder excel oder mysql?

Um Gottes willen … NEIN … bitte hier nochmal ins Selbststudium gehen und sich in die Thematik XML und JSON einarbeiten!
oder einfach das output von overpass auf xml umstellen, dann kannst du auch gerne mit xpath drauf rumheizen

Nachtrag: hab’s mir zwar noch nicht näher angeschaut, aber vielleicht wäre es einfacher, das JSON in eine PHP Variable per json-decode umzuwandeln, dann kannst du objektorientiert auf deine ganzen Tags zugreifen.

Bitte den Link aus “Teilen” (zweiter Menüpunkt oben) zu einer Abfrage verwenden, dieser zeigt nur auf die Startseite, ohne Deine Abfrage.

Wie Harald schon gesagt hat, ist das Ergebnis bei [out:json] im JSON Format, nicht XML, siehe:
Overpass QL: Output Format (out)
http://overpass-api.de/output_formats.html

Bei http://www.json.org/ gibt es Links für jede Programmiersprache.

Standard ist XML, wenn kein [out:xxx] angegeben ist, oder eben explizit [out:xml].

Am einfachsten wäre dafür vermutlich das CSV Format: CSV output mode

Gruß,
Norbert

hallo Harald, hallo Norbert

vielen Dank für die Informationen - das stimmt alles -
hab mir das nochmals angesehen - csv waere das allereinfachste! Ganz sicher!

das hier - http://overpass-turbo.eu/s/bpX geht aber nicht! Leider - csv geht nur über umwege.

ganz hingegen dies hier http://overpass-turbo.eu/s/bpY - mit json als ausgabe-Format

ergo muss ich hier noch umdenken .- und den Code irgendwie erweitern - mit den Infos hieraus
http://wiki.openstreetmap.org/wiki/Overpass_API/Overpass_QL#Output_Format_.28out.29

geht so nicht - aber ich werde nochmals nachsehen ob ich da noch etwas machen kann.

Danke für Eure Hilfe

viele Grüße

Bei csv musst Du noch explizit angeben, welche Felder Du haben willst, siehe Beschreibung unter “CSV output mode” bei obigem Link.

hallo Ikonor

danke für deinen Hinweis - ergo so;:

und hier werde ich all die für mich wichtigen Daten / values einfügen

analog dazu - wie sie das auf der wiki-Beispielseite gemacht haben -zum Beispiel hier: Railway stations in Bonn:

werde das mal auf mein Beispiel anzuwenden versuchen…Vielen Dank schonmal.

update:

habe das schon mal an einem beispiel ausprobiert:

mit diesem Beispielcode --…

das ergebins :

jetzt werde ich das nur noch auf mein oben genanntes Problem anwenden!?

hallo liebe Community

also ich hab mal einiges probiert: analog der unten genannten Anleitung -

http://wiki.openstreetmap.org/wiki/DE:Proposed_features/Healthcare

geht mit dem beispiel hier beies nicht:

healthcare=clinic
healthcare=hospital
replaes amenity = hospital

d,h. wenn ich das umbaue und dann für railway=station folgendes einsetzte
healthcare=clinic oder auch
healthcare=hospital

dann geht das nicht - warum weiß ich im Moment auch noch nicht

also wenn ich ausgehend von dem Beispiel hier

dann folgendes mache und es so schreibe

das geht nicht - - auch nicht mit healthcare=hospital

ich denke dass ich hier einen Gedankenfehler aufsitze

Huhuuuu,

Wenn du bei XML bleiben willst, ein kleiner Hinweis / Tipp :

Das Problem bei simplexml ist, dass du schnell an die Speichergrenze stößt, die dem PHP Interpreter zur Verfügung steht. Bis zu einem gewissen Grad kann man da nachhelfen, aber nicht unendlich.

Bei einfacheren Abfragen gegen Overpass ist das sicher in Ordnung.

Sobald es aber mehr Daten werden (Ob Overpass oder direkt aus einem OSM - File), kann entweder der Speicher knapp oder die Performance grauenhaft werden - da das gesammte XML bei simplexml_load_* geparst und als Objekt im Speicher angelegt wird. Erlaubt zwar den einfachen Zugriff, verbraucht aber mehr Ressourcen.

Du solltest vielleicht darüber nachdenken, einen SAX - Parser zu verwenden, auch wenn du ihn jetzt noch nicht unbedingt brauchst - Wenn dein Projekt wächst, bist du für alles gewappnet :slight_smile: .

Ich habe für das Skript, welches die POIs für poiowl.de filtert, auch einen verwendet. Alles übrigens auf einem Raspberry Pi, der Speicherverbrauch vom SAX Parser kann sich sehen lassen (Obschon es nur ein einfacher Anwendungsfall ist, aber ich verarbeite das OSM - File pro Land damit) ! :slight_smile:

Viele Grüße!