[GRASS-dev] Re: windows binaries

Michael Barton michael.barton at asu.edu
Mon Nov 13 19:31:05 EST 2006


Here is an updated version of d.vect.thematic for any of you to try if you
want. It is completely untested because we haven't yet been able to compile
6.3 on our new FC6 workstation with the new g.pnmcomp. We hope to get there
tomorrow but are having trouble with a mesa Glw library.

Anyway, I tried to implement Glynn's suggestions. If anyone wants to drop
this in and try it, let me know if it works.

I've also included a diff if you prefer it that way.

Michael
__________________________________________
Michael Barton, Professor of Anthropology
School of Human Evolution & Social Change
Center for Social Dynamics and Complexity
Arizona State University

phone: 480-965-6213
fax: 480-965-7671
www: http://www.public.asu.edu/~cmbarton


> From: Glynn Clements <glynn at gclements.plus.com>
> Date: Mon, 13 Nov 2006 08:28:04 +0000
> To: <mlennert at club.worldonline.be>
> Cc: Paul Kelly <paul-grass at stjohnspoint.co.uk>, Michael Barton
> <michael.barton at asu.edu>, Hamish <hamish_nospam at yahoo.com>,
> <grass-dev at grass.itc.it>
> Subject: Re: [GRASS-dev] Re: windows binaries
> 
> 
> Moritz Lennert wrote:
> 
>>>> 3. At the end of the script:
>>>> 
>>>> if [ $GRASS_RENDER_IMMEDIATE = TRUE ] ; then
>>>>   if [ $GRASS_TRANSPARENT = TRUE ] ; then
>>>>     g.pnmcomp \
>>>> output=$imgbase.ppm \
>>>> width=$GRASS_WIDTH \
>>>> height=$GRASS_HEIGHT \
>>>> input=$imgbase.1.ppm,$imgbase.2.ppm \
>>>> mask=$imgbase.1.pgm,$imgbase.2.pgm
>>>>   else
>>>>     g.pnmcomp \
>>>> output=$imgbase.ppm \
>>>> width=$GRASS_WIDTH \
>>>> height=$GRASS_HEIGHT \
>>>> input=$imgbase.1.ppm,$imgbase.2.ppm
>>>>   fi
>>>> fi
>>> 
>>> This overlays the intermediate files, with the result going to
>>> $GRASS_PNGFILE.
>> 
>> I imagine the fact that this is limited to two intermediate files is only
>> for example purposes.
> 
> Correct.
> 
>> As you cannot predict how many intermediate files
>> you will have, you would probably have to create the list of intermediate
>> files before and then do something like:
>> 
>> input=ListOfPPM
>> mask=ListOfPGM
> 
> Correct.
> 
> -- 
> Glynn Clements <glynn at gclements.plus.com>

-------------- next part --------------
#!/bin/sh
#
############################################################################
#
# MODULE:       d.vect.thematic
# AUTHOR(S):	Michael Barton, Arizona State University with contributions
#               by Martin Landa, Jachym Cepicky, Daniel Calvelo Aros and Moritz Lennert
# PURPOSE:	    Displays thematic vector map with graduated colors
#               or graduated points and line thickneses
# COPYRIGHT:	(C) 2006 by the GRASS Development Team
#
#		This program is free software under the GNU General Public
#		License (>=v2). Read the file COPYING that comes with GRASS
#		for details.
#
#############################################################################


#%Module
#%  description: Displays thematic vectormap
#%  keywords: display, legend
#%End
#%option
#% key: map
#% type: string
#% gisprompt: old,vector,vector
#% description: Vector map to display thematically
#% required : yes
#%end
#%option
#% key: type
#% type: string
#% description: Vector map type
#% options: area,point,centroid,line,boundary
#% answer: area
#% required : yes
#%end
#%option
#% key: column
#% type: string
#% description: Attribute column to use for thematic display (must be numeric)
#% required : yes
#%end
#%option
#% key: themetype
#% type: string
#% options: graduated_colors,graduated_points,graduated_lines
#% answer: graduated_colors
#% description: Type of thematic display
#% required : yes
#%end
#%option
#% key: themecalc
#% type: string
#% options: interval,std_deviation,quartiles,custom_breaks
#% answer: interval
#% description: Thematic divisions of data for display
#% required : yes
#%end
#%option
#% key: breakpoints
#% type: string
#% description: Break points for custom breaks option. Separate values by spaces. (0 10 20 30 ...)
#% required : no
#%end
#%option
#% key: layer
#% type: integer
#% description: Layer to use for thematic display
#% answer: 1
#% required : no
#%end
#%option
#% key: icon
#% type: string
#% description: Vector point icon for point data
#% options: basic/box,basic/circle,basic/cross2,basic/diamond,basic/star,basic/cross1,basic/x
#% answer: basic/circle
#% required : no
#%end
#%option
#% key: size
#% type: double
#% description: Icon size for point data (minimum icon size/line width for graduated points/lines)
#% answer: 5
#% required : no
#%end
#%option
#% key: maxsize
#% type: double
#% description: Maximum icon size/line width for graduated points and lines
#% answer: 20
#% required : no
#%end
#%option
#% key: nint
#% type: integer
#% description: Number of classes for interval theme (integer)
#% answer: 4
#% required : no
#%end
#%option
#% key: colorscheme
#% type: string
#% description: Color scheme for graduated color mapping (select 'single_color' for graduated point/line display)
#% options: blue-red,red-blue,green-red,red-green,blue-green,green-blue,cyan-yellow,yellow-cyan,custom_gradient,single_color
#% answer: blue-red
#% required : yes
#%end
#% option
#% key: pointcolor
#% type: string
#% description: Color for graduated points map (grass named color or R:G:B triplet). Set color scheme to single color.
#% answer: 255:0:0
#% required : no
#%end
#% option
#% key: linecolor
#% type: string
#% description: Color for graduated lines or point/area outlines (grass named color or R:G:B triplet). Set color scheme to single color.
#% answer: 0:0:0
#% required : no
#%end
#% option
#% key: startcolor
#% type: string
#% description: Beginning color for custom color gradient. Must be expressed as R:G:B triplet.
#% answer: 255:0:0
#% required : no
#%end
#% option
#% key: endcolor
#% type: string
#% description: Ending color for custom color gradient. Must be expressed as R:G:B triplet
#% answer: 0:0:255
#% required : no
#%end
#% option
#% key: monitor
#% type: string
#% description: Select x11 display monitor for legend
#% options: x0,x1,x2,x3,x4,x5,x6,none
#% answer: x1
#% required : no
#%end
#%option
#% key: group
#% type: string
#% gisprompt: new_file,file,group
#% description: Name of group file where thematic map commands will be saved
#% required : no
#%end
#%option
#% key: where
#% type: string
#% description: WHERE conditions of SQL statement without 'where' keyword
#% required : no
#%end
#%option
#% key: psmap
#% type: string
#% description: Root for the name of psmap instruction files to be in current directory (if not set, no psmap instruction files will be created)
#% required : no
#%end
#%flag
#% key: f
#% description: Only draw fills (no outlines) for areas and points
#%end
#%flag
#% key: u
#% description: Update color values to GRASSRGB column in attribute table
#%end
#%flag 
#%key: l
#%description: Create graphic legend in x11 display monitor
#%end
#%flag 
#%key: s
#%description: Use with GIS Manager (special legend and display output)
#%end
#%flag 
#%key: m
#%description: Use math notation brackets in legend
#%end
#%flag 
#%key: g
#%description: Save thematic map commands to group file for GIS Manager
#%end

