s.what script
Simon Cox
S.Cox at solo.ned.dem.csiro.au
Fri Mar 29 07:00:00 EST 1996
At 6:02 PM 28/3/96, Okke Batelaan wrote:
>Hi Simon,
>v.what would be really handy. Is your s.what somewhere available?
Here is s.what - snip at the line and put it in your grass/scripts directory.
Simon Cox
> _________________________________________________________
> Dr Simon Cox __ \
> CSIRO Exploration & Mining ,~' L_|\ Australian
> 39 Fairway, PO Box 437, ;-' \ Geodynamics
> Nedlands, WA 6009 Australia ( \ Cooperative
> Phone +61 9 284 8443 + ___ / Research
> Fax +61 9 389 1906 L~~' "\__/ Centre
> simon at ned.dem.csiro.au W
> AGCRC info>> http://www.ned.dem.csiro.au/AGCRC/
> _________________________________________________________
------8<-----------------------------8<------------
#! /bin/sh
# button instructions and error messages go to stderr
# coordinates and site information go to stdout
# s.what
#
# is a quick hack to get a program with similar functionality
# to r.what for non-interactive query of a site-list.
#
# 1/96 Simon Cox , AGCRC, CSIRO Exploration & Mining
# simon at ned.dem.csiro.au
#
# - based on code fragments supplied by Sue Huse, REGIS, Berkeley.
#
# Performance not guaranteed.
#
if [ $# -lt 1 ]
then
echo "usage: s.what in=site_list < coord_list"
exit
fi
sitename=`echo $1 | sed 's/in=//'`
#
# find the sites file or give error if not available
#
eval `g.findfile element=site_lists file=$sitename`
if [ ! "$file" ]
then
echo "Site file $sitename unavailable" | cat 1>&2
exit 1
else
sitefile=$file
fi
#
# loop through input lines
#
while read easting northing
do
if [ "X$easting" = "X" ]
then
exit
fi
if [ "X$northing" = "X" ]
then
exit
fi
#
# calculate the distance from point to each site in file and
# choose the closest
# uses (x2 + y2) rather than sqrt(x2 + y2) to minimize computation.
#
eval ` echo "nawk -F\"|\" '
BEGIN { min_distance = 0;
east = $easting;
north = $northing
} \
{
distance = (\\\$1-east)^2 + (\\\$2-north)^2;
if (min_distance == 0) {
min_distance = distance;
site_east = \\\$1;
site_north = \\\$2;
site_label = \\\$3;
line_no = NR;
};
if (distance < min_distance) {
min_distance = distance;
site_east = \\\$1;
site_north = \\\$2;
site_label = \\\$3;
line_no = NR;
}
}
END { print site_east\"|\"site_north\"|\"site_label ;
exit line_no
} ' $sitefile" `
done
More information about the grass-user
mailing list