SlideShare a Scribd company logo
1 of 17
Download to read offline
Python scripting in GRASS GIS environment




     Geospatial Analysis and Modeling – MEA792
                 Margherita Di Leo
Python scripting in GRASS GIS environment




Python + GRASS GIS:

➢ Python scripts that call GRASS functionality from
outside

➢  Running external commands from Python (as a
grass module)
Python scripting in GRASS GIS environment

Example

Module: r.ipso

Purpose: Creates the ipsographic curve and the
adimensional ipsometric curve

Requires: Matplotlib

http://svn.osgeo.org/grass/grass-addons/raster/r.ipso/
Python scripting in GRASS GIS environment

GUI
#%module
#% description: Creates the ipsographic and ipsometric curve
#% keywords: raster
#%end
#%option
#% key: map
#% type: string
#% gisprompt: old,raster,raster
#% key_desc: name
#% description: Name of elevation raster map
#% required: yes
#%end
#%option
#% key: image
#% type: string
#% gisprompt: new_file,file,input
#% key_desc: image
#% description: output graph
#% required: yes
#%end
#%flag
#% key: a
#% description: generate ipsometric curve
#%END
#%flag
#% key: b
#% description: generate ipsographic curve
#%END
Python scripting in GRASS GIS environment

GUI
#%module
#% description: Creates the ipsographic and ipsometric curve
#% keywords: raster
#%end
#%option
#% key: map
#% type: string
#% gisprompt: old,raster,raster
#% key_desc: name
#% description: Name of elevation raster map
#% required: yes
#%end
#%option
#% key: image
#% type: string
#% gisprompt: new_file,file,input
#% key_desc: image
#% description: output graph
#% required: yes
#%end
#%flag
#% key: a
#% description: generate ipsometric curve
#%END
#%flag
#% key: b
#% description: generate ipsographic curve
#%END
Python scripting in GRASS GIS environment


prompt
GRASS 6.5.svn (Basilicata):~ > r.ipso.py --help

Description:
 Creates the ipsographic and ipsometric curve

Keywords:
 raster

Usage:
 r.ipso.py [-ab] map=name image=image [--verbose] [--quiet]

Flags:
  -a     generate ipsometric curve
  -b     generate ipsographic curve
 --v     Verbose module output
 --q     Quiet module output

Parameters:
    map   Name of elevation raster map
  image   path to output graph
GRASS 6.5.svn (Basilicata):~ >
Python scripting in GRASS GIS environment


output
GRASS   6.5.svn    (Basilicata):~   >   r.ipso.py   map=dem@Fiumarella_dataset   -ab
image=Fiumarella
 100%
Tot. cells 172200.0
===========================
Ipsometric | quantiles
===========================
994 | 0.025
989 | 0.05
980 | 0.1
960 | 0.25
918 | 0.5
870 | 0.75
882 | 0.7
841 | 0.9
817 | 0.975


Done!
GRASS 6.5.svn (Basilicata):~ >
Python scripting in GRASS GIS environment

output
Python scripting in GRASS GIS environment

output
Python scripting in GRASS GIS environment

import
import   sys
import   os
import   matplotlib.pyplot as plt
import   grass.script as grass
import   numpy as np


Main (1/4)
def main():
    # r.stats gives in the first column the elevation and in the second the number of
cells having that elevation
    stats = grass.read_command('r.stats', input = options['map'], fs = '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
Python scripting in GRASS GIS environment


Main (2/4)
   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')
Python scripting in GRASS GIS environment


Main (3/4)
   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
Python scripting in GRASS GIS environment



Main (4/4)
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())
Python scripting in GRASS GIS environment
Zn has n rows and 6 columns [len(stats) = n]

Kl has n rows and 2 columns

Prc has 9 rows and 2 columns

                                          Zn

   0            1             2                 3             4            5


   A=          B=         C = (if i=0,      D = (1-C) /      E = Di *    F = (A –
elevation   numbers of    Ci=Ai; else      numbers of       (res^2) /   min(A)) /
              cells      Ci = Ai + B(i-       cells        1000000 *    (max(A) -
                              1) )                        numbers of     min(A))
                                                              cells