if  [ -z "$GISBASE" ] ; then
    echo "You must be in GRASS GIS to run this program."
 exit 1
fi   

if [ "$1" != "@ARGS_PARSED@" ] ; then
    exec g.parser "$0" "$@"
fi

PROG=`basename $0`

#### check if we have awk
if [ ! -x "`which awk`" ] ; then
    echo "$PROG: awk required, please install awk or gawk first" 2>&1
    exit 1
fi

# setting environment, so that awk works properly in all languages
unset LC_ALL
export LC_NUMERIC=C

# initialize PPM file path for output and compositing with direct rendering
# (not using the PNG driver). Needed when script run within GIS Manager and Windows

if [ $GRASS_RENDER_IMMEDIATE = TRUE ] ; then
  imgbase=${GRASS_PNGFILE%.ppm}
  rendmap=1
fi


# check column type
COLTYPE="`v.info -c $GIS_OPT_MAP layer=1 2> /dev/null | grep -w $GIS_OPT_COLUMN | cut -d'|' -f1 | tr -s '[:upper:]' '[:lower:]'`"

#COLTYPE=... 
if [ -z "$COLTYPE" ] ; then 
   echo "ERROR: No such column [$GIS_OPT_COLUMN]" 
   exit 1 
fi 

if [ "$COLTYPE" = "integer" -o "$COLTYPE" = "double precision" ] ; then
	echo ""
else
	echo "ERROR: Column <$GIS_OPT_COLUMN> is of type <$COLTYPE> which is not numeric."
	exit 1
fi

# create temporary file to hold output from v.univar.sh
TMP1="`g.tempfile pid=$$`"
if [ $? -ne 0 ] || [ -z "$TMP1" ] ; then
    echo "ERROR: unable to create temporary file for statistics" 1>&2
    exit 1
fi

# create temporary file to hold d.graph commands for legend
TMP2="`g.tempfile pid=$$`"
if [ $? -ne 0 ] || [ -z "$TMP2" ] ; then
    echo "ERROR: unable to create temporary file for legend" 1>&2
    exit 1
fi

# Create temporary file to commands for GIS Manager group
TMP3="`g.tempfile pid=$$`"
if [ $? -ne 0 ] || [ -z "$TMP3" ] ; then
    echo "ERROR: unable to create temporary file for group" 1>&2
    exit 1
fi

# Create temporary file for commands for ps.map map file
TMP4="`g.tempfile pid=$$`"
if [ $? -ne 0 ] || [ -z "$TMP4" ] ; then
    echo "ERROR: unable to create temporary file for ps.map legend" 1>&2
    exit 1
fi

# Create temporary file for commands for ps.map legend file
TMP5="`g.tempfile pid=$$`"
if [ $? -ne 0 ] || [ -z "$TMP5" ] ; then
    echo "ERROR: unable to create temporary file for ps.map legend" 1>&2
    exit 1
fi

# create file to hold elements for GIS Manager legend
TMP6="`g.tempfile pid=$$`"
if [ $? -ne 0 ] || [ -z "$TMP6" ] ; then
    echo "ERROR: unable to create temporary file for GIS Manager legend" 1>&2
    exit 1
fi


# Set display variables for group
atype=0
ptype=0
ctype=0
ltype=0
btype=0

case "$GIS_OPT_TYPE" in
    "area" ) atype=1 ;; 
    "point" )  ptype=1 ;;
    "centroid" ) ctype=1 ;;
    "line" ) ltype=1 ;;
    "boundary" ) btype=1 ;;
esac

cleanup()
{
    \rm -f $TMP1 $TMP1.sort
    \rm -f $TMP2 $TMP2.sort
    \rm -f $TMP3 $TMP3.sort
    \rm -f $TMP4 $TMP4.sort
    \rm -f $TMP5 $TMP5.sort
    \rm -f $TMP6 $TMP6.sort
}

# what to do in case of user break:
exitprocedure()
{
    echo "User break!"
    cleanup
    exit 1
}
# shell check for user break (signal list: trap -l)
trap "exitprocedure" 2 3 15

# identify current monitor or start monitor
currmon=`eval d.mon -L | grep "(selected)" | awk '{print $1}'`

if [ -z $currmon ] ; then
	echo ""
	echo "*** You must open a display monitor ***"
	echo ""
fi



table=`v.db.connect $GIS_OPT_MAP -g | grep -w $GIS_OPT_LAYER | awk '{print $2}'`
database=`v.db.connect $GIS_OPT_MAP -g | grep -w $GIS_OPT_LAYER | awk '{print $4}'`
driver=`v.db.connect $GIS_OPT_MAP -g | grep -w $GIS_OPT_LAYER | awk '{print $5}'`

