Weiter geht’s mit der Analyse.

Da ich die Binärdaten nicht lesen kann (war zu kurz in der Matrix, oder so) nur die OSM-Dateien.

Die OSM-Dateien aus Osmosis verwenden Tabs (= 1 Byte) zur Einrückung. Die aus osmconvert je zwei Leerzeichen (= 2 Byte) statt einem Tab. Somit könnten die OSM-Dateien aus osmconvert größer sein, sind sie aber nicht.

Außerdem stehen bei Osmosis die Angaben für lat=… lon=… ganz am Ende, bei osmconvert ganz am Anfang nach der id. Bei osmosis ist die Reihenfolge uid, user, changeset, bei osmconvert aber changeset, uid, user.

Dann gibt’s auch noch ein paar wenige Sonderzeichen, die osmosis als benannte Entitäten (z.B. ") ausgibt, osmconvert aber als dezimale Entitäten (z.B. ").

Seltsamerweise gibt osmconvert im Gegensatz zu osmosis natürliche Zahlen mit einem abschließenden Punkt an. So:
„34."
statt nur
„34"

Das alles kann man rausfiltern bzw. umstellen, die Dateien also „normieren". Dann sind sich die Dateien schon viel ähnlicher und eher vergleichbar. Habe das mit sed gemacht.


for i in iran.osm.{1,2,3,4}; do
  sed -i -e 's%\ \ %%g' -e 's%\t%%g' -e 's%\ uid="0"\ user=""%%' -e 's%\(.*\ \)\(id="[0-9]\+"\)\(.*\)\(\ lat="[0-9\.]\+"\ lon="[0-9\.]\+"\)\(.*\)%\1\2\4\3\5%' -e 's%\(.*\ id="[0-9\.]\+"\)\(.*\)\(\ changeset="[0-9]\+"\)\(.*\)%\1\3\2\4%' -e 's%\&%\&%g' -e 's%\'%\'%g' -e 's%\"%\"%g' -e 's%\>%\>%g' -e 's%\<%\<%g' -e 's%\
%\
%g' -e 's%\
%\
%g' -e 's%\(.*l[ao][tn]="[0-9]\+\)\(\."\)\(.*\)%\1"\3%g' $i
done

Dabei ist mir aufgefallen, das ziemlich häufig CarriageReturn und LineFeed in Werten vorkommt. Schrecklich! Das muss wohl versehentlich (copy&paste) passiert sein, sollte aber mal durch einen Bot behoben werden. Da verschluckt sich doch sicher so manches Programm dran. Naja, kann man auch einfach als Leerzeichen interpretieren, und wenn’s ein Bot repariert, sind die Fehler sicher bald eh wieder irgendwo drin.

Als Ergebnis erhalte ich, dass alle vier Dateien iran.osm.{1,2,3,4} bis auf die Zeilen 2 und 3 identisch sind. In Zeile 2 steht der Name des erstellenden Programms, in Zeile 3 stehen die Außenränder („bounding box"), welche Unterschiedlich angegeben sind.

Jetzt gilt es andere Bereiche oder gleich die ganze Welt zu vergleichen. Und dann noch Boundingboxes, Boundingpolygone und andere komplexe Dinge zu vergleichen. Dies könnte das osmconvert ebenfalls aus dem Tritt bringen.