Python scripting in GRASS GIS environment
Zn has n rows and 6 columns [len(stats) = n]

Kl has n rows and 2 columns

Prc has 9 rows and 2 columns

                                     kl
                              0            1




                            A=        G = 1 – (C /
                         elevation    num of cell)
Python scripting in GRASS GIS environment

Prc has 9 rows and 2 columns.
It defines the ipsometric curve by the quantiles of the distribution.
It is built by the function ”findint”
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

np.abs and np.where are two NumPy routines:

numpy.absolute(x[, out])
  Calculate the absolute value element-wise.

numpy.where(condition[, x, y])
  Return elements, either from x or y, depending on condition.
  If only condition is given, return condition.nonzero().

See NumPy doc at http://docs.scipy.org/doc/
Python scripting in GRASS GIS environment


Some useful links:

GRASS and Python on Osgeo wiki:
http://grass.osgeo.org/wiki/GRASS_and_Python
GRASS Python Scripting Library:
http://grass.osgeo.org/programming6/pythonlib.html
Style rules:
http://trac.osgeo.org/grass/browser/grass/trunk/SUBMITTING_PYTHON

More Related Content

What's hot

Seminar PSU 09.04.2013 - 10.04.2013 MiFIT, Arbuzov Vyacheslav
Seminar PSU 09.04.2013 - 10.04.2013 MiFIT, Arbuzov VyacheslavSeminar PSU 09.04.2013 - 10.04.2013 MiFIT, Arbuzov Vyacheslav
Seminar PSU 09.04.2013 - 10.04.2013 MiFIT, Arbuzov Vyacheslav
Vyacheslav Arbuzov
 
ggplot2できれいなグラフ
ggplot2できれいなグラフggplot2できれいなグラフ
ggplot2できれいなグラフ
Daisuke Ichikawa
 

What's hot (20)

Mi primer map reduce
Mi primer map reduceMi primer map reduce
Mi primer map reduce
 
K10692 control theory
K10692 control theoryK10692 control theory
K10692 control theory
 
Scientific Computing with Python - NumPy | WeiYuan
Scientific Computing with Python - NumPy | WeiYuanScientific Computing with Python - NumPy | WeiYuan
Scientific Computing with Python - NumPy | WeiYuan
 
Class 8b: Numpy & Matplotlib
Class 8b: Numpy & MatplotlibClass 8b: Numpy & Matplotlib
Class 8b: Numpy & Matplotlib
 
Statistical inference for (Python) Data Analysis. An introduction.
Statistical inference for (Python) Data Analysis. An introduction.Statistical inference for (Python) Data Analysis. An introduction.
Statistical inference for (Python) Data Analysis. An introduction.
 
Jan 2012 HUG: RHadoop
Jan 2012 HUG: RHadoopJan 2012 HUG: RHadoop
Jan 2012 HUG: RHadoop
 
XIX PUG-PE - Pygame game development
XIX PUG-PE - Pygame game developmentXIX PUG-PE - Pygame game development
XIX PUG-PE - Pygame game development
 
Seminar PSU 09.04.2013 - 10.04.2013 MiFIT, Arbuzov Vyacheslav
Seminar PSU 09.04.2013 - 10.04.2013 MiFIT, Arbuzov VyacheslavSeminar PSU 09.04.2013 - 10.04.2013 MiFIT, Arbuzov Vyacheslav
Seminar PSU 09.04.2013 - 10.04.2013 MiFIT, Arbuzov Vyacheslav
 
ggtimeseries-->ggplot2 extensions
ggtimeseries-->ggplot2 extensions ggtimeseries-->ggplot2 extensions
ggtimeseries-->ggplot2 extensions
 
The matplotlib Library
The matplotlib LibraryThe matplotlib Library
The matplotlib Library
 
ggplot2できれいなグラフ
ggplot2できれいなグラフggplot2できれいなグラフ
ggplot2できれいなグラフ
 
Data Visualization with R.ggplot2 and its extensions examples.
Data Visualization with R.ggplot2 and its extensions examples.Data Visualization with R.ggplot2 and its extensions examples.
Data Visualization with R.ggplot2 and its extensions examples.
 
