123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144 |
- #!/usr/bin/env python
- ##############################################################################
- # d.rast.leg (GRASS Shell Script)
- #
- # displays a raster map and its legend on a graphics window.
- #
- # Usage: d.rast.leg
- # or d.rast.leg help
- # or d.rast.leg rast_map [num_of_lines]
- #
- # Description: d.rast.leg clears the entire screen, divides it into a main
- # (left) and a minor (right) frames, and then display a raster
- # map in the main frame and the map legend in the minor frame.
- # The user can run the program interactively or
- # non-interactively.
- #
- # Parameters: rast_map A raster map to be displayed.
- #
- # num_of_lines Number of lines to appear in the legend.
- # If this number is not given, the legend frame
- # will display as many lines as number of
- # categories in the map, otherwise, it will
- # display the first num_of_lines minus 1
- # categories with the rest being truncated.
- #
- # Note: The user may adjust the num_of_lines parameter or the size of
- # graphics window to get an appropriate result.
- #
- # See also: d.rast, d.legend.
- #
- # Jianping Xu and Scott Madry, Rutgers University. October 19, 1993
- # Markus Neteler 8/2002: added simple d.legend logic
- # Markus Neteler 10/2003: added g.parser
- # Michael Barton 12/2004: remove reference to (null)
- # Glynn Clements 10/2008: converted to Python
- ##############################################################################
- #%Module
- #% description: Displays a raster map and its legend on a graphics window
- #% keywords: display
- #%End
- #%flag
- #% key: f
- #% description: Flip legend
- #%end
- #%flag
- #% key: n
- #% description: Omit entries with missing label
- #%end
- #%option
- #% key: map
- #% type: string
- #% gisprompt: old,cell,raster
- #% description: Name of raster map
- #% required : yes
- #%end
- #%option
- #% key: num_of_lines
- #% type: integer
- #% description: Number of lines to appear in the legend
- #% required : no
- #%end
- #%option
- #% key: rast
- #% type: string
- #% gisprompt: old,cell,raster
- #% description: Name of raster map to generate legend from
- #% required : no
- #%end
- import sys
- import os
- import grass
- def make_frame(f, b, t, l, r):
- (ft, fb, fl, fr) = f
- t /= 100.0
- b /= 100.0
- l /= 100.0
- r /= 100.0
- rt = fb + t * (ft - fb)
- rb = fb + b * (ft - fb)
- rl = fl + l * (fr - fl)
- rr = fl + r * (fr - fl)
- s = '%f,%f,%f,%f' % (rt, rb, rl, rr)
- os.environ['GRASS_FRAME'] = s
- def main():
- map = options['map']
- nlines = options['num_of_lines']
- rast = options['rast']
- omit = flags['n']
- flip = flags['f']
- #for -n flag of d.legend
- if not grass.find_file(map)['file']:
- grass.fatal("Raster map <%s> not found in mapset search path" % map)
- # for rast=
- if rast and not grass.find_file(rast)['file']:
- grass.fatal("Raster map <%s> not found in mapset search path" % rast)
- s = grass.read_command('d.info', flags = 'f')
- f = tuple([float(x) for x in s.split()[1:5]])
- grass.run_command('d.erase')
- os.environ['GRASS_PNG_READ'] = 'TRUE'
- #draw title
- make_frame(f, 90, 100, 65, 100)
- grass.write_command('d.text', color = 'black', size = 30, stdin = map)
- #draw legend
- if not nlines:
- nlines = None
- if rast:
- lmap = rast
- else:
- lmap = map
- histfiledir = grass.find_file(lmap, 'cell_misc')['file']
- has_hist = os.path.isfile(os.path.join(histfiledir, 'histogram'))
- lflags = ''
- if flip:
- lflags += 'f'
- if has_hist or omit:
- lflags += 'n'
- make_frame(f, 0, 90, 65, 100)
- grass.run_command('d.legend', flags = lflags, map = lmap, lines = nlines)
- #draw map
- make_frame(f, 0, 100, 0, 65)
- grass.run_command('d.rast', map = map)
- if __name__ == "__main__":
- options, flags = grass.parser()
- main()
|