GRASS GIS 7.8.0
Table of Contents
A short summary of changes: New features in GRASS 7.8
Releases
Stable Release
- Release date: 6 Sep 2019
- Changelog: https://grass.osgeo.org/grass78/source/ChangeLog_7.8.0.gz
- Binaries: https://grass.osgeo.org/download/software/#g78x
- Source code:
Release Candidate 1 (RC1)
- Release date: 14 Aug 2019
- Changelog: https://grass.osgeo.org/grass78/source/ChangeLog_7.8.0RC1.gz
- Binaries: https://grass.osgeo.org/download/software/#g78x
- Source code:
Git Source Code
- Milestone: 7.8.0
- Release branch created on 4 Aug 2019 (GH d4879d4)
- Git clone of latest 7.8 release branch (including yet unpublished bugfixes):
git clone https://github.com/OSGeo/grass.git cd grass git checkout releasebranch_7_8
Overview of changes
The most important change is the new Python-3 support. Also new PROJ 5 and GDAL 2.5 with substantial changes in the API and CRS handling are supported. A series of new features and stability fixes, manual improvements, and a more language translations have been added. Importantly, the new version is backward compatible with older 7.x releases.
Breaking news: Python 3 compatibility
The GRASS GIS 7.8.0 release provides more than 730 fixes and improvements with respect to the stable release 7.6.x.
New modules
- parser: added --json output, useful for REST API output (needed e.g. for [https://github.com/mundialis/actinia_core actinia])
Major module changes
(see also below for closed bugs)
- G78:grass7: major code refactoring
- G78:g.search.modules: support for installed addons added
- G78:i.pansharpen: updated i.pansharpen to handle pixel depths from 2-30 bits, and quashed some bugs
- G78:r.compress: ZLIB is no longer the default compression method but ZSTD compression
- G78:r.in.gdal: added info on subdatasets (relevant for MODIS, Sentinel, ... datasets)
- G78:r.mapcalc.simple: former r.mapcalculator as now as r.mapcalc.simple
- G78:v.in.pdal: use PDAL streaming instead of PointView
- G78:v.overlay: speed-up for large, complex input areas
- G78:v.patch: automagic cleaning of boundaries if areas have been patched
Minor module changes
(see also below for closed bugs)
Start script:
- G78:grass7: stop clearing the terminal upon closing; shorten GRASS prompt; do not require dev pkg to be installed for path
grass --config path
as well asversion
andsvn_revision
. Note that revision is currently broken due to Subversion to Git migration. - G78:grass7: added --config svn_revision
- G78:grass7: add powershell shell support
- G78:grass7: browser = xdg-open as fallback; no browser message spam in batch jobs
- G78:grass7: clean up sqlite DB if existing upon session closing
Modules:
- G78:d.barscale: font support added (PR #72)
- G78:d.northarrow: font, path and charset parameters added
- G78:g.extension: enforce change to python3 during installation of Addon
- G78:g.extension: fix bitbucket download, assumes master branch; fixed incomplete updating addon metadata file
- G78:g.extension: update base_url to current winGRASS server layout (PR #68)
- G78:g.parser: added --json output, useful for REST API
- G78:g.proj: error handling with PROJ 6 added
- G78:g.proj: list_codes to list codes for given authority, compatible with PROJ 4, 5, 6
- G78:g.proj: need GRASS_PROJSHARE to list codes with PROJ 4
- G78:i.atcorr: Worldview4 filter functions added
- G78:i.gensig: skip NULL cells when calculating variance
- G78:i.group: Allow listing group and subgroup contents also for groups from other mapsets
- G78:i.pansharpen: added new channel stretch option; fixed rare possible bug in histogram matching algorithm and made all output maps integer CELL maps
- G78:i.segment: avoid integer overflow with extremely large regions
- G78:i.tasscap: add support for Sentinel-2
- G78:i.vi: NDWI index added (Normalized Difference Water Index)
- G78:m.nviz.script: fix memory leaks,fix compiler warnings + coverity scan
- G78:r3.out.vtk: improved error message when output cannot be written
- G78:r.compress: print which compression method is actually applied
- G78:r.contour: fix broken contour lines; clean contour lines tracing back on themselves
- G78:r.fillnulls: added memory parameter for internal r.resamp.bspline call (speed-up); do not fail hard if input map has no holes
- G78:r.horizon: check if coordinates are within the current region
- G78:r.import: remove hardcoded memory limit (r.in.gdal will take care); try to avoid failure after v.proj (see PR #24)
- G78:r.info -s: always report total number of cells
- G78:r.in.wms: add proxy for GDAL driver; catch incorrect WMS url input; new -b flag to keep original bands
- G78:r.li: fix segfault in r.li.shannon
- G78:r.out.mpeg: fix fail because the output file name is empty
- G78:r.plane: added function float_or_dms
- G78:r.random.cells: use G_drand48()
- G78:r.random.surface: use G_drand48()
- G78:r.slope.aspect: fix window alignment to input raster
- G78:r.sun: fix error when using both lat and lon raster
- G78:r.thin: avoid integer overflow
- G78:r.univar: report stats with nan if a given zone has only NULL values
- G78:r.walk: add option nearest from r.cost
- G78:r.watershed: multiple flow direction output
- G78:v.buffer: added test for zero distance
- G78:v.distance: improve iterative search; speed improvement for small dmax
- G78:v.external: enable GRASS-internal PostGIS driver again
- G78:v.generalize: preserve boundary categories
- G78:v.in.geonames: read as UTF8
- G78:v.in.ogr: disable unreliable OGR extents for spatial filter
- G78:v.in.ogr: set spatial filter to correct geometry field if geom option is given
- G78:v.mkgrid: new -d flag to add diagonals to rectangular lines
- G78:v.out.postgis: document a bug, output option is ignored for attributes
- G78:v.rast.stats: add where option
- G78:v.report: Add -d flag for geometries with no database records
- G78:v.report: added -c flag to avoid column names in output
- G78:v.to.points: new option use=start/end
- G78:v.to.rast: do not create raster categories if vector categories are used as cell values because 1. Rast_set_cat() is terribly slow for many categories, 2. this information is redundant (1: 1 etc is not informative)
- G78:v.voronoi: fix for area skeletons and voronoi diagrams for areas. Numerical stability of v.voronoi has been improved but is not perfect.
Improvements in the Graphical User Interface
- wxGUI data catalog: allow to perform actions on multiple layers (e.g. deleting, moving, reprojection, display, metadata)
- wxGUI/animation: fixes for Python 3
- wxGUI/digitizer: fixes for Python 3
- wxGUI/modeller: fixes for Python 3
- wxGUI: add function to LM interface to programmatically change layer
- wxGUI: add GeoPackage as known raster/vector format
- wxGUI: fix setting non-ascii display name
- wxGUI/psmap: wxPython 4 compatibility
- wxGUI: use g.proj list_codes=EPSG to read EPSG codes
Python scripting
Python 2 end-of-life: https://www.python.org/doc/sunset-python-2/
GRASS GIS has been updated to Python 3:
- all python scripts: change Python shebang to python3 (PR #75, #82)
- pygrass: fixing doctests (only for Python 3)
- pygrass.gis: make region importable from grass.pygrass.gis
- pythonlib: fix encoding
Projection support
- libproj: code clean-up; PROJ5: EPSG must lowercase epsg, PROJ6+: EPSG must uppercase EPSG
Database support
- postgresql driver: create index if not exists for PG server versions 9.5+
Library changes
- configure, configure.in: configure with ZSTD by default, can be disabled with --with-zstd=no
- ctypes: delete lib/python/ctypes/ctypesgencore/parser/lextab.py (#95)- since lextab.py is auto-generated
- libpython: float_or_dms accept E,W,N,S
- libraster: add support for GDAL 2.4 on MS Windows
- libraster: fsync data files before closing, and capture any errors; sync_and_close() null file; no fsync check for corrupt raster data on Windows
- libsegment: fix for all-in-memory cache
- libvector: support reserved PostgreSQL keywords as column name by quoting when exporting vector map to PostGIS database; Vect_cidx_find_all() should not allow mixing GV_AREA with other geometries
- parser: added --json output, useful for REST API output (needed e.g. for actinia)
- Vlib: adjust dynamic floating point representation error for squared distances
- Vlib: fix fp error in Vect_segment_intersection()
Unit tests / CI
- testsuite/examples/test_framework_GRASS_GIS_with_NC.sh: major cleanup
- various modules: test added and respective testsuites cleaned up
- Travis-CI: enable ccache for faster builds
- Codecov: Attempt to add Codecov support for automated source code quality checks (https://codecov.io/gh/OSGeo/grass)
User Manuals - Documentation
- various manual pages: examples added/updated
Portability
- Python-3 support implemented across the tree
Docker support
- Various docker images listed at: https://grass.osgeo.org/download/software/docker-images/
- Dockerfile: updated to Python 3
Message Translations
- i18N: added new translations from Transifex (https://www.transifex.com/grass-gis/grass7/dashboard/)
- i18N: cleanup gettext usage for Python code
New Addons since GRASS 7.6.0
- G7A:i.sar.speckle - Remove speckle from SAR image
- G7A:r.fill.category - Replaces the values of pixels of a given category with values of the surrounding pixels
- G7A:r.object.thickness - Evaluates minimum, maximum and mean thickness of objects of a given category on a raster map
- G7A:r.out.kde - Exports raster with variable transparency into an image file
- G7A:r.out.legend - Create an image file showing the legend of a raster map
- G7A:r.random.weight - Generates a binary raster layer with a random selection of raster cells depending on the weight of each cell in the input weight layer.
- G7A:r.sample.category - Create sampling points from each category in a raster map
- G7A:r.series.diversity - Compute diversity indici over input layers
Closed tickets
Closed bugs since the last release
- #2708
- Run GRASS with Python3
- #2751
- G_progress() does not support GRASS_MESSAGE_FORMAT=gui
- #3170
- GRASS_BATCH_JOB does not tolerate path with spaces
- #3339
- postgis topology: missing relations
- #3446
- GRASS python library is not working with python 3
- #3478
- g.extension does not work with bitbucket repo
- #3587
- Call to deprecated item in wxGUI
- #3635
- Suspicious use and cleanup of the mapset tempoary directory
- #3641
- python3/ctypes: ctypes.ArgumentError: argument 2: <type 'exceptions.TypeError'>: expected LP_struct_Cell_head instance instead of LP_struct_Cell_head
- #3644
- winGRASS7.7.svn: displaying raster causes: TypeError: environment can only contain strings
- #3649
- Cartographic composer: OK, pointer and pan buttons do not work
- #3662
- pygrass open vector fails in python3
- #3666
- wxGUI: Save to file in 3D mode fails with Unicode error
- #3673
- wxGUI: UnicodeEncodeError when querying vector map
- #3675
- g.gui.rlisetup: cannot create the configuration file
- #3681
- g.gui.tplot does not open
- #3682
- t.rast.algebra: Error wrong type of input
- #3704
- ctypes compilation error with Python-3.7
- #3720
- temporal modules fail with python 3
- #3723
- winGRASS7.7.svn - core.py - python 3 issues
- #3725
- all temporal modules produce WARNING:root:Needed to restart the libgis server
- #3727
- t.rast.aggregate fails with python3
- #3731
- winGRASS7.7.svn python3 build issues
- #3733
- winGRASS 7.7svn execute command fails
- #3734
- Location wizard on python 3 seems to be broken
- #3739
- lib/python/ctypes/ctypesgencore/parser/lextab.py changes after compilation.
- #3746
- Quouting of strings with white space in t.info breaks tests for temporal modules
- #3752
- g.gui.animation: TypeError: 'zip' object is not subscriptable
- #3753
- g.gui.tplot and g.gui.timeline: AttributeError: 'itertools.cycle' object has no attribute 'next'
- #3755
- error when saving workspace in python 3
- #3757
- Python3: range vs xrange
- #3777
- vector digitizer crashes with python 3
- #3797
- r.horizon suffix gets messed up in multi-direction mode
- #3798
- Python 3: gunittest multirunner.py crashes
- #3802
- grass77: g.proj compilation fails with proj 5.2.0
- #3803
- g.extension: Import requests for python3, too
- #3805
- Export vector map (table with column name, which is reserved PostgreSQL keyword) into the PostGIS database
- #3808
- "Next" button inactive in EPSG selection page of Location wizard
- #3814
- v.buffer: segfault in LL
- #3825
- Fix tests stalling with Python 3
- #3837
- OSGeo4W winGRASS77svn - startup error: TypeError: endswith first arg must be bytes or a tuple of bytes, not str
- #3861
- winGRASS master (git) - g.proj not found at startup
- #3872
- winGRASS Version: 7.7.dev - wrong german Umlaut in wxGUI
- #3894
- g.gui.animation fails to export animation with python3 error
- #3897
- d.mon errors when closing
- #3899
- g.gui.gmodeler: loading of modeller file broken with TypeError
Closed wishes since the last release
- #3491
- i.group cannot read from other mapsets
- #3669
- graphical modeler: export UI definitions into Python script
- #3719
- prepare OSGeo4W environment for winGRASS 7.8 with python 3
- #3738
- Make python version configurable on compilation time
- #3741
- t.rast.series: allow multiple methods/output
- #3792
- Use unique names on test modules
- #3844
- Make Region importable from pygrass.gis
- #3849
- Do we need to clear the screen when entering/exiting GRASS?