if [ -z "$table" ]
    then
    echo "No table connected or layer <$GIS_OPT_LAYER> doesn't exist!"
    exit 1
 fi

# update color values to the table?
if [ "$GIS_FLAG_U" -eq 1 ] ; then
    # test, if the column GRASSRGB is in the table
    if [ "`db.columns table=$table database=$database driver=$driver| grep -i grassrgb`" == "" ] ; then
        echo "Creating column 'grassrgb' in table '$table'"
        echo "ALTER TABLE $table ADD COLUMN grassrgb varchar(11)" | db.execute database=$database
    fi
fi

# Group name
if [ -z "$GIS_OPT_GROUP" ] ; then
    group="themes"
else
    group=$GIS_OPT_GROUP
fi

echo "Group $group" > "$TMP3"

# Calculate statistics for thematic intervals
if [ -z "$GIS_OPT_WHERE" ] ; then
  v.univar.sh -e database=$database table=$table driver=$driver column=$GIS_OPT_COLUMN > "$TMP1"
else
  v.univar.sh -e database=$database table=$table driver=$driver column=$GIS_OPT_COLUMN where="$GIS_OPT_WHERE" > "$TMP1"
fi
  
min="`grep 'Minimum:' $TMP1 | sed s/Minimum://`"
max="`grep 'Maximum:' $TMP1 | sed s/Maximum://`"
mean="`grep 'Mean:' $TMP1 | sed s/Mean://`"
sd="`grep 'Standard deviation:' $TMP1 | sed s/'Standard deviation:'//`"
q1="`grep '1st Quartile:' $TMP1 | sed s/'1st Quartile:'//`"
q2="`grep 'Median' $TMP1 | sed s/'Median (.* N):'//`"
q3="`grep '3rd Quartile:' $TMP1 | sed s/'3rd Quartile:'//`"
q4=$max
ptsize=$GIS_OPT_SIZE

if [ -n "$GIS_OPT_BREAKPOINTS" ] && [ "$GIS_OPT_THEMECALC" != "custom_breaks" ] ; then
    echo "WARNING: Custom breakpoints ignored due to themecalc setting."
fi

# set interval for each thematic map calculation type
case "$GIS_OPT_THEMECALC" in 
"interval" )
    numint=$GIS_OPT_NINT
    step=`echo $min $max $numint | awk '{print (($2 - $1) / $3)}'`
    breakpoints=`echo $min $max $numint | awk '{for(i=0;i<$3;i++){printf $1+($2-$1)/$3*i " "}printf $2}'`
    annotations=""
    ;;

"std_deviation" )
    # 2 standard deviation units on either side of mean,
    # plus min to -2 sd units and +2 sd units to max, if applicable
    breakpoints=`echo $min $max $mean $sd | awk '{printf $1;for(i=-2;i<=2;i++){ith=$3+i*$4;if($1<ith && $2>ith){printf " " ith}}print " " $2}'`
    annotations=`echo $min $max $mean $sd | awk '{printf "";for(i=-2;i<=2;i++){ith=$3+i*$4;if($1<ith && $2>ith){if(i!=0){printf ";"((i<0)?"":"+") i "sd"} }}print ";"}'`
    numint=`echo $breakpoints | awk '{print NF-1}'`
    ;;

"quartiles" )
    numint=4
    # one for each quartile
    breakpoints="$min $q1 $q2 $q3 $max"
    annotations=" q1; q2; q3; q4"
    ;;

"custom_breaks" )
	if [ -z "$GIS_OPT_BREAKPOINTS" ] ; then
	    breakpoints=`cat | awk '{gsub("[^0-9., ]","",$0);print}'`
	else
		breakpoints="$GIS_OPT_BREAKPOINTS"
	fi
    numint=`echo $breakpoints|awk '{print NF-1}'`
    annotations=""
    ;;

 "*")
    echo "Unknown themecalc type"
    cleanup
    exit
esac

pointstep=`echo $GIS_OPT_MAXSIZE $ptsize $numint | awk '{print (($1 - $2) / ($3-1))}'`

# legend title
echo "color 0:0:0" > "$TMP2"
echo "size 2 2" >> "$TMP2"
echo "move 1 95" >> "$TMP2"
echo "text Thematic map legend for column $GIS_OPT_COLUMN of map $GIS_OPT_MAP" >> "$TMP2"
echo "size 1.5 1.8" >> "$TMP2"
echo "move 4 90" >> "$TMP2"
echo "text Value range: $min - $max" >> "$TMP2"

echo "title - - - {Thematic map legend for column $GIS_OPT_COLUMN of map $GIS_OPT_MAP}" > "$TMP6"

echo "text 1% 95% Thematic map legend for column $GIS_OPT_COLUMN of map $GIS_OPT_MAP" >> "$TMP5"
echo "  ref bottom left" >> $TMP5
echo "end" >> $TMP5
echo "text 4% 90% Value range: $min - $max" >> "$TMP5"
echo "  ref bottom left" >> $TMP5
echo "end" >> $TMP5

echo "Thematic map legend for column $GIS_OPT_COLUMN of map $GIS_OPT_MAP"
echo ""
echo "Value range: $min - $max"

# graduated color thematic mapping

