[GRASS-SVN] r64875 - in grass-addons/grass7/raster: . r.divergence

svn_grass at osgeo.org svn_grass at osgeo.org
Mon Mar 16 08:30:32 PDT 2015


Author: annakrat
Date: 2015-03-16 08:30:32 -0700 (Mon, 16 Mar 2015)
New Revision: 64875

Added:
   grass-addons/grass7/raster/r.divergence/
   grass-addons/grass7/raster/r.divergence/Makefile
   grass-addons/grass7/raster/r.divergence/r.divergence.html
   grass-addons/grass7/raster/r.divergence/r.divergence.py
Modified:
   grass-addons/grass7/raster/Makefile
Log:
added r.divergence addon to simplify USPED computation

Modified: grass-addons/grass7/raster/Makefile
===================================================================
--- grass-addons/grass7/raster/Makefile	2015-03-16 14:31:25 UTC (rev 64874)
+++ grass-addons/grass7/raster/Makefile	2015-03-16 15:30:32 UTC (rev 64875)
@@ -22,6 +22,7 @@
 	r.convergence \
 	r.crater \
 	r.damflood \
+	r.divergence \
 	r.diversity \
 	r.droka \
 	r.edm.eval \

Added: grass-addons/grass7/raster/r.divergence/Makefile
===================================================================
--- grass-addons/grass7/raster/r.divergence/Makefile	                        (rev 0)
+++ grass-addons/grass7/raster/r.divergence/Makefile	2015-03-16 15:30:32 UTC (rev 64875)
@@ -0,0 +1,7 @@
+MODULE_TOPDIR = ../..
+
+PGM = r.divergence
+
+include $(MODULE_TOPDIR)/include/Make/Script.make
+
+default: script

Added: grass-addons/grass7/raster/r.divergence/r.divergence.html
===================================================================
--- grass-addons/grass7/raster/r.divergence/r.divergence.html	                        (rev 0)
+++ grass-addons/grass7/raster/r.divergence/r.divergence.html	2015-03-16 15:30:32 UTC (rev 64875)
@@ -0,0 +1,20 @@
+<h2>DESCRIPTION</h2>
+Module <em>r.divergence</em> computes the divergence of a vector field
+given by <b>magnitude</b> and <b>direction</b> raster maps.
+Direction is in degrees counterclockwise from the east
+and can be computed using <em><a href="r.slope.aspect.html">r.slope.aspect</a></em>.
+
+<h2>EXAMPLES</h2>
+
+TBD
+
+<h2>SEE ALSO</h2>
+
+<em><a href="r.slope.aspect.html">r.slope.aspect</a></em>
+
+<h2>AUTHOR</h2>
+
+Anna Petrasova, <a href="http://geospatial.ncsu.edu/osgeorel/">NCSU OSGeoREL</a><br>
+Helena Mitasova, <a href="http://geospatial.ncsu.edu/osgeorel/">NCSU OSGeoREL</a>
+
+<p><i>Last changed: $Date: 2015-02-12 14:32:45 -0500 (Thu, 12 Feb 2015) $</i>

Added: grass-addons/grass7/raster/r.divergence/r.divergence.py
===================================================================
--- grass-addons/grass7/raster/r.divergence/r.divergence.py	                        (rev 0)
+++ grass-addons/grass7/raster/r.divergence/r.divergence.py	2015-03-16 15:30:32 UTC (rev 64875)
@@ -0,0 +1,103 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+#
+##############################################################################
+#
+# MODULE:       r.divergence
+#
+# AUTHOR(S):    Anna Petrasova (kratochanna gmail.com)
+#
+# PURPOSE:      Implementation of divergence of field
+#
+# COPYRIGHT:    (C) 2015 by the GRASS Development Team
+#
+#		This program is free software under the GNU General Public
+#		License (version 2). Read the file COPYING that comes with GRASS
+#		for details.
+#
+##############################################################################
+
+#%module
+#% description: Computes divergence of a vector field defined by magnitude and direction
+#% keyword: raster
+#% keyword: divergence
+#%end
+#%option G_OPT_R_INPUT
+#% key: magnitude
+#% description: Name of input raster map representing magnitude
+#%end
+#%option G_OPT_R_INPUT
+#% label:  Name of input raster map representing direction
+#% description: Direction is in degrees ccw from the east
+#% key: direction
+#%end
+#%option G_OPT_R_OUTPUT
+#% description: Name of output divergence raster
+#%end
+
+
+import sys
+import os
+import atexit
+
+from grass.exceptions import CalledModuleError
+import grass.script.core as gcore
+import grass.script.raster as grast
+
+
+TMP = []
+CLEANUP = True
+
+
+def cleanup():
+    if CLEANUP:
+        gcore.run_command('g.remove', flags='f', type='raster', name=TMP)
+
+
+def main():
+    magnitude = options['magnitude']
+    direction = options['direction']
+    divergence = options['output']
+    global TMP, CLEANUP
+
+    tmp_name = 'tmp_divergence_' + str(os.getpid())
+    qsx = tmp_name + "qsx"
+    qsy = tmp_name + "qsy"
+    qsx_dx = tmp_name + "qsx_dx"
+    qsy_dy = tmp_name + "qsy_dy"
+    TMP.extend([qsx, qsy, qsx_dx, qsy_dy])
+
+    # checks if there are already some maps
+    old_maps = temp_maps_exist()
+    if old_maps:
+        if not gcore.overwrite():
+            CLEANUP = False
+            gcore.fatal(_("You have to first check overwrite flag or remove"
+                          " the following maps:\n"
+                          "names}").format(names=','.join(old_maps)))
+        else:
+            gcore.warning(_("The following maps will be overwritten: {names}"
+                           ).format(names=','.join(old_maps)))
+    try:
+        grast.mapcalc(exp="{qsx}={mag} * cos({direct})".format(qsx=qsx, mag=magnitude, direct=direction))
+        grast.mapcalc(exp="{qsy}={mag} * sin({direct})".format(qsy=qsy, mag=magnitude, direct=direction))
+        gcore.run_command('r.slope.aspect', elevation=qsx, dx=qsx_dx)
+        gcore.run_command('r.slope.aspect', elevation=qsy, dy=qsy_dy)
+        grast.mapcalc(exp="{div}={qsx_dx} + {qsy_dy}".format(div=divergence, qsx_dx=qsx_dx, qsy_dy=qsy_dy))
+    except CalledModuleError:
+        gcore.fatal(_("r.divergence failed, check errors above. Please report this problem to developers."))
+        return 1
+
+    grast.raster_history(divergence)
+    return 0
+
+
+def temp_maps_exist():
+    maps = gcore.list_grouped('raster')[gcore.gisenv()['MAPSET']]
+    return [x for x in TMP if x in maps]
+
+
+if __name__ == "__main__":
+    options, flags = gcore.parser()
+    atexit.register(cleanup)
+    sys.exit(main())



More information about the grass-commit mailing list