forked from MapServer/MapServer
-
Notifications
You must be signed in to change notification settings - Fork 2
PerlMapScriptExamples35ex4
Thomas Bonfort edited this page Apr 6, 2012
·
2 revisions
#!perl
#!/usr/bin/perl -w
#
# Copyright (C) 2002, Lowell Filak.
# You may distribute this file under the terms of the Artistic
# License.
#
# Given a shapefile name, item name, & item value this routine will dump out
# the matching records.
#
# Required modules are mapscript (installed as part of make install),
# Getopt (normally included with Perl), & XBase.
# Please download boundary.tar.gz also, and:
# tar -xf boundary.tar.gz --ungzip
#
# Suggested run line = ./find.pl -file=boundary -item=loc_name -value='Medina City'
use mapscript;
use Getopt::Long;
use XBase;
#
# Retrieve the input values.
GetOptions('file=s' => \$file, 'item=s' => \$item, 'value=s' => \$value);
#
# Check the input values.
if ( (!$file) || (!$item) || (!$value) ) {
print "Syntax: find.pl -file=[filename] -item=[item_name] -value=[item_value]\n";
exit 0;
}
#
# Open the existing shapefile.
$shapefile = new shapefileObj($file, -1) or die "Unable to open shapefile $file.";
#
# Print out the entered values.
print "Shapefile: $file\nItem Name: $item\nItem Value: $value\n\n";
#
# Open the db handle.
my $dbh = new XBase "$file" or die XBase->errstr;
#
# Grab and process the information.
my @row;
#
# Set the number of results to 0.
my $results = 0;
#
# Open a new shape object to hold the found shapes.
my $shape = new shapeObj(-1);
#
# Use xbase to query by attribute.
#
# Loop through each record (there are experimental modules for using indexes
# available according to xbase man page).
for ($record=0; $record<$dbh->last_record; $record++){
#
# Grab the record.
my @row = $dbh->get_record($record, "$item") or die $dbh->errstr;
#
# Is the record marked for deletion.
my $deleted = $row[0];
if ( $deleted == 1 ) {
#
# If so then skip it.
next;
}
else {
#
# Fall through.
}
#
# Set the value for the search field.
my $fndvalue = $row[1];
#
# Does the value from the field match the query.
if ( "$fndvalue" ne "$value" ) {
#
# If not skip it.
next;
}
else {
#
# Fall through.
}
#
# Print the found record information.
print "The Row Found: $record\nThe Value Found: $fndvalue - go figure :-)\n";
#
# Increment the results counter.
$results = $results + 1;
#
# Grab shape #$record and stick it into the shape holder.
$shapefile->get($record, $shape);
#
# Get the bounds of the shape.
my $minx = $shape->{bounds}->{minx};
my $miny = $shape->{bounds}->{miny};
my $maxx = $shape->{bounds}->{maxx};
my $maxy = $shape->{bounds}->{maxy};
#
# Print the bounds of the shape.
printf "bounds (%f,%f) (%f,%f)\n", $minx, $miny, $maxx, $maxy;
}
#
# Print the number of records found.
print "Number of Results: $results\n";
[wiki:PerlMapScript back to PerlMapScript