if [ "$GIS_OPT_THEMETYPE" = "graduated_colors" ] ; then
    # set color schemes for graduated color maps
    case "$GIS_OPT_COLORSCHEME" in
		"blue-red" )
	    startc="0:0:255"
	    endc="255:0:0"
	    ;;    
        "red-blue" )
	    startc="255:0:0"
	    endc="0:0:255"
	    ;;
        "green-red" )
	    startc="0:255:0"
	    endc="255:0:0"
	    ;;
        "red-green" )
	    startc="255:0:0"
	    endc="0:255:0"
	    ;;
        "blue-green" )
	    startc="0:0:255"
	    endc="0:255:0"
	    ;;
		"green-blue" )
	    startc="0:255:0"
	    endc="0:0:255"
	    ;;
		"cyan-yellow" )
	    startc="0:255:255"
	    endc="255:255:0"
	    ;;
		"yellow-cyan" )
	    startc="255:255:0"
	    endc="0:255:255"
	    ;;
        "custom_gradient" )
	    startc="$GIS_OPT_STARTCOLOR"
	    endc="$GIS_OPT_ENDCOLOR"
	    ;;
        "single_color" )
	    if [ "$GIS_OPT_THEMETYPE" = "graduated_points" ]; then
			startc="$GIS_OPT_LINECOLOR"
			endc="$GIS_OPT_LINECOLOR"
	    else
			startc="$GIS_OPT_POINTCOLOR"
			endc="$GIS_OPT_POINTCOLOR"
	    fi
	    ;;
        "*")
	    echo "This should not happen: gparser error. Unknown color scheme $GIS_OPT_COLORSCHEME"
	    cleanup
	    exit
	    ;;
    esac

    for i in 1 2 3; do
	eval color$i=`echo $startc | cut -d':' -f$i`
	eval endcolor$i=`echo $endc | cut -d':' -f$i`
    done

    #The number of color steps is one less then the number of classes
    nclrstep=`expr $numint - 1`
    
    clrstep1=`expr \( $color1 - $endcolor1 \) / $nclrstep`
    clrstep2=`expr \( $color2 - $endcolor2 \) / $nclrstep`
    clrstep3=`expr \( $color3 - $endcolor3 \) / $nclrstep`

    themecolor="$startc"

    # display graduated color themes
    if [ "$GIS_OPT_THEMECALC" = "interval" ] ; then
        echo "move 4 87" >> "$TMP2"
        echo "text Mapped by $numint intervals of $step" >> "$TMP2"

		echo "subtitle - - - {Mapped by $numint intervals of $step}" >> "$TMP6"

        echo "text 4% 87% Mapped by $numint intervals of $step" >> "$TMP5"
        echo "  ref bottom left" >> $TMP5
        echo "end" >> $TMP5

        echo "Mapped by $numint intervals of $step"
    fi

    # display graduated color themes for standard deviation units
    if [ "$GIS_OPT_THEMECALC" = "std_deviation" ] ; then

        echo "move 4 87" >> "$TMP2"
        echo "text Mapped by standard deviation units of $sd (mean =$mean)" >> "$TMP2"

		echo "subtitle - - - {Mapped by standard deviation units of $sd (mean =$mean)}" >> "$TMP6"

        echo "text 4% 87% Mapped by standard deviation units of $sd (mean =$mean)" >> "$TMP5"
        echo "  ref bottom left" >> $TMP5
        echo "end" >> $TMP5

        echo "Mapped by standard deviation units of $sd (mean =$mean)"
    fi

    # display graduated color themes for quartiles
    if [ "$GIS_OPT_THEMECALC" = "quartiles" ] ; then

        echo "move 4 87" >> "$TMP2"
        echo "text Mapped by quartiles (median =$q2)" >> "$TMP2"

		echo "subtitle - - - {Mapped by quartiles (median =$q2)}" >> "$TMP6"

        echo "text 4% 87% Mapped by quartiles (median =$q2)" >> "$TMP5"
        echo "  ref bottom left" >> $TMP5
        echo "end" >> $TMP5

	

        echo "Mapped by quartiles (median =$q2)"
    fi

    echo "move 4 83" >> "$TMP2"
    echo "text Color" >> "$TMP2"
    echo "move 14 83" >> "$TMP2"
    echo "text Value" >> "$TMP2"
    echo "move 4 80" >> "$TMP2"
    echo "text =====" >> "$TMP2"
    echo "move 14 80" >> "$TMP2"
    echo "text ============" >> "$TMP2"


    echo "text 4% 83% Color" >> "$TMP5"
    echo "  ref bottom left" >> $TMP5
    echo "end" >> $TMP5
    echo "text 14% 83% Value" >> "$TMP5"
    echo "  ref bottom left" >> $TMP5
    echo "end" >> $TMP5
    echo "text 4% 80% =====" >> "$TMP5"
    echo "  ref bottom left" >> $TMP5
    echo "end" >> $TMP5
    echo "text 14% 80% ============" >> "$TMP5"
    echo "  ref bottom left" >> $TMP5
    echo "end" >> $TMP5


    echo ""
    echo "Color(R:G:B)" "Value" | awk '{print $1 "\t" $2}'
    echo "============" "==========" | awk '{print $1 "\t" $2}'

    line1=78
    line2=76
    line3=75

    i=1
    first="true"

	# if running in GUI, turn off immediate mode rendering so that the
	# iterated d.vect commands will composite using the display driver
	if [ "$GIS_FLAG_S"  -eq 1 ] ; then
		rendermode=$GRASS_RENDER_IMMEDIATE
		autowrite=$GRASS_PNG_AUTO_WRITE
		export GRASS_RENDER_IMMEDIATE=FALSE
		export GRASS_PNG_AUTO_WRITE=FALSE
		d.mon start=PNG
	fi

    while [ $i -le $numint ]     
        do 
        if [ "$GIS_FLAG_M" -eq 1 ] ; then
        # math notation
           if [ "$first" = "true" ] ; then
                closebracket="]"
                openbracket="["
                mincomparison=">="
                first="false"
            else
                closebracket="]"
                openbracket="]"
                mincomparison=">"            
            fi
        else
            closebracket="" 
            openbracket=""
            if [ "$first" = "true" ] ; then
                mincomparison=">="
                first="false"
            else
                mincomparison=">"            
            fi
        fi

        themecolor="$color1:$color2:$color3"
        if [ "$GIS_FLAG_F" -eq 1 ] ; then
        	linecolor="none"
        else
        	if [ "$GIS_OPT_TYPE" = "line" -o "$GIS_OPT_TYPE" = "boundary" ] ; then
         	   linecolor=$themecolor
        	else
        	    linecolor="$GIS_OPT_LINECOLOR"
        	fi
        fi
      
        rangemin=`echo $i $breakpoints | awk '{t=$1+1;print $t}'`
        rangemax=`echo $i $breakpoints | awk '{t=$1+2;print $t}'`

        if [ -z "$annotations" ]; then
            extranote=""
        else
            extranote=`echo $annotations| cut -d';' -f$i`
        fi

        echo "color $themecolor" >> "$TMP2"
        echo "polygon" >> "$TMP2"
        echo "5 $line1" >> "$TMP2"
        echo "8 $line1" >> "$TMP2"
        echo "8 $line3" >> "$TMP2"
        echo "5 $line3" >> "$TMP2"
        echo "color $linecolor" >> "$TMP2"
		echo "move 5 $line1" >> "$TMP2"
		echo "draw 8 $line1" >> "$TMP2"
		echo "draw 8 $line3" >> "$TMP2"
		echo "draw 5 $line3" >> "$TMP2"
		echo "draw 5 $line1" >> "$TMP2"
        echo "move 14 $line2" >> "$TMP2"
        echo "color 0:0:0" >> "$TMP2"
        echo "text $openbracket$rangemin - $rangemax$closebracket $extranote"  >> "$TMP2"

		echo "area $themecolor $linecolor - {$openbracket$rangemin - $rangemax$closebracket $extranote}" >> "$TMP6"

        if [ "$GIS_OPT_TYPE" = "line" -o "$GIS_OPT_TYPE" = "boundary" ] ; then
		  echo "line 5% $line1% 8% $line1%" >> $TMP5
		  echo "  color $linecolor" >> $TMP5
		  echo "end" >> $TMP5
          echo "text 14% $line1% $openbracket$rangemin - $rangemax$closebracket $extranote"  >> "$TMP5"
          echo "  ref center left" >> $TMP5
          echo "end" >> $TMP5
        elif [ "$GIS_OPT_TYPE" = "point" -o "$GIS_OPT_TYPE" = "centroid" ] ; then
          echo "point 8% $line1%" >> "$TMP5"
		  echo "  color $linecolor" >> "$TMP5"
		  echo "  fcolor $themecolor" >> "$TMP5"
		  echo "  size $GIS_OPT_SIZE" >> "$TMP5"
		  echo "  symbol $GIS_OPT_ICON" >> "$TMP5"
		  echo "end" >> "$TMP5"
          echo "text 14% $line1% $openbracket$rangemin - $rangemax$closebracket $extranote"  >> "$TMP5"
          echo "  ref center left" >> $TMP5
          echo "end" >> $TMP5
		else
          echo "rectangle 5% $line1% 8% $line3%" >> "$TMP5"
		  echo "  color 0:0:0" >> "$TMP5"
		  echo "  fcolor $themecolor" >> "$TMP5"
		  echo "end" >> "$TMP5"
          echo "text 14% $line3% $openbracket$rangemin - $rangemax$closebracket $extranote"  >> "$TMP5"
          echo "  ref bottom left" >> $TMP5
          echo "end" >> $TMP5
        fi
	


        echo $themecolor@$rangemin@$rangemax@$extranote@$openbracket@$closebracket | awk -F@ '{print $1 "\t\t" $5$2" - "$3$6" "$4}'
		if [ -z "$GIS_OPT_WHERE" ] ; then
            sqlwhere="$GIS_OPT_COLUMN $mincomparison $rangemin and $GIS_OPT_COLUMN<=$rangemax"
		else
            sqlwhere="$GIS_OPT_COLUMN $mincomparison $rangemin and $GIS_OPT_COLUMN<=$rangemax AND $GIS_OPT_WHERE"
		fi

        # update color to database?
        if [ $GIS_FLAG_U -eq 1 ] ; then
            echo "UPDATE $table SET GRASSRGB = '$themecolor' WHERE\
                $sqlwhere" | db.execute database=$database
        fi
               
        # Create group for GIS Manager
        if [ "$GIS_FLAG_G" -eq 1 ] ; then
        
            # change rgb colors to hex
            xthemecolor=`echo $themecolor | awk -F: '{printf("#%02X%02X%02X\n",$1,$2,$3)}'`
