A short summary of changes: New features in GRASS 7.6


Stable Release

Release Candidate 1 (RC1)

SVN Source Code

  • Milestone: 7.6.0
  • Release branch created in r73210
  • SVN Checkout latest 7.6 release branch (including yet unpublished bugfixes):
      svn checkout

Overview of changes

A series of new features and stability fixes, manual improvements, and a few language translations have been added. Importantly, the new version is backward compatible with older 7.x releases.

The GRASS GIS 7.6.0 release provides more than 1100 fixes and improvements with respect to the stable release 7.4.4.

New modules

  • G76:r.buildvrt - Builds a VRT (Virtual Raster) from the list of input raster maps
  • G76:r.path - Traces paths from starting points following input directions

Major module changes

(see also below for closed bugs)

  • G76:grass76 start script: add --tmp-location, it creates a location in the program's tmp dir which is deleted at the end; meant for use with --exec, fix confusing message about missing WIND file
  • G76:d.grid: use new GRASS API for coordinate transformation, use new PROJ 5+ API if available
  • G76:d.where: use new GRASS API for coordinate transformation, use new PROJ 5+ API if available
  • G76:g.gui.tplot: added capabilities to export plotted data in CSV file, to set x,y axis labels and title for the plot, added title, xlabel, ylabel support to command line, fixed bug with strds and CSV output
  • G76:g.proj: use new GRASS API for coordinate transformation; use new PROJ 5+ API if available
  • G76:g.region: added grow option, use new GRASS API for coordinate transformation, use new PROJ 5+ API if available
  • G76:g.version: use new PROJ 5+ API if available
  • G76:i.atcorr: fixed numerical instability, added example to process Sentinel bands, added PlanetScope 0c-0d 0e 0f-10 support
  • G76:i.segment: fix for memory management estimation, avoid integer overflow with extremely large regions, fix writing out goodness of fit, fix writing out segment ids
  • G76:nviz: various openGL related fixes, use direct rendering; indirect rendering disabled by default in modern Xorg (since Xorg 1.17?)
  • support for PROJ 5+ API if available
  • G76:r3.out.netcdf: support for PROJ 5+ API if available
  • G76:r.horizon: allow negative angles; use new PROJ 5+ API if available
  • G76:r.latlong: use new GRASS GIS API for coordinate transformation; use new PROJ 5+ API if available
  • G76:r.proj: avoid longitude wrapping by PROJ, this is done by GRASS; use new GRASS API for coordinate transformation, added option for user-defined PROJ 5+ pipeline
  • G76:r.sun: use new GRASS GIS API for coordinate transformation; use new PROJ 5+ API if available
  • G76:r.sunhours: use new GRASS GIS API for coordinate transformation; use new PROJ 5+ API if available
  • G76:r.sunmask: use new GRASS GIS API for coordinate transformation; use new PROJ 5+ API if available
  • G76:v.proj: use new GRASS GIS API for coordinate transformation, added option for user-defined PROJ 5+ pipeline

Minor module changes

