Listing 5. The getIconLocationsByCoords() subroutine
sub getIconLocationsByCoords {
# Get the bounding box top-left and bottom-right coordinates.
#
my ( $x_left, $y_top, $x_right, $y_bottom ) = @_;
# $Dbh is a DBI database handle; it is created elsewhere.
#
my $sth = $Dbh->prepare (
qq{ SELECT X, Y, Name, Code
FROM Map
WHERE X BETWEEN ? AND ?
AND Y BETWEEN ? AND ?
AND EXISTS ( SELECT 'x'
FROM ProjectsList
WHERE Active=(1)
AND Map.Code = ProjectsList.MapCode
)
} ) or die "Unable to prepare SQL Statement";
# We actually adjust the cropped coordinates by the icon
# "dimension" so that we avoid presenting "half" icons
# on the screen.
#
$sth->execute( $x_left + ICON_DIM, $x_right - ICON_DIM,
$y_top + ICON_DIM, $y_bottom - ICON_DIM )
or die "Unable to execute statement handle";
# @locations is used to store the location information returned
# from the database.
#
my @locations = ();
while ( my $ref = $sth->fetchrow_hashref ) {
push @locations, $ref;
}
$sth->finish();
return @locations;
}