#            xlinecolor=`echo $linecolor | awk -F: '{printf("#%02X%02X%02X\n",$1,$2,$3)}'`
            
            if [ "$linecolor" = "black" ] ; then
                xlinecolor="#000000"
            else
                xlinecolor=$xthemecolor
            fi

            # create group entry
            echo "  _check 1" >> "$TMP3"
            echo "  Vector $GIS_OPT_COLUMN = $rangemin - $rangemax" >> "$TMP3"
            echo "    _check 1" >> "$TMP3"
            echo "    map $GIS_OPT_MAP" >> "$TMP3"
            echo "    display_shape 1" >> "$TMP3"
            echo "    display_cat 0" >> "$TMP3"
            echo "    display_topo 0" >> "$TMP3"
            echo "    display_dir 0" >> "$TMP3"
            echo "    display_attr 0" >> "$TMP3"
            echo "    type_point $ptype" >> "$TMP3"
            echo "    type_line $ltype" >> "$TMP3"
            echo "    type_boundary $btype" >> "$TMP3"
            echo "    type_centroid $ctype" >> "$TMP3"
            echo "    type_area $atype" >> "$TMP3"
            echo "    type_face 0" >> "$TMP3"
            echo "    color $xlinecolor" >> "$TMP3"
            echo "    fcolor $xthemecolor" >> "$TMP3"
            echo "    width $ptsize" >> "$TMP3"
            echo "    _use_fcolor 1" >> "$TMP3"
            echo "    lcolor #000000" >> "$TMP3"
            echo "    sqlcolor 0" >> "$TMP3"
            echo "    icon $GIS_OPT_ICON" >> "$TMP3"
            echo "    size $ptsize" >> "$TMP3"
            echo "    field $GIS_OPT_LAYER" >> "$TMP3"
            echo "    lfield $GIS_OPT_LAYER" >> "$TMP3"
            echo "    attribute" >> "$TMP3"
            echo "    xref left" >> "$TMP3"
            echo "    yref center" >> "$TMP3"
            echo "    lsize 8" >> "$TMP3"
            echo "    cat" >> "$TMP3"
            echo "    where "$sqlwhere >> "$TMP3"
            echo "    _query_text 0" >> "$TMP3"
            echo "    _query_edit 1" >> "$TMP3"
            echo "    _use_where 1" >> "$TMP3"
            echo "    minreg" >> "$TMP3"
            echo "    maxreg" >> "$TMP3"
            echo "    _width 0.1" >> "$TMP3"
            echo "  End" >> "$TMP3"
        fi
        
        
        # display theme vector map
        d.vect map=$GIS_OPT_MAP type=$GIS_OPT_TYPE layer=$GIS_OPT_LAYER \
            where="$sqlwhere" \
            color=$linecolor fcolor=$themecolor icon=$GIS_OPT_ICON size=$ptsize

		# setting output for GIS Manager
		if [ $GRASS_RENDER_IMMEDIATE = TRUE ] ; then
		  mv $imgbase.ppm $imgbase.$num.ppm	# each image needs a different number
		  if [ $GRASS_TRANSPARENT = TRUE ] ; then
			mv $imgbase.pgm $imgbase.$rendmap.pgm
		  fi
		  rendmap+=1
		fi

        if [ "$GIS_OPT_TYPE" = "line" -o "$GIS_OPT_TYPE" = "boundary" ] ; then
		  echo "vlines $GIS_OPT_MAP" >> $TMP4
		  echo "  type $GIS_OPT_TYPE" >> $TMP4
		  echo "  layer $GIS_OPT_LAYER" >> $TMP4
		  echo "  where $sqlwhere" >> $TMP4
		  echo "  color $linecolor" >> $TMP4
		  echo "  label $rangemin - $rangemax" >> $TMP4
		  echo "end" >> $TMP4
        elif [ "$GIS_OPT_TYPE" = "point" -o "$GIS_OPT_TYPE" = "centroid" ] ; then
		  echo "vpoints $GIS_OPT_MAP" >> $TMP4
		  echo "  type $GIS_OPT_TYPE" >> $TMP4
		  echo "  layer $GIS_OPT_LAYER" >> $TMP4
		  echo "  where $sqlwhere" >> $TMP4
		  echo "  color $linecolor" >> $TMP4
		  echo "  fcolor $themecolor" >> $TMP4
		  echo "  symbol $GIS_OPT_ICON" >> $TMP4
		  echo "  label $rangemin - $rangemax" >> $TMP4
		  echo "end" >> $TMP4
		else
		  echo "vareas $GIS_OPT_MAP" >> $TMP4
		  echo "  layer $GIS_OPT_LAYER" >> $TMP4
		  echo "  where $sqlwhere" >> $TMP4
		  echo "  color $linecolor" >> $TMP4
		  echo "  fcolor $themecolor" >> $TMP4
		  echo "  label $rangemin - $rangemax" >> $TMP4
		  echo "end" >> $TMP4
		fi


        # increment for next theme
        let i=i+1
		if [ $i = $numint ] ; then
		  let color1=$endcolor1
		  let color2=$endcolor2
		  let color3=$endcolor3
		else
          let color1=color1-clrstep1
          let color2=color2-clrstep2
          let color3=color3-clrstep3
		fi
        let line1=line1-4
        let line2=line2-4
        let line3=line3-4
    done
    
    # reset rendering for GUI use
	if [ "$GIS_FLAG_S"  -eq 1 ] ; then
		d.mon stop=PNG
		d.mon select=$currmon
		export GRASS_RENDER_IMMEDIATE=$rendermode
		export GRASS_PNG_AUTO_WRITE=$autowrite
	fi
