[GRASS-SVN] r58569 - in grass-addons/grass7/raster: . r.hypso

svn_grass at osgeo.org svn_grass at osgeo.org
Tue Dec 31 11:12:49 PST 2013


Author: madi
Date: 2013-12-31 11:12:49 -0800 (Tue, 31 Dec 2013)
New Revision: 58569

Added:
   grass-addons/grass7/raster/r.hypso/
   grass-addons/grass7/raster/r.hypso/Makefile
   grass-addons/grass7/raster/r.hypso/r.hypso
   grass-addons/grass7/raster/r.hypso/r.hypso.html
Log:
replacing r.ipso

Added: grass-addons/grass7/raster/r.hypso/Makefile
===================================================================
--- grass-addons/grass7/raster/r.hypso/Makefile	                        (rev 0)
+++ grass-addons/grass7/raster/r.hypso/Makefile	2013-12-31 19:12:49 UTC (rev 58569)
@@ -0,0 +1,7 @@
+MODULE_TOPDIR = ../..
+
+PGM = r.hypso
+
+include $(MODULE_TOPDIR)/include/Make/Script.make
+
+default: script

Added: grass-addons/grass7/raster/r.hypso/r.hypso
===================================================================
--- grass-addons/grass7/raster/r.hypso/r.hypso	                        (rev 0)
+++ grass-addons/grass7/raster/r.hypso/r.hypso	2013-12-31 19:12:49 UTC (rev 58569)
@@ -0,0 +1,140 @@
+#!/usr/bin/env python
+################################################################################
+#
+# MODULE:       r.ipso.py
+#
+# AUTHOR(S):    Margherita Di Leo, Massimo Di Stefano, Francesco Di Stefano
+#               
+#
+# PURPOSE:      Output a Ipsometric and ipsographic graph 
+#
+# COPYRIGHT:    (c) 2010 Margherita Di Leo, Massimo Di Stefano, Francesco Di Stefano
+#
+#               This program is free software under the GNU General Public
+#               License (>=v2). Read the file COPYING that comes with GRASS
+#               for details.
+#
+# REQUIRES:     Matplotlib
+#               http://matplotlib.sourceforge.net/
+#               
+#
+################################################################################
+#%module
+#% description: Outputs a ipsometric and ipsographic graph.
+#% keywords: raster
+#%end
+
+#%option G_OPT_R_ELEV
+#% key: map
+#% required: yes
+#%end
+
+#%option G_OPT_F_OUTPUT
+#% key: image
+#% key_desc: image
+#% description: Name for output graph file (png)
+#% required: yes
+#%end
+
+#%flag
+#% key: a
+#% description: Generate ipsometric curve
+#%end
+
+#%flag
+#% key: b
+#% description: Generate ipsographic curve
+#%end
+
+import sys
+import os
+import matplotlib #required by windows
+matplotlib.use('wx') #required by windows
+import matplotlib.pyplot as plt
+import grass.script as grass
+import numpy as np
+
+def main():
+    stats = grass.read_command('r.stats', input = options['map'], sep = 'space', nv = '*', nsteps = '255', flags = 'inc').split('\n')[:-1]
+
+    # res = cellsize
+    res = float(grass.read_command('g.region', rast = options['map'], flags = 'm').strip().split('\n')[4].split('=')[1])
+    zn = np.zeros((len(stats),6),float)
+    kl = np.zeros((len(stats),2),float)
+    prc = np.zeros((9,2),float)
+
+    for i in range(len(stats)):
+        if i == 0:
+            zn[i,0], zn[i, 1] = map(float, stats[i].split(' '))
+            zn[i,2] = zn[i,1]
+        else:
+            zn[i,0], zn[i, 1] = map(float, stats[i].split(' '))
+            zn[i,2] = zn[i,1] + zn[i-1,2]
+
+    totcell = sum(zn[:,1])
+    print "Tot. cells", totcell
+
+    for i in range(len(stats)):
+        zn[i,3] = 1 - (zn[i,2] / sum(zn[:,1]))
+        zn[i,4] = zn[i,3] * (((res**2)/1000000)*sum(zn[:,1]))
+        zn[i,5] = ((zn[i,0] - min(zn[:,0])) / (max(zn[:,0]) - min(zn[:,0])) )
+        kl[i,0] = zn[i,0]
+        kl[i,1] = 1 - (zn[i,2] / totcell)
+
+    # quantiles
+    prc[0,0] , prc[0,1] = findint(kl,0.025) , 0.025
+    prc[1,0] , prc[1,1] = findint(kl,0.05) , 0.05
+    prc[2,0] , prc[2,1] = findint(kl,0.1) , 0.1
+    prc[3,0] , prc[3,1] = findint(kl,0.25) , 0.25
+    prc[4,0] , prc[4,1] = findint(kl,0.5) , 0.5
+    prc[5,0] , prc[5,1] = findint(kl,0.75) , 0.75
+    prc[6,0] , prc[6,1] = findint(kl,0.9) , 0.9
+    prc[7,0] , prc[7,1] = findint(kl,0.95) , 0.95
+    prc[8,0] , prc[8,1] = findint(kl,0.975) , 0.975
+
+    # Managing flag & plot
+    if flags['a']:
+        plotImage(zn[:,3], zn[:,5],options['image']+'_Ipsometric.png','-','A(i) / A','Z(i) / Zmax','Ipsometric Curve')
+    if flags['b']:
+        plotImage(zn[:,4], zn[:,0],options['image']+'_Ipsographic.png','-','A [km^2]','Z [m.slm]','Ipsographic Curve')
+
+    print "==========================="
+    print "Ipsometric | quantiles"
+    print "==========================="
+    print '%.0f' %findint(kl,0.025) , "|", 0.025
+    print '%.0f' %findint(kl,0.05) , "|", 0.05
+    print '%.0f' %findint(kl,0.1) , "|", 0.1
+    print '%.0f' %findint(kl,0.25) , "|", 0.25
+    print '%.0f' %findint(kl,0.5) , "|", 0.5
+    print '%.0f' %findint(kl,0.75) , "|", 0.75
+    print '%.0f' %findint(kl,0.7) , "|", 0.7
+    print '%.0f' %findint(kl,0.9) , "|", 0.9
+    print '%.0f' %findint(kl,0.975) , "|", 0.975
+    print '\n'
+    print 'Done!'
+    #print prc
+
+
+def findint(kl,f):
+    Xf = np.abs(kl-f); Xf = np.where(Xf==Xf.min())
+    z1 , z2 , f1 , f2 = kl[float(Xf[0])][0] , kl[float(Xf[0]-1)][0] , kl[float(Xf[0])][1] , kl[float(Xf[0]-1)][1] 
+    z = z1 + ((z2 - z1) / (f2 - f1)) * (f - f1)
+    return z
+
+def plotImage(x,y,image,type,xlabel,ylabel,title):
+    plt.plot(x, y, type)
+    plt.ylabel(ylabel)
+    plt.xlabel(xlabel)
+    plt.xlim( min(x), max(x) )
+    plt.ylim( min(y), max(y) )
+    plt.title(title)
+    plt.grid(True)
+    plt.savefig(image)
+    plt.close('all') 
+    
+if __name__ == "__main__":
+	options, flags = grass.parser()
+	sys.exit(main())
+
+
+