Presentation: Plotting Systems in R
Presentation: Plotting Systems in RPresentation: Plotting Systems in R
Presentation: Plotting Systems in R
 
Yampa AFRP Introduction
Yampa AFRP IntroductionYampa AFRP Introduction
Yampa AFRP Introduction
 
Scientific Computing with Python Webinar March 19: 3D Visualization with Mayavi
Scientific Computing with Python Webinar March 19: 3D Visualization with MayaviScientific Computing with Python Webinar March 19: 3D Visualization with Mayavi
Scientific Computing with Python Webinar March 19: 3D Visualization with Mayavi
 
Fast Identification of Heavy Hitters by Cached and Packed Group Testing
Fast Identification of Heavy Hitters by Cached and Packed Group TestingFast Identification of Heavy Hitters by Cached and Packed Group Testing
Fast Identification of Heavy Hitters by Cached and Packed Group Testing
 
SciSmalltalk: Doing Science with Agility
SciSmalltalk: Doing Science with AgilitySciSmalltalk: Doing Science with Agility
SciSmalltalk: Doing Science with Agility
 
Megadata With Python and Hadoop
Megadata With Python and HadoopMegadata With Python and Hadoop
Megadata With Python and Hadoop
 
Sergey Shelpuk & Olha Romaniuk - “Deep learning, Tensorflow, and Fashion: how...
Sergey Shelpuk & Olha Romaniuk - “Deep learning, Tensorflow, and Fashion: how...Sergey Shelpuk & Olha Romaniuk - “Deep learning, Tensorflow, and Fashion: how...
Sergey Shelpuk & Olha Romaniuk - “Deep learning, Tensorflow, and Fashion: how...
 
Computer graphics
Computer graphicsComputer graphics
Computer graphics
 

Similar to Python grass

All I know about rsc.io/c2go
All I know about rsc.io/c2goAll I know about rsc.io/c2go
All I know about rsc.io/c2go
Moriyoshi Koizumi
 
RedisConf18 - Lower Latency Graph Queries in Cypher with Redis Graph
RedisConf18 - Lower Latency Graph Queries in Cypher with Redis GraphRedisConf18 - Lower Latency Graph Queries in Cypher with Redis Graph
RedisConf18 - Lower Latency Graph Queries in Cypher with Redis Graph
Redis Labs
 
Aaron Ellison Keynote: Reaching the 99%
Aaron Ellison Keynote: Reaching the 99%Aaron Ellison Keynote: Reaching the 99%
Aaron Ellison Keynote: Reaching the 99%
David LeBauer
 
Company_X_Data_Analyst_Challenge
Company_X_Data_Analyst_ChallengeCompany_X_Data_Analyst_Challenge
Company_X_Data_Analyst_Challenge
Mark Yashar
 

Similar to Python grass (20)

Python for Scientific Computing -- Ricardo Cruz
Python for Scientific Computing -- Ricardo CruzPython for Scientific Computing -- Ricardo Cruz
Python for Scientific Computing -- Ricardo Cruz
 
Pythran: Static compiler for high performance by Mehdi Amini PyData SV 2014
Pythran: Static compiler for high performance by Mehdi Amini PyData SV 2014Pythran: Static compiler for high performance by Mehdi Amini PyData SV 2014
Pythran: Static compiler for high performance by Mehdi Amini PyData SV 2014
 
CLUSTERGRAM
CLUSTERGRAMCLUSTERGRAM
CLUSTERGRAM
 
Rtutorial
RtutorialRtutorial
Rtutorial
 
Frsa
FrsaFrsa
Frsa
 
SCIPY-SYMPY.pdf
SCIPY-SYMPY.pdfSCIPY-SYMPY.pdf
SCIPY-SYMPY.pdf
 
R Language Introduction
R Language IntroductionR Language Introduction
R Language Introduction
 
Python과 node.js기반 데이터 분석 및 가시화
Python과 node.js기반 데이터 분석 및 가시화Python과 node.js기반 데이터 분석 및 가시화
Python과 node.js기반 데이터 분석 및 가시화
 
All I know about rsc.io/c2go
All I know about rsc.io/c2goAll I know about rsc.io/c2go
All I know about rsc.io/c2go
 
R programming language
R programming languageR programming language
R programming language
 