fi

#graduated points and line widths thematic mapping

if [ "$GIS_OPT_THEMETYPE" = "graduated_points" -o "$GIS_OPT_THEMETYPE" = "graduated_lines" ] ; then

    #display graduated points/lines by intervals
    if [ "$GIS_OPT_THEMECALC" = "interval" ] ; then
        echo "move 4 87" >> "$TMP2"
        echo "text Mapped by $numint intervals of $step" >> "$TMP2"

		echo "subtitle - - - {Mapped by $numint intervals of $step}" >> "$TMP6"

        echo "text 4% 87% Mapped by $numint intervals of $step" >> "$TMP5"
        echo "  ref bottom left" >> $TMP5
        echo "end" >> $TMP5

        echo "Mapped by $numint intervals of $step"
    fi
        
    # display graduated points/lines for standard deviation units
    if [ "$GIS_OPT_THEMECALC" = "std_deviation" ] ; then

        echo "move 4 87" >> "$TMP2"
        echo "text Mapped by standard deviation units of $sd (mean =$mean)" >> "$TMP2"

		echo "subtitle - - - {Mapped by standard deviation units of $sd (mean =$mean)}" >> "$TMP6"

        echo "text 4% 87% Mapped by standard deviation units of $sd (mean =$mean)" >> "$TMP5"
		echo "  ref bottom left" >> $TMP5
		echo "end" >> $TMP5
	
        echo "Mapped by standard deviation units of $sd (mean =$mean)"
    fi
    
    # display graduated points/lines for quartiles
    if [ "$GIS_OPT_THEMECALC" = "quartiles" ] ; then

        echo "move 4 87" >> "$TMP2"
        echo "text Mapped by quartiles (median =$q2)" >> "$TMP2"

		echo "subtitle - - - {Mapped by quartiles (median =$q2)}" >> "$TMP6"

        echo "text 4% 87% Mapped by quartiles (median =$q2)" >> "$TMP5"
        echo "  ref bottom left" >> $TMP5
        echo "end" >> $TMP5

        echo "Mapped by quartiles (median =$q2)"
    fi
        
    line1=76
    line2=75
    echo "move 4 83" >> "$TMP2"
    echo "text Size/width" >> "$TMP2"
    echo "move 25 83" >> "$TMP2"
    echo "text Value" >> "$TMP2"
    echo "move 4 80" >> "$TMP2"
    echo "text ==============" >> "$TMP2"
    echo "move 25 80" >> "$TMP2"
    echo "text ==============" >> "$TMP2"


    echo "text 4% 83% Icon size" >> "$TMP5"
    echo "  ref bottom left" >> $TMP5
    echo "end" >> $TMP5
    echo "text 25% 83% Value" >> "$TMP5"
    echo "  ref bottom left" >> $TMP5
    echo "end" >> $TMP5
    echo "text 4% 80% ============" >> "$TMP5"
    echo "  ref bottom left" >> $TMP5
    echo "end" >> $TMP5
    echo "text 25% 80% ============" >> "$TMP5"
    echo "  ref bottom left" >> $TMP5
    echo "end" >> $TMP5

    

    echo ""
    echo "Size/width" "Value" | awk '{print $1 " " $2"\t"$3}'
    echo "==========" "=====" | awk '{print $1 "\t" $2}'

    themecolor=$GIS_OPT_POINTCOLOR
    
	if [ "$GIS_FLAG_F" -eq 1 ] ; then
		linecolor="none"
	else
		linecolor="$GIS_OPT_LINECOLOR"
	fi

    i=$numint
    ptsize=$GIS_OPT_MAXSIZE

	# if running in GUI, turn off immediate mode rendering so that the
	# iterated d.vect commands will composite using the display driver
