21. Integrazione con GRASS GIS

L’integrazione di GRASS fornisce l’accesso ai database e alle funzionalità di GRASS GIS (vedi GRASS-PROJECT in Letteratura e riferimenti web). L’integrazione consiste di due parti: sorgente e plugin. Il sorgente consente di sfogliare, gestire e visualizzare i layer raster e vettoriali GRASS. Il plugin può essere utilizzato per creare nuove posizioni e gruppi di GRASS, modificare la regione di GRASS, creare e modificare i livelli vettoriali e analizzare i dati GRASS 2D e 3D con più di 400 moduli GRASS. In questa sezione, introdurremo le funzionalità del sorgente e del plug-in e forniremo alcuni esempi di gestione e utilizzo dei dati GRASS.

ll sorgente supporta GRASS versione 6 e 7, il plugin supporta GRASS 6 e 7 (a partire da QGIS 2.12). La distribuzione QGIS può contenere sorgente/plugin per GRASS 6, GRASS 7 o per entrambe le versioni contemporaneamente (i file binari hanno nomi dei file diversi). Tuttavia, solo una versione del sorgente/plugin può essere caricata durante l’esecuzione.

21.1. Demo insieme di dati

As an example, we will use the QGIS Alaska dataset (see section Dati campione). It includes a small sample GRASS LOCATION with three vector layers and one raster elevation map. Create a new folder called grassdata, download the QGIS “Alaska” dataset qgis_sample_data.zip from https://qgis.org/downloads/data/ and unzip the file into grassdata.

More sample GRASS LOCATIONs are available at the GRASS website at https://grass.osgeo.org/download/sample-data/.

21.2. Caricare layer raster e vettoriali GRASS

If the provider is loaded in QGIS, the location item with GRASS grass icon is added in the browser tree under each folder item which contains GRASS location. Go to the folder grassdata and expand location alaska and mapset demo.

Puoi caricare raster e vettori GRASS come qualsiasi altro layer dal browser facendo doppio clic sul layer o trascinando e rilasciando sulla mappa o sulla legenda.

Suggerimento

Caricare dati GRASS

Se non vedi la location GRASS, verifica in Guida ▶ Informazioni ▶ Sorgente dati se il sorgente dei vettori GRASS è caricato.

21.3. Importare dati nelle LOCATION GRASS tramite trascina e rilascia.

Questa sezione da un esempio di come importare dati raster e vettoriali in un mapset di GRASS. 76

  1. Nel browser QGIS accedi al mapset in cui desideri importare i dati.

  2. Nel browser QGIS trova un layer che vuoi importare in GRASS, nota che puoi aprire un’altra finestra del browser (Browser Panel (2)) se i dati sorgente sono troppo lontani dal mapset nell’albero.

  3. Trascina un layer e rilascialo sul mapset di destinazione. L’importazione potrebbe richiedere del tempo per i layer più grandi, vedrai un icona animata |importazione| di fronte al nuovo oggetto del layer fino al termine dell’importazione.

Quando i raster sono in CRS diversi, possono essere riproiettati utilizzando un Approximate (veloce) o Exact (esatta). Se viene creato un collegamento al raster sorgente (utilizzando `` r.external``), i dati di origine sono nello stesso CRS e il formato è noto a GDAL, verranno utilizzati i dati di origine CRS. Puoi impostare queste opzioni nella scheda Browser in: ref:` grass_options`.

Se un raster ha più bande, viene creata una nuova mappa GRASS per ogni raster con .<band number> suffisso e tutto viene raggruppato in rasterGroup. I raster esterni hanno un’icona diversa rasterLink.

