Tool um Zahlen an mehreren Objekten zu ändern

Hi allerseits,

gibt es eigentlich ein tool für JOSM oder andere Editoren, mit denen man Zahlen, b.B. addr:housenumber oder ref in mehreren Objekten um einen bestimmten Wert ändern kann?

Beim Häuserzeichnen habe ich vorhin vermutlich zweimal beim gleichen Haus das Hausnummern-tool angewendet. Ich hatte auch schon Mastnummern, die um eins versetzt waren. Wär schön, wenn man die nicht alle einzeln per Hand korrigieren muß.

Baßtölpel

Man kann das mit dem Scripting-Plugin von JOSM machen. Plugin installieren, in der Menüleiste unter “Scripting” den Punkt “Show Scripting Console” aufrufen und anschließend folgendes Script dorthin kopieren:

var selectedObjects = josm.layers.activeLayer.data.getSelected().iterator();
while (selectedObjects.hasNext()) {
	var obj = selectedObjects.next();
	var objKeys = obj.getKeys();
	var houseNumberKey = 'addr:housenumber';
	var houseNumber = Number.parseInt(objKeys.get(houseNumberKey)) + 500;
	objKeys.put(houseNumberKey, houseNumber.toString());
	obj.setKeys(objKeys);
	obj.setModified(true);
}

Das ist jetzt nur ein Beispiel, welches die Hausnummern der momentan in JOSM ausgewählten Häuser bzw. Adressnodes um 500 erhöhen würde. Das sollte man natürlich nicht so ausführen, sondern vorher an den eigenen Fehler anpassen.

Die Dokumentation ist insgesamt nicht so einfach zu durchschauen, weil man zwischen JOSM-Java-Objekten und ggf. den Scripting-Objekten hin- und herspringen muss. Wichtig in dem Zusammenhang ist vor allem zu wissen, dass man erstens die Keys nicht unmittelbar in der Map ändern kann, die man mittels getKeys() erhält, sondern dass man diese Map explizit nach Änderungen mit setKeys() zurückschreiben muss. Außerdem muss man das Objekt selbst als modified markieren, das passiert nicht automatisch (ohne diese Markierung würde es JOSM beim Upload ignorieren).

Wenn man das Script angepasst hat, selektiert man in JOSM all die Objekte, die man auf diese Weise ändern will. Anschließend drückt man in der Scripting-Console auf “Run”!

Danke!

Vielleicht nehme ich das demnächst mal als Ausgangspunkt für eigene Programmierversuche in JOSM.

Gruß,

Baßtölpel