# GRASS SoC Ideas 2013

## About

This is the GRASS page for Google Summer of Code 2013. Here we will list project ideas and and other information related to the GRASS GSoC projects.

## Ideas

- Project ideas of
**your own**are also most welcome and often the best.

### Symbology / Cartography

- Allow display of a vector legend in the map display (equivalent to current d.legend implementation for rasters)

- Expand symbology

*HB: note that SoC only accepts coding projects, not graphics design or documentation projects. Adding svg/eps support to a d.* module and ps.map would be quite helpful. See the d.graph help page and ps.map's "eps" and "vpoints" instructions.*

- Rework the complete set of thematic cartography tools such as d.vect.thematic and d.thematic.area and the related classification routines

### Imagery

- Based on the work on segmentation in GSoC 2012 develop routines for object-based (ore region-based) image classification. This probably entails:
- Characterizing segments. Thsi includes producing statistics such as mean, median, variance of the segmented data within each delineated segment.
- Classifying segments based on the characteristics and (possibly) training areas
- Interface with other modules in a consistent workflow (i.cluster, r.fuzzy, etc)

- Implement hierarchical classification tools (e.g. being able to create a large class "forest", with subclasses of different types of forests)

- Interface with the Orfeo toolbox (OTB), which is an open source, ITK-based, C++ library of (spatial) image processing library. OTB implements a very wide set of interesting features for anybody working with raster data - in particular satellite imagery: radiometric corrections, orthorectification, filtering, feature extraction, image segmentation , classification, change detection, etc.

### Temporal GIS Algebra

We (Soeren Gebbert and Thomas Leppelt) would like to implement a spatio-temporal map algebra for raster and vector data in GRASS7.

Role:

- Mentor: Soeren Gebbert
- GSoC Student: Thomas Leppelt

Implementation goals:

- Spatio-temporal vector algebra module
**t.vect.mapcalc**- The algebra will be based on vector map operations provided from
**v.overlay**(and, or, xor, not),**v.buffer**(buff_point, buff_line, buff_area),**v.patch**(patch), ... , temporal variables (day of year, weekday, datum, time, ...) and temporal topology relations (predecessor, successor, follows, equals, ...) - The resulting module will be able to process space time vector datasets using expressions like:

- The algebra will be based on vector map operations provided from

```
# Compute the intersection between the space time vector datasets A and B
# from maps with equal time stamps. The STVDS A is used as temporal reference.
# A new STVDS C will be created with the same time stamps as A.
t.vect.mapcalc inputs=A,B timeref=A output=C expr="C = if(equal(B), and(A,B))"
# Nested boolean operations are supported and temporal neighborhood computation
t.vect.mapcalc input=A,B,C tempref=A output=D \
expr="D = if(successor(B) && predecessor(C), and(A, xor(successor(B), buff_point(predecessor(C), 100)))"
# Date and time can be used in the expression
t.vect.mapcalc input=A,B tempref=A output=C \
expr="C = if(start_year() >= 2001 || start_year() <= 2010, and(A,B))"
```

- Spatio-temporal raster algebra module
**t.rast.mapcalc**- The algebra will be based on the existing
**r.mapcalc**raster map algebra, temporal variables (day of year, weekday, datum, time, ...) and temporal topology relations (predecessor, successor, follows, equals, ...) - The resulting module will be able to process space time raster datasets using expressions like:

- The algebra will be based on the existing

```
# Compute the sum between the space time raster datasets A and B
# from maps with equal time stamps. The STRDS A is used as temporal reference.
# A new STRDS C will be created with the same time stamps as A.
t.rast.mapcalc inputs=A,B timeref=A output=C expr="C = if(equal(B), A + B)"
# Spatio-temporal neighborhood computation. STRDS C will have the same time stamps as A.
t.rast.mapcalc input=B timeref=A output=C \
expr="C = if(successor(B) && predecessor(B), (successor(B)[0,0] + B[0,0] + predecessor(B)[0,0])/3.0, B[0,0])"
```

- The GRASS GIS temporal framework will be utilized and the pygrass module interface
- PLY will be used for lexical analysis and parser generation
- Temporal algebra will be equivalent for booth modules