(see also below for closed bugs)

  • doc/v.example: use std vector and db error handlers
  • G76:db.connect: use GRASS default, not current parameters as default answer, fix setting from default and from user options (see #3601)
  • G76:db.droptable: fatal -> warning if table not found, as for g.remove
  • G76:db.execute: check return code of db_execute_immediate() also for 'sql' option
  • G76:d.vect with z height colors uses a random polygon point for height
  • G76:g.extension: fix debug message syntax
  • G76:g.mkfontcap: fix qsort callback (partial fix for #3564)
  • G76:i.colors.enhance: check for not existing maps
  • add file option for a file with a list of raster maps
  • G76:i.maxlik: Correctly handle fully qualified output raster map names
  • G76:i.ortho.transform: do not overwrite transformed coordinates
  • G76:i.spectral: Add subgroup option
  • corrected MSAVI2 equation according to, see #3385
  • G76:r.buffer: fix integer overflow (fixes #3620)
  • G76:r.colors: add inferno, magma and plasma color tables
  • G76:r.colors and G76:r3.colors: new flag -d to list available rules with description (e.g. "srtm: color palette for Shuttle Radar Topography Mission elevation [range: -11000 to 8850]")
  • G76:r.contour: avoid tracing back of contour lines
  • G76:r.cost: fix direction output when using a solver and directions are degree
  • G76:r.cost: add option to control which direction is used in case of multiple directions with equal costs, avoid circular paths when using solver
  • G76:r.cross: code clean-up, explain NULL handling; create categories for output value 0 since it is a valid result
  • G76:r.drain: Add a rule to avoid an exception from G76:r.path, ignore values option if raster values are not used (no -c or -a flag)
  • G76:r.external: get real stats, not approximations for each band, write more metadata
  • G76:r.external.out, G76:r.out.gdal: add CRS EPSG code if available
  • G76:r.fillnulls: RST segmax/npmin logic is fixed to avoid segmentation on small holes, added memory parameter for internal G76:r.resamp.bspline call
  • G76:r.horizon: check if coordinates are within the current region, fixes #3634
  • G76:r.import: remove hardcoded memory limit, use auto-adjustment for lat/lon
  • report Type of Map (raster, reclass, GDAL-link, virtual) with -e flag
  • always report total number of cells with -s
  • use grass_int64 and j length modifier for total cells and number of non-null cells
  • fix column offset and column mapping when limiting import to the current region
  •, G76:r.external: add test if OGR spatial reference is NULL
  •, +GDAL config and dataset open options (#3413)
  • print only proj comparison when -j flag is given
  • trim option affects only trimmean method, fail if user attempts to use it with other methods
  • added support to SRTM SWBD, removed unzip dependencies, now it uses zipfile library
  • added missing .tif extension needed by gdalwarp (GDAL 2.3+)
  • fix segfault (see #3676)
  • G76:r.mapcalc: added ceil() and floor() functions
  • G76:r.out.gdal: improve range checks for float and double
  • G76:r.path: avoid infinite loop for invalid start point
  • G76:r.path, G76:r.drain: accept multiple start coordinates
  • G76:r.random: add seed option to set the seed of the RNG
  • G76:r.random.cells, G76:r.random.surface: use G_drand48(), fixes #2496
  • G76:r.random.surface: rename variable Surface to RSurface to avoid variable clash with GDAL on EPEL7 compilation
  • G76:r.series: allow weight = 0, preserve input type if possible
  • G76:r.slope.aspect: add -n flag to create aspect as degrees clockwise from North (azimuth), with flat = -9999 (like gdaldem); new -e flag to compute values at edges (like gdaldem -compute_edges)
  • G76:r.texture: fatal error if one of the requested output maps exists
  • G76:r.tile: adjust cellhd of output tiles
  • G76:r.walk: add option to control which direction is used in case of multiple directions with equal costs, avoid circular paths when using solver
  • G76:r.watershed: prepare for multiple bitmask encoded directions, retention support for flow distribution
  • G76:r.what: fix if coords are just outside current region
  • activate history printing
  • G76:t.rast.univar: added non-null cells, see #3375
  • G76:t.rast.algebra: added suffix option for time and granularity based raster map names
  • G76:v.buffer: use squared buffers around points when -s flag is set
  • G76:v.category: explain option=report (fixes #3643)
  • G76:v.colors: add flag to output color table type and value range (see #3077), add inferno, magma and plasma color tables
  • G76:v.db.addtable: create unique index
  • G76:v.db.dropcolumn: preserve field length for field type CHARACTER
  • G76:v.decimate: add attribute table to output (fixes #3541)
  • G76:v.distance: do not clear existing records if no nearest feature is found, use default db connection of current mapset for new vector db connection, improve iterative search and improvement speed for small dmax
  • G76:v.external: disable GRASS-PostGIS driver
  • G76:v.external.out: add CRS EPSG code if available
  • G76:v.extract: add option to dissolve by attribute, preserving categories and attribute values
  • G76:v.generalize: preserve boundary categories
  • avoid buffer overflow with long attributes (text), convert OSM line topology to GRASS topology for line crossings, fix segfault with wrong array index, improve OSM line topology conversion, use column type 'text' when appropriate
  •, G76:v.external: OGR dsn and GRASS db connections are independent of each other
  • change API calls to PDAL 1.6.0, see #3496 and #2732
  • G76:v.out.ogr: create and write a new feature only once to avoid duplicate fid's, check return of OGR_L_CreateFeature(), do not modify OGR dsn, add CRS EPSG code if available
  • G76:v.overlay: speedup for large and complex input areas
  • G76:v.patch: ignore order of columns and only check name and type (fixes #3566)
  • G76:v.profile: use GEOS for buffer generation due to errors in native buffering functions
  • G76:v.random: fix comparison between signed and unsigned integer expressions warnings, restrict join attributes, see #3528, restrict wrong categories assigned, see #3524
  • G76:v.rast.stats: add number of NULL cells to method option, check for existence of attribute table before launching, add where option, fix #3523
  • correct class/non-class methods, ws, naming (runs python -tt, full pep8, some pylint), improve processing speed, make it clear that 'overlap' is 'intersects' in GEOS, not 'overlaps', re-organize code to select features from vector map A by features from other vector map B (fixes #3361), fix attribute table key name
  • output map is now only created if elements are found
  • clarify default smooth value
  • check if column(s) exist before updating, includes check for correct column type, create column(s) of not existing, see #3466, double-quote strings to protect single quotes, as in, fix compactness and fractal dimension (fixes #3102), add unit conversion for compactness
  • add support for centroids
  • G76:v.vect.stats: map label/description UI fix
  • G76:v.what.rast3: fix v.what.rast author's name
  • G76:v.what.vect: distance units are meters for lat/long

Improvements in the Graphical User Interface

  • wxGUI: wxPython 4 compatibility
  • wxGUI: computational region extent is shown by default in map display, see #3519
  • wxGUI: catch also WindowsError when unable to load GRASS libs
  • wxGUI: correctly delete layertree, see #3505
  • wxGUI: etree takes only non-keyword arguments for parent and tag in Python 3
  • wxGUI: fix font dialog on mac, #3542
  • wxGUI: different fixes for !wxPython 4, e.g., loading data to ListCtrl with checkboxes, fix warnings when using attribute manager, etc (see #3621)
  • wxGUI: fix m.nviz.image command building
  • wxGUI: fix Phoenix compatibility
  • wxGUI: fix problem with Python addons not showing up on Windows, see #3177
  • wxGUI: implement widget for SQL WHERE parameter
  • wxGUI: replace deprecated checkbox event method, see #3570
  • wxGUI: set up default map display properties when new display is open
  • wxGUI: use simpler widget for MapsetSelect to avoid !wxWidgets bug #17771 on mac
  • wxGUI/dbmgr: don't show db info connection by default, it's just occupying space in the dialog
  • wxGUI/datacatalog: display layer on double click
  • wxGUI/datacatalog: remove map layer from layer tree on delete map
  • wxGUI/datacatalog: simplify G76:g.remove caller
  • wxGUI/datacatalog: zoom to first added map (sync with layer manager behaviour)
  • wxGUI/datatalog: fix standalone double click
  • wxGUI/dbmgr: better handling of text values in SQLBuilder
  • wxGUI/dbmgr: fix sorting unicode issue
  • wxGUI/dbmgr: get sample/all values tuning
  • wxGUI/dbmgr: set busy cursor when scoring values
  • wxGUI/forms: improve gui dependencies logic, see #3619
  • wxGUI/frame: attribute table manager fails to start from new mapset, see #3658
  • wxGUI/gmodeler: delete intermediate data when model finished
  • wxGUI/gmodeler: display data if model done
  • wxGUI/gmodeler: implement display data functionality
  • wxGUI/gmodeler: print command finished message
  • wxGUI/gmodeler: print model computation finished message
  • wxGUI/gmodeler: store display tag in model file
  • wxGUI/lmgr: add layer selection into giface
  • wxGUI/preferences: add new option for random colors (vector)
  • wxGUI/psmap: wxPython 4 compatibility
  • wxGUI/rdigit: fix raster digitizer toolbar on mac
  • wxGUI/SqlWhereSelect: fix renaming issues
  • wxGUI/startup: file to separate GUI-dependent utils (now only db/loc/mapset setting)
  • wxGUI/startup: get the first possible grassdata match, not last (faster)
  • wxGUI/startup: lock filename and check in one function
  • wxGUI/startup: mapset and location remame as functions
  • wxGUI/startup: move delete mapset and location to separate functions
  • wxGUI/startup: move mapset creation core to an utils function
  • wxGUI/startup: move search for grassdata to package
  • wxGUI/startup: new mapset dialog as a separate class and reuse create mapset method
  • wxGUI/startup: obtaining version number as a function
  • wxGUI/startup: read_gisrc as a GUI function
  • wxGUI/startup: window titles should use title case (plus doc)
  • wxGUI/timeline: fix transparency issues
  • wxGUI/timeline: draw grid behind the data to avoid confusion
  • wxGUI/timeline: specify edgecolor to solve #3609

Python scripting

  • libpython: by default, no error output is produced even though the output in case of failure reads "Process ended with non-zero return code 1. See errors in the (error) output.", change default to capture and report error output
  • libpython: add tempname() function to grass.script.core, fix #3615
  • libpython added quiet option to write function
  • libpython added option in db_table_in_vector to check by default only vectors in current mapset
  • libpython: move clean_default_db() to setup
  • libpython: add functions to finish a GRASS session
  • pygrass: attempt to access data from a closed raster map now rises IndexError
  • pygrass: add Module support to underscore in parameter's name
  • pygrass: Avoid to pass unicode to C functions in mapsets and location
  • pygrass: Category.init expects map name to be provided
  • pygrass: grid avoid to add a mapset if already present in the path
  • pygrass: number_of() add support for boundaries and centroids
  • pygrass: Provide better error message when raster row index is out of range; Raise IndexError (instead of fatal exit) when operating on a closed map
  • pygrass: raster PEP8 cleanup
  • pygrass: shortcuts: Fix use of python reserved words
  • pygrass: fix wrongly reported lines for point vector maps, see #3549
  • python ctypes: add int64 to ctypes_type_map

Projection support

  • Support for PROJ v.5 added
  • configure: use new PROJ API only with proj-5.1.x or higher, otherwise fall back to old PROJ.4 API

Library changes

  • db driver ogr: fix handling of OFTInteger64
  • dbmibase: fix get/set connection parameters, clarify default and current parameters
  • libgis: update to lz4-1.8.2
  • libgis: use G_vasprintf() to avoid buffer overflow
  • lib/init/ increase PEP8 compliance
  • lib/init/ init: report when rc file is empty
  • lib/init/ use LOCATION to stand for location name in help
  • lib/init/ added --config svn_revision
  • lib/init: clean up sqlite db if existing, see #3697
  • libinit: use clean_default_db() from script.setup
  • libinit: rewriting to use functions in lib/python/scripts
  • libproj: +new GRASS API for coordinate transformation, use new PROJ 5+ API starting with proj-5.1.0 if available
  • libproj: support user-defined PROJ 5+ pipelines
  • libraster: ZSTD is now the default compression if available changed back to zlib in 7.6.2, #3815
  • libraster: +GRASS virtual raster (VRT)
  • libraster: update documentation for Map type ("raster", "reclass", "GDAL-link", or "virtual")
  • libraster: add support for GDAL 2.4 on MS Windows
  • libsegment: all-in-memory cache added
  • libsegment: do not zero fill, use lseek in Segment_open()
  • libstats: init vars
  • libstats: sum of weights must be DCELL; fix regression t value
  • libogsf: Use framebuffer objects for off-screen GL rendering; Use Core OpenGL (CGL) for the MacOS instead of deprecated 32-bit only AGL
  • G76:grass-sqlite driver: fix default column length for declared column types
  • Vlib: change topology building messages to verbose messages, use grass_int64 for count of vertices
  • Vlib: fix for self-intersections in Vect_line_intersection2(): snap self-intersection only once
  • Vlib: fix size estimation of spatial indices
  • Vlib: fix self-intersections in Vect_line_intersection2()
  • Vlib: fix with_z = 0 for Vect_line_check_intersection2() and Vect_line_intersection2()
  • Vlib: increase buffer to 4096 when copying files (sync to lib/gis/copy_dir.c)
  • Vlib: optimize snapping with box search instead of distance search
  • Vlib: print messages only when needed during topology building
  • Vlib: reduce dynamic fp representation error threshold
  • Vlib, Vect_merge_lines(): use correct line type in messages
  • Vlib: fix fp error in Vect_segment_intersection()
  • temporal algebra: Do not create the parsertab file when running the algebra
  • temporal library: eval support for, see #3264
  • temporal modules: Fixed tgis suffix function spell mistake
  • temporal python library: t.rast.algebra output basename is using leading zeros

Unit tests

User Manuals - Documentation

  • manual pages: various examples added
  • keyword index improved
  • many typos fixed in source code comments
  • expanded descriptions, notes and some references added
  • G76:raster3dintro manual: more details and better structure for section: 3D raster import


Docker support

  • Dockerfile: dependencies updated, cleanup, added ZSTD, liblas and OpenJPEG/JP2 support
  • Dockerfile: avoid -march=native compiler flag
  • Dockerfile: 'set ENV SHELL' to avoid /bin/sh fallback in interactive GRASS GIS sessions in docker

Message Translations

New Addons since GRASS 7.4

  • G7A:d.vect.colhist - Draws the histogram of values in a vector attribute column
  • G7A:i.ann.maskrcnn - The Mask R-CNN tools allow the user to train their own model and use it for a detection of objects, or to use a model provided by someone else. It can be seen as a supervised classification using convolutional neural networks.
  • G7A:i.ann.maskrcnn.train - Train your Mask R-CNN network
  • G7A:i.cutlines - Creates semantically meaningful tile borders
  • G7A:i.pysptools.unmix - Extract endmembers from imagery group and perform spectral unmixing using pysptools
  • G7A:i.rh - Water in atmosphere: relative humidity, water vapour (saturated, actual)
  • G7A:i.sentinel.mask - Creates clouds and shadows masks for Sentinel-2 images
  • G7A:i.signature.copy - Copies signature file from a group/subgroup to another group/subgroup
  • G7A:i.signature.list - Lists signature file of a group/subgroup
  • G7A:i.signature.remove - Removes signature file in a group/subgroup
  • G7A:r.accumulate - Calculates weighted flow accumulation, stream networks, and the longest flow path using a flow direction map
  • G7A:r.category.trim - Exports categories and corresponding colors as QGIS colour file or csv file. Non-existing categories and their colour definitions will be removed
  • renamed r.sentinel -> G7A:i.sentinel
  • G7A:r.estimap.recreation - Implementation of ESTIMAP to support mapping and modelling of ecosystem services (Zulian, 2014)
  • - Creates a raster map from LAS LiDAR points using univariate statistics and
  • G7A:r.lfp - Calculates the longest flow paths for given outlet points using the addon.
  • renamed r.modis -> G7A:i.modis
  • G7A:r.wateroutlet.lessmem - Creates watershed basins from a drainage direction map. It is a modified version of r.water.outlet and requires about one third of memory compared to the original module
  • G7A:t.rast.null - Manages NULL-values of a given space time raster dataset
  • G7A:v.clean.ogr - Imports vector data into a GRASS vector map, cleans the data topologically, and exports them again using OGR library
  • G7A:v.gsflow.mapdata - Upload data to PRMS data (GSFLOW)
  • G7A:v.rast.bufferstats - Calculates statistics of raster map(s) for buffers around vector geometries
  • G7A:v.what.strds.timestamp - Uploads space time raster dataset values to the attribute table at positions of vector points in space and time

Closed tickets

Closed bugs since the last release

clean_temp: not safe for concurrent use
highlight selected features and zoom - display not centered over the highlighted feature
Drop or fix setting of Location and Mapset using environmental variables
Error with SQLite path update after moving grass data
Allow setting environment variables in grass startup script
t.rast.algebra WARNING: Couldn't create 'parsetab'. [Errno 13] Permission denied:
3D view mode not available: Reason: name '__int64' is not defined
g.region grow with negative number limited because of top and bottom
wxpython 4: fix warnings for Attribute Table Manager
i.atcorr: discrepancy in sensor band numbering in the manual
g.gui.timeline does not show granularity of time series
cannot click to check/uncheck accessible mapsets in g.mapsets
Mapset remains locked after switch to it and exit
pygrass GridModule: ERROR: Unable to open element file <windows>
Patch to fix spelling errors

Closed wishes since the last release

Add ceil and floor to r.mapcalc
d.vect with z height colors uses a random polygon point for height - patch to fix attached
r.slope.aspect: add -c option
t.rast.algebra output naming sheme
LZ4 when writing raster rows; better than double I/O bound r.mapcalc speed
r.watershed: better documentation for 'drainage' w/ MFD
r.out.gdal: add AUTHORITY node to the srs info of the exported raster
#3246 patch to support SRTM water bodies import (SWBD)
t.rast.algebra: add support for suffix option in output map names
Perceptual color tables
r.mapcalculator script for QGIS processing
#3466 check if column exists before running
v.rast.stats: avoid multiple rasterization when run on multiple raster maps
g.gui.tplot: add support to export time series values in a text file
Add functionalities –tmp-location and –no-clean
v.rast.stats: addition of null_cells count
Add XY location to grass command interface
Allow users to set the RNG seed in r.random
Two new functions for grass.script python lib
v.rast.stats: add where option

Last modified 5 years ago Last modified on Aug 18, 2019, 8:38:24 AM
Note: See TracWiki for help on using the wiki.