[Mapserver-users] PERL mapscript polygon shapefile creation

Joe Bussell joe at otsys.com
Wed Feb 26 13:32:23 EST 2003


This is a multi-part message in MIME format.
--------------000406030906090905060209
Content-Type: text/plain; charset=us-ascii; format=flowed
Content-Transfer-Encoding: 7bit

Thanks for the tip.  I actually had a few other bits wrong as well.  I 
am still having some difficulties.  I am attempting to paint an aircraft 
navigational zone which spans the international dateline.  The resultant 
rendering is fractured.  One possibility would be to split it into 
multiple polygons.  This seems cumbersome at best and could potentially 
generate many polygons if there are complex structures along 180 degree 
longitude.

Has anyone created a workaround for this?  Any ideas?

Cordially,

Joe Bussell
On Time Systems


Eric Bridger wrote:
> Joe,
> 
> Turns out I just wrote such a script today.  The only  problem I see
> with your script is that I think you should call $shape->setBounds()
> after you've added all your lines and before $shapeFile->add($shape).
> 
> I've attached my script.  It reads a list of polygon centroids in
> decimal degrees and creates 10 minute squares.
> 
> Eric
> 
> 
> 
> 
> On Tue, 2003-02-25 at 19:41, Joe Bussell wrote:
> 
>>Greetings Listers,
>>    I am having difficulty porting a technique we use to create point 
>>and line type shapefiles to create a polygon shapefile.  Has anyone used 
>>PERL to create polygon shapefiles from data files?  I have attached my 
>>attempt for review.  The script creates a shapefile that is readable by 
>>dump.pl, but I have not been able to use it in a map render.
>>    I tried this with a data file with the following lines:
>>40.0 -116.0
>>45.0 -116.0
>>45.0 -120.0
>>40.0 -120.0
>>
>>The script "closes" the polygon by inserting the first record at the end.
>>
>>    Any ideas?
>>
>>Cordially,
>>
>>Joe Bussell
> 
> 
> 
> ------------------------------------------------------------------------
> 
> #!/usr/bin/perl -w
> use strict;
> 
> use mapscript;
> use XBase;
> 
> # NNFS INPUT comma separated centroids.
> 
> #0 NFNS 10 minute square id
> #1 Total catch pounds
> #2 Centroid Latitude (decimal degrees)
> #3 Centroid Longitude (decimal degrees)
> 
> 
> my $file = shift or die "No input file\n";
> 
> my $shapeFile = new mapscript::shapefileObj("nmfs_squares", $mapscript::MS_SHAPEFILE_POLYGON);
> 
> my $dbf_file = XBase->create(
> "name" => "nmfs_squares.dbf",
> "field_names" => ["NMFSID", "TOTAL_CATCH"],
> "field_types" => ["C", "N"],
> "field_lengths" => [7, 6],
> "field_decimals" => [undef, 0]);
> 
> my $count = 0;
> open(IN, $file) or die "Could not open $file\n";
> while(my $line = <IN>){
> 	chomp $line;
> 	$line =~ s/"//g;
> 	my @flds = split(/,/, $line);
> 	my $shape = create_rect($flds[2], $flds[3]);
> 	if(!$shape){
> 		warn "No shape\n";	
> 		next;
> 	}
> 	$shapeFile->add($shape);
> 	$dbf_file->set_record($count, $flds[0], $flds[1]);
> 	$count++;
> }
> close (IN);
> 
> undef $shapeFile;
> $dbf_file->close();
> 
> print "Created: $count\n";
> exit;
> 
> sub create_rect{
> 	my($lat, $lon) = @_;	
> 	my $point = new mapscript::pointObj();
>     my $line = new mapscript::lineObj();
> 	# max xy point
> 	$point->{x} = $lon + .0833;
> 	$point->{y} = $lat + .0833;
> 	$line->add($point);
> 	# max x min y
> 	$point->{x} = $lon + .0833;
> 	$point->{y} = $lat - .0833;
> 	$line->add($point);
> 	# min xy
> 	$point->{x} = $lon - .0833;
> 	$point->{y} = $lat - .0833;
> 	$line->add($point);
> 	# min x max y
> 	$point->{x} = $lon - .0833;
> 	$point->{y} = $lat + .0833;
> 	$line->add($point);
> 
> 	# max xy point again to close polygon
> 	$point->{x} = $lon + .0833;
> 	$point->{y} = $lat + .0833;
> 	$line->add($point);
> 
> 	my $shp = new mapscript::shapeObj($mapscript::MS_SHAPE_POLYGON);
> 	$shp->add($line);
> 	$shp->setBounds();
> 
> 	return $shp;
> }


--------------000406030906090905060209
Content-Type: application/x-perl;
 name="getNavZone.pl"
Content-Transfer-Encoding: 7bit
Content-Disposition: inline;
 filename="getNavZone.pl"

#!/usr/bin/perl -w

use strict;
use Carp;
use Getopt::Std qw(getopts);
use File::Copy qw(copy move);
use Date::Manip;

