|
@@ -13,6 +13,7 @@
|
|
|
# for details.
|
|
|
#
|
|
|
#############################################################################
|
|
|
+# 10/2013: added option to use a pre-clumped input map (Eric Goddard)
|
|
|
# 8/2012: added fp maps support, cleanup, removed tabs AK
|
|
|
# 3/2007: added label support MN
|
|
|
# 3/2004: added parser support MN
|
|
@@ -48,6 +49,11 @@
|
|
|
#% guisection: Area
|
|
|
#%end
|
|
|
|
|
|
+#%flag
|
|
|
+#% key: c
|
|
|
+#% description: Input map is clumped
|
|
|
+#%end
|
|
|
+
|
|
|
import sys
|
|
|
import os
|
|
|
import atexit
|
|
@@ -55,14 +61,16 @@ import grass.script as grass
|
|
|
|
|
|
TMPRAST = []
|
|
|
|
|
|
+
|
|
|
def main():
|
|
|
infile = options['input']
|
|
|
lesser = options['lesser']
|
|
|
greater = options['greater']
|
|
|
outfile = options['output']
|
|
|
+ clumped = flags['c']
|
|
|
|
|
|
- s = grass.read_command("g.region", flags = 'p')
|
|
|
- kv = grass.parse_key_val(s, sep = ':')
|
|
|
+ s = grass.read_command("g.region", flags='p')
|
|
|
+ kv = grass.parse_key_val(s, sep=':')
|
|
|
s = kv['projection'].strip().split()
|
|
|
if s == '0':
|
|
|
grass.fatal(_("xy-locations are not supported"))
|
|
@@ -80,29 +88,36 @@ def main():
|
|
|
if not grass.find_file(infile)['name']:
|
|
|
grass.fatal(_("Raster map <%s> not found") % infile)
|
|
|
|
|
|
- clumpfile = "%s.clump.%s" % (infile.split('@')[0], outfile)
|
|
|
- TMPRAST.append(clumpfile)
|
|
|
+ if clumped:
|
|
|
+ clumpfile = infile
|
|
|
+ else:
|
|
|
+ clumpfile = "%s.clump.%s" % (infile.split('@')[0], outfile)
|
|
|
+ TMPRAST.append(clumpfile)
|
|
|
|
|
|
- if not grass.overwrite():
|
|
|
- if grass.find_file(clumpfile)['name']:
|
|
|
- grass.fatal(_("Temporary raster map <%s> exists") % clumpfile)
|
|
|
+ if not grass.overwrite():
|
|
|
+ if grass.find_file(clumpfile)['name']:
|
|
|
+ grass.fatal(_("Temporary raster map <%s> exists") % clumpfile)
|
|
|
|
|
|
- grass.message(_("Generating a clumped raster file ..."))
|
|
|
- grass.run_command('r.clump', input = infile, output = clumpfile)
|
|
|
+ grass.message(_("Generating a clumped raster file ..."))
|
|
|
+ grass.run_command('r.clump', input=infile, output=clumpfile)
|
|
|
|
|
|
if lesser:
|
|
|
- grass.message(_("Generating a reclass map with area size less than or equal to %f hectares...") % limit)
|
|
|
+ grass.message(_("Generating a reclass map with area size less than " \
|
|
|
+ "or equal to %f hectares...") % limit)
|
|
|
else:
|
|
|
- grass.message(_("Generating a reclass map with area size greater than or equal to %f hectares...") % limit)
|
|
|
+ grass.message(_("Generating a reclass map with area size greater " \
|
|
|
+ "than or equal to %f hectares...") % limit)
|
|
|
|
|
|
recfile = outfile + '.recl'
|
|
|
TMPRAST.append(recfile)
|
|
|
|
|
|
- flags = 'aln'
|
|
|
+ sflags = 'aln'
|
|
|
if grass.raster_info(infile)['datatype'] in ('FCELL', 'DCELL'):
|
|
|
- flags += 'i'
|
|
|
- p1 = grass.pipe_command('r.stats', flags = flags, input = (clumpfile, infile), sep = ';')
|
|
|
- p2 = grass.feed_command('r.reclass', input = clumpfile, output = recfile, rules = '-')
|
|
|
+ sflags += 'i'
|
|
|
+ p1 = grass.pipe_command('r.stats', flags=sflags, input=(clumpfile, infile),
|
|
|
+ sep=';')
|
|
|
+ p2 = grass.feed_command('r.reclass', input=clumpfile, output=recfile,
|
|
|
+ rules='-')
|
|
|
rules = ''
|
|
|
for line in p1.stdout:
|
|
|
f = line.rstrip(os.linesep).split(';')
|
|
@@ -122,21 +137,22 @@ def main():
|
|
|
p2.wait()
|
|
|
if p2.returncode != 0:
|
|
|
if lesser:
|
|
|
- grass.fatal(_("No areas of size less than or equal to %f hectares found.") % limit)
|
|
|
+ grass.fatal(_("No areas of size less than or equal to %f " \
|
|
|
+ "hectares found.") % limit)
|
|
|
else:
|
|
|
- grass.fatal(_("No areas of size greater than or equal to %f hectares found.") % limit)
|
|
|
+ grass.fatal(_("No areas of size greater than or equal to %f " \
|
|
|
+ "hectares found.") % limit)
|
|
|
|
|
|
grass.message(_("Generating output raster map <%s>...") % outfile)
|
|
|
|
|
|
- grass.mapcalc("$outfile = $recfile", outfile = outfile, recfile = recfile)
|
|
|
+ grass.mapcalc("$outfile = $recfile", outfile=outfile, recfile=recfile)
|
|
|
+
|
|
|
|
|
|
def cleanup():
|
|
|
"""!Delete temporary maps"""
|
|
|
- TMPRAST.reverse() # reclassed map first
|
|
|
+ TMPRAST.reverse() # reclassed map first
|
|
|
for rast in TMPRAST:
|
|
|
- grass.run_command("g.remove",
|
|
|
- rast = rast,
|
|
|
- quiet = True)
|
|
|
+ grass.run_command("g.remove", rast=rast, quiet=True)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
|
options, flags = grass.parser()
|