#	if [ "$GIS_FLAG_S"  -eq 1 ] ; then
#		rendermode=$GRASS_RENDER_IMMEDIATE
#		autowrite=$GRASS_PNG_AUTO_WRITE
#		export GRASS_RENDER_IMMEDIATE=FALSE
#		export GRASS_PNG_AUTO_WRITE=FALSE
#		d.mon start=PNG
#	fi

    while [ $i -ge 1 ]     
        do 
        if [ "$GIS_FLAG_M" -eq 1 ] ; then
        # math notation
           if [ "$i" = "1" ] ; then
                closebracket="]"
                openbracket="["
                mincomparison=">="
            else
                closebracket="]"
                openbracket="]"
                mincomparison=">"            
            fi
        else
            closebracket="" 
            openbracket=""
            if [ "$i" = "1" ] ; then
                mincomparison=">="
            else
                mincomparison=">"            
            fi
        fi

        themecolor=$GIS_OPT_POINTCOLOR

		if [ "$GIS_FLAG_F" -eq 1 ] ; then
			linecolor="none"
		else
			linecolor="$GIS_OPT_LINECOLOR"
		fi
      
        rangemin=`echo $i $breakpoints | awk '{t=$1+1;print $t}'`
        rangemax=`echo $i $breakpoints | awk '{t=$1+2;print $t}'`

        if [ -z "$annotations" ]; then
            extranote=""
        else
            extranote=`echo $annotations| cut -d';' -f$i`
        fi            

        iconsize=`echo $ptsize | awk '{print int($1 / 2)}'`
        lineht=`echo $ptsize | awk '{print int($1 / 4)}'`
        if [ "$lineht" -lt "4" ] ; then
            lineht=4
        fi

		if [ "$GIS_OPT_THEMETYPE" = "graduated_lines" ]; then
	        echo "color $linecolor" >> "$TMP2"
			echo "line $themecolor $linecolor $ptsize {$openbracket$rangemin - $rangemax$closebracket $extranote}" >> "$TMP6"
	    else
			echo "color $themecolor" >> "$TMP2"
			echo "point $themecolor $linecolor $ptsize {$openbracket$rangemin - $rangemax$closebracket $extranote}" >> "$TMP6"
		fi

        echo "icon + $iconsize 5 $line1" >> "$TMP2"
        echo "color 0:0:0" >> "$TMP2"
        echo "move 10 $line2" >> "$TMP2"
        echo "text $ptsize pts" >> "$TMP2"
        echo "move 25 $line2" >> "$TMP2"
        echo "text $openbracket$rangemin - $rangemax$closebracket $extranote"  >> "$TMP2"

        echo "point 8% $line1%" >> "$TMP5"
		echo "  color $linecolor" >> "$TMP5"
		echo "  fcolor $themecolor" >> "$TMP5"
		echo "  size $iconsize" >> "$TMP5"
		echo "  symbol $GIS_OPT_ICON" >> "$TMP5"
		echo "end" >> "$TMP5"
        echo "text 25% $line1% $openbracket$rangemin - $rangemax$closebracket $extranote"  >> "$TMP5"
        echo "  ref center left" >> $TMP5
        echo "end" >> $TMP5

        echo $ptsize@$rangemin@$rangemax@$extranote@$openbracket@$closebracket | awk -F@ '{print $1 "\t\t" $5$2" - "$3$6" "$4}'

	if [ -z "$GIS_OPT_WHERE" ] ; then
           sqlwhere="$GIS_OPT_COLUMN $mincomparison $rangemin and $GIS_OPT_COLUMN<=$rangemax"
	else
           sqlwhere="$GIS_OPT_COLUMN $mincomparison $rangemin and $GIS_OPT_COLUMN<=$rangemax AND $GIS_OPT_WHERE"
	fi

        # update color to database?
        if [ $GIS_FLAG_U -eq 1 ] ; then
            echo "UPDATE $table SET GRASSRGB = '$themecolor' WHERE\
                $sqlwhere" | db.execute database=$database
        fi
      
        # Create group for GIS Manager
        if [ "$GIS_FLAG_G" -eq 1 ] ; then
        
            # change rgb colors to hex
            xthemecolor=`echo $themecolor | awk -F: '{printf("#%02X%02X%02X\n",$1,$2,$3)}'`
            xlinecolor="#000000"

            # create group entry
            echo "  _check 1" >> "$TMP3"
            echo "  Vector $GIS_OPT_COLUMN = $rangemin - $rangemax" >> "$TMP3"
            echo "    _check 1" >> "$TMP3"
            echo "    map $GIS_OPT_MAP" >> "$TMP3"
            echo "    display_shape 1" >> "$TMP3"
            echo "    display_cat 0" >> "$TMP3"
            echo "    display_topo 0" >> "$TMP3"
            echo "    display_dir 0" >> "$TMP3"
            echo "    display_attr 0" >> "$TMP3"
            echo "    type_point $ptype" >> "$TMP3"
            echo "    type_line $ltype" >> "$TMP3"
            echo "    type_boundary $btype" >> "$TMP3"
            echo "    type_centroid $ctype" >> "$TMP3"
            echo "    type_area $atype" >> "$TMP3"
            echo "    type_face 0" >> "$TMP3"
            echo "    color $xlinecolor" >> "$TMP3"
            echo "    width $ptsize" >> "$TMP3"
            echo "    fcolor $xthemecolor" >> "$TMP3"
            echo "    _use_fcolor 1" >> "$TMP3"
            echo "    lcolor #000000" >> "$TMP3"
            echo "    sqlcolor 0" >> "$TMP3"
            echo "    icon $GIS_OPT_ICON" >> "$TMP3"
            echo "    size $ptsize" >> "$TMP3"
            echo "    field $GIS_OPT_LAYER" >> "$TMP3"
            echo "    lfield $GIS_OPT_LAYER" >> "$TMP3"
            echo "    attribute" >> "$TMP3"
            echo "    xref left" >> "$TMP3"
            echo "    yref center" >> "$TMP3"
            echo "    lsize 8" >> "$TMP3"
            echo "    cat" >> "$TMP3"
            echo "    where "$sqlwhere >> "$TMP3"
            echo "    _query_text 0" >> "$TMP3"
            echo "    _query_edit 1" >> "$TMP3"
            echo "    _use_where 1" >> "$TMP3"
            echo "    minreg" >> "$TMP3"
            echo "    maxreg" >> "$TMP3"
            echo "    _width 0.1" >> "$TMP3"
            echo "  End" >> "$TMP3"
        fi
        
        #graduates line widths or point sizes

        if [ "$GIS_OPT_THEMETYPE" = "graduated_lines" ] ; then
        	d.vect map=$GIS_OPT_MAP type=$GIS_OPT_TYPE layer=$GIS_OPT_LAYER \
            where="$sqlwhere" \
            color=$linecolor fcolor=$themecolor icon=$GIS_OPT_ICON size=$ptsize \
            width=$ptsize
		else 
			d.vect map=$GIS_OPT_MAP type=$GIS_OPT_TYPE layer=$GIS_OPT_LAYER \
            where="$sqlwhere" \
            color=$linecolor fcolor=$themecolor icon=$GIS_OPT_ICON size=$ptsize
		fi

		# setting output for GIS Manager
		if [ $GRASS_RENDER_IMMEDIATE = TRUE ] ; then
		  mv $imgbase.ppm $imgbase.$num.ppm	# each image needs a different number
		  if [ $GRASS_TRANSPARENT = TRUE ] ; then
			mv $imgbase.pgm $imgbase.$rendmap.pgm
		  fi
		  rendmap+=1
		fi

	  echo "vpoints $GIS_OPT_MAP" >> $TMP4
	  echo "  type $GIS_OPT_TYPE" >> $TMP4
	  echo "  layer $GIS_OPT_LAYER" >> $TMP4
	  echo "  where $sqlwhere" >> $TMP4
	  echo "  color $linecolor" >> $TMP4
	  echo "  fcolor $themecolor" >> $TMP4
	  echo "  symbol $GIS_OPT_ICON" >> $TMP4
	  echo "  size $ptsize" >> $TMP4
	  echo "  label $rangemin - $rangemax" >> $TMP4
	  echo "end" >> $TMP4


        ptsize=`echo $ptsize $pointstep | awk '{print $1 - $2}'`

        let line1=line1-$lineht
        let line2=line2-$lineht
        let i=i-1
    done
    # reset rendering for GUI use
	if [ "$GIS_FLAG_S"  -eq 1 ] ; then
		d.mon stop=PNG
		d.mon select=$currmon
		export GRASS_RENDER_IMMEDIATE=$rendermode
		export GRASS_PNG_AUTO_WRITE=$autowrite
	fi