use mapscript;
use XBase;

use vars qw{ $v $shapeFile $dbfTable };
my $lineNumber = 0;

#get command line parameters
my %args = ();
getopts("I:O:vs", \%args);

$v = ( defined $args{v} );

if ( $v )
{
    print "Build shapefile with one polygon from a text file.\n";
}

if ( !defined $args{I} || !defined $args{O} )
{
    croak "getNavZone.pl [-v] -I inputFileName -O outputFileNameBase\n"
         ."    extracts lines with enough geocoding information into a shapefile and an associated DBF.\n"
}

my $inputFileName = $args{I};
my $outputFileNameBase = $args{O};

if ( $args{v} )                
{
    print "Input file = $inputFileName\n";
    print "Output shapefile = $outputFileNameBase.shp\n";
    print "Output dbf file = $outputFileNameBase.dbf\n";
}

open( IN_FILE, "< $inputFileName" ) or croak "Cannot open $inputFileName  $!\n";

my $shapeFileName = $outputFileNameBase . ".shp";
my $dbfFileName = $outputFileNameBase . ".dbf";
my $idxFileName = $outputFileNameBase . ".shx";

my $tempShapeFileName = "./temp.shp";
my $tempDbfFileName = "./temp.dbf";
my $tempIdxFileName = "./temp.shx";

unlink $tempShapeFileName or carp "Could not delete $tempShapeFileName $!\n";
unlink $tempDbfFileName or carp "Could not delete $tempDbfFileName $!\n";
unlink $tempIdxFileName or carp "Could not delete $tempIdxFileName $!\n";

$shapeFile = new shapefileObj( $tempShapeFileName, $mapscript::MS_SHAPEFILE_POLYGON ) 
    or croak "Cannot open $tempShapeFileName $!\n";

$dbfTable = XBase->create(    "name"            => $tempDbfFileName, 
                              "field_names"     => [ "ID" ], 
                              "field_types"     => [ "N" ],
                              "field_lengths"   => [ 10 ],
                              "field_decimals"  => [ 0 ] )      or croak "Cannot create dbfTable $!\n";

sub createPolygon
{
    my $latRef = shift;
    my $lonRef = shift;
    my $id = shift;
    
    my $shape = new shapeObj($mapscript::MS_SHAPE_POLYGON);
    
    my @latRA = @$latRef;
    my @lonRA = @$lonRef;

    my $len = @latRA;
    my $line = new lineObj();
    
    for( my $i = 0; $i < $len; $i++ ) 
    {
        my $lat = $latRA[ $i ];
        my $lon = $lonRA[ $i ];

        my $point = new pointObj();    
        
        $point->{x} = $lon;
        $point->{y} = $lat;
        $line->add( $point );
        
        $lineNumber++;
    }
    $shape->add( $line );
    $shape->setBounds();
    $shapeFile->add( $shape );
    $dbfTable->set_record( $id, $id );
    
    print "Should have made a point in the polygon shapefile = $id $lineNumber\n";
}

sub trim
{
    my @out = @_;
    for ( @out )
    {
        s/^\s+//;
        s/\s+$//;
    }

    return wantarray ? @out : $out[0];
}


my $num = 0;
my $numSuccesses = 0;
my $numFailures = 0;

my $center = "";
my @lats;
my @lons;
my $id = 0;

my $firstLat = 0;
my $firstLon = 0;

while ( <IN_FILE> )
{    
    chop;
    
    my $line = &trim( $_ );
   
    if ( /^\s*$/ )
    {
        carp "$num: No data\n" if ( $v );
        ++$num;
        next;
    }
    elsif ( /^(\S+)\s+(\S+)$/ )
    {
        push( @lats, $1 );
        push( @lons, $2 );
        carp( "$1, $2\n" );

        if ( $num == 0 )
        {
            $firstLat = $1;
            $firstLon = $2;
        }
    }
    else
    {
        carp "ERROR $num $line\n";
        ++$num;
        next;
    }

    ++$num;
}

push( @lats, $firstLat );
push( @lons, $firstLon );

&createPolygon( \@lats, \@lons, $id );

undef $shapeFile;
undef $dbfTable;

if ( !copy( $tempShapeFileName, $shapeFileName ) )
{
    carp "Can't cp $tempShapeFileName $shapeFileName\n";
}
if ( !copy( $tempDbfFileName, $dbfFileName ) )
{
    carp "Can't cp $tempDbfFileName $dbfFileName\n";
}
if ( !copy( $tempIdxFileName, $idxFileName ) )
{
    carp "Can't cp $tempIdxFileName $idxFileName\n";
}

`/usr/bin/shptree $shapeFileName`;

close IN_FILE;

1;

exit;


--------------000406030906090905060209
Content-Type: image/png;
 name="navZone.png"
Content-Transfer-Encoding: base64
Content-Disposition: inline;
 filename="navZone.png"

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
--------------000406030906090905060209--




More information about the mapserver-users mailing list