Manchmal benötigt man die Polygone einer Grenze. Durch OpenStreetMap und ein Script aus der OSM-Community lässt sich das sehr schnell bewerkstelligen.

Das Script ist mittels svn co http://svn.openstreetmap.org/applications/utils/gary68 schnell auf den eigenen Rechner befördert.

Nun brauchen wir noch Daten, genauer gesagt ein .osm-File, für unser Unterfangen. Ich kann mir solche Dateien direkt auf OSM erzeugen lassen, indem ich den Punkt Export wähle. Ist leider für große Ausschnitte unbenutzbar, weshalb ich mir eine entsprechende Datei für Hessen von hier besorgt habe.

Nun kann man loslegen. Naja, vorausgesetzt man hat bereits die entsprechenden Perl-Module installiert. Es müssen vorhanden sein Math::Polygon, IO::Compress, Compress::Bzip und GD. Meckert GD mit der Meldung Could not find gdlib-config in the search path, dann gibts hier Abhilfe.

Gut, wir haben nun alles was wir benötigen und können loslegen. Ich habe mir vorher noch einen Unterordner mit Namen hessen erstellt, in welchem ich meine Dateien ausgegeben haben möchte.

Der folgende Aufruf erzeugt mir aus der entpackten .osm-Datei Polygon- und Bild-Dateien (als PNG) mit den Grenzen. Außerdem bekomme ich ein großes Bild mit einer Übersicht erstellt. Wichtig ist der Punkt -ignoremissing, damit auch unvollständige Pfade verarbeitet werden.

perl boundaries.pl -in=../hessen.osm -html=hessen.html \
-csv=hessen.csv -poly -polybase=./hessen/hessen_poly \
-pics -picsize=1024 -bigpic -bigpicsize=20480 -ignoremissing

Nach ca. 5 Minuten ist dann das Script bei mir beendet und ich kann die Ergebnisse weiterverarbeiten.

 

Perl nutze ich schon seit einigen Jahren immer wieder gerne – und in letzter Zeit auch wieder relativ häufig. Momentan freue ich mich deshalb über die 24 Türchen mit Perl-Tricks & Modul-Anregungen, die es bei den Perl Mongers gibt.

 
The Programmer Hierarchy

The Programmer Hierarchy

 

Gelegentlich entwickle ich unter Windows Perl-Scripts, die später auf einem Unix-Server ausgeführt werden.
Problematisch kann es dabei werden, wenn die Daten, welche das Script entgegen nimmt, unter Windows generiert werden.

Hier kann dann das Newline-Problem auftreten. Windows nutzt zur Darstellung eines Zeilenumbruchs die Zeichenfolge eines Carriage Return + Line Feed, Linux nutzt hingegen nur einen einfachen Line Feed. Das zusätzliche CR sorgt dann für Probleme bei der Verarbeitung.

Hat man unter Unix Zugriff auf die Daten, welche das Script verarbeiten soll, so kann man sich den Inhalt mit vi anzeigen lassen. Das CR wird dort durch ein ^M dargestellt. Beim Debuggen mit Perl wird das Zeichen nicht angezeigt, weil es ein Steuerzeichen ist. Aber wie geht man damit um? Continue reading »

 

Bei F!XMBR stiess ich auf den Link zum Hintergrund des Time.com 100-Hacks.Ist ist interessant zu sehen, wie vorgegangen wurde und es gibt einem selbst auch Anregungen,was man nicht machen sollte, wenn man eine nicht manipulierbare Umfrage programmieren möchte! Interessant finde ich dabei vorallem, dass IPv6-User nicht gebannt wurden – je mehr IPv6 genutzt wird, desto mehr sollte man sich Gedanken dazu machen!

Leider ist der Codes der beiden Perl-, Scripte nicht verfügbar, das würde mich auch mal interessieren! Also, falls die irgendwer hat und teilen mag, immer her damit ;)

 

Momentan arbeite ich auf einem Unix-Server. So weit, so gut. Vieles, was ich durch meine Linux-Benutzung gelernt habe, kann ich dort weiter benutzen. Die Umstellung ist meines Erachtens nach minimal, aber doch vorhanden.

Nun bekam ich die Aufgabe, dass ich Logdateien auswerten soll. Ein Logeintrag geht dabei aber über mehrere Zeilen und ich sollte das ganze später in Art einer CSV-Datei ausgeben.
Da nicht sicher gestellt ist, dass sich auf jeder Maschine Perl findet, sollte ich das ganze mit Mitteln der Shell versuchen, vorallem mit sed und awk. Mit beiden habe ich noch nicht gearbeitet, aber ich habe mich in das Thema eingelesen und meinte auch, dass ich es verstanden hatte. Ich habe mir also schonmal einen Entwurf gemacht, wie mein Programm vorgehen soll und wollte das nun in die Tat umsetzen. Bei der Betrachtung der Log-Dateien war mir aufgefallen, dass RegExp dabei unersetzbar waren. Kein Problem, schliess beherrscht awk das! Oder… sollte beherrschen!

Da es keine zeitkritische Aufgabe war, habe ich wirklich seeeehr viel versucht, mich durch Foren gegraben, manpages und Tutorials gelesen. Aber es half nicht. Awk wollte einfach keine RegExp annehmen. Mein erster Gedanke war ja, dass die RegExp nicht gültig sei. Aber Proben mit grep brachten mir dann doch das erhoffte Ergebnis – es liegt nicht an der RegExp. Ich hab mir dann nicht weiter helfen können, als dass ich meinen Betreuer um Rat gefragt habe. Der hat sich mein Konstrukt angeschaut und war ebenfalls der Meinung, dass es nicht an der RegExp lag. Also haben wir versucht einen Fehler zu finden, konnten aber keinen entdecken.

Das Ende vom Lied war dann, dass ich das ganze mit Perl lösen durfte, was nach ca. 45min fertig war. Ich mag Perl. Es ist schnell, vielseitig und einfach in der Anwendung :)

© 2012 startafire Suffusion theme by Sayontan Sinha