[Mapserver-DE] Automatisiertes Kacheln

Kai Behncke kbehncke at igf.uni-osnabrueck.de
Sam Jan 13 11:19:39 CET 2007


> -----Ursprüngliche Nachricht-----
> Von: armin.burger at gmx.net
> Gesendet: 08.12.06 17:05:10
> An: r.keltermann at web.de
> CC: mapserver-de at freegis.org
> Betreff: Re: [Mapserver-DE] Automatisiertes Kacheln


> 
> >>
> > Hallo,
> > vielen Dank erst mal.
> > Gilt das was Du sagst nur für Geotiffs?
> > Was ist mit 150 MB großen JPEGs?
> 
> JPEG's wuerde ich eher als Notloesung betrachten, z.B. wenn man wenig 
> Plattenplatz hat. Ansonsten sind JPEG's recht langsam, da immer das 
> komplette Bild entpackt werden muss, um es darzustellen. Tiffs 
> (unkomprimiert) koennen sehr effizient in kleinen Teilen gelesen werden. 
> Evtl. sind noch ECW's geeignet wenn man sehr grosse Bilder und/oder 
> wenig Platz hat. Sind langsamer als Tiff aber deutlich schneller als Jpeg.
> 
> 
> > Muss man denn Rasterbilder garnicht kacheln?
> > Ich lese immer wieder dass das sehr wichtig sei, weil sonst die Performanz
leidet??
> > Was genau meinst Du mit Overviews mit gdaladdo?
> 
> gdaladdo fuegt Overview-Ebeben mit geringerer Aufloesung und daher 
> weniger Datenmenge in das existierende Tiff ein. Die Dateigrosse des 
> Tiffs erhoeht sich daurch um bis etwa 30%, aber es lohnt sich! Tiffs mit 
> Overviews sind das schnellste was ich bisher getestet habe und auf der 
> Mapserver Liste wird das gleiche oefters bestaetigt.
> 
> Du brauchst Gdal (fuer Windows als FWtools erhaeltlich unter 
> http://www.gdal.org/dl/fwtools/FWTools111.exe). Kurzbeschreibung von 
> gdaladdo unter
> http://gdal.maptools.org/gdaladdo.html
> 
> gdaladdo -r average dein.tif 2 4 6 8 12 16 20 30
> 
>Cool, danke :-) !!!!
>Dennoch würde es mich generell interessieren, ob man automatisiert einen
>Befehl auf der MS-DOS-Konsole x-fach mit verschiedenen Parametern ablaufen
>lassen kann.
>Wir haben hier diesbezüglich schon viel gerätselt und probiert.
>
>Also nehmen wir mal ich möchte kacheln derart:
>gdal_translate –projwin 3623456 5311111 3375433 570000 bild_in.tif
>bild_out.tif
>
>....und dieses dann x-fach, immer wieder mit neuen Koordinaten, so dass man
>letztlich mehrere Kacheln bekommt.
>Man könnte das manuell machen, dauert aber viel zu lange.
>Könnte man z.B. auf Windows eine batch-Datei schreiben, die so etwas macht,
>also den Befehl mit immer wieder neuen Koordinaten aufruft, so dass man dann
>im Endeffekt z.B. 20 Einzelbilder aus einem großen Bild bekommt?


Hallo, ist zwar schon ne Weile her, aber hier ein ziemlich passables
Shell-Skript zum automatisierten Kacheln von Bildern.
Der Autor hat das ok zur Weiterverbreitung gegeben.
Das Skript kann natürlich mit den bekannten Optionen der FWtools beliebig
erweitert werden.

Viele Grüße, Kai

-----------------
#! /bin/bash
#
# Linux Shell Script to cut large TIF into N x M tiled TIF's
#
# Version: 0.9
#
# Author: Eric Legge Smith
#
# Date: Dec 2006#
#
# gdal utility syntax: gdal_translate -srcwin [$1] [$2] [$3] [$4] -a_srs [$5]
[$6] [tile_map.tif]
#
# where:
#       $1 is the number of tiles required in X
#       $2 is the number of tiles required in Y
#       $3 is the required tile size in X direction
#       $4 is the required tile size in Y direction
#	$5 is the projection
#	$6 is the path to the original map TIF
#
echo "Tif Tiling Script - using gdal_translate";
if [ $# -eq 6 ]
then
Sx=$3
Sy=$4
Proj=$5
Map_Path=$6
cnt=0

# ===== LOOP ON NUMBER OF TILES REQUIRED IN X
for (( i=0; i<=$1-1; i++ )) # GENERATE TWO DIGIT NUMBERING IN X AND Y FOR
TILENAMES
	do
	if test $i -le 9
	then
		ni=0$i
	else
	ni=$i
fi

# ===== CALCULATE OFFSET IN X
Xoff=`expr $Sx \* $i`

# ===== LOOP ON NUMBER OF TILES REQUIRED IN Y
	for (( j=0; j<=$2-1; j++ ))
	do
	# ===== CALCULATE OFFSET IN Y
	Yoff=`expr $Sy \* $j`
	if test $j -le 9
	then
		nj=0$j
	else
		nj=$j
	fi

	cnt=`expr $cnt + 1`
 	echo Tile:$cnt Offset:$Xoff $Yoff Size:$Sx $Sy Projection:$Proj
Path:$Map_Path Index:$ni $nj

# ===== USE GDAL TRANSLATE TO GENERATE GEOTIFF TILES
/home/fragglefoo/download_fraggle/FWTools-1.1.3/bin_safe/gdal_translate
-srcwin $Xoff $Yoff $Sx $Sy -a_srs $Proj $Map_Path tile$ni$nj.gtiff
	done
	#echo ""
done

echo "`expr $1 \* $2` Tiles processed ... Operation completed."


else
	echo "Usage - ./tiletool Nx Ny Sx Sy Prj Pth"
	echo "Where Nx and Ny are two Integers representing the number of tiles
required in X and Y"
	echo "Where Sx and Sy are two Integers representing the tile size in pixels"
	echo "Where Prj is the required projection"
	echo "Where Pth is path to original_map.tif file"
	echo "e.g. tiletool.sh 2 3 1000 1000 EPSG:20255 ../aerial.tif"
	echo "Generates the following:"
	echo "    6 tiles as a 2x3 grid"
	echo "    Each tile is 1000 pixels square"
	echo "    The projection is EPSG:20255"
	echo "    The original file called aerial.tif is located in the parent directory"
	echo "    The output tiles are named tile0000.tif, tile0001.tif .....
tile0102.tif"
	
fi
-----------------

--
Dipl.-Geogr. Dipl.-Umweltwiss. Kai Behncke

Institut für Geoinformatik und Fernerkundung (IGF)
Universität Osnabrück
Kolpingstr. 7
49074 Osnabrück

Raum: 01/308
Tel.: +49 541 969-4450
E-Mail: mailto:kbehncke at igf.uni-osnabrueck.de 
Web:  http://www.igf.uni-osnabrueck.de




This site is hosted by Intevation GmbH (Datenschutzerklärung und Impressum | Privacy Policy and Imprint)