Property changes on: grass-addons/grass7/raster/r.hypso/r.hypso
___________________________________________________________________
Added: svn:executable
   + *

Added: grass-addons/grass7/raster/r.hypso/r.hypso.html
===================================================================
--- grass-addons/grass7/raster/r.hypso/r.hypso.html	                        (rev 0)
+++ grass-addons/grass7/raster/r.hypso/r.hypso.html	2013-12-31 19:12:49 UTC (rev 58569)
@@ -0,0 +1,55 @@
+<h2>DESCRIPTION</h2>
+<em>r.hypso</em> produces the hypsometric and hypsographic curve 
+related to a digital elevation model and prints the percentiles. 
+
+<h2>NOTES</h2>
+
+The <em>hypsographic curve</em> gives the distribution of surfaces in 
+different altitude ranges. Each point on the function reports on the 
+y-axis the elevation and on the x-axis the portion of the basin 
+surface placed above such elevation value. The <em>hypsometric curve
+</em> uses adimensional axes. 
+
+<h2>Flags:</h2>
+<p>-a: generates hypsometric curve
+<p>-b: generates hyposographic curve
+
+<h2>EXAMPLE</h2>
+
+<div class="code"><pre>
+r.hypso.py -b map=elevation.10m image=path/to/output/prefix
+</pre></div>
+generates hypsographic curve, and
+
+<div class="code"><pre>
+r.hypso.py -a map=elevation.10m image=path/to/output/prefix
+</pre></div>
+generates hypsometric curve.
+
+<h3>Dependencies</h3>
+<ul>
+<li>Matplotlib</li>
+</ul>
+
+<h2>SEE ALSO</h2>
+
+<em>
+<a href="r.basin.html">r.basin</a>,
+</em>
+
+<h2>REFERENCES</h2>
+
+<p><em>Rodriguez-Iturbe I., Rinaldo A. — Fractal River Basins, 
+Chance and Self-Organization. Cambridge Press (2001)</em>
+
+<p><em>In Italian: Di Leo M., Di Stefano M., Claps P., Sole A. 
+— Caratterizzazione morfometrica del bacino idrografico in 
+GRASS GIS (Morphometric characterization of the catchment in GRASS 
+GIS environment), <a href="http://geomatica.como.polimi.it/workbooks/">Geomatics Workbooks</a>,
+n. 9 (2010)</em>
+
+<h2>AUTHORS</h2>
+<p>Margherita Di Leo (dileomargherita AT gmail DOT com), Massimo Di Stefano, Francesco Di Stefano
+
+<p>
+<i>Last changed: $Date: 2013-07-13 16:20:35 +0200 (Sat, 13 Jul 2013) $</i>



More information about the grass-commit mailing list