Per xmlstarlet eigene Changefile erstellen - XML Profi gesucht

Guten Morgen alle zusammen,

kennt sich hier zufällig jemand mit “xmlstarlet” aus?

Ich möchte eine eigene Changefile erzeugen. In dieser sollen Nodes gelöscht werden, welche bereits einmal durch eine Prüfung gelaufen sind und beim nächsten Mal erst gar nicht wieder in die Prüfung kommen sollen.

Dies wird anhand einer Liste bereits geprüfter Nodes erledigt und anschließend möchte ich mit xmlstarlet ein Changefile “bauen”

Hier der Code dazu:


for /f "usebackq" %%a in ("idListe.txt") do (
 xmlstarlet ed -s /osmChange/delete -t elem -n node -v "" -i /osmChange/delete/node -t attr -n id -v %%a < changefile.osc > changefile.osc
)

(Bitte nicht “mobben”, ich weiß schon cmd-batch ist nicht das Beste :wink:

Die “idListe.txt” sieht z.B. so aus:

Mein Problem ist nun, dass die changefile.osc immer wieder überschrieben wird und die einzelnen Nodes nicht hinzugefügt werden ;(

Kann mir dort jemand weiterhelfen??

Vielen Dank schonmal und noch einen schönen Sonntag!

Gruß

Jan

ich schätze mal, dass das in irgendeinen Batch - also ohne Gui - integriert werden soll.

Sollte das der Fall sein, möchte ich euch auf dieses Dokument hinweisen, was unsere “Spielregeln” bezüglich automatischer Edits der Osm-Daten beschreibt.

Gruss
walter

Hallo mmd, wambacher

bringt leider auch nicht den gewünschten Erfolg ;(

Genau, es ist für eine “private” Prüfroutine gedacht und soll dazu dienen nicht bei jedem Prüflauf jedes Element wieder und wieder zu prüfen…

Und keine Angst, die Daten werden NICHT automatisch zurück in die Datenbank geschrieben sondern intern verwendet. Trotzdem danke für den Link!

Hat sonst noch jemand zufällig eine Idee und/oder Lösung?
Am Anfang war die DAtei noch ein “osmconvert parameterfile”, allerdings ist es nun “zu groß” und daher hab ich mir diese Lösung ausgedacht.
Also soll dieses Skript nur einmal laufen und die Datei in ein Changefile umwandeln, anschließend will ich es per “changefile merge” erledigen (zumindest stelle ich es mir so vor… :wink: )

Nochmal vielen Dank für eure Hilfe

na gut, dann ist das schon mal geklärt. Nicht böse sein aber mer haben hier schon die tollsten Sachen erlebt.

Ich würde solche Sachen mit osmosis erledigen.
Es gibt zwar massenhaft Tools, die gewisse Teilaufgaben von Osmosis schneller und einfacher erledigen, aber spätestens wenn es um Change-Files geht, sollte man die “OSM-Datenschleuder” benutzen - genau wie unsere Kollegen auf den OSM-Servern in UK.
Du kannst mit osmosis fast alles mit Osm-Daten machen - wenn du es kannst :wink:
Dazu gibt es noch OSMembrane als GUI, mit der du die Osmosis-Kommandos generieren kannst.

Gruss
walter

um dir mal einen Eindruck zu geben: ein Batch zum Erstellen von osmand-Daten “meiner” Ecke.


#!/bin/bash
#
cd ~/osm/osmand

wget http://download.geofabrik.de/openstreetmap/europe/germany/hessen.osm.pbf -O ~/osm/osmand/pbf/hessen.osm.pbf
wget http://download.geofabrik.de/openstreetmap/europe/germany/rheinland-pfalz.osm.pbf -O ~/osm/osmand/pbf/rheinland-pfalz.osm.pbf

/opt/install/osmosis-0.41/bin/osmosis  \
	--read-pbf file=~/osm/osmand/pbf/hessen.osm.pbf \
	--read-pbf file=~/osm/osmand/pbf/rheinland-pfalz.osm.pbf   \
        --log-progress interval=60 label="merging" \
	--merge          			   \
	--bounding-polygon file=$1.poly \
          completeWays=false \
          completeRelations=false \
          clipIncompleteEntities=true \
	--write-xml file=~/osm/osmand/osm/$1.osm

cd /opt/install/OsmAndMapCreator

java   -Djava.util.logging.config.file=logging.properties \
       -Xms256M -Xmx1280M \
       -cp "./OsmAndMapCreator.jar:./lib/OsmAnd-core.jar:./lib/*.jar" \
       net.osmand.data.index.IndexBatchCreator \
       batch.xml

cd ~/osm/osmand

wput -v -nc -u -t 3 --waitretry=30 \
    /home/walter/osm/osmand/idx/$1_2.obf \
    ftp://walter:xxx@andy:2121/mnt/extSdCard/osmand/$1_2.obf

der mittlere Befehl erledigt: Merge zweier Rohdaten-Files, Ausschneiden eines Polygons, Ausgabe im OSM-Format - alles in einem Rutsch.

p.s. wen’s interessiert: meine Lösung hierzu

  • snip, siehe Edit in Post #2 -

Genau das Problem hab ich auch! Allerdings bringt %%a → %%a% bei mir auch nicht den gewünschten Effekt, es kommt die selbe Fehlermeldung!

@wambacher:
Keine Angst, ich bin nicht “böse”! Warum auch? Du hast ja nur darauf hingewiesen, konntest du ja nicht ahnen, dass es “für mich” ist :wink:
Ja über osmosis hab ich auch schonmal nachgedacht, evtl. werde ich meine Auswertung mal darauf umstellen, aber im Moment will ich erstmal dieses “olle” Changefile hinbekommen :wink: step by step …

OT: Interessant, es gibt auch “wput”, muss ich im Hinterkopf behalten…

Nahmd,

Gleichzeitiges Lesen aus und Schreiben in eine Datei ist nur selten eine gute Idee.
Versuche es einmal mit (Pseudocode):


COMMAND <changefile.osc > changefile.osc.NEU
DELETE changefile.osc
RENAME changefile.osc.NEU changefile.osc

Je nach Betriebssystem/Einstellungen/Optionen erledigt das RENAME das DELETE gleich mit, dann braucht es das DELETE nicht.

Gruß Wolf

Hallo Netzwolf,

ja danke für deinen Hinweis. “mmd” hat ja schon einen entsprechenden Eintrag gepostet, der mit deinem identisch ist (nur kein Pseudocode). Leider war es ja nicht erfolgreich