OpenStreetMap

easy undelete of several ways

Posted by malenki on 18 November 2015 in English. Last updated on 9 April 2016.

Second tought on my older posting about partially deleting changesets. Again, it is also a note-to-self.
Only helpful, if you have a bash with the usual tools at hand. For Windows there is Cygwin providing these.
You need a JOSM with the undelete plugin installed.

deleted objects of a changeset Example-Changeset with deleted objects and some of them selected for copying

If you stumble over a huge changeset and only want to undelete the deleted ways in that changeset without a time consuming revert of the whole changeset proceed this way:

  • copy the ways you want to undelete (mark them, press ctrl-c)
  • save them in a file foo
  • execute run on the command line

       less /path/to/file_foo | awk -F "," '{print "w"$1","}'|tr -d "\n[[:blank:]]"|sed s/[nrw],/""/g; echo " "
    
  • this results in a line looking this way:

      w41603521,w289494457,w120141340,w202708673,w217615755,w217615752,w217615776,w217615760,w217615784,w217615781,w217615769,w217615756,w217554101,w217615772,w217615774,w217554096,w217615766,w217615757,w217615758,w217615754,
    
  • copy this line, switch to JOSM, press shift-alt-u, paste the copied line, press enter
  • all the ways will be undeleted
  • If you want to undelete nodes or relations, do as before and only replace in print “w” the w with n for nodes or r for relations

Having a lot of time, here the ## Explanation of the command

  less /path/to/file_foo |  sends the content of file_foo to a pipe from where the next tool can parse the content.

  awk -F "," '{print "w"$1","}' | Tell awk it gets a string separated by commata and to print the first column which in our case is the ID of the way. Additionally it has to print a "**w**" in front of it so the undelete plugin later knows it has to undelete a **w**ay. The comma is added to later have a nice line without spaces. The output is again piped for the next tool.

  tr -d "\n[[:blank:]]"| Tell the tool **tr**uncate to delete all newlines to make the list of ways a single line. Additionally, have it delete all blank spaces which may occur from copying and cause a broken list. Again pipe the result.

  sed s/[nrw],/""/g; This is only there to avoid another possible error which would be a leading **w** without ID for a way. This is also done for **n**odes and **r**elations.

  echo " " Just to let the Bash make a line break. This makes it easier to copy the desired output.

Discussion

Log in to leave a comment