• Non ci sono risultati.

Analyzing rasters, vectors and time series using new Python interfaces in GRASS GIS 7

N/A
N/A
Protected

Academic year: 2021

Condividi "Analyzing rasters, vectors and time series using new Python interfaces in GRASS GIS 7"

Copied!
1
0
0

Testo completo

(1)

LATEX TikZposter

Analyzing rasters, vectors and time series using new Python interfaces in GRASS GIS 7

aclav Petr´

aˇs

1

, Anna Petr´

aˇs

ov´

a

1

, Yann Chemin

2

, Pietro Zambelli

3

, Martin Landa

4

, S¨oren Gebbert

5

, Markus Neteler

6

, and Peter L¨owe

7

1North Carolina State University, Raleigh, USA (wenzeslaus@gmail.com, vpetras@ncsu.edu), 2International Water Management Institute, Pelawatta, Sri Lanka, 3EURAC Research, Institute for Renewable Energy, Bolzano/Bozen, Italy, 4Faculty of Civil Engineering, Czech Technical University in Prague, Czech Republic, 5Th¨unen Institute of Climate-Smart Agriculture, Braunschweig, Germany, 6Research and Innovation Centre, Fondazione Edmund Mach, San Michele all’Adige, Italy, 7TIB Hannover - German National Library of Science and Technology, Hanover, Germany

GRASS GIS

Analyzing rasters, vectors and time series using new Python interfaces in GRASS GIS 7

aclav Petr´

aˇs

1

, Anna Petr´

aˇs

ov´

a

1

, Yann Chemin

2

, Pietro Zambelli

3

, Martin Landa

4

, S¨oren Gebbert

5

, Markus Neteler

6

, and Peter L¨owe

7

1North Carolina State University, Raleigh, USA (wenzeslaus@gmail.com, vpetras@ncsu.edu), 2International Water Management Institute, Pelawatta, Sri Lanka, 3EURAC Research, Institute for Renewable Energy, Bolzano/Bozen, Italy, 4Faculty of Civil Engineering, Czech Technical University in Prague, Czech Republic, 5Th¨unen Institute of Climate-Smart Agriculture, Braunschweig, Germany, 6Research and Innovation Centre, Fondazione Edmund Mach, San Michele all’Adige, Italy, 7TIB Hannover - German National Library of Science and Technology, Hanover, Germany

GRASS GIS

Highlights

GRASS GIS [1] is a platform for geospatial computations.

The functionality is divided into a set of modules (individual tools, functions,

algorithms or models).

Core libraries and algorithms implemented in C for high performance.

Both the modules and the libraries are accessible through the Python API.

Specialized Python APIs support different use cases ranging from high level

scripting to fine data editing.

It is simple to build graphical user interface.

NumPy or IPython can be used together with GRASS GIS Python APIs.

Automatic creation of GUI and CLI

The g.parser module provides full interface definition support for Python scripts including creation of stan-dardized part of a help page and command line checking. Each script which uses the GRASS GIS parser can publish definition of its parameters (options and flags) in XML. The GRASS GIS graphical user interface is able to use the XML to dynamically generate an interactive graphical dialog with unified styling.

# % module

# % d e s c r i p t i o n : Adds the values of two rasters ( A + B )

# % k e y w o r d s : raster

# % k e y w o r d s : algebra

# % k e y w o r d s : sum

# % end

# % option G _ O P T _ R _ I N P U T

# % key : araster

# % d e s c r i p t i o n : Raster A in the e x p r e s s i o n A + B

# % end

# % option G _ O P T _ R _ I N P U T

# % key : braster

# % d e s c r i p t i o n : Raster B in the e x p r e s s i o n A + B

# % end

# % option G _ O P T _ R _ O U T P U T

# % end

D e s c r i p t i o n :

Adds the values of two rasters ( A + B ) Ke ywo rds :

raster , algebra , sum Usage :

r . plus araster = name braster = name output = name [ - - o v e r w r i t e ] [ - - help ] [ - - verbose ]

Flags :

-- o Allow output files to o v e r w r i t e e xis tin g files -- h Print usage summary

-- v Verbose module output -- q Quiet module output

-- ui Force l a u n c h i n g GUI dialog P a r a m e t e r s :

araster Name of input raster A in an e x p r e s s i o n A + B braster Name of input raster B in an e x p r e s s i o n A + B

output Name for output raster map

GRASS Scripting Library interface to GRASS GIS modules

The grass.script package offers simple and straightforward syntax to call GRASS GIS modules:

r u n _ c o m m a n d (

’r . n e i g h b o r s ’

, input =

’ e l e v a t i o n ’

,

output =

’ e l e v a t i o n _ s m o o t h ’

,

method =

’ median ’

, flags =

’c ’

)