RedisConf18 - Lower Latency Graph Queries in Cypher with Redis Graph
RedisConf18 - Lower Latency Graph Queries in Cypher with Redis GraphRedisConf18 - Lower Latency Graph Queries in Cypher with Redis Graph
RedisConf18 - Lower Latency Graph Queries in Cypher with Redis Graph
 
Root Locus Method - Control System - Bsc Engineering
Root Locus Method - Control System - Bsc EngineeringRoot Locus Method - Control System - Bsc Engineering
Root Locus Method - Control System - Bsc Engineering
 
Data visualization using the grammar of graphics
Data visualization using the grammar of graphicsData visualization using the grammar of graphics
Data visualization using the grammar of graphics
 
Aaron Ellison Keynote: Reaching the 99%
Aaron Ellison Keynote: Reaching the 99%Aaron Ellison Keynote: Reaching the 99%
Aaron Ellison Keynote: Reaching the 99%
 
Company_X_Data_Analyst_Challenge
Company_X_Data_Analyst_ChallengeCompany_X_Data_Analyst_Challenge
Company_X_Data_Analyst_Challenge
 
Seminar PSU 10.10.2014 mme
Seminar PSU 10.10.2014 mmeSeminar PSU 10.10.2014 mme
Seminar PSU 10.10.2014 mme
 
Linear Logistic regession_Practical.pptx
Linear Logistic regession_Practical.pptxLinear Logistic regession_Practical.pptx
Linear Logistic regession_Practical.pptx
 
Python 培训讲义
Python 培训讲义Python 培训讲义
Python 培训讲义
 
Joclad 2010 d
Joclad 2010 dJoclad 2010 d
Joclad 2010 d
 
Big datacourse
Big datacourseBig datacourse
Big datacourse
 

More from Margherita Di Leo

Matera 25/06/2012. Convegno “Software libero ed open data: come ti cambiano l...
Matera 25/06/2012. Convegno “Software libero ed open data: come ti cambiano l...Matera 25/06/2012. Convegno “Software libero ed open data: come ti cambiano l...
Matera 25/06/2012. Convegno “Software libero ed open data: come ti cambiano l...
Margherita Di Leo
 

More from Margherita Di Leo (15)

Presentazione introduttiva v01
Presentazione introduttiva v01Presentazione introduttiva v01
Presentazione introduttiva v01
 
Matera 25/06/2012. Convegno “Software libero ed open data: come ti cambiano l...
Matera 25/06/2012. Convegno “Software libero ed open data: come ti cambiano l...Matera 25/06/2012. Convegno “Software libero ed open data: come ti cambiano l...
Matera 25/06/2012. Convegno “Software libero ed open data: come ti cambiano l...
 
Convegno “Sicurezza informatica e strumenti GIS Free e Open Source per l’Inge...
Convegno “Sicurezza informatica e strumenti GIS Free e Open Source per l’Inge...Convegno “Sicurezza informatica e strumenti GIS Free e Open Source per l’Inge...
Convegno “Sicurezza informatica e strumenti GIS Free e Open Source per l’Inge...
 
Lez.5 - Corso di modelli e GIS per l'ambiente
Lez.5 - Corso di modelli e GIS per l'ambienteLez.5 - Corso di modelli e GIS per l'ambiente
Lez.5 - Corso di modelli e GIS per l'ambiente
 
Lez. 4 - Corso di modelli e GIS per l'ambiente
Lez. 4 - Corso di modelli e GIS per l'ambienteLez. 4 - Corso di modelli e GIS per l'ambiente
Lez. 4 - Corso di modelli e GIS per l'ambiente
 
Lez. 3 - Corso di modelli e GIS per l'ambiente
Lez. 3 - Corso di modelli e GIS per l'ambienteLez. 3 - Corso di modelli e GIS per l'ambiente
Lez. 3 - Corso di modelli e GIS per l'ambiente
 
Lez. 2 - Corso di modelli e GIS per l'ambiente
Lez. 2 - Corso di modelli e GIS per l'ambiente Lez. 2 - Corso di modelli e GIS per l'ambiente
Lez. 2 - Corso di modelli e GIS per l'ambiente
 
