[GRASS-SVN] r54162 - grass-addons/grass6/raster/r.in.drsa
svn_grass at osgeo.org
svn_grass at osgeo.org
Mon Dec 3 07:30:52 PST 2012
Author: gianluca
Date: 2012-12-03 07:30:51 -0800 (Mon, 03 Dec 2012)
New Revision: 54162
Modified:
grass-addons/grass6/raster/r.in.drsa/r.in.drsa.py
Log:
remove bud format
Modified: grass-addons/grass6/raster/r.in.drsa/r.in.drsa.py
===================================================================
--- grass-addons/grass6/raster/r.in.drsa/r.in.drsa.py 2012-12-03 15:23:41 UTC (rev 54161)
+++ grass-addons/grass6/raster/r.in.drsa/r.in.drsa.py 2012-12-03 15:30:51 UTC (rev 54162)
@@ -1,179 +1,179 @@
-#!/usr/bin/env python
-############################################################################
-#
-# MODULE: r.in.drsa
-# AUTHOR: Gianluca Massei - Antonio Boggia
-# PURPOSE: Import roles from *.rls file and apply those condition
-# at geographics information system for generate a raster
-# map classified under Dominance Rough Set Approach
-# COPYRIGHT: c) 2010 Gianluca Massei, Antonio Boggia and the GRASS
-# Development Team. This program is free software under the
-# GNU General PublicLicense (>=v2). Read the file COPYING
-# that comes with GRASS for details.
-#
-#############################################################################
-
-
-#%Module
-#% description: Generate a raster map classified with Dominance Rough Set Approach. Use *.rls file from JAMM, 4eMka2 etc.
-#% keywords: raster, Dominance Rough Set Approach
-#% keywords: Multi Criteria Decision Analysis (MCDA)
-#%End
-#%option
-#% key: input
-#% type: string
-#% gisprompt: old,file,input
-#% description: File name with rules (*.rls)
-#% required: yes
-#%end
-#%option
-#% key: output
-#% type: string
-#% gisprompt: new_file,cell,output
-#% description: output classified raster map
-#% required: yes
-#%end
-#%flag
-#% key:k
-#% description:file *.rls from software 4eMka2
-#% answer:true
-#%end
-#%flag
-#% key:j
-#% description:file *.rls from software jMAF (NOT YET IMPLEMENTED)
-#%end
-#%flag
-#% key: l
-#% description: do not remove single rules in vector format
-#% answer:false
-#%end
-
-
-
-import sys
-import grass.script as grass
-import pdb
-import string
-
-def parser_4eMka2_rule(tags):
- "parser file *.rls from 4eMka2 software and extract information for make new classified raster"
- rule=dict()
- rules=[]
- for t in tags:
- condition=[]
- decision=[]
- row=t.split()
- if(len(row)>0 and row[0]=="Rule"):
- #rules_list.append(row)
- i=row.index("=>")
- for j in range(2,i):
- if( row[j]!="&"):
- condition.append(row[j].strip('[,;]'))
- for j in range(i+1,len(row)-2):
- decision.append(row[j].strip('([,;])'))
- rule={'id_rule':row[1].strip('[.;]'),
- 'condition':condition,
- 'decision':(decision[0]),
- 'class':"_".join(decision[1:]),
- 'support':int(row[-2].strip('[.,;]')),
- 'strength':row[-1].strip('[,:]')}
- rules.append(rule)
- rls = open('rules',"w")
- for l in rules:
- factor=l['decision'].strip('()').split(' ')
- rls.write('id_rule:%s - condition:%s - decision: %s - class:%s \n' % (l['id_rule'],l['condition'], l['decision'],l['class']))
- rls.close
- return rules
-
-def parser_JAMM_rule(tags):
- "parser file *.rls from JAMM software and extract information for make new classified raster"
-
-
-def parser_mapcalc(rules,i):
- "parser to build a formula to be included in mapcalc command"
- mapalgebra="if("
- for j in rules[i]['condition'][:-1]:
- mapalgebra+= j + " && "
- mapalgebra+=rules[i]['condition'][-1]+","+rules[i]['id_rule']+",null())"
- return mapalgebra
-
-def clean_rules(rules):
- "cleans rules to no processed vaue from rules (eg = -> ==) "
- for i in range(len(rules)):
- for j in rules[i]['condition']:
- if (j.find("<=")!=-1):
- return 1
- elif (j.find("<=")!=-1):
- return 1
- elif (j.find("=")!=-1):
- j=j.replace("=","==")
- return 0
- else:
- return -1
-
-def patch_georules(maps,outputMap):
- labels=["_".join(m.split('_')[1:]) for m in maps]
- labels=list(set(labels))
- for l in labels:
- print "mapping %s rule" % str(l)
- map_synth=[]
- for m in maps:
- if l == "_".join(m.split('_')[1:]):
- map_synth.append(m)
- if len(map_synth)>1:
- grass.run_command("r.patch", overwrite='True', input=(",".join(map_synth)), output=l )
- else:
- grass.run_command("g.copy",rast=(str(map_synth),l))
-
- grass.run_command("r.to.vect", overwrite='True', flags='s', input=l, output=l, feature='area')
- grass.run_command("v.db.addcol", map=l, columns='rule varchar(25)')
- grass.run_command("v.db.update", map=l, column='rule', value=l)
- grass.run_command("v.db.update", map=l, column='label', value=l)
- mapstring=",".join(labels)
-
- if len(maps)>1:
- grass.run_command("v.patch", overwrite='True', flags='e', input=mapstring, output=outputMap)
- else:
- grass.run_command("g.copy",vect=(mapstring,outputMap))
-
-
-def main():
- input_rules = options['input']
- outputMap = options['output']
-
- gregion = grass.region()
- nrows = gregion['rows']
- ncols = gregion['cols']
- ewres=int(gregion['ewres'])
- nsres=int(gregion['nsres'])
-
- input_rules=open(input_rules,"r")
- tags=input_rules.readlines()
-
- rules=[] #single rule (dictionary) in array
- maps=[]
- rules=parser_4eMka2_rule(tags)
-## clean_rules(rules)
- for i in range(len(rules)):
- mappa="r"+rules[i]['id_rule']+"_"+rules[i]['class']
- formula=parser_mapcalc(rules,i)
- grass.mapcalc(mappa +"=" +formula)
- maps.append(mappa)
-
- maplist=",".join(maps)
- print maplist
- patch_georules(maps,outputMap)
-
- if not flags['l']:
- grass.run_command("g.remove",flags="quiet", rast=maplist)
- grass.run_command("g.remove",flags="quiet", vect=maplist)
-
- input_rules.close()
- return 0
-
-
-if __name__ == "__main__":
- options, flags = grass.parser()
- sys.exit(main())
-
-
+#!/usr/bin/env python
+############################################################################
+#
+# MODULE: r.in.drsa
+# AUTHOR: Gianluca Massei - Antonio Boggia
+# PURPOSE: Import roles from *.rls file and apply those condition
+# at geographics information system for generate a raster
+# map classified under Dominance Rough Set Approach
+# COPYRIGHT: c) 2010 Gianluca Massei, Antonio Boggia and the GRASS
+# Development Team. This program is free software under the
+# GNU General PublicLicense (>=v2). Read the file COPYING
+# that comes with GRASS for details.
+#
+#############################################################################
+
+
+#%Module
+#% description: Generate a raster map classified with Dominance Rough Set Approach. Use *.rls file from JAMM, 4eMka2 etc.
+#% keywords: raster, Dominance Rough Set Approach
+#% keywords: Multi Criteria Decision Analysis (MCDA)
+#%End
+#%option
+#% key: input
+#% type: string
+#% gisprompt: old,file,input
+#% description: File name with rules (*.rls)
+#% required: yes
+#%end
+#%option
+#% key: output
+#% type: string
+#% gisprompt: new_file,cell,output
+#% description: output classified raster map
+#% required: yes
+#%end
+#%flag
+#% key:k
+#% description:file *.rls from software 4eMka2
+#% answer:true
+#%end
+#%flag
+#% key:j
+#% description:file *.rls from software jMAF (NOT YET IMPLEMENTED)
+#%end
+#%flag
+#% key: l
+#% description: do not remove single rules in vector format
+#% answer:false
+#%end
+
+
+
+import sys
+import grass.script as grass
+import pdb
+import string
+
+def parser_4eMka2_rule(tags):
+ "parser file *.rls from 4eMka2 software and extract information for make new classified raster"
+ rule=dict()
+ rules=[]
+ for t in tags:
+ condition=[]
+ decision=[]
+ row=t.split()
+ if(len(row)>0 and row[0]=="Rule"):
+ #rules_list.append(row)
+ i=row.index("=>")
+ for j in range(2,i):
+ if( row[j]!="&"):
+ condition.append(row[j].strip('[,;]'))
+ for j in range(i+1,len(row)-2):
+ decision.append(row[j].strip('([,;])'))
+ rule={'id_rule':row[1].strip('[.;]'),
+ 'condition':condition,
+ 'decision':(decision[0]),
+ 'class':"_".join(decision[1:]),
+ 'support':int(row[-2].strip('[.,;]')),
+ 'strength':row[-1].strip('[,:]')}
+ rules.append(rule)
+ rls = open('rules',"w")
+ for l in rules:
+ factor=l['decision'].strip('()').split(' ')
+ rls.write('id_rule:%s - condition:%s - decision: %s - class:%s \n' % (l['id_rule'],l['condition'], l['decision'],l['class']))
+ rls.close
+ return rules
+
+def parser_JAMM_rule(tags):
+ "parser file *.rls from JAMM software and extract information for make new classified raster"
+
+
+def parser_mapcalc(rules,i):
+ "parser to build a formula to be included in mapcalc command"
+ mapalgebra="if("
+ for j in rules[i]['condition'][:-1]:
+ mapalgebra+= j + " && "
+ mapalgebra+=rules[i]['condition'][-1]+","+rules[i]['id_rule']+",null())"
+ return mapalgebra
+
+def clean_rules(rules):
+ "cleans rules to no processed vaue from rules (eg = -> ==) "
+ for i in range(len(rules)):
+ for j in rules[i]['condition']:
+ if (j.find("<=")!=-1):
+ return 1
+ elif (j.find("<=")!=-1):
+ return 1
+ elif (j.find("=")!=-1):
+ j=j.replace("=","==")
+ return 0
+ else:
+ return -1
+
+def patch_georules(maps,outputMap):
+ labels=["_".join(m.split('_')[1:]) for m in maps]
+ labels=list(set(labels))
+ for l in labels:
+ print "mapping %s rule" % str(l)
+ map_synth=[]
+ for m in maps:
+ if l == "_".join(m.split('_')[1:]):
+ map_synth.append(m)
+ if len(map_synth)>1:
+ grass.run_command("r.patch", overwrite='True', input=(",".join(map_synth)), output=l )
+ else:
+ grass.run_command("g.copy",rast=(str(map_synth),l))
+
+ grass.run_command("r.to.vect", overwrite='True', flags='s', input=l, output=l, feature='area')
+ grass.run_command("v.db.addcol", map=l, columns='rule varchar(25)')
+ grass.run_command("v.db.update", map=l, column='rule', value=l)
+ grass.run_command("v.db.update", map=l, column='label', value=l)
+ mapstring=",".join(labels)
+
+ if len(maps)>1:
+ grass.run_command("v.patch", overwrite='True', flags='e', input=mapstring, output=outputMap)
+ else:
+ grass.run_command("g.copy",vect=(mapstring,outputMap))
+
+
+def main():
+ input_rules = options['input']
+ outputMap = options['output']
+
+ gregion = grass.region()
+ nrows = gregion['rows']
+ ncols = gregion['cols']
+ ewres=int(gregion['ewres'])
+ nsres=int(gregion['nsres'])
+
+ input_rules=open(input_rules,"r")
+ tags=input_rules.readlines()
+
+ rules=[] #single rule (dictionary) in array
+ maps=[]
+ rules=parser_4eMka2_rule(tags)
+## clean_rules(rules)
+ for i in range(len(rules)):
+ mappa="r"+rules[i]['id_rule']+"_"+rules[i]['class']
+ formula=parser_mapcalc(rules,i)
+ grass.mapcalc(mappa +"=" +formula)
+ maps.append(mappa)
+
+ maplist=",".join(maps)
+ print maplist
+ patch_georules(maps,outputMap)
+
+ if not flags['l']:
+ grass.run_command("g.remove",flags="quiet", rast=maplist)
+ grass.run_command("g.remove",flags="quiet", vect=maplist)
+
+ input_rules.close()
+ return 0
+
+
+if __name__ == "__main__":
+ options, flags = grass.parser()
+ sys.exit(main())
+
+
More information about the grass-commit
mailing list