21.4. Gestione dei dati GRASS in QGIS Browser

  • Copia delle mappe: le mappe GRASS possono essere copiate tra i mapset all’interno della stessa location mediante trascinamento della selezione.

  • Eliminazione delle mappe: fai clic con il tasto destro su una mappa GRASS e seleziona Elimina dal menu contestuale.

  • Rinominare le mappe: fare clic con il tasto destro su una mappa GRASS e seleziona :guilabel:`Rinomina” dal menu contestuale.

21.5. Opzioni di GRASS

Le opzioni GRASS possono essere impostate nella finestra di dialogo Opzioni di GRASS, che può essere aperta facendo clic con il pulsante destro del mouse sulla posizione o sull’elemento mapset nel browser e quindi scegliendo Opzioni di GRASS.

21.6. Avviare il plugin GRASS

To use GRASS functionalities in QGIS, you must select and load the GRASS plugin using the Plugin Manager. To do this, go to the menu Plugins ▶ showPluginManager Manage and Install Plugins…, select checkbox GRASS and click OK.

Le seguenti funzioni principali sono fornite con il menu GRASS (Plugins -> GRASS) quando si avvia il plugin GRASS:

  • grassOpenMapset Apri mapset

  • grassNewMapset Nuovo mapset

  • grassCloseMapset Chiudi mapset

  • grassTools Apri strumenti GRASS

  • grassRegion Visulalizza la regione di GRASS attuale

  • general Opzioni di GRASS

21.7. Aprire un mapset GRASS

Per accedere a strumenti GRASS devi aprire un mapset di GRASS nel plugin (gli strumenti sono disabilitati se nessun mapset è aperto). Puoi aprire un mapset dal browser: fai clic con il pulsante destro del mouse sull’elemento mapset e quindi scegli Apri mapset dal menu contestuale.

21.8. LOCATION e MAPSET in GRASS

I dati GRASS sono memorizzati in una cartella indicata come GISDBASE. Questa cartella, spesso chiamata grassdata, deve essere creata prima di iniziare a lavorare con il plugin GRASS in QGIS. All’interno di questa cartella, i dati GIS GRASS sono organizzati per progetti memorizzati in sottocartelle chiamate LOCATION. Ogni LOCATION è definito dal suo sistema di coordinate, dalla proiezione e dai confini geografici. Ciascun LOCATION può avere diversi MAPSET (sottocartella di LOCATION) che vengono utilizzati per suddividere il progetto in diversi argomenti o sottoregioni o come aree di lavoro per i singoli membri del team (vedere Neteler & Mitasova 2008 in: ref: literature_and_web). Per analizzare i vettori e i raster con i moduli GRASS, devi generalmente importarli in una LOCATION GRASS. (Questo non è sempre vero - con i moduli GRASS r.external e :file:` v.external` è possibile creare collegamenti di sola lettura a insieme di dati esterni supportati da GDAL/OGR senza importarli. Questo non è un modo perchi inizia a lavorare con GRASS, quindi questa funzionalità non sarà descritta qui.)

../../../_images/grass_location.png

Fig. 21.1 Dati di GRASS all’interno della LOCATIoN Alaska

21.9. Importare dati nelle LOCATION GRASS

See section Importare dati nelle LOCATION GRASS tramite trascina e rilascia. to find how data can be easily imported by dragging and dropping in the browser.

This section gives an example of how to import raster and vector data into the “alaska” GRASS LOCATION provided by the QGIS “Alaska” dataset in traditional way, using standard GRASS modules. Therefore, we use the landcover raster map landcover.img and the vector GML file lakes.gml from the QGIS “Alaska” dataset (see Dati campione).

  1. Avvia QGIS e assicurati che il plugin GRASS sia caricato

  2. In the GRASS toolbar, click the grassOpenMapset Open MAPSET icon to bring up the MAPSET wizard.

  3. Select as GRASS database the folder grassdata in the QGIS Alaska dataset, as LOCATION “alaska”, as MAPSET “demo” and click OK.

  4. Now click the grassTools Open GRASS tools icon. The GRASS Toolbox (see section The GRASS Toolbox) dialog appears.

  5. To import the raster map landcover.img, click the module r.in.gdal in the Modules Tree tab. This GRASS module allows you to import GDAL-supported raster files into a GRASS LOCATION. The module dialog for r.in.gdal appears.

  6. Scorri la cartella raster nell’insieme di dati “Alaska” di QGIS e seleziona il file landcover.img.

  7. As raster output name, define landcover_grass and click Run. In the Output tab, you see the currently running GRASS command r.in.gdal -o input=/path/to/landcover.img output=landcover_grass.

  8. When it says Successfully finished, click View Output. The landcover_grass raster layer is now imported into GRASS and will be visualized in the QGIS canvas.

  9. To import the vector GML file lakes.gml, click the module v.in.ogr in the Modules Tree tab. This GRASS module allows you to import OGR-supported vector files into a GRASS LOCATION. The module dialog for v.in.ogr appears.

  10. Scorri la cartella gml nell’insieme di dati “Alaska” di QGIS e selezionare il file lakes.gml come file OGR.

  11. As vector output name, define lakes_grass and click Run. You don’t have to care about the other options in this example. In the Output tab you see the currently running GRASS command v.in.ogr -o dsn=/path/to/lakes.gml output=lakes\_grass.

  12. When it says Succesfully finished, click View Output. The lakes_grass vector layer is now imported into GRASS and will be visualized in the QGIS canvas.

21.9.1. Creare una nuova LOCATION GRASS

As an example, here is the sample GRASS LOCATION alaska, which is projected in the Albers Equal Area projection using feet as units. This sample GRASS LOCATION alaska will be used for all examples and exercises in the following GRASS-related sections. It is useful to download and install the dataset on your computer (see Dati campione).

  1. Avvia QGIS e assicurati che il plugin GRASS sia caricato

  2. Visualize the alaska.shp shapefile (see section Caricare un layer da un file) from the QGIS Alaska dataset (see Dati campione).

  3. In the GRASS toolbar, click on the grassNewMapset New mapset icon to bring up the MAPSET wizard.

  4. Select an existing GRASS database (GISDBASE) folder grassdata, or create one for the new LOCATION using a file manager on your computer. Then click Next.

  5. We can use this wizard to create a new MAPSET within an existing LOCATION (see section Aggiungere un nuovo MAPSET) or to create a new LOCATION altogether. Select radioButtonOn Create new location (see figure_grass_new_location).

  6. Enter a name for the LOCATION – we used “alaska” – and click Next.

  7. Define the projection by clicking on the radio button radioButtonOn Projection to enable the projection list.

  8. We are using Albers Equal Area Alaska (feet) projection. Since we happen to know that it is represented by the EPSG ID 2964, we enter it in the search box. (Note: If you want to repeat this process for another LOCATION and projection and haven’t memorized the EPSG ID, click on the projectionEnabled CRS Status icon in the lower right-hand corner of the status bar (see section Lavorare con le proiezioni)).

  9. In Filter, insert 2964 to select the projection.

  10. Click Next.

  11. To define the default region, we have to enter the LOCATION bounds in the north, south, east, and west directions. Here, we simply click on the button Set Current QGIS Extent, to apply the extent of the loaded layer alaska.shp as the GRASS default region extent.

  12. Click Next.

  13. We also need to define a MAPSET within our new LOCATION (this is necessary when creating a new LOCATION). You can name it whatever you like - we used “demo”. GRASS automatically creates a special MAPSET called PERMANENT, designed to store the core data for the project, its default spatial extent and coordinate system definitions (see Neteler & Mitasova 2008 in Letteratura e riferimenti web).

  14. Check out the summary to make sure it’s correct and click Finish.

  15. The new LOCATION, “alaska”, and two MAPSETs, “demo” and “PERMANENT”, are created. The currently opened working set is “demo”, as you defined.

  16. Si noti che alcuni strumenti della barra di GRASS precedentemente disabilitati sono ora attivi.

../../../_images/create_grass_location.png

Fig. 21.2 Creating a new GRASS LOCATION or a new MAPSET in QGIS

If that seemed like a lot of steps, it’s really not all that bad and a very quick way to create a LOCATION. The LOCATION “alaska” is now ready for data import (see section Importare dati nelle LOCATION GRASS). You can also use the already-existing vector and raster data in the sample GRASS LOCATION “alaska”, included in the QGIS “Alaska” dataset Dati campione, and move on to section Il modello dati vettoriale di GRASS.

21.9.2. Aggiungere un nuovo MAPSET

A user has write access only to a GRASS MAPSET which he or she created. This means that besides access to your own MAPSET, you can read maps in other users” MAPSETs (and they can read yours), but you can modify or remove only the maps in your own MAPSET.

All MAPSETs include a WIND file that stores the current boundary coordinate values and the currently selected raster resolution (see Neteler & Mitasova 2008 in Letteratura e riferimenti web, and section Lo strumento Regione di GRASS).

  1. Avvia QGIS e assicurati che il plugin GRASS sia caricato

  2. In the GRASS toolbar, click on the grassNewMapset New mapset icon to bring up the MAPSET wizard.

  3. Select the GRASS database (GISDBASE) folder grassdata with the LOCATION “alaska”, where we want to add a further MAPSET called “test”.

  4. Click Next.

  5. We can use this wizard to create a new MAPSET within an existing LOCATION or to create a new LOCATION altogether. Click on the radio button radioButtonOn Select location (see figure_grass_new_location) and click Next.

  6. Enter the name test for the new MAPSET. Below in the wizard, you see a list of existing MAPSETs and corresponding owners.

  7. Click Next, check out the summary to make sure it’s all correct and click Finish.

21.10. Il modello dati vettoriale di GRASS

It is important to understand the GRASS vector data model prior to digitizing. In general, GRASS uses a topological vector model. This means that areas are not represented as closed polygons, but by one or more boundaries. A boundary between two adjacent areas is digitized only once, and it is shared by both areas. Boundaries must be connected and closed without gaps. An area is identified (and labelled) by the centroid of the area.

Besides boundaries and centroids, a vector map can also contain points and lines. All these geometry elements can be mixed in one vector and will be represented in different so-called “layers” inside one GRASS vector map. So in GRASS, a layer is not a vector or raster map but a level inside a vector layer. This is important to distinguish carefully. (Although it is possible to mix geometry elements, it is unusual and, even in GRASS, only used in special cases such as vector network analysis. Normally, you should prefer to store different geometry elements in different layers.)

It is possible to store several “layers” in one vector dataset. For example, fields, forests and lakes can be stored in one vector. An adjacent forest and lake can share the same boundary, but they have separate attribute tables. It is also possible to attach attributes to boundaries. An example might be the case where the boundary between a lake and a forest is a road, so it can have a different attribute table.

The “layer” of the feature is defined by the “layer” inside GRASS. “Layer” is the number which defines if there is more than one layer inside the dataset (e.g., if the geometry is forest or lake). For now, it can be only a number. In the future, GRASS will also support names as fields in the user interface.

Attributes can be stored inside the GRASS LOCATION as dBase, SQLite3 or in external database tables, for example, PostgreSQL, MySQL, Oracle, etc.

Gli attributi contenuti nelle tabelle del database sono collegati alla geometria per il tramite di un valore ’category’.

’Category’ (key, ID) è un valore intero collegato alle primitive geometriche ed è usato come collegamento ad una colonna chiave nella tabella del database.

Suggerimento

Conoscere il modello dati vettoriale di GRASS

The best way to learn the GRASS vector model and its capabilities is to download one of the many GRASS tutorials where the vector model is described more deeply. See https://grass.osgeo.org/documentation/manuals/ for more information, books and tutorials in several languages.

21.11. Creare un nuovo layer vettoriale GRASS

To create a new GRASS vector layer, select one of following items from mapset context menu in the browser:

  • New Point Layer

  • New Line Layer

  • New Polygon Layer

and enter a name in the dialog. A new vector map will be created and layer will be added to canvas and editing started. Selecting type of the layer does not restrict geometry types which can be digitized in the vector map. In GRASS, it is possible to organize all sorts of geometry types (point, line and polygon) in one vector map. The type is only used to add the layer to the canvas, because QGIS requires a layer to have a specific type.

It is also possible to add layers to existing vector maps selecting one of the items described above from context menu of existing vector map.

In GRASS, it is possible to organize all sorts of geometry types (point, line and area) in one layer, because GRASS uses a topological vector model, so you don’t need to select the geometry type when creating a new GRASS vector. This is different from shapefile creation with QGIS, because shapefiles use the Simple Feature vector model (see section Creare nuovi layer Vettore).

21.12. Digitalizzare e modificare layer vettoriali GRASS

GRASS vector layers can be digitized using the standard QGIS digitizing tools. There are however some particularities, which you should know about, due to

  • GRASS topological model versus QGIS simple feature

  • complexity of GRASS model

    • multiple layers in single maps

    • multiple geometry types in single map

    • geometry sharing by multiple features from multiple layers

The particularities are discussed in the following sections.

Save, discard changes, undo, redo

Avvertimento

All the changes done during editing are immediately written to vector map and related attribute tables.

Changes are written after each operation, it is however, possible to do undo/redo or discard all changes when closing editing. If undo or discard changes is used, original state is rewritten in vector map and attribute tables.

There are two main reasons for this behaviour:

  • It is the nature of GRASS vectors coming from conviction that user wants to do what he is doing and it is better to have data saved when the work is suddenly interrupted (for example, blackout)

  • Necessity for effective editing of topological data is visualized information about topological correctness, such information can only be acquired from GRASS vector map if changes are written to the map.

Barra degli strumenti di digitalizzazione

The “Digitizing Toolbar” has some specific tools when a GRASS layer is edited:

Icona

Strumento

Azione

capturePoint

Nuovo punto

Digitalizza un nuovo punto

captureLine

Nuova linea

Digitalizza una nuova linea

captureBoundary

Nuovo contorno

Digitize new boundary

captureCentroid

Nuovo centroide

Digitalizza un nuovo centroide (imposta l’etichetta per un’area esistente)

capturePolygon

New Closed Boundary

Digitize new closed boundary

Table GRASS Digitizing: GRASS Digitizing Tools

Suggerimento

Digitalizzare poligoni in GRASS

If you want to create a polygon in GRASS, you first digitize the boundary of the polygon. Then you add a centroid (label point) into the closed boundary. The reason for this is that a topological vector model links the attribute information of a polygon always to the centroid and not to the boundary.

Category

Category, often called cat, is sort of ID. The name comes from times when GRASS vectors had only singly attribute «category». Category is used as a link between geometry and attributes. A single geometry may have multiple categories and thus represent multiple features in different layers. Currently it is possible to assign only one category per layer using QGIS editing tools. New features have automatically assigned new unique category, except boundaries. Boundaries usually only form areas and do not represent linear features, it is however possible to define attributes for a boundary later, for example in different layer.

New categories are always created only in currently being edited layer.

It is not possible to assign more categories to geometry using QGIS editing, such data are properly represented as multiple features, and individual features, even from different layers, may be deleted.

Attributes

Attributes of currently edited layer can only be modified. If the vector map contains more layers, features of other layers will have all attributes set to “<not editable (layer #)>” to warn you that such attribute is not editable. The reason is, that other layers may have and usually have different set of fields while QGIS only supports one fixed set of fields per layer.

If a geometry primitive does not have a category assigned, a new unique category is automatically assigned and new record in attribute table is created when an attribute of that geometry is changed.

Suggerimento

If you want to do bulk update of attributes in table, for example using “Field Calculator” (Usare il Calcolatore di campo), and there are features without category which you don’t want to update (typically boundaries), you can filter them out by setting “Advanced Filter” to cat is not null.

Editing style

The topological symbology is essential for effective editing of topological data. When editing starts, a specialized “GRASS Edit” renderer is set on the layer automatically and original renderer is restored when editing is closed. The style may be customized in layer properties “Style” tab. The style can also be stored in project file or in separate file as any other style. If you customize the style, do not change its name, because it is used to reset the style when editing is started again.

Suggerimento

Do not save project file when the layer is edited, the layer would be stored with “Edit Style” which has no meaning if layer is not edited.

The style is based on topological information which is temporarily added to attribute table as field “topo_symbol”. The field is automatically removed when editing is closed.

Suggerimento

Do not remove “topo_symbol” field from attribute table, that would make features invisible because the renderer is based on that column.

Aggancio

To form an area, vertices of connected boundaries must have exactly the same coordinates. This can be achieved using snapping tool only if canvas and vector map have the same CRS. Otherwise, due conversion from map coordinates to canvas and back, the coordinate may become slightly different due to representation error and CRS transformations.

Suggerimento

Use layer’s CRS also for canvas when editing.

Limitations

Simultaneous editing of multiple layers within the same vector at the same time is not supported. This is mainly due to the impossibility of handling multiple undo stacks for a single data source.

nix osx On Linux and macOS only one GRASS layer can be edited at time. This is due to a bug in GRASS which does not allow to close database drivers in random order. This is being solved with GRASS developers.

Suggerimento

Permessi di modifica in GRASS

You must be the owner of the GRASS MAPSET you want to edit. It is impossible to edit data layers in a MAPSET that is not yours, even if you have write permission.

21.13. Lo strumento Regione di GRASS

The region definition (setting a spatial working window) in GRASS is important for working with raster layers. Vector analysis is by default not limited to any defined region definitions. But all newly created rasters will have the spatial extension and resolution of the currently defined GRASS region, regardless of their original extension and resolution. The current GRASS region is stored in the $LOCATION/$MAPSET/WIND file, and it defines north, south, east and west bounds, number of columns and rows, horizontal and vertical spatial resolution.

It is possible to switch on and off the visualization of the GRASS region in the QGIS canvas using the grassRegion Display current GRASS region button.

The region can be modified in “Region” tab in “GRASS Tolls” dock widget. Type in the new region bounds and resolution, and click Apply. If you click on Select the extent by dragging on canvas you can select a new region interactively with your mouse on the QGIS canvas dragging a rectangle.

The GRASS module g.region provides a lot more parameters to define an appropriate region extent and resolution for your raster analysis. You can use these parameters with the GRASS Toolbox, described in section The GRASS Toolbox.

21.14. The GRASS Toolbox

The grassTools Open GRASS Tools box provides GRASS module functionalities to work with data inside a selected GRASS LOCATION and MAPSET. To use the GRASS Toolbox you need to open a LOCATION and MAPSET that you have write permission for (usually granted, if you created the MAPSET). This is necessary, because new raster or vector layers created during analysis need to be written to the currently selected LOCATION and MAPSET.

../../../_images/grass_toolbox_moduletree.png

Fig. 21.3 GRASS Toolbox and Module Tree

21.14.1. Lavorare con i moduli GRASS

The GRASS shell inside the GRASS Toolbox provides access to almost all (more than 300) GRASS modules in a command line interface. To offer a more user-friendly working environment, about 200 of the available GRASS modules and functionalities are also provided by graphical dialogs within the GRASS plugin Toolbox.

A complete list of GRASS modules available in the graphical Toolbox in QGIS version 3.10 is available in the GRASS wiki at https://grasswiki.osgeo.org/wiki/GRASS-QGIS_relevant_module_list.

It is also possible to customize the GRASS Toolbox content. This procedure is described in section Personalizzare gli strumenti GRASS.

As shown in figure_grass_toolbox, you can look for the appropriate GRASS module using the thematically grouped Modules Tree or the searchable Modules List tab.

By clicking on a graphical module icon, a new tab will be added to the Toolbox dialog, providing three new sub-tabs: Options, Output and Manual.

Opzioni

The Options tab provides a simplified module dialog where you can usually select a raster or vector layer visualized in the QGIS canvas and enter further module-specific parameters to run the module.

../../../_images/grass_module_option.png

Fig. 21.4 GRASS Toolbox Module Options

The provided module parameters are often not complete to keep the dialog simple. If you want to use further module parameters and flags, you need to start the GRASS shell and run the module in the command line.

A new feature since QGIS 1.8 is the support for a Show Advanced Options button below the simplified module dialog in the Options tab. At the moment, it is only added to the module v.in.ascii as an example of use, but it will probably be part of more or all modules in the GRASS Toolbox in future versions of QGIS. This allows you to use the complete GRASS module options without the need to switch to the GRASS shell.

Output

../../../_images/grass_module_output.png

Fig. 21.5 GRASS Toolbox Module Output

The Output tab provides information about the output status of the module. When you click the Run button, the module switches to the Output tab and you see information about the analysis process. If all works well, you will finally see a Successfully finished message.

Manuale

../../../_images/grass_module_manual.png

Fig. 21.6 GRASS Toolbox Module Manual

The Manual tab shows the HTML help page of the GRASS module. You can use it to check further module parameters and flags or to get a deeper knowledge about the purpose of the module. At the end of each module manual page, you see further links to the Main Help index, the Thematic index and the Full index. These links provide the same information as the module g.manual.

Suggerimento

Mostrare i risultati immediatamente

Se si desidera visualizzare il risultato di un’analisi immediatamente nella vista mappa, è possibile cliccare sul pulsante Visualizza Output nella porzione inferiore della scheda.

21.14.2. Esempi di utilizzo di moduli GRASS

Gli esempi che seguono mostrano le potenzialità di alcuni moduli GRASS.

21.14.2.1. Creare curve di livello

The first example creates a vector contour map from an elevation raster (DEM). Here, it is assumed that you have the Alaska LOCATION set up as explained in section Importare dati nelle LOCATION GRASS.

  • First, open the location by clicking the grassOpenMapset Open mapset button and choosing the Alaska location.

  • Now open the Toolbox with the grassTools Open GRASS tools button.

  • In the list of tool categories, double-click Raster ▶ Surface Management ▶ Generate vector contour lines.

  • Now a single click on the tool r.contour will open the tool dialog as explained above (see Lavorare con i moduli GRASS).

  • In the Name of input raster map enter gtopo30.

  • Type into the Increment between Contour levels selectNumber the value 100. (This will create contour lines at intervals of 100 meters.)

  • Inserire in Nome del vettoriale in output il nome ctour_100.

  • Click Run to start the process. Wait for several moments until the message Successfully finished appears in the output window. Then click View Output and Close.

Dal momento che la regione è pittosto estesa, il comando richiede del tempo. Una volta terminata l’operazione è possibile modificare le proprietà del nuovo layer vettoriale come descritto in Proprietà dei vettori.

Next, zoom in to a small, mountainous area in the center of Alaska. Zooming in close, you will notice that the contours have sharp corners. GRASS offers the v.generalize tool to slightly alter vector maps while keeping their overall shape. The tool uses several different algorithms with different purposes. Some of the algorithms (i.e., Douglas Peuker and Vertex Reduction) simplify the line by removing some of the vertices. The resulting vector will load faster. This process is useful when you have a highly detailed vector, but you are creating a very small-scale map, so the detail is unnecessary.

Suggerimento

Semplifica geometrie

Note that QGIS has a Vector ▶ Geometry Tools ▶ Simplify geometries tool that works just like the GRASS v.generalize Douglas-Peuker algorithm.

However, the purpose of this example is different. The contour lines created by r.contour have sharp angles that should be smoothed. Among the v.generalize algorithms, there is Chaiken’s, which does just that (also Hermite splines). Be aware that these algorithms can add additional vertices to the vector, causing it to load even more slowly.

  • Open the GRASS Toolbox and double-click the categories Vector ▶ Develop map ▶ Generalization, then click on the v.generalize module to open its options window.

  • Controllare che “ctour_100” appaia come Nome della mappa vettoriale in input.

  • From the list of algorithms, choose Chaiken’s. Leave all other options at their default, and scroll down to the last row to enter in the field Name for output vector map “ctour_100_smooth”, and click Run.

  • The process takes several moments. Once Successfully finished appears in the output windows, click View Output and then Close.

  • È possibile modificare il colore del layer vettoriale in modo da renderlo ben visibile sul raster si sfondo. Si potrà notare come le curve di livello ora appaiano meno spigolose.

../../../_images/grass_toolbox_vgeneralize.png

Fig. 21.7 GRASS module v.generalize to smooth a vector map

Suggerimento

Altri usi di r.contour

The procedure described above can be used in other equivalent situations. If you have a raster map of precipitation data, for example, then the same method will be used to create a vector map of isohyetal (constant rainfall) lines.

21.14.2.2. Creating a Hillshade 3-D effect

Several methods are used to display elevation layers and give a 3-D effect to maps. The use of contour lines, as shown above, is one popular method often chosen to produce topographic maps. Another way to display a 3-D effect is by hillshading. The hillshade effect is created from a DEM (elevation) raster by first calculating the slope and aspect of each cell, then simulating the sun’s position in the sky and giving a reflectance value to each cell. Thus, you get sun-facing slopes lighted; the slopes facing away from the sun (in shadow) are darkened.

  • Begin this example by loading the gtopo30 elevation raster. Start the GRASS Toolbox, and under the Raster category, double-click to open Spatial analysis ▶ Terrain analysis.

  • Cliccare r.shaded.relief per aprire il modulo.

  • Change the azimuth angle selectNumber 270 to 315.

  • Enter gtopo30_shade for the new hillshade raster, and click Run.

  • Quando il processo sarà completato, aggiungere il raster ombreggiatura alla vista mappa.

  • To view both the hillshading and the colors of the gtopo30 together, move the hillshade map below the gtopo30 map in the table of contents, then open the Properties window of gtopo30, switch to the Transparency tab and set its transparency level to about 25%.

Si dovrebbe vedere gtopo30 sopra la mappa di ombreggiatura in scala di grigi. Per riuscire a visualizzare appieno gli effetti dell’ombreggiatura, deselezionare gtopo30_shade.

Usare la shell di GRASS

The GRASS plugin in QGIS is designed for users who are new to GRASS and not familiar with all the modules and options. As such, some modules in the Toolbox do not show all the options available, and some modules do not appear at all. The GRASS shell (or console) gives the user access to those additional GRASS modules that do not appear in the Toolbox tree, and also to some additional options to the modules that are in the Toolbox with the simplest default parameters. This example demonstrates the use of an additional option in the r.shaded.relief module that was shown above.

../../../_images/grass_toolbox_shell.png

Fig. 21.8 The GRASS shell, r.shaded.relief module

The module r.shaded.relief can take a parameter zmult, which multiplies the elevation values relative to the X-Y coordinate units so that the hillshade effect is even more pronounced.

  • Load the gtopo30 elevation raster as above, then start the GRASS Toolbox and click on the GRASS shell. In the shell window, type the command r.shaded.relief map=gtopo30 shade=gtopo30_shade2 azimuth=315 zmult=3 and press Enter.

  • After the process finishes, shift to the Browse tab and double-click on the new gtopo30_shade2 raster to display it in QGIS.

  • As explained above, move the shaded relief raster below the gtopo30 raster in the table of contents, then check the transparency of the colored gtopo30 layer. You should see that the 3-D effect stands out more strongly compared with the first shaded relief map.

../../../_images/grass_toolbox_shadedrelief.png

Fig. 21.9 Displaying shaded relief created with the GRASS module r.shaded.relief

21.14.2.3. Statistiche raster in una mappa vettoriale

Il prossimo esempio tratta di un modulo GRASS che può aggregare dati raster ed aggiungere colonne di statistiche per ogni poligono di una mappa vettoriale.

  • Again using the Alaska data, refer to Importare dati nelle LOCATION GRASS to import the shapefiles/trees.shp file into GRASS.

  • Now an intermediate step is required: centroids must be added to the imported trees map to make it a complete GRASS area vector (including both boundaries and centroids).

  • From the Toolbox, choose Vector ▶ Manage features, and open the module v.centroids.

  • Inserire come Nome del vettoriale in output “forest_areas” e lanciare il modulo.

  • Now load the forest_areas vector and display the types of forests - deciduous, evergreen, mixed - in different colors: In the layer Properties window, Symbology tab, choose from Legend type selectString “Unique value” and set the Classification field to “VEGDESC”. (Refer to the explanation of the symbology tab in Proprietà Simbologia of the vector section.)

  • Next, reopen the GRASS Toolbox and open Vector ▶ Vector update by other maps.

  • Click on the v.rast.stats module. Enter gtopo30 and forest_areas.

  • Only one additional parameter is needed: Enter column prefix elev, and click Run. This is a computationally heavy operation, which will run for a long time (probably up to two hours).

  • Finally, open the forest_areas attribute table, and verify that several new columns have been added, including elev_min, elev_max, elev_mean, etc., for each forest polygon.

21.14.3. Personalizzare gli strumenti GRASS

Nearly all GRASS modules can be added to the GRASS Toolbox. An XML interface is provided to parse the pretty simple XML files that configure the modules” appearance and parameters inside the Toolbox.

Un esempio di file XML che genera il modulo v.buffer (v.buffer.qgm) ha il seguente aspetto:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE qgisgrassmodule SYSTEM "http://mrcc.com/qgisgrassmodule.dtd">

<qgisgrassmodule label="Vector buffer" module="v.buffer">
        <option key="input" typeoption="type" layeroption="layer" />
        <option key="buffer"/>
        <option key="output" />
</qgisgrassmodule>

The parser reads this definition and creates a new tab inside the Toolbox when you select the module. A more detailed description for adding new modules, changing a module’s group, etc., can be found at https://qgis.org/en/site/getinvolved/development/addinggrasstools.html.