Lez. 1 - Corso di Modelli e GIS per l'ambiente
Lez. 1 - Corso di Modelli e GIS per l'ambiente Lez. 1 - Corso di Modelli e GIS per l'ambiente
Lez. 1 - Corso di Modelli e GIS per l'ambiente
 
Gfossday2011 esercitazione
Gfossday2011 esercitazioneGfossday2011 esercitazione
Gfossday2011 esercitazione
 
Linuxday 2011
Linuxday 2011Linuxday 2011
Linuxday 2011
 
Geoinformatics FCE CTU 2011
Geoinformatics FCE CTU 2011Geoinformatics FCE CTU 2011
Geoinformatics FCE CTU 2011
 
Foss4g it Lugano
Foss4g it LuganoFoss4g it Lugano
Foss4g it Lugano
 
GrassMeeting Trento Feb 2011
GrassMeeting Trento Feb 2011GrassMeeting Trento Feb 2011
GrassMeeting Trento Feb 2011
 
Lezione master Proidro - Modellazione idrologica con GRASS GIS 17/12/2010
Lezione master Proidro - Modellazione idrologica con GRASS GIS 17/12/2010Lezione master Proidro - Modellazione idrologica con GRASS GIS 17/12/2010
Lezione master Proidro - Modellazione idrologica con GRASS GIS 17/12/2010
 
Lecture OSSIM
Lecture OSSIM Lecture OSSIM
Lecture OSSIM
 

Recently uploaded

Russian Escort Service in Delhi 11k Hotel Foreigner Russian Call Girls in Delhi
Russian Escort Service in Delhi 11k Hotel Foreigner Russian Call Girls in DelhiRussian Escort Service in Delhi 11k Hotel Foreigner Russian Call Girls in Delhi
Russian Escort Service in Delhi 11k Hotel Foreigner Russian Call Girls in Delhi
kauryashika82
 
1029 - Danh muc Sach Giao Khoa 10 . pdf
1029 -  Danh muc Sach Giao Khoa 10 . pdf1029 -  Danh muc Sach Giao Khoa 10 . pdf
1029 - Danh muc Sach Giao Khoa 10 . pdf
QucHHunhnh
 
The basics of sentences session 2pptx copy.pptx
The basics of sentences session 2pptx copy.pptxThe basics of sentences session 2pptx copy.pptx
The basics of sentences session 2pptx copy.pptx
heathfieldcps1
 
Kisan Call Centre - To harness potential of ICT in Agriculture by answer farm...
Kisan Call Centre - To harness potential of ICT in Agriculture by answer farm...Kisan Call Centre - To harness potential of ICT in Agriculture by answer farm...
Kisan Call Centre - To harness potential of ICT in Agriculture by answer farm...
Krashi Coaching
 

Recently uploaded (20)

microwave assisted reaction. General introduction
microwave assisted reaction. General introductionmicrowave assisted reaction. General introduction
microwave assisted reaction. General introduction
 
Class 11th Physics NEET formula sheet pdf
Class 11th Physics NEET formula sheet pdfClass 11th Physics NEET formula sheet pdf
Class 11th Physics NEET formula sheet pdf
 
Russian Escort Service in Delhi 11k Hotel Foreigner Russian Call Girls in Delhi
Russian Escort Service in Delhi 11k Hotel Foreigner Russian Call Girls in DelhiRussian Escort Service in Delhi 11k Hotel Foreigner Russian Call Girls in Delhi
Russian Escort Service in Delhi 11k Hotel Foreigner Russian Call Girls in Delhi
 
Sanyam Choudhary Chemistry practical.pdf
Sanyam Choudhary Chemistry practical.pdfSanyam Choudhary Chemistry practical.pdf
Sanyam Choudhary Chemistry practical.pdf
 
1029 - Danh muc Sach Giao Khoa 10 . pdf
1029 -  Danh muc Sach Giao Khoa 10 . pdf1029 -  Danh muc Sach Giao Khoa 10 . pdf
1029 - Danh muc Sach Giao Khoa 10 . pdf
 
Nutritional Needs Presentation - HLTH 104
Nutritional Needs Presentation - HLTH 104Nutritional Needs Presentation - HLTH 104
Nutritional Needs Presentation - HLTH 104
 