PyGRASS interface to GRASS GIS modules

The grass.pygrass package provides a object-oriented way to work with GRASS GIS modules and their parameters:

r _ n e i g h b o r s = Module (

’r . n e i g h b o r s ’

, input =

’ e l e v a t i o n ’

,

output =

’ e l e v a t i o n _ s m o o t h ’

,

method =

’ median ’

, flags =

’c ’

)

# get result with a l t e r n a t i v e method

r _ n e i g h b o r s . inputs . method =

’ mode ’

r _ n e i g h b o r s . outputs . output =

’ e l e v a t i o n _ s m o o t h _ 2 ’

r _ n e i g h b o r s . run ()

Additionally, the grass.pygrass package offers simpler, Python oriented, way of accessing modules:

r _ n e i g h b o r s = r . n e i g h b o r s (

input =

’ e l e v a t i o n ’

, output =

’ e l e v a t i o n _ s m o o t h ’

,

method =

’ median ’

, flags =

’c ’

)

Using documentation for GRASS GIS modules

Documentation of GRASS GIS modules usually use Bash syntax to provide an example of usage, e.g.: r.neighbors input=elevation output=elevation_smooth method=median -c

This syntax can be easily rewritten to the grass.script syntax or the grass.pygrass syntax shown above.

IPython Notebook

IPython Notebook is a web-based tool to develop, document, and execute code, as well as communicate the results. In combination with GRASS GIS, it is an excellent tool to process and visualize your geospatial data, integrate formulas, explanatory text and maps, and interact with remote servers and clusters.

PyGRASS interface to C libraries

Examples of using the API to convert a raster map to a NumPy array and back to raster:

import numpy as np

from grass . pygrass . raster import R a s t e r R o w

from grass . pygrass . raster . buffer import Buffer from grass . pygrass . gis . region import Region

def raster 2numpy ( name , mapset ):

""" Return a numpy array from a raster map """

with R a s t e r R o w ( name , mapset , mode =’r ’) as array : return np . array ( array )

def numpy2 raster ( array , mtype , name ):

""" Save a numpy array to a raster map """ reg = Region ()

if ( reg . rows , reg . cols ) != array . shape :

msg = " Region and array shape are d i f f e r e n t : % r != % r "

raise T y p e E r r o r ( msg % (( reg . rows , reg . cols ) , array . shape )) with R a s t e r R o w ( name , mode =’w ’, mtype = mtype ) as new :

newrow = Buffer (( array . shape [1] ,) , mtype = mtype ) for row in array :

newrow [:] = row [:] # cast array to raster type

new . put_row ( newrow ) # write row to raster map

# note that there is a s p e c i a l i z e d package which i m p l e m e n t s this f u n c t i o n a l i t y

In addition to PyGRASS interface, advanced programmers can use ctypes interface to access C functions from GRASS GIS libraries directly.

Testing the algorithms

To show that all promised functionality is available and algorithm works as expected every module should be supplied with a test. This also ensures that functionality can be simply tested any time in the future [3].

# run the series i n t e r p o l a t i o n module in a highly c o n t r o l l e d way

self . a s s e r t M o d u l e (’r . series . interp ’,

input =[’ prec_ 1 ’, ’ prec_ 5 ’] , datapos =(0.0, 1.0) , output =[’ prec_ 2 ’, ’ prec_ 3 ’, ’ prec_ 4 ’] ,

s a m p l i n g p o s =(0.2 5, 0.5 , 0.7 5) , method =’ linear ’)

# check the i n t e r p o l a t e d raster prec_ 2 for minimum and maximum ( same here )

self . a s s e r t R a s t e r M i n M a x ( map =’ prec_ 2 ’, refmin =2 0 0, refmax =2 0 0)

Tests can use standardize datasets or use custom reference data. It is very easy to write a sophisticated test just by checking a statistical summary of computation results.

GRASS GIS modules, addons and Python scripts

A Python script can by turned into a GRASS GIS module by adding a definition of the interface using GRASS GIS parser mechanism. Another difference is that GRASS GIS modules expect to be executed in GRASS GIS session. Python scripts which are using GRASS GIS can be written in a way that GRASS GIS session is not required; the setup of a necessary environment is done in the script itself in this case.

The GRASS GIS Addon repository contains modules from wide range of contributors and ensures vendor-independent long-term preservation of the code and ensures an easy distribution of module to individual users. Well maintained modules in Addons can be moved to GRASS GIS core.

Alternatives to Python

GRASS GIS API is not limited only to Python. GRASS GIS modules are command line tools, so they can be used in shell scripting (e.g. Bash) and as subprocesses in virtually any language as long as the proper environment is set. The GRASS GIS library provides a C API which is commonly used to create GRASS GIS modules in C and C++ programming languages. Finally, GRASS GIS modules can be used within R statistical environment using the rgrass7 package.

