List of new features in GRASS GIS 8.0
GRASS GIS 8.0 is actively developed and maintained with a first 8.0.0 stable release in January 2022. In total, it comes with almost 1,300 fixes and improvements with respect to the previous stable releases 7.8.x. This page summarizes the manifold new features which have been added to GRASS 8.0.
Table of Contents
- Graphical User Interface
- Modules (commands)
- User Manuals - Documentation
- GRASS GIS 8 Library changes
- PROJ support
- GDAL support
- Source Code Quality
- Source Code Portability
- New GRASS GIS 8 Addons
- Migrating from GRASS GIS 7 to version 8.x
What's new in a nutshell
After more than 3 years of development the new stable release GRASS GIS 8.0 is available. Efforts have concentrated on making the user experience even better, providing many new useful additional functionalities to modules and further improving the graphical user interface.
Breaking news: new graphical user interface with entirely rewritten startup sequence!
This re-establishes user experience compatibility with QGIS and other connected software packages.
Detailed list of new features:
GRASS GIS 8
- provides a completely new first-time user experience
- the improved graphical user interface streamlines how users interact with their data
- dark-themed interface support
- semantic label support for all raster maps
- image collection support
- Python 3 scripting
- spatio-temporal data analysis with improved internal data structure
- HPC cluster and cloud support
- much faster linking of external raster files
- extended stats for regions of more than 2 billion cells
Experimental features available as addons now include
- attribute plots
- buffer statistics
- road centerlines
- vector attribute update with Python syntax
- mass-preserving interpolation
- transect generation
- coastal, stream, and dam flooding
- longest flow path
- iterative sub-watershed delineation
- valley flatness
- cost-distance area connectivity
- Sentinel, Landsat, MODIS, USGS, and GBIF data download
- edge detection
- user and producer accuracies
- ... and much more.
Project management: issues, fixes, and ongoing improvements are publicly accessible at GitHub.
- For more details than on this overview page, see list here:
- The 8.0 release development was officially moved to a dedicated release branch on Nov 13, 2021: https://github.com/OSGeo/grass/tree/releasebranch_8_0
Graphical User Interface
GRASS GIS 8.0 graphical user interface comes with an entirely new concept of startup mechanism. Users will no longer find any confusing startup screen in the software. The GRASS GUI data management centerpiece now lies in the enriched Data Catalog, which enables a user-friendly management of GRASS data hierarchy elements - databases, locations, and mapsets. To make the initial contact easier, all these special terms are clarified in the pre-prepared location launched when the software is run for the first time. Additionally, some info bars appear to help with setting up a new location and importing data. Thanks to the Data Catalog, the next time GRASS is launched users can switch easily from the last used mapset to another one. This makes working with the software easier for both GIS beginners and existing GRASS users.
|New first time user startup and dark theme support|
Not only does the GRASS GIS GUI come with a revamped startup, but it also received major clean-ups, fixes and improvements. The detailed list of changes can be found at the GUI section in the GRASS 8.0 news page.
A number of relevant improvements have been made (selected list):
- G80:g.extension received extensive changes to adapt to the new addons repository structure with branches pointing to different GRASS major versions. This change allows also to install pull request branches that suggest changes to addons which makes it so much faster to test new changes.
A new metadata class can now be added to raster maps. We called it semantic labels. Examples of semantic labels are satellite bands (blue, green, red, nir, etc), dataset names in remote sensing products (ndvi, evi, lst, etc), or whatever the user wants to use to identify raster maps. This new feature brings in a series of advantages. Users can register time series of satellite images and then select which bands or semantic labels to work with, for example, estimate NDVI from a Sentinel 2 time series:
t.rast.mapcalc inputs=test.S2_8,test.S2_4 output=ndvi basename=ndvi expression="float(test.S2_8 - test.S2_4) / (test.S2_8 + test.S2_4)"
The other great advantage is that now the signature files will include these semantic labels, and therefore, signature files of one imagery or raster group can be used to classify a different group with identical semantic labels.
- G80:r.semantic.label: manages (adds, removes or print) semantic label information assigned to a single raster map or to a list of raster maps.
- G80:r.in.pdal: a PDAL based replacement of r.in.lidar that allows to import any point dimension (including user defined ones e.g. from PDAL filters), supports 19 binning methods (including eigenvalues) and point filtering by values in any dimension.
A number of modules in the raster family received significant modifications. Here the most relevant:
- G80:r.geomorphon: Add geomorphon profiling feature and two zenith/nadir comparison modes. Remove the multires mode, which was broken. Refine documentation and code style.
- G80:r.external is now 2-5 times faster in linking external raster data. This is great for workflows when only a portion of the data is processed in GRASS GIS.
- G80:r.support has a new option semantic_label to extend the possibility to add any user defined label to raster maps.
- G80:r.univar now supports large regions with more than 2 billion cells for extended stats.
- G80:v.db.select has new -e flag to escape newlines and backslashes and -j flag for JSON output.
- G80:v.distance has a new -s flag for square matrix and the linear matrix became default.
- G80:v.neighbors now provides aggregate statistics on attribute columns and the possibility to select which points are included in the aggregation.
All raster classification modules now generate signature files with embedded semantic labels. This allows to apply signature file from one imagery scene to any number of other scenes as long as they consist of same bands (as identified by their semantic labels).
- G80:i.band.library stores and prints available semantic labels used for multispectral data. So far only system-defined band references are supported, i.e., Landsat 5, Landsat 7, Landsat 8 and Sentinel 2.
|New enhanced classification workflow|
Temporal GIS modules
- G80:t.upgrade is the new module that allows users to update their space-time datasets to the new version 3 that includes semantic labels.
- G80:t.remove has a new implementation of flags, allowing to remove the space-time dataset only, remove the space-time dataset and unregister maps or also remove the maps. All removals require the -f flag now.
Major efforts have been taken to port all Python scripts to Python 3.6. Also, there's a new Python subpackage for working with locations and mapsets.
- PostgreSQL driver: Assign 1000 to TEXT field length
User Manuals - Documentation
Translations are managed in Transifex (please join and translate messages): https://www.transifex.com/grass-gis/grass7
User manual pages improvements
Numerous user manual pages have received major or minor improvements.
GRASS GIS 8 Library changes
- Upgrade to autoconf 2.69.
- Update to upstream ctypesgen version.
- Semantic labels implementation.
- Update temporal database version.
- Add --tmp-mapset option in init.
- Change history file according to current mapset.
- New helper library for benchmarking.
- New color table: percentage of forest cover.
- PROJ 4 to PROJ 7 compatibility implemented.
- WKT2 can be used for CRS definitions.
- High-accuracy coordinate transformations supported.
GDAL 3 compatibility improved with speed-ups.
Source Code Quality
We use GitHub Actions for a number of automated source code quality tests: https://github.com/OSGeo/grass/actions
For this, the source code has been substantially cleaned up:
- Code formatting with
- Hundreds of PEP8 fixes with
- Most of warnings in C code removed and now checked
- Code tested with CodeQL
- Test compilation after each change on different operating systems (Windows, Linux, docker)
Unit tests / CI
- Unit tests via GitHub Actions have been activated in all branches: https://github.com/OSGeo/grass/actions This is a way to avoid the introduction of errors by executing automated tests on various platforms and operating systems before the suggested code is merged into GRASS GIS.
Source Code Portability
- Python-3 support implemented across the tree
- FreeBSD: Fixes for compilation.
- Mac: Unified use of addonbase
- MS-Windows/OSGeo4W: Support for OSGeo4W/v2
JSON / REST support
- json parser: Fixed gis parser json implementation
- json parser: change of '+' to '@' for URLs
Docker and Singularity support
- Updates for Alpine, Debian, Ubuntu docker images
- Singularity support added
New GRASS GIS 8 Addons
There are numerous new addons which enlarge the already impressive list of addons available (see http://grass.osgeo.org/grass8/manuals/addons/):
- G8A:d.region.grid: Drapes a color raster over an shaded relief or aspect map.
- G8A:v.greedycolors: Creates greedy colors for vector areas.
- G8A:v.what.rast.label: Uploads raster values and labels to vector point layer.
Addons moved to core
These modules have been moved to core GRASS GIS (and removed from addons grass8 branch):
- G80:g.download.location: Download GRASS Location from the web or a local path.
- G80:r.object.geometry: Calculates geometry parameters for raster objects.
- G80:t.upgrade: Upgrades the version of the temporal database.
Migrating from GRASS GIS 7 to version 8.x
With the addition of semantic labels, the temporal database was modified to version 3 and hence, to be able to read and process GRASS 7.x space-time datasets, users will be prompted to run G80:t.upgrade. If users want to read space-time datasets newly created in GRASS 8 back in GRASS 7.x, they can run G78:t.downgrade.