GRASS GIS 8.2.0
The GRASS GIS 8.2.0 release provides more than 225 improvements and fixes with respect to the release 8.0.0.
What's Changed
Highlights
- Parallel processing in r.series, r.patch, r.mfilter, and r.slope.aspect by @aaronsms
- Single window graphical user interface from Settings > Preferences > General by @lindakladivova
- A new map display settings dialog and status bar context menu by @lindakladivova
- A new grass.jupyter package for interacting with Jupyter notebooks by @chaedri
- GridModule from grass.pygrass is easier and safer to use by @petrasovaa and @wenzeslaus
- init from grass.script.setup now returns a context manager by @albertoparadisllop and @wenzeslaus
- A JSON file with latest commit info is available for packaging and reproducibility purposes by @tmszi
Modules
Raster
- r.buildvrt: check if all input maps are NULL-only by @neteler in #2220
- r.clump: fix clumping of FCELL/DCELL maps with threshold=0 by @metzm in #1792
- r.colors: fix order of rules by @metzm in #2167
- r.external: testsuite added by @neteler in #2291
- r.geomorphon: combine profile parser rules to allow usage as pygrass module by @ninsbl in #2154
- r.in.pdal: pass LasHeader::header by const ref by @nilason in #2277
- r.mfilter: implement parallelization with OpenMP by @aaronsms in #1708
- r.neighbors: implement parallelization with OpenMP by @aaronsms in #1724
- r.object.geometry: Explicitly specify CELL type in r.in.ascii in test by @petrasovaa in #2265
- r.object.geometry: fix msg typo and test script by @neteler in #1994
- r.out.gdal: add offset/scale options by @landam in #1992
- r.patch: implement parallelization with OpenMP by @aaronsms in #1782
- r.quantile/r.stats.quantile/libstats: fix quantile algorithm by @metzm in #2108
- r.random.cells: treat distance as minimum distance by @metzm in #1797
- r.series: implement parallelization with OpenMP by @aaronsms in #1776
- r.slope.aspect: implement parallelization with OpenMP by @aaronsms in #1767
- r.stats.quantile: sync to r.quantile by @metzm in #2323
- r.surf.random: double min max for DCELL and r.mapcalc-style random numbers by @wenzeslaus in #322
- r.watershed: Keep 0 accumulation with -a as 0 as opposed to null by @HuidaeCho in #2169
- r.watershed: Null accumulation outside elevation, 0 flow from null flow by @HuidaeCho in #2221
Vector
- v.distance: relax parser rules by @ninsbl in #2127
- v.import: Fix wrong module mentioned in documentation by @agiudiceandrea in #2142
- v.in.ogr: testsuite added by @neteler in #2292
- v.out.ogr: Fix a typo and remove -z flag mention from warning messages by @agiudiceandrea in #1694
- v.perturb: If vector map is 3D, preserve the z coordinate by @wenzeslaus in #1660
- v.rast.stats: note about vector overlap limitation by @jfbourdon in #1730
- v.to.db: fix option=query by @metzm in #2085
Imagery
- i.atcorr: Replace CRLF by LF in sensor CSVs by @wenzeslaus in #2149
- i.spectral: show error message if one of the supported monitor isn't running by @tmszi in #1991
- i.vi: Add Crust Index algorithm to i.vi by @YannChemin in #1997
- i.vi: fix PVI formula by @pesekon2 in #1985
- i.vi: fix formatting by @neteler in #2007
- Rename g.bands to i.band.library and i.band to r.semantic.label by @marisn in #1983
Temporal and 3D raster
- r3.showdspf: Fix resource leak by @lbartoletti in #2295
- t.rast.list: Add CSV, JSON, YAML outputs by @wenzeslaus in #2258
- t.rast.mapcalc: transfer semantic label by @metzm in #2219
- t.rast.neighbors: transfer semantic label by @metzm in #2218
Display
- d.background: Add module for setting display background color by @wenzeslaus in #2282
- d.linegraph: Fix generate graph image if 'x_title', 'y_title' param arg isn't defined by @tmszi in #1978
General
- Add keyword parallel for parallelized modules by @petrasovaa in #2322
- g.extension.all: Fix reinstall of multi-addons by @tmszi in #2082
- g.extension: Disable multi-addon addon metadata check for addons which install only man page by @tmszi in #2090
- g.extension: Fix get_addons_paths function json_file attribute by @tmszi in #2094
- g.extension: Fix link generation in multi-addon man page for addons by @tmszi in #2097
- g.extension: catch missing modules.xml error by @neteler in #2058
- g.extension: fix make command on FreeBSD by @lbartoletti in #2075
- g.extension: remove build_platform (only 64bit provided on MS Windows) by @landam in #2102
- g.gisenv: Describe where the variables are stored in manual by @jidanni in #232
- g.gui.timeline: fix annotation box by @petrasovaa in #2107
- g.region: Add more detail into LL error messages by @wenzeslaus in #1988
- g.region: Apply -a flag for n=, s=, w=, e= by @HuidaeCho in #1884
- g.region: Fix setting from default region by @petrasovaa in #2397
Graphical User Interface
- wxGUI Single-Window: Focus the Console pane when console content has been changed by @lindakladivova in #2121
- wxGUI Single-Window: Make Tools pane wider after startup by @lindakladivova in #2216
- wxGUI/data: use watchdog to update tree when mapset is switched externally (cmdline) by @petrasovaa in #1174
- wxGUI/digitizer: don't attempt to draw zero-length lines by @petrasovaa in #1989
- wxGUI/gui_core: fix change opacity level dialog min/max size, widgets expand horizontally by @tmszi in #2067
- wxGUI/gui_core: fix open map display overlay settings dialog by @tmszi in #2065
- wxGUI/gui_core: fix right mouse click on the root tree node to invoke menu by @tmszi in #2119
- wxGUI/location_wizard: make TextCtrl widgets horizontally growable by @tmszi in #2026
- wxGUI/main_window: fix close map notebook page by @tmszi in #2072
- wxGUI/mapdisp: it is also possible to remove the MASK interactively by @tmszi in #1176
- wxGUI/preferences.py: fix loading default user settings by @tmszi in #2041
- wxGUI/psmap: remove setpdfwrite on Windows by @ninsbl in #1961
- wxGUI/toolbars: fix toolbar tools labels by @tmszi in #1147
- wxGUI/xml/toolboxes.xml: add missing 'r.fill.stats' module item inside 'InterpolateSurfaces' toolbox by @tmszi in #1977
- wxGUI/xml: add Raster digitizer tool among GUI tools toolbox items by @tmszi in #2125
- wxGUI: Fix Location Wizard titles being cut off. by @ocsmit in #1774
- wxGUI: Fix statusbar mode index for GetMode method by @lindakladivova in #2190
- wxGUI: Fix the error when statusbar does know statusbarItem property "region" by @lindakladivova in #2106
- wxGUI: Map display object has no attribute iconsize by @lindakladivova in #2021
- wxGUI: Move SbMask widget to main window statusbar by @lindakladivova in #2089
- wxGUI: Move statusbar checkboxes related to Map Display to a new Map Display Settings dialog by @lindakladivova in #2031
- wxGUI: New toolbar icon for accessing Map Display settings dialog by @lindakladivova in #2214
- wxGUI: Projection checkbox from Map Display statusbar moved to Map Display Settings by @lindakladivova in #2087
- wxGUI: Statusbar settings as a part of Map Display Settings by @lindakladivova in #2153
- wxGUI: Thread.setDaemon deprecated with Python 3.10 by @petrasovaa in #2145
- wxGUI: Use Map Display settings in other Map Display applications by @lindakladivova in #2155
- wxGUI: add single window to settings by @petrasovaa in #1810
- wxGUI: do not import from pygrass on gui startup by @petrasovaa in #2202
- wxGUI: fix 'SpinCtrl' widget size by @tmszi in #1339
- wxGUI: fix saving and setting display position in workspace for multiple window layout by @petrasovaa in #2321
- wxGUI: fix unexpected type float error with Python 3.10 by @petrasovaa in #2030
- wxGUI: font size Python 3.10 fix by @petrasovaa in #2036
- wxGUI: get rid of gradient in map display notebook tabs by @petrasovaa in #2071
- wxGUI: lazy loading of C imagery functions in SignatureSelect by @petrasovaa in #2120
- wxGUI: more Python 3.10 fixes by @petrasovaa in #2050
- wxGUI: move datacatalog search below toolbar, make it stretch by @petrasovaa in #2207
- wxGUI: new context menu for statusbar settings by @lindakladivova in #2251
- wxGUI: refactoring: Map Display inheriting from wx.Panel by @lindakladivova in #1675
- wxGUI: remove unnecessary printing of invalid map size by @petrasovaa in #2146
- wxGUI: rename Modules tab to Tools tab, and Display tab to Layers tab by @lindakladivova in #1927
- wxGUI: update statusbar when projection settings checkbox has been toggled by @lindakladivova in #2178
- wxGUI: use basic top module notebook style on all platforms as default by @petrasovaa in #2063
Python
- Python: Increase minimum Python version to 3.7 by @wenzeslaus in #2241
- grass.gunittest: Add config, timeout, more unique naming, update to new Python versions by @wenzeslaus in #2182 #2180 #2172 #2006 #2181 #2014
- grass.jupyter: All grass.jupyter functionality unofficially included in from 8.0.0 is now released by @chaedri
- grass.jupyter: Rename and restructure rendering classes @chaedri in #2208 #2015 #2305 #2306 #2312
- grass.jupyter: Add time series visualizations by @chaedri in #2010
- grass.jupyter: Generate API doc for Jupyter package by @wenzeslaus in #2284 #2200 #2307
- grass.jupyter: Manage sessions and temporary data by @wenzeslaus in #1834 #2206 #2247
- grass.jupyter: Add play widget for animation by @petrasovaa in #2318
- grass.jupyter: Automatically determine render image dimensions based on region by @petrasovaa in #2285 #2301
- grass.pygrass: Improve exception handling in Info.open (#1555) by @Viech in #1559
- grass.pygrass: Make GridModule tile size optional by @petrasovaa in #2294
- grass.pygrass: Use parallel r.patch in GridModule when overlap=0 to speed up patching tiles by @petrasovaa in #2249
- grass.pygrass: Use unique tmp mapset names GridModule by @wenzeslaus in #1967
- grass.script.array: remove deprecated read function by @petrasovaa in #1926
- grass.script.setup: Add return of a context manager from init by @albertoparadisllop in #1912
- grass.script: Do not print stderr when not captured by @wenzeslaus in #2246
- grass.script: Fix collision of random names in test by @wenzeslaus in #2105
- grass.script: Fix path resolving in init by @wenzeslaus in #1979
- grass.script: Pass encoding to Popen parameters by @albertoparadisllop in #1914
- grass.lib: Update ctypesgen by @nilason in #2243 #2079
- grass.benchmark: Usability additions to the unofficial benchmarking library by @petrasovaa and @wenzeslaus in #2201 #2319 #2242 #2152
Libraries and General Functionality
- TGIS: Make database v3 backward compatible with v2 by @landam in #1454 #2088
- TGIS: add semantic label to list of maps and STRDS export by @metzm in #2262 #2231
- TGIS: any number of "_" is allowed in semantic labels by @metzm in #2238
- TGIS: enhance mapset access management by @metzm in #1924
- TGIS: fix semantic label by @metzm in #2215
- TGIS: new module t.copy by @metzm in #1930
- TGIS: number_of_bands -> number_of_semantic_labels by @landam in #2011
- grass_dbmiclient: check if driver name is null or empty by @ninsbl in #2131
- grass_dbmidriver: Convert character varying without length to text in PG driver by @metzm in #2248
- grass_dbmidriver: Fix pointer-sign compiler warnings for ODBC driver by @nilason in #2086
- grass_dbmidriver: Support no locking for SQLite driver over NFS by @metzm in #1667
- grass_raster: remove GDAL_DYNAMIC (fixes #1872, reverts 2650397) by @jef-n in #2290
- lib/imagery: fix SONAME missing by @t0b3 in #2269
- libgis: Add function to read or read again GISRC var by @wenzeslaus in #2244
- libgmath: fix incorrect memset of double array by @nilason in #2005
- raster: Rename band references to semantic labels by @marisn in #1928
Startup, Initialization, and Environment
- init: Fix loading of language override setting. Fixes #1489 by @marisn in #1990
- init: Lazy-initialize translations, fix order dependency by @wenzeslaus in #1838
- init: Output value for sys.path in config by @wenzeslaus in #1835
- init: Improve and unify initialization and addon base for macOS by @nilason in #2004 #2000 #2256
- init: fix help string config options by @petrasovaa in #2240
- startup: Start shell from start_shell() by @HuidaeCho in #1953
- startup: Use universal newlines by @HuidaeCho in #1952
Documentation and Messages
- Sphinx: Generate class doc from class and init by @wenzeslaus in #2317
- doc: Add Zenodo DOI badge to readme by @wenzeslaus in #2122
- doc: Add section about semantic labels to imagery intro by @neteler in #2091
- doc: Fix filename for PNG file by @sebastic in #2052
- manual: add entries about Jupyter notebook support by @neteler in #2314
- messages: Change Proj.4 to PROJ by @neteler in #2194
- messages: Mention session when missing GISRC or variable by @wenzeslaus in #2124 #2130
- mkhtml: Fix path to source code by @tmszi in #2054 #1892
- mkhtml: Fix get core modules commit from local Git repo and GitHub API by @tmszi in #2113 #2139 #2037
- mkhtml: Generate local JSON file with core modules and their last commit by @tmszi in #2140
- mkhtml: Get date from git log and remove Subversion date from code by @ninsbl and @neteler in #2100 #2143
Translations, Internationalization, and Localization
- i18n: Add POT files for Weblate Template for new translations by @HuidaeCho in #2316
- i18n: Fix long dash confusing xgettext by @neteler in #2035
- i18n: Updates from Transifex and Weblate by @HuidaeCho in #2062 #2236 #2412
- i18n: xgettext --from-code=utf-8 by @HuidaeCho in #2061
Packaging, Configuration, Portability, and Compilation
- Make: add -rpath to LD_SEARCH_FLAGS by @metzm in #2280
- configure: update to latest config.guess and config.sub by @nilason in #2225
- pkg-config: with G8 the grass executable is non-versioned by @nilason in #2227
- rpm: Update grass.spec to GRASS GIS 8.0.0 by @neteler in #2098
- winGRASS: Add missing DLLs for MS Windows packaging by @ninsbl in #2204
- winGRASS: change form BU Execute to "GenericRead + GenericExecute" by @neteler in #2069
Docker and Singularity
- Docker: Enable openMP, fix PDAL support in Alpine Dockerfile by @neteler in #2287
- Docker: Remove custom pip install for alpine docker by @mmacata in #2028
- Docker: Update alpine version in Dockerfile by @mmacata in #2073
- docker: GRASS GIS docker matrix update by @neteler in #2263
- singularity: Minor fixes of definition file by @lucadelu in #2179
Continuous Integration, Tests, Code Quality, and Checks
- CI: More Flake8, Pylint, Black, CRLF checks by @wenzeslaus in #2199 #2198 #2213 #2144 #2212 #2286 #2147 #2148
- CI: Automatically create new GitHub release draft by @tmszi and @wenzeslaus in #2224 #2347 #2398
- CI: Enable module assertions test (#2311) by @adinayyu in #2311
- CI: Switch to OSGeo4W V2 by @ninsbl in #2074
- CI: Test also without OpenMP and pthreads by @wenzeslaus in #2245
- CI: Use C and C++ compilation fixes and warnings by @nilason and @lbartoletti in #2274 #2162 #2157 #2159 #2160 #2161 #2158 #2168 #2266 #2250 #2296
- checks: Fix spelling errors by @sebastic in #2053
- pytest: Add very basic config to run pytest by @wenzeslaus in #2183
- tests: Output both Bash and Python for failed tests by @wenzeslaus in #1805
Contributing and Management
- CONTRIBUTING.md: describe the fork process more in detail by @pesekon2 in #2151
- Simplify and describe the release procedure by @wenzeslaus and @neteler in #2099 #2057 #2237 #2136 #2116 #2195 #1999 #2349 #2405 #2396 #2328 #2346 #2329 #2331
- contributors.csv: added new ORCID column by @neteler in #2177
New Contributors
- @albertoparadisllop made their first contribution in #1914
- @jfbourdon made their first contribution in #1730
- @Viech made their first contribution in #1559
- @t0b3 made their first contribution in #2269
- @adinayyu made their first contribution in #2311
Full Changelog: 8.0.0...8.2.0