fi

# Create graphic legend
if [ "$GIS_FLAG_L" -eq 1 -a "$GIS_OPT_MONITOR" != "none" ] ; then
    echo ""
    echo ""
    if [ `eval d.mon -L | grep $GIS_OPT_MONITOR | awk '{print $5}'` = "not" ] ; then
        d.mon start=$GIS_OPT_MONITOR > /dev/null
    else 
        d.mon select=$GIS_OPT_MONITOR > /dev/null
        d.erase
    fi
    d.graph input=$TMP2
    d.mon select=$currmon
fi

# Create group file for GIS Manager
echo "End" >> "$TMP3"
if [ "$GIS_FLAG_G" -eq 1 ] ; then
    cat $TMP3 > $group".dm"
fi

# Create ps.map map file
echo "end" >> "$TMP4"
if [ "$GIS_OPT_PSMAP" ] ; then
    cat $TMP4 > $GIS_OPT_PSMAP.psmap
fi

# Create ps.map legend file
echo "end" >> "$TMP5"
if [ "$GIS_OPT_PSMAP" ] ; then
    cat $TMP5 > $GIS_OPT_PSMAP\_legend.psmap
fi

# Composite thematic map for GIS Manager
if [ $GRASS_RENDER_IMMEDIATE = TRUE ] ; then
	compmap="$imgbase.1.ppm"
	compmask="$imagebase.1.pgm"
	i=2
    while [ $i -le $rendmap ]     
        do 
        	compmap="$compmap,$imagebase.$i.ppm"
        	compmask="$compmask,$imagebase.$i.pgm"
        	i+=1
        done


	  if [ $GRASS_TRANSPARENT = TRUE ] ; then
			g.pnmcomp \
			output=$imgbase.ppm \
			width=$GRASS_WIDTH \
			height=$GRASS_HEIGHT \
			input=$compmap \
			mask=$compmask
	  else
			g.pnmcomp \
			output=$imgbase.ppm \
			width=$GRASS_WIDTH \
			height=$GRASS_HEIGHT \
			input=$compmap
	  fi
fi


# Create text file to use with d.graph in GIS Manager
if [ "$GIS_FLAG_S" -eq 1 ] ; then
	tmpdir=`eval dirname $TMP6`
	tlegfile="$tmpdir/gismlegend.txt"
#	echo $tlegfile > outtxt.txt
    cp $TMP6 $tlegfile
fi

cleanup
-------------- next part --------------
A non-text attachment was scrubbed...
Name: dvt_diff.txt
Type: application/octet-stream
Size: 2051 bytes
Desc: not available
Url : http://lists.osgeo.org/pipermail/grass-dev/attachments/20061113/04bc1afa/dvt_diff.obj


More information about the grass-dev mailing list