[mapserver-users] raster creation & use

Ed McNierney ed at topozone.com
Thu May 2 16:47:26 EDT 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