x

Verzeiflung beim .osc-Datei filtern (osmconvert/osmfilter/osmosis)


Geschrieben von Sir_Blight (Gast) am 04. August 2017 10:04:38: [flux]

Herzliches Hallo an alle!

Eigentlich ist es ja keine große Sache (dachte ich), aber nach etlichen Stunden verzweifeltem probieren und Forumssuche/googlen wende ich mich an euch (und parallel die [Talk-de]) und hoffe auf Unterstützung:

Ausgangspunkt: .osc-Datei vom osm-Server. Filtern möchte ich zu folgendem Ergebnis:

• keine Relationen mehr
• alle Ways zu Nodes konvertiert
• nur Nodes behalten, die einige bestimmte keys haben.

Hintergrund ist folgender:

Ich möchte eine eigene MySQL-Datenbank (die Informationen über Poi vorhält) aktualisieren. Ways (also typischerweise Gebäude) sind darin durch ihren Mittelpunkt repräsentiert. Bisher habe ich dazu (testweise in kleineren Gebieten) den csv-export von overpass genutzt (DB-Inhalte vorher gelöscht und dann neu eingespielt), aber nun möchte ich das Gebiet ausweiten und die DB entsprechend aktualisieren statt täglich komplett neu zu füllen.

Um dabei nicht jeden einzelnen Änderungseintrag (Straßen und -wegpunkte, Wiesen, Gewässer, Stromleitungen usw) durch meine eigene DB-Updateroutine jagen zu müssen und dort zu prüfen, ob er überhaupt in die DB soll möchte ich das vorher schon filtern, was wesentlich performanter ist.

mein Erster Ansatz:

• erst mit osmconvert alle Relationen rauswerfen und alle Ways in Nodes umwandeln:

osmconvert␣Ausgangsdatei.osc␣--drop-relations␣--all-to-nodes␣--out-osc␣>Zwischendatei.osc

-> klappt einwandfrei
• dann mit osmfilter alle Nodes rausschmeißen, die die Kriterien nicht erfüllen:

osmfilter␣Zwischendatei.osc␣--parameter-file=parameter.txt␣>Ergebnis.osc

-> meckert bei einigen Nodes 'wrong sequence'; diese werden ignoriert, obwohl sie ins Profil passen.
Das dürfte wohl am Offset des 'all-to-nodes' liegen, den brauche ich aber für spätere Zwecke...
=> zu viel ausgefiltert

Spontaner Gedanke zur Lösung

• Erst filtern, dann Ways umwandeln
-> Problem: Alles was zuvor ein Way war ist jetzt komplett weg, vermutlich weil ja der filter alle tag-losen Wegpunkte rauschmeisst und osmconvert sie entsprechend nicht mehr finden kann - also schmeisst er alle Ways weg zu denen er keine Lageberechnung vornehmen kann...=> VIEEEL zu viel ausgefiltert

Also wieder zum ersten Ansatz, und osmosis dazwischensetzen um die Daten vorm filtern zu sortieren

osmosis␣--read-xml-change␣file="Zwischendatei.osc"␣--simc␣--sc␣--write-xml-change␣file="vorbereitetZumFiltern.osc"

-> Bricht mit einer NullPointerException während FloatingDecimal.parseDouble() ab - immer mal bei einem anderen Node... ?!warum - ich kann an denen nichts ungewöhnliches entdecken. Ich hab die ganze Datei durchgesehen, sie ist völlig in Ordnung, abgesehen davon, dass einige nodes eben sehr hohe Ids haben und somit nicht die richtige Reihenfolge für osmfilter vorliegt... Warum interessiert sich osmfilter überhaupt für die Reihenfolge? Und (BTW): Warum meckert osmfilter bei JEDER osc-Datei über ein 'unerwartetes Ende der Datei', wo es dieses Format doch unterstützt (nicht laut Wiki, aber laut Hilfstext des Programms.)

Probiert habe ich alle Varianten (und einige mehr) mit verschiedenen Programmversionen der 3 Kandidaten - ohne Erfolg.

Ich hoffe mir kann jemand die Fragen beantworten, aufklären was ich falsch mache oder einen Tipp geben. Ich dreh mich nurnoch im Kreis.

Vielen Dank und LG


Antworten: