# 1) необходимо задать число тайлов по оси Х и Y, а также размерность тайла в ширину и в высоту в пикселях # 2) файлы в директории должны иметь имена в порядке чтения матрицы тайлов: слева направо, сверху вниз # 3) минимальное число строк и столбцов матрицы - 1 # 4) строка ввода может выглядеть так: perl worldfile_gen.pl tif 2 3 10 20 # Author A.Kostikova, 9-03-2010 #!/usr/bin/perl -w use strict; use warnings; use Cwd; my $dir = getcwd; my $extention; if ($ARGV[0]){$extention = $ARGV[0];} else {print "please, enter extention of your tiles (tif,jpg,etc): "; chomp ($extention =<>);} my $com="dir >files.txt *.$extention /b"; system($com); open(FILEDESCRPTOR, "files.txt") or die "Error opening file: $!"; my @array = ; close(FILEDESCRPTOR); my $maxi=""; my $maxj=""; my $size_x=""; my $size_y=""; if ($ARGV[1]){$maxi = $ARGV[1];} else {print "please, enter number of tiles on X axis: "; chomp ($maxi =<>);} if ($ARGV[2]){$maxj = $ARGV[2];} else {print "please, enter number of tiles on Y axis: "; chomp ($maxj =<>);} if ($ARGV[3]){$size_x = $ARGV[3];} else {print "please, enter size of tile in pixel on X axis: "; chomp ($size_x =<>);} if ($ARGV[4]){$size_y = $ARGV[4];} else {print "please, enter size of tile in pixel on Y axis: "; chomp ($size_y =<>); } my $i = 0; #starting value for left top corner X coordinate my $j = 0; #starting value for left top corner Y coordinate my $coordY = ""; my $coordX = ""; my $k = 0; my $r = 0; my $rmax=scalar(@array); my @AoA = (); my @imatrix_x=(); my @imatrix_y=(); #get all the values for X for ($j = 1; $j <= $maxj; $j++){ for ($i = 1; $i <= $maxi; $i++){ $coordX = $i * $size_x; push(@imatrix_x,$coordX); } } #get all the values for Y for ($j=1; $j <= $maxj; $j++){ $coordY = $j * $size_y; for ($i = 1; $i <= $maxi; $i++){ push(@imatrix_y,$coordY); } } #fill in worldfiles matrix for (; $k <= $rmax; $k++){ $AoA[0][$k] = 1; $AoA[1][$k] = 0; $AoA[2][$k] = 0; $AoA[3][$k] = -1; $AoA[4][$k] = $imatrix_x[$k]; $AoA[5][$k] = $imatrix_y[($rmax-1)-$k]; } my $extf; #get all files from the directory, read names, make worldfiles and write worldfiles martix foreach my $array (@array){ chomp($array); my $array_ss = substr $array, 0, (length($array) - 4); my $ext = substr $array, -3; my $ext2 = substr $ext, -1; my $ext3 = substr $ext, -3, -2; $extf = $ext3.$ext2."w"; my $wf_name = $array_ss.".".$extf; open (MYFILE, ">$wf_name"); if ($AoA[4][$r] || $AoA[5][$r]){ print MYFILE $AoA[0][$r]."\n".$AoA[1][$r]."\n".$AoA[2][$r]."\n".$AoA[3][$r]."\n".$AoA[4][$r]."\n".$AoA[5][$r];} else { print "Number of tiles exceeds matrix size you set up. $wf_name world files will be empty\n"; } close (MYFILE); $r=$r+1; } if (scalar(@AoA) == 0){ print "Sorry, there is an error and .$extf files are empty. Check you input tiles and reset settings\n"; } else{ print "The .$extf files have been generated. Check $dir\n"; } exit;