[mapserver-users] raster creation & use

Lowell Filak lfilak at medinaco.org
Fri May 3 11:47:32 EDT 2002


I think, judging from the bottom of your code the world file looks like:
0.00166666666666667
0
0
0.00166666666666667
-118.9
35.6
Correct?
I don't yet see why that doesn't work. How far off is the registration?
Lowell F.

The following message was sent by Ed McNierney <ed at topozone.com> on Thu, 02 May 2002 16:47:26 -0400.

> 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