The basics of sentences session 2pptx copy.pptx
The basics of sentences session 2pptx copy.pptxThe basics of sentences session 2pptx copy.pptx
The basics of sentences session 2pptx copy.pptx
 
Key note speaker Neum_Admir Softic_ENG.pdf
Key note speaker Neum_Admir Softic_ENG.pdfKey note speaker Neum_Admir Softic_ENG.pdf
Key note speaker Neum_Admir Softic_ENG.pdf
 
Accessible design: Minimum effort, maximum impact
Accessible design: Minimum effort, maximum impactAccessible design: Minimum effort, maximum impact
Accessible design: Minimum effort, maximum impact
 
Mattingly "AI & Prompt Design: Structured Data, Assistants, & RAG"
Mattingly "AI & Prompt Design: Structured Data, Assistants, & RAG"Mattingly "AI & Prompt Design: Structured Data, Assistants, & RAG"
Mattingly "AI & Prompt Design: Structured Data, Assistants, & RAG"
 
Disha NEET Physics Guide for classes 11 and 12.pdf
Disha NEET Physics Guide for classes 11 and 12.pdfDisha NEET Physics Guide for classes 11 and 12.pdf
Disha NEET Physics Guide for classes 11 and 12.pdf
 
A Critique of the Proposed National Education Policy Reform
A Critique of the Proposed National Education Policy ReformA Critique of the Proposed National Education Policy Reform
A Critique of the Proposed National Education Policy Reform
 
Holdier Curriculum Vitae (April 2024).pdf
Holdier Curriculum Vitae (April 2024).pdfHoldier Curriculum Vitae (April 2024).pdf
Holdier Curriculum Vitae (April 2024).pdf
 
Kisan Call Centre - To harness potential of ICT in Agriculture by answer farm...
Kisan Call Centre - To harness potential of ICT in Agriculture by answer farm...Kisan Call Centre - To harness potential of ICT in Agriculture by answer farm...
Kisan Call Centre - To harness potential of ICT in Agriculture by answer farm...
 
Measures of Central Tendency: Mean, Median and Mode
Measures of Central Tendency: Mean, Median and ModeMeasures of Central Tendency: Mean, Median and Mode
Measures of Central Tendency: Mean, Median and Mode
 
Paris 2024 Olympic Geographies - an activity
Paris 2024 Olympic Geographies - an activityParis 2024 Olympic Geographies - an activity
Paris 2024 Olympic Geographies - an activity
 
Advanced Views - Calendar View in Odoo 17
Advanced Views - Calendar View in Odoo 17Advanced Views - Calendar View in Odoo 17
Advanced Views - Calendar View in Odoo 17
 
Web & Social Media Analytics Previous Year Question Paper.pdf
Web & Social Media Analytics Previous Year Question Paper.pdfWeb & Social Media Analytics Previous Year Question Paper.pdf
Web & Social Media Analytics Previous Year Question Paper.pdf
 
fourth grading exam for kindergarten in writing
fourth grading exam for kindergarten in writingfourth grading exam for kindergarten in writing
fourth grading exam for kindergarten in writing
 
Call Girls in Dwarka Mor Delhi Contact Us 9654467111
Call Girls in Dwarka Mor Delhi Contact Us 9654467111Call Girls in Dwarka Mor Delhi Contact Us 9654467111
Call Girls in Dwarka Mor Delhi Contact Us 9654467111
 

