landkarten:ecw

ECW-Karten erstellen

Perlscript

Das folgende Perlscript teilt große Tiffdateien in einzelne Kacheln auf, die jeweils speichersparend unabhängig voneinander bearbeitet werden. Zum Schluss wird eine Konfigurationsdatei für den AU-ECW-Compressor erzeugt, der aus den Kacheln eine Bilddatei im ECW-Format zu erzeugt.

Voraussetzungen

Das Perlscript läuft unter Debian Sqeeze unter Perl 5.10.1. Es ruft die Kommandozeilenprogramme tiffinfo und tiffcrop aus dem Paket „libtiff-tools“ sowie mogrify und convert aus dem Paket imagemagick auf.

Der AU-ECW-Compressor ist ein Windowsproggramm, welches hier in einer Virtual Box unter Windows 2000 läuft und mittels Samba auf die Daten zugreift.

Konfiguration

Die erzeugten Daten werden in einem Verzeichnis gespeichert das in der globalen Variable $tempdir angegeben wird. Dieses Verzeichnis wird ggf. neu erzeugt oder gelöscht.

Damit später der AU-ECW-Compressor dieses Verzeichnis lesen kann, wird dessen Ort in der Variable „$windir“ angegeben.

Erzeugte Dateien

Die in $tempdir erzeugten Dateinamen lautet <$prefix>-<zeile>-<spalte>. In den folgenden Routinen muss das Prefix und die Anzahl der Zeilen/Spalten meistens angegeben werden.

Routinen

Kacheln erzeugen

tilefile
($rows, $cols) = tilefile($Dateiname, $prefix, $size);
($rows, $cols) = tilefile($Dateiname, $prefix, $sizeY, $sizeX);

Die Routine tilefile zerlegt das in $Dateiname angegebene Tiff-Image in Kacheln deren Dateiname <$prefix>-<zeile>-<spalte> lautet. Die Kacheln haben je nach Aufruf $sizeY Pixel Höhe und $sizeX Breite, oder $size Höhe und Breite.

Besitzt das Image nicht ein Vielfaches der angegebenen Kachelgröße wird ringsum ein passender Rand erzeugt, die Randkacheln entsprechend auffüllt.

tilefile liefert die Anzahl der erzeugten Kachelzeilen und -spalten zurück.

tilefile ist eine Zusammenfassung der Routinen CropRows, CropTiles und ExtentTiles.

CropRows
$rows = CropRows($Datei, $prefix, $links, $oben, $rechts, $unten, $sizeY);

CropRows zerlegt einen angegebenen Ausschnitt des Image in $Datei in einzelne Zeilen von $sizeY Höhe mit dem Namen <$prefix>-<zeile>-<001>

„$links“, „$oben“, „$rechts“ und „unten“ bestimmen den Ausschnitt aus den Image. Es sind Positionsangaben bezogen auf das linke obere Eckpixel beginnend mit 1.

CropRows liefert die Anzahl der erzeugten Kachelzeilen zurück.

CropTiles
$cols = CropTiles($rowprefix, $rows, $tileprefix, $sizeX);

CropTiles zerlegt die mit CropRows erzeugten Zeilen in einzelne Kacheln mit $sizeX Breite.

$rowprefix gibt den Dateinamen der zu zerlegenden Zeilen an, und entspricht der Angabe $prefix der Routine CropRows. $rows ist die Anzahl der zu zerlegenden Zeilen und ist der Rückgabewert der Routine CropRows.

CropTiles liefert die Anzahl der erzeugten Kachelspalten zurück.

ExtentTiles
ExtentTiles($tileprefix, $rows, $cols, $sizeY, $sizeX);

Wenn Höhe und Breite des zu zerlegenden Image kein Vielfaches der Höhe und Breite der Kachel ist, haben die von CrowRows bzw. CropTiles erzeugten Randkacheln entsprechend weniger Pixel. ExtentTiles erweitert diese auf die volle Kachelgröße und ezeugt so einen zusätzlichen Rand.

Die angegebenen Parameter müssen denen der Routinen CropRows und CropTiles entsprechen.

Kacheln bearbeiten

RotateClockwise
($rows, $cols) = RotateClockwise($inprefix, $outprefix, $rows, $cols);
($rows, $cols) = RotateCounterClockwise($inprefix, $outprefix, $rows, $cols);

Die Routinen RotateClockwise bzw RotateCounterClockwise erzeugt von den mit $inprefix bezeichneten Eingabekacheln im Uhrzeigersinn bzw. gegen den Uhrzeigersinn gedrehte Kacheln, deren Name mit $outprefix beginnt.

$rows und $cols gibt die Anzahl der Kachelzeilen bzw. Spalten an.

Die Routinen geben die entsprechend veränderten Kachelzeilen bzw. Spalten zurück.

resize
($rows, $cols) = resize($inprefix , $outprefix ,$percent ,$rows ,$cols);

Die Routinen resize erzeugt von den mit $inprefix bezeichneten Eingabekacheln um $percent Prozent verkleinerte oder vergrößerte Kacheln, deren Name mit $outprefix beginnt.

$rows und $cols gibt die Anzahl der Kachelzeilen bzw. Spalten an.

Die Routine gibt diese Werte unverändert zurück.

Konfigurationsdatei erzeugen

Writeconfig
WriteConfig($Dateiname, $prefix, $rows, $cols);

Die Routinen WriteConfig erzeugt eine Konfigurationsdatei für den AU-ECW-Compressor. Dieser läd und bearbeitet die mit $prefix angegebenen Kacheln.

$rows und $cols gibt die Anzahl der Kachelzeilen bzw. Spalten an.

landkarten/ecw.txt · Zuletzt geändert: 2014/09/13 19:12 (Externe Bearbeitung)

Seiten-Werkzeuge