SlideShare uma empresa Scribd logo
1 de 17
Baixar para ler 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

Mais conteúdo relacionado

Mais procurados

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
 

Mais procurados (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
 

Semelhante a 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
 

Semelhante a 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
 

Mais de 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
 

Mais de 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
 

Último

The basics of sentences session 4pptx.pptx
The basics of sentences session 4pptx.pptxThe basics of sentences session 4pptx.pptx
The basics of sentences session 4pptx.pptx
heathfieldcps1
 
會考英聽會考英聽會考英聽會考英聽會考英聽會考英聽會考英聽會考英聽會考英聽會考英聽
會考英聽會考英聽會考英聽會考英聽會考英聽會考英聽會考英聽會考英聽會考英聽會考英聽會考英聽會考英聽會考英聽會考英聽會考英聽會考英聽會考英聽會考英聽會考英聽會考英聽
會考英聽會考英聽會考英聽會考英聽會考英聽會考英聽會考英聽會考英聽會考英聽會考英聽
中 央社
 
Poster_density_driven_with_fracture_MLMC.pdf
Poster_density_driven_with_fracture_MLMC.pdfPoster_density_driven_with_fracture_MLMC.pdf
Poster_density_driven_with_fracture_MLMC.pdf
Alexander Litvinenko
 
SURVEY I created for uni project research
SURVEY I created for uni project researchSURVEY I created for uni project research
SURVEY I created for uni project research
CaitlinCummins3
 

Último (20)

Đề tieng anh thpt 2024 danh cho cac ban hoc sinh
Đề tieng anh thpt 2024 danh cho cac ban hoc sinhĐề tieng anh thpt 2024 danh cho cac ban hoc sinh
Đề tieng anh thpt 2024 danh cho cac ban hoc sinh
 
philosophy and it's principles based on the life
philosophy and it's principles based on the lifephilosophy and it's principles based on the life
philosophy and it's principles based on the life
 
The basics of sentences session 4pptx.pptx
The basics of sentences session 4pptx.pptxThe basics of sentences session 4pptx.pptx
The basics of sentences session 4pptx.pptx
 
Including Mental Health Support in Project Delivery, 14 May.pdf
Including Mental Health Support in Project Delivery, 14 May.pdfIncluding Mental Health Support in Project Delivery, 14 May.pdf
Including Mental Health Support in Project Delivery, 14 May.pdf
 
ĐỀ THAM KHẢO KÌ THI TUYỂN SINH VÀO LỚP 10 MÔN TIẾNG ANH FORM 50 CÂU TRẮC NGHI...
ĐỀ THAM KHẢO KÌ THI TUYỂN SINH VÀO LỚP 10 MÔN TIẾNG ANH FORM 50 CÂU TRẮC NGHI...ĐỀ THAM KHẢO KÌ THI TUYỂN SINH VÀO LỚP 10 MÔN TIẾNG ANH FORM 50 CÂU TRẮC NGHI...
ĐỀ THAM KHẢO KÌ THI TUYỂN SINH VÀO LỚP 10 MÔN TIẾNG ANH FORM 50 CÂU TRẮC NGHI...
 
Sternal Fractures & Dislocations - EMGuidewire Radiology Reading Room
Sternal Fractures & Dislocations - EMGuidewire Radiology Reading RoomSternal Fractures & Dislocations - EMGuidewire Radiology Reading Room
Sternal Fractures & Dislocations - EMGuidewire Radiology Reading Room
 
Word Stress rules esl .pptx
Word Stress rules esl               .pptxWord Stress rules esl               .pptx
Word Stress rules esl .pptx
 
When Quality Assurance Meets Innovation in Higher Education - Report launch w...
When Quality Assurance Meets Innovation in Higher Education - Report launch w...When Quality Assurance Meets Innovation in Higher Education - Report launch w...
When Quality Assurance Meets Innovation in Higher Education - Report launch w...
 
An overview of the various scriptures in Hinduism
An overview of the various scriptures in HinduismAn overview of the various scriptures in Hinduism
An overview of the various scriptures in Hinduism
 
會考英聽會考英聽會考英聽會考英聽會考英聽會考英聽會考英聽會考英聽會考英聽會考英聽
會考英聽會考英聽會考英聽會考英聽會考英聽會考英聽會考英聽會考英聽會考英聽會考英聽會考英聽會考英聽會考英聽會考英聽會考英聽會考英聽會考英聽會考英聽會考英聽會考英聽
會考英聽會考英聽會考英聽會考英聽會考英聽會考英聽會考英聽會考英聽會考英聽會考英聽
 
Stl Algorithms in C++ jjjjjjjjjjjjjjjjjj
Stl Algorithms in C++ jjjjjjjjjjjjjjjjjjStl Algorithms in C++ jjjjjjjjjjjjjjjjjj
Stl Algorithms in C++ jjjjjjjjjjjjjjjjjj
 
TỔNG HỢP HƠN 100 ĐỀ THI THỬ TỐT NGHIỆP THPT VẬT LÝ 2024 - TỪ CÁC TRƯỜNG, TRƯ...
TỔNG HỢP HƠN 100 ĐỀ THI THỬ TỐT NGHIỆP THPT VẬT LÝ 2024 - TỪ CÁC TRƯỜNG, TRƯ...TỔNG HỢP HƠN 100 ĐỀ THI THỬ TỐT NGHIỆP THPT VẬT LÝ 2024 - TỪ CÁC TRƯỜNG, TRƯ...
TỔNG HỢP HƠN 100 ĐỀ THI THỬ TỐT NGHIỆP THPT VẬT LÝ 2024 - TỪ CÁC TRƯỜNG, TRƯ...
 
Andreas Schleicher presents at the launch of What does child empowerment mean...
Andreas Schleicher presents at the launch of What does child empowerment mean...Andreas Schleicher presents at the launch of What does child empowerment mean...
Andreas Schleicher presents at the launch of What does child empowerment mean...
 
MOOD STABLIZERS DRUGS.pptx
MOOD     STABLIZERS           DRUGS.pptxMOOD     STABLIZERS           DRUGS.pptx
MOOD STABLIZERS DRUGS.pptx
 
UChicago CMSC 23320 - The Best Commit Messages of 2024
UChicago CMSC 23320 - The Best Commit Messages of 2024UChicago CMSC 23320 - The Best Commit Messages of 2024
UChicago CMSC 23320 - The Best Commit Messages of 2024
 
ANTI PARKISON DRUGS.pptx
ANTI         PARKISON          DRUGS.pptxANTI         PARKISON          DRUGS.pptx
ANTI PARKISON DRUGS.pptx
 
Poster_density_driven_with_fracture_MLMC.pdf
Poster_density_driven_with_fracture_MLMC.pdfPoster_density_driven_with_fracture_MLMC.pdf
Poster_density_driven_with_fracture_MLMC.pdf
 
demyelinated disorder: multiple sclerosis.pptx
demyelinated disorder: multiple sclerosis.pptxdemyelinated disorder: multiple sclerosis.pptx
demyelinated disorder: multiple sclerosis.pptx
 
Implanted Devices - VP Shunts: EMGuidewire's Radiology Reading Room
Implanted Devices - VP Shunts: EMGuidewire's Radiology Reading RoomImplanted Devices - VP Shunts: EMGuidewire's Radiology Reading Room
Implanted Devices - VP Shunts: EMGuidewire's Radiology Reading Room
 
SURVEY I created for uni project research
SURVEY I created for uni project researchSURVEY I created for uni project research
SURVEY I created for uni project research
 

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