Can GRASS do this? I meant to label areas
either in vect or rast by pulling out the
corresponding cats and drawing them on top
of the areas.
--Xin
zhuang@access.digex.com
Can GRASS do this? I meant to label areas
either in vect or rast by pulling out the
corresponding cats and drawing them on top
of the areas.
--Xin
zhuang@access.digex.com
Can GRASS do this? I meant to label areas
either in vect or rast by pulling out the
corresponding cats and drawing them on top
of the areas.--Xin
zhuang@access.digex.com
I wrote a little script that labels raster areas a couple of months ago.
The script doesn't check if the label falls inside the polygon or if there is
overlap of the labels. It just computes the mean coordinate for each area.
The input raster map should be a map that is a result from r.clump. Well this
script has worked quite well for my purpose. The result is a site list with label
coordinates and p.map output. I have included the script below.
Just note that it uses gawk instead of awk.
Have fun.
Lars
Lars Schylberg Email: larss@fmi.kth.se
Dept. of Geodesy and Photogrammetry
Royal Institute of Technology (KTH) Tel. +46 8 790 86 33
S-100 44 STOCKHOLM, SWEDEN Fax. +46 8 790 66 10
---- cut here -------
#!/bin/sh
#
# label.obj.sh
#
# Author: Lars Schylberg ( larss@fmi.kth.se )
# Department of Photogrammetry
# Royal Inst. of Technolgy
# Stockholm, Sweden
#
# Date: 930510
# History of changes:
#
#--------------------------------------------------------------------------
# Check if GRASS is running
#
test "$GISRC" || echo "GRASS is not running" || exit 2
#----------------------------------------------------------------------------
#
# Evaluate arguments
#
if [ $# != 2 ]
then
echo
echo Usage: `basename $0`
echo ' input=mapname '
echo ' sitefile=name '
echo
exit 1
fi
#
# Parse input arguments
#
for i do
case $i in
input*)
IN=`echo $i | sed s/input=//` ;;
in*)
IN=`echo $i | sed s/in=//` ;;
i*)
IN=`echo $i | sed s/i=//` ;;
sitefile=*)
OUT=`echo $i | sed s/sitefile=//` ;;
site=*)
OUT=`echo $i | sed s/site=//` ;;
si=*)
OUT=`echo $i | sed s/si=//` ;;
s=*)
OUT=`echo $i | sed s/s=//` ;;
*)
echo ""
echo "Unrecognized option: $i"
echo 'Options: input=mapname '
echo ' sitefile=name '
echo
exit 1
esac
done
#----------------------------------------------------------------
# Check the input arguments
eval `g.findfile element=cell file=$IN`
if [ ! "$file" ] ; then
echo "$IN - cell file not found"
exit 2
fi
eval `g.findfile element=site_lists file=$OUT`
if [ "$file" ] ; then
echo "$OUT - site list exist already "
exit 2
fi
#---------------------------------------------------------------
r.stats -1gz in=$IN | \
gawk '{ x[$3]+=$2 ; y[$3]+=$1; n[$3]++ } \
END { for ( i in n ) printf "%d|%d|%d\n", y[i]/n[i], x[i]/n[i], i }' \
> $LOCATION/site_lists/$OUT
# Create p.map input
echo "raster $IN" > ~/p.input.$$
echo "sites $OUT" >> ~/p.input.$$
echo "color black" >> ~/p.input.$$
echo "size 1" >> ~/p.input.$$
echo "desc y" >> ~/p.input.$$
echo "end" >> ~/p.input.$$
# run p.map
#p.select -q painter=ppm
p.select -q painter=preview
p.map input=~/p.input.$$
# ppmtopgm ~/paint.ppm | pgmtops -rle -scale 0.7 > $1.ps
rm -f ~/p.input.$$