Python grass

  • 1. Python scripting in GRASS GIS environment Geospatial Analysis and Modeling – MEA792 Margherita Di Leo
  • 2. Python scripting in GRASS GIS environment Python + GRASS GIS: ➢ Python scripts that call GRASS functionality from outside ➢ Running external commands from Python (as a grass module)
  • 3. Python scripting in GRASS GIS environment Example Module: r.ipso Purpose: Creates the ipsographic curve and the adimensional ipsometric curve Requires: Matplotlib http://svn.osgeo.org/grass/grass-addons/raster/r.ipso/
  • 4. Python scripting in GRASS GIS environment GUI #%module #% description: Creates the ipsographic and ipsometric curve #% keywords: raster #%end #%option #% key: map #% type: string #% gisprompt: old,raster,raster #% key_desc: name #% description: Name of elevation raster map #% required: yes #%end #%option #% key: image #% type: string #% gisprompt: new_file,file,input #% key_desc: image #% description: output graph #% required: yes #%end #%flag #% key: a #% description: generate ipsometric curve #%END #%flag #% key: b #% description: generate ipsographic curve #%END
  • 5. Python scripting in GRASS GIS environment GUI #%module #% description: Creates the ipsographic and ipsometric curve #% keywords: raster #%end #%option #% key: map #% type: string #% gisprompt: old,raster,raster #% key_desc: name #% description: Name of elevation raster map #% required: yes #%end #%option #% key: image #% type: string #% gisprompt: new_file,file,input #% key_desc: image #% description: output graph #% required: yes #%end #%flag #% key: a #% description: generate ipsometric curve #%END #%flag #% key: b #% description: generate ipsographic curve #%END
  • 6. Python scripting in GRASS GIS environment prompt GRASS 6.5.svn (Basilicata):~ > r.ipso.py --help Description: Creates the ipsographic and ipsometric curve Keywords: raster Usage: r.ipso.py [-ab] map=name image=image [--verbose] [--quiet] Flags: -a generate ipsometric curve -b generate ipsographic curve --v Verbose module output --q Quiet module output Parameters: map Name of elevation raster map image path to output graph GRASS 6.5.svn (Basilicata):~ >
  • 7. Python scripting in GRASS GIS environment output GRASS 6.5.svn (Basilicata):~ > r.ipso.py map=dem@Fiumarella_dataset -ab image=Fiumarella 100% Tot. cells 172200.0 =========================== Ipsometric | quantiles =========================== 994 | 0.025 989 | 0.05 980 | 0.1 960 | 0.25 918 | 0.5 870 | 0.75 882 | 0.7 841 | 0.9 817 | 0.975 Done! GRASS 6.5.svn (Basilicata):~ >
  • 8. Python scripting in GRASS GIS environment output
  • 9. Python scripting in GRASS GIS environment output
  • 10. Python scripting in GRASS GIS environment import import sys import os import matplotlib.pyplot as plt import grass.script as grass import numpy as np Main (1/4) def main(): # r.stats gives in the first column the elevation and in the second the number of cells having that elevation stats = grass.read_command('r.stats', input = options['map'], fs = '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
  • 11. Python scripting in GRASS GIS environment Main (2/4) 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')
  • 12. Python scripting in GRASS GIS environment Main (3/4) 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
  • 13. Python scripting in GRASS GIS environment Main (4/4) 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())
  • 14. Python scripting in GRASS GIS environment Zn has n rows and 6 columns [len(stats) = n] Kl has n rows and 2 columns Prc has 9 rows and 2 columns Zn 0 1 2 3 4 5 A= B= C = (if i=0, D = (1-C) / E = Di * F = (A – elevation numbers of Ci=Ai; else numbers of (res^2) / min(A)) / cells Ci = Ai + B(i- cells 1000000 * (max(A) - 1) ) numbers of min(A)) cells
  • 15. Python scripting in GRASS GIS environment Zn has n rows and 6 columns [len(stats) = n] Kl has n rows and 2 columns Prc has 9 rows and 2 columns kl 0 1 A= G = 1 – (C / elevation num of cell)
  • 16. Python scripting in GRASS GIS environment Prc has 9 rows and 2 columns. It defines the ipsometric curve by the quantiles of the distribution. It is built by the function ”findint” 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 np.abs and np.where are two NumPy routines: numpy.absolute(x[, out]) Calculate the absolute value element-wise. numpy.where(condition[, x, y]) Return elements, either from x or y, depending on condition. If only condition is given, return condition.nonzero(). See NumPy doc at http://docs.scipy.org/doc/
  • 17. Python scripting in GRASS GIS environment Some useful links: GRASS and Python on Osgeo wiki: http://grass.osgeo.org/wiki/GRASS_and_Python GRASS Python Scripting Library: http://grass.osgeo.org/programming6/pythonlib.html Style rules: http://trac.osgeo.org/grass/browser/grass/trunk/SUBMITTING_PYTHON