GRASS GIS Temporal Framework

The GRASS GIS Temporal Framework implements the temporal GIS functionality and provides a Python API to implement spatio-temporal processing modules. The framework introduces space-time datasets that represent space-time series of raster, 3D raster or vector maps. An API example:

# Import and i n i t i a l i z e the GRASS GIS t e m p o r a l f r a m e w o r k

import grass . t emp ora l as tgis

tgis . init ()

# Open an e x i s t i n g space time raster dataset ( STRDS )

t e m p _ s t r d s = tgis . o p e n _ o l d _ s t d s ( name =

" t e m p _ d a i l y "

,

type =

" strds "

)

# Shift all r e g i s t e r e d raster map layer 2 days in the future

t e m p _ s t r d s . shift (

" 2 days "

)

# Open an e x i t s i n g time stamped raster map as map object

temp_

2 4

Mar

7 7

= tgis . R a s t e r D a t a s e t (

’ temp_ 1 9 7 7 _Mar_ 2 4 @soeren ’

)

# U n r e g i s t e r the raster map from the STRDS

t e m p _ s t r d s . u n r e g i s t e r _ m a p ( temp_

2 4

Mar

7 7

)

# Get a list of all r e g i s t e r e d raster map layers with

# a start time later 1 9 9 0 -0 5 -2 2 from the STRDS

maps = t e m p _ s t r d s . g e t _ r e g i s t e r e d _ m a p s _ a s _ o b j e c t s (\

where =

" s t a r t _ t i m e > ’1 9 9 0 -0 5 -2 2 ’"

)

# Create a t e m p o r a l buffer of 6 h for each map in the list

for map in maps :

map . t e m p o r a l _ b u f f e r (

" 6 hours "

, update = True )

# Compute new spatio - t e m p o r a l extent and g r a n u l a r i t y

t e m p _ s t r d s . u p d a t e _ f r o m _ r e g i s t e r e d _ m a p s ()

# Get the g r a n u a r i t y of the STRDS

gran = t e m p _ s t r d s . g e t _ g r a n u l a r i t y ()

References and Acknowledgements

[1] Neteler, M., Bowman, M. H., Landa, M., Metz, M., 2012. GRASS GIS: A multi-purpose open source GIS. Environmental Modelling & Software, 31, 124–130.

[2] Gebbert, S., Pebesma, E., 2014. A temporal GIS for field based environmental modeling. Environmental Modelling & Software 53, 1–12.

[3] Petras, V., Gebbert, S., 2014. Testing framework for GRASS GIS: ensuring reproducibility of scientific geospatial computing. Poster presented at: AGU Fall Meeting, December 15-19, 2014, San Francisco, USA.

[4] Zambelli, P., Gebbert, S., Ciolli, M., 2013. Pygrass: An Object Oriented Python Application Program-ming Interface (API) for Geographic Resources Analysis Support System (GRASS) Geographic Informa-tion System (GIS). ISPRS InternaInforma-tional Journal of Geo-InformaInforma-tion 2, 201–219.

Acknowledgements

GRASS GIS is a OSGeo project. OSGeo provides infrastructure for project websites, mailing lists and source code management.

Initial development of pygrass and gunittest packages was done during Google Summer of Code 2012 and 2014.

Luca Delucchi, Italy, contributed significantly to development of Python interfaces for GRASS GIS 7 through extensive testing in early stages of development, documenting the APIs and general contributions to the code itself.

More information

GRASS GIS website grass.osgeo.org

GRASS GIS Python libraries documentation grass.osgeo.org/grass71/manuals

Riferimenti

Documenti correlati

This table presents the OLS regression results from Equation (2) where scaled R&D expenditures in year t+1 are regressed on contemporaneous government ownership, time varying

The article examines the notion of untruth in relation to photography and illustrates the function of the photograph as a stylistic and linguistic device that explains the idea of

The lowest average contribution (26.41 experimental coins) corresponds to the treatment with partial information: this figure is statistically different from those

For untargeted metabolomics, characteristic features such as mass resolving power, mass range, mass accuracy, and data acquisition frequency should be considered, while

22 Les traits de ce drame sont réunis dans la gure de la prostituée : la xation du corps de la femme sous forme de marchandise qui se prête au désir masculin pétri ant, la

La poetica della contraddizione ha accomunato questi teatranti eccezionali attra- verso l’elaborazione di un particolare linguaggio della scena dal tratto fortemente allegorico

se da quella di ‘scrittrice lesbica’ passiamo ad analizzare la categoria della ‘tematica lesbica’, si pongono ovvi problemi di esclusione, che riguar- dano scrittrici