[mapserver-users] raster creation & use
Joe Bussell
joe at otsys.com
Fri May 3 07:23:05 PDT 2002
Actually, the ordering is not incorrect. Note the function at the end
of the original post has it correct.
Still looking for help...
Joe Bussell
On Time Systems
On Thu, May 02, 2002 at 04:47:26PM -0400, Ed McNierney wrote:
> 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