[mapserver-users] raster creation & use
Ed McNierney
ed at topozone.com
Thu May 2 13:47:26 PDT 2002
Joe -
The order of elements in a world file is:
X pixel size
0.0
0.0
Y pixel size
Left
Top
You seem to be writing the first four in the wrong order, no?
- Ed
Ed McNierney
Chief Mapmaker
TopoZone.com
ed at topozone.com
(978) 251-4242
-----Original Message-----
From: Joe Bussell [mailto:joe at otsys.com]
Sent: Thursday, May 02, 2002 4:24 PM
To: mapserver-users at lists.gis.umn.edu
Subject: [mapserver-users] raster creation & use
I have managed to create a set of png images using mapserver which
constitute the tile set that I will later use for producing the final
image product. I am apparently not producing the *.wld files correctly
as the rasters do not properly align themselves when drawn.
The procedure is as follows:
determine how many cells to create based on a level
for each cell
generate a map
get maps actual extent
create world file
I then use gdaltindex to create the shapefiles, then shptree to create
an index. I believe that I am incorrectly assigning the world file
elements.
Is the pixelSize used for PNG files at all? Are there issues which
I have failed to address?
Following are the relevant subroutines in my tile production code.
sub createTiles
{
my %args =
(
LEFT => -118.9,
TOP => 35.6,
BOTTOM => 33.4,
RIGHT => -114.4,
XDIM => 600,
YDIM => 600,
MAPFILE => 'td.map',
OUTFILE => $ENV{PWD}.'/LA',
LEVEL => 1,
X_DIVS => 1,
Y_DIVS => 1,
@_,
);
print "createTiles\n" if $verbose;
my $deltaDegree = 1 / $args{LEVEL};
my $xDivs = ceil( ( $args{RIGHT} - $args{LEFT} ) / $deltaDegree );
my $yDivs = ceil( ( $args{TOP} - $args{BOTTOM} ) / $deltaDegree );
my ( $x, $y );
my $xDiv = ( $args{LEFT} - $args{RIGHT} ) / ($args{X_DIVS} + 1);
my $yDiv = ( $args{BOTTOM} - $args{TOP} ) / ($args{Y_DIVS} + 1);
my @files;
print "xDIV=$xDivs yDIV=$yDivs \n" if $verbose;
for ( $x = 0; $x <= $xDivs; $x++ )
{
my $left = $args{LEFT} + $x * $deltaDegree;
my $right = $left + $deltaDegree;
for ( $y = 0; $y <= $yDivs; $y++ )
{
my $pngFile = $args{OUTFILE} . "level" . $args{LEVEL} . "_" . $x . $y . '.png';
my $wldFile = $args{OUTFILE} . "level" . $args{LEVEL} . "_" . $x . $y . '.wld';
my $top = $args{TOP} - $y * $deltaDegree;
my $bottom = $top - $deltaDegree;
my $map = renderMap( LEFT => $left,
RIGHT => $right,
TOP => $top,
BOTTOM => $bottom,
XDIM => $args{XDIM},
YDIM => $args{YDIM},
MAPFILE => $args{MAPFILE},
OUTFILE => $pngFile );
push( @files, $pngFile );
if ( $verbose )
{
print STDERR "PNG file created: $pngFile $top $bottom $left $right\n";
print STDERR "minx = $map->{extent}->{minx} maxy = $map->{extent}->{maxy} maxx = $map->{extent}->{maxx} miny = $map->{extent}->{miny} \n";
}
$right = $map->{extent}->{maxx};
$left = $map->{extent}->{minx};
$top = $map->{extent}->{miny};
$bottom = $map->{extent}->{maxy};
my $xPixelSize = ($right - $left) / $args{XDIM};
my $yPixelSize = -($bottom - $top) / $args{YDIM};
makeWldFile( DEST_FILE => $wldFile,
X_PIXEL_SIZE => $xPixelSize,
Y_PIXEL_SIZE => $yPixelSize,
X_ROT => 0,
Y_ROT => 0,
LEFT => $left,
TOP => $top );
if ( $verbose )
{
print STDERR "World file created: $wldFile $xPixelSize, $yPixelSize, 0, 0, $left, $top\n";
}
}
}
}
sub makeWldFile
{
my %args =
(
DEST_FILE => 'testOutput.wld',
X_PIXEL_SIZE => 0.033333333,
Y_PIXEL_SIZE => -0.033333333,
X_ROT => 0,
Y_ROT => 0,
LEFT => -118.236313,
TOP => 34.049172,
@_,
);
open ( OUT, ">$args{DEST_FILE}" ) || croak "Could not create $args{DEST_FILE}";
print OUT "$args{X_PIXEL_SIZE}\n";
print OUT "$args{X_ROT}\n";
print OUT "$args{Y_ROT}\n";
print OUT "$args{Y_PIXEL_SIZE}\n";
print OUT "$args{LEFT}\n";
print OUT "$args{TOP}\n";
close OUT;
}
More information about the MapServer-users
mailing list