[mapserver-users] raster creation & use

Joe Bussell joe at otsys.com
Fri May 3 10:23:05 EDT 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