From 3b1d8897390fc38a964d7a82f2a4cb0588aa4461 Mon Sep 17 00:00:00 2001 From: Arohan Ajit Date: Wed, 11 Dec 2024 22:37:52 -0500 Subject: [PATCH 001/162] temporal: Fix bare except statements with specific error handling (#4805) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Edouard Choinière <27212526+echoix@users.noreply.github.com> --- .flake8 | 3 --- python/grass/temporal/abstract_space_time_dataset.py | 5 ++++- python/grass/temporal/core.py | 8 ++++---- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/.flake8 b/.flake8 index 36ab602783e..6f7ca25c163 100644 --- a/.flake8 +++ b/.flake8 @@ -48,9 +48,6 @@ per-file-ignores = # TODO: Is this really needed? python/grass/pygrass/vector/__init__.py: E402 python/grass/pygrass/vector/__init__.py: E402 - python/grass/temporal/abstract_space_time_dataset.py: E722 - python/grass/temporal/c_libraries_interface.py: E722 - python/grass/temporal/core.py: E722 python/grass/temporal/datetime_math.py: E722 python/grass/temporal/spatial_topology_dataset_connector.py: E722 python/grass/temporal/temporal_algebra.py: E722 diff --git a/python/grass/temporal/abstract_space_time_dataset.py b/python/grass/temporal/abstract_space_time_dataset.py index 74e38c12e6e..541fc8dd564 100644 --- a/python/grass/temporal/abstract_space_time_dataset.py +++ b/python/grass/temporal/abstract_space_time_dataset.py @@ -19,6 +19,7 @@ class that is the base class for all space time datasets. from abc import ABCMeta, abstractmethod from datetime import datetime from pathlib import Path +from grass.exceptions import FatalError from .abstract_dataset import AbstractDataset, AbstractDatasetComparisonKeyStartTime from .core import ( @@ -2463,7 +2464,9 @@ def is_map_registered(self, map_id, dbif=None): try: dbif.execute(sql, (map_id,), mapset=self.base.mapset) row = dbif.fetchone(mapset=self.base.mapset) - except: + except FatalError: + raise + except Exception: self.msgr.warning(_("Error in register table request")) raise diff --git a/python/grass/temporal/core.py b/python/grass/temporal/core.py index 73cba84b6d3..c350c4fa458 100644 --- a/python/grass/temporal/core.py +++ b/python/grass/temporal/core.py @@ -52,7 +52,7 @@ try: import psycopg2 import psycopg2.extras -except: +except ImportError: pass import atexit @@ -414,7 +414,7 @@ def get_tgis_metadata(dbif=None): statement = "SELECT * FROM tgis_metadata;\n" dbif.execute(statement) rows = dbif.fetchall() - except: + except Exception: rows = None if connection_state_changed: @@ -1501,7 +1501,7 @@ def execute(self, statement, args=None): self.cursor.execute(statement, args) else: self.cursor.execute(statement) - except: + except (sqlite3.Error, psycopg2.Error): if connected: self.close() self.msgr.error(_("Unable to execute :\n %(sql)s") % {"sql": statement}) @@ -1544,7 +1544,7 @@ def execute_transaction(self, statement, mapset=None): else: self.cursor.execute(statement) self.connection.commit() - except: + except (sqlite3.Error, psycopg2.Error): if connected: self.close() self.msgr.error( From 60ad5a75239645b5b48df2c2132cf73c07b3b6c4 Mon Sep 17 00:00:00 2001 From: Ondrej Pesek Date: Thu, 12 Dec 2024 11:14:50 +0100 Subject: [PATCH 002/162] v.in.wfs: improve error message for ServiceException (#4812) the current one said that the downloaded XML cannot be found - report the meaningful content of service exception report instead --- scripts/v.in.wfs/v.in.wfs.py | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/scripts/v.in.wfs/v.in.wfs.py b/scripts/v.in.wfs/v.in.wfs.py index 2949949ad50..ead40698fbd 100755 --- a/scripts/v.in.wfs/v.in.wfs.py +++ b/scripts/v.in.wfs/v.in.wfs.py @@ -227,7 +227,14 @@ def main(): grass.run_command("v.in.ogr", flags="o", input=tmpxml, output=out) grass.message(_("Vector map <%s> imported from WFS.") % out) except Exception: + import xml.etree.ElementTree as ET + grass.message(_("WFS import failed")) + + root = ET.parse(tmpxml).getroot() + if "ServiceExceptionReport" in root.tag: + se = root.find(root.tag[:-6]) # strip "Report" from the tag + grass.message(se.text.strip()) finally: try_remove(tmpxml) From 1099741192d9312c82b61900a05024befcaadd39 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 12 Dec 2024 23:41:07 +0000 Subject: [PATCH 003/162] CI(deps): Update github/codeql-action action to v3.27.8 (#4834) --- .github/workflows/codeql-analysis.yml | 4 ++-- .github/workflows/python-code-quality.yml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml index ce80ab353d2..113c3ad8ee0 100644 --- a/.github/workflows/codeql-analysis.yml +++ b/.github/workflows/codeql-analysis.yml @@ -56,7 +56,7 @@ jobs: if: ${{ matrix.language == 'c-cpp' }} - name: Initialize CodeQL - uses: github/codeql-action/init@babb554ede22fd5605947329c4d04d8e7a0b8155 # v3.27.7 + uses: github/codeql-action/init@8a93837afdf1873301a68d777844b43e98cd4313 # v3.27.8 with: languages: ${{ matrix.language }} config-file: ./.github/codeql/codeql-config.yml @@ -81,6 +81,6 @@ jobs: run: .github/workflows/build_ubuntu-22.04.sh "${HOME}/install" - name: Perform CodeQL Analysis - uses: github/codeql-action/analyze@babb554ede22fd5605947329c4d04d8e7a0b8155 # v3.27.7 + uses: github/codeql-action/analyze@8a93837afdf1873301a68d777844b43e98cd4313 # v3.27.8 with: category: "/language:${{matrix.language}}" diff --git a/.github/workflows/python-code-quality.yml b/.github/workflows/python-code-quality.yml index 442a9bb11a8..d60a5059b2a 100644 --- a/.github/workflows/python-code-quality.yml +++ b/.github/workflows/python-code-quality.yml @@ -135,7 +135,7 @@ jobs: path: bandit.sarif - name: Upload SARIF File into Security Tab - uses: github/codeql-action/upload-sarif@babb554ede22fd5605947329c4d04d8e7a0b8155 # v3.27.7 + uses: github/codeql-action/upload-sarif@8a93837afdf1873301a68d777844b43e98cd4313 # v3.27.8 with: sarif_file: bandit.sarif From d0cd498e3c8631746872dc5bfaa543e453d6c5c4 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 13 Dec 2024 15:44:12 -0500 Subject: [PATCH 004/162] CI(deps): Update super-linter/super-linter action to v7.2.1 (#4836) --- .github/workflows/super-linter.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/super-linter.yml b/.github/workflows/super-linter.yml index b8fe555a343..01a22f99edf 100644 --- a/.github/workflows/super-linter.yml +++ b/.github/workflows/super-linter.yml @@ -31,7 +31,7 @@ jobs: # list of files that changed across commits fetch-depth: 0 - name: Lint code base - uses: super-linter/super-linter/slim@e1cb86b6e8d119f789513668b4b30bf17fe1efe4 # v7.2.0 + uses: super-linter/super-linter/slim@85f7611e0f7b53c8573cca84aa0ed4344f6f6a4d # v7.2.1 env: DEFAULT_BRANCH: main # To report GitHub Actions status checks From a6bc2b9278b3abd91d790e9330241e03793ba6d1 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 13 Dec 2024 16:08:19 -0500 Subject: [PATCH 005/162] CI(deps): Update github/codeql-action action to v3.27.9 (#4835) --- .github/workflows/codeql-analysis.yml | 4 ++-- .github/workflows/python-code-quality.yml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml index 113c3ad8ee0..bfc207cb68a 100644 --- a/.github/workflows/codeql-analysis.yml +++ b/.github/workflows/codeql-analysis.yml @@ -56,7 +56,7 @@ jobs: if: ${{ matrix.language == 'c-cpp' }} - name: Initialize CodeQL - uses: github/codeql-action/init@8a93837afdf1873301a68d777844b43e98cd4313 # v3.27.8 + uses: github/codeql-action/init@df409f7d9260372bd5f19e5b04e83cb3c43714ae # v3.27.9 with: languages: ${{ matrix.language }} config-file: ./.github/codeql/codeql-config.yml @@ -81,6 +81,6 @@ jobs: run: .github/workflows/build_ubuntu-22.04.sh "${HOME}/install" - name: Perform CodeQL Analysis - uses: github/codeql-action/analyze@8a93837afdf1873301a68d777844b43e98cd4313 # v3.27.8 + uses: github/codeql-action/analyze@df409f7d9260372bd5f19e5b04e83cb3c43714ae # v3.27.9 with: category: "/language:${{matrix.language}}" diff --git a/.github/workflows/python-code-quality.yml b/.github/workflows/python-code-quality.yml index d60a5059b2a..538f76ee918 100644 --- a/.github/workflows/python-code-quality.yml +++ b/.github/workflows/python-code-quality.yml @@ -135,7 +135,7 @@ jobs: path: bandit.sarif - name: Upload SARIF File into Security Tab - uses: github/codeql-action/upload-sarif@8a93837afdf1873301a68d777844b43e98cd4313 # v3.27.8 + uses: github/codeql-action/upload-sarif@df409f7d9260372bd5f19e5b04e83cb3c43714ae # v3.27.9 with: sarif_file: bandit.sarif From ea0185f2f180a4322d4ff683e5bb8c368ef3062b Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sat, 14 Dec 2024 15:45:08 +0000 Subject: [PATCH 006/162] CI(deps): Update ruff to v0.8.3 (#4833) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * CI(deps): Update ruff to v0.8.3 * style: Fix if-key-in-dict-del (RUF051) Ruff rule: https://docs.astral.sh/ruff/rules/if-key-in-dict-del/ When a dictionary's pop() method is used with the second argument (default value), and the second parameter is None, it removes the key from the dict, but doesn't raise a `KeyError` if it didn't exist. The value returned is None. --------- Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: Edouard Choinière <27212526+echoix@users.noreply.github.com> --- .github/workflows/python-code-quality.yml | 2 +- .pre-commit-config.yaml | 2 +- gui/wxpython/core/utils.py | 3 +-- python/grass/pydispatch/signal.py | 3 +-- 4 files changed, 4 insertions(+), 6 deletions(-) diff --git a/.github/workflows/python-code-quality.yml b/.github/workflows/python-code-quality.yml index 538f76ee918..59f723e1e7e 100644 --- a/.github/workflows/python-code-quality.yml +++ b/.github/workflows/python-code-quality.yml @@ -36,7 +36,7 @@ jobs: # renovate: datasource=pypi depName=bandit BANDIT_VERSION: "1.8.0" # renovate: datasource=pypi depName=ruff - RUFF_VERSION: "0.8.2" + RUFF_VERSION: "0.8.3" runs-on: ${{ matrix.os }} permissions: diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index c094d2bbd05..2138c36642f 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -37,7 +37,7 @@ repos: ) - repo: https://github.com/astral-sh/ruff-pre-commit # Ruff version. - rev: v0.8.2 + rev: v0.8.3 hooks: # Run the linter. - id: ruff diff --git a/gui/wxpython/core/utils.py b/gui/wxpython/core/utils.py index b04d2e73c12..e500c47d263 100644 --- a/gui/wxpython/core/utils.py +++ b/gui/wxpython/core/utils.py @@ -849,8 +849,7 @@ def StoreEnvVariable(key, value=None, envFile=None): # update environmental variables if value is None: - if key in environ: - del environ[key] + environ.pop(key, None) else: environ[key] = value diff --git a/python/grass/pydispatch/signal.py b/python/grass/pydispatch/signal.py index 51808e01ee3..12e73e71882 100644 --- a/python/grass/pydispatch/signal.py +++ b/python/grass/pydispatch/signal.py @@ -266,8 +266,7 @@ def __call__(self, *args, **kwargs): Traceback (most recent call last): TypeError: mywrite() takes exactly 1 argument (0 given) """ - if "signal" in kwargs: - del kwargs["signal"] + kwargs.pop("signal", None) self.emit(*args, **kwargs) From 5e27d1a9ace29b816410546f237a62c999395307 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Edouard=20Choini=C3=A8re?= <27212526+echoix@users.noreply.github.com> Date: Sat, 14 Dec 2024 20:02:51 -0500 Subject: [PATCH 007/162] pytest: Allow default test file naming patterns inside tests folders (#4784) * pytest: Allow default test file naming patterns inside tests folders * tests: Patch environment variables in xy_session fixture for grassTask test * Update test_script_task.py Co-authored-by: Markus Neteler * Extract expected value to variable --------- Co-authored-by: Markus Neteler --- pyproject.toml | 2 +- python/grass/script/tests/test_script_task.py | 47 ++++++++++++++++++- 2 files changed, 46 insertions(+), 3 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index f14ec703ce2..358ab047112 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -397,7 +397,7 @@ ignore = [ [tool.pytest.ini_options] minversion = "6.0" -python_files = "*/tests/*_test.py" +python_files = "*/tests/*_test.py */tests/test_*.py" addopts = """ --ignore-glob='dist.*' --ignore-glob='bin.*' diff --git a/python/grass/script/tests/test_script_task.py b/python/grass/script/tests/test_script_task.py index cae8735827e..aff10500d7c 100644 --- a/python/grass/script/tests/test_script_task.py +++ b/python/grass/script/tests/test_script_task.py @@ -1,11 +1,54 @@ +import os + +import pytest + +import grass.script as gs from grass.script.task import grassTask -def test_mapcalc_simple_e_name(): +@pytest.fixture +def xy_session_patched_env(tmp_path, monkeypatch): + """Active session in an XY location (scope: function), patching env vars directly. + + This allows functions not accepting an env dictionary argument to work in tests""" + location = "xy_test" + gs.core._create_location_xy(tmp_path, location) # pylint: disable=protected-access + with gs.setup.init(tmp_path / location, env=os.environ.copy()) as session: + for key, value in session.env.items(): + monkeypatch.setenv(key, value) + yield session + + +def test_mapcalc_simple_e_name(xy_session_patched_env): gt = grassTask("r.mapcalc.simple") assert gt.get_param("e")["name"] == "e" -def test_mapcalc_simple_expession_name(): +def test_mapcalc_simple_expression_name(xy_session_patched_env): gt = grassTask("r.mapcalc.simple") assert gt.get_param("expression")["name"] == "expression" + + +def test_d_vect_from_bin(xy_session_patched_env): + """Tests that a module installed in "$GISBASE/bin can be used with grassTask""" + task = grassTask("d.vect") + task.get_param("map")["value"] = "map_name" + task.get_flag("i")["value"] = True + task.get_param("layer")["value"] = 1 + task.get_param("label_bcolor")["value"] = "red" + # the default parameter display is added automatically + actual = " ".join(task.get_cmd()) + expected = "d.vect -i map=map_name layer=1 display=shape label_bcolor=red" + assert actual == expected + + +def test_v_clip_from_scripts(xy_session_patched_env): + """Tests that a module installed in "$GISBASE/scripts can be used with grassTask""" + task = grassTask("v.clip") + task.get_param("input")["value"] = "map_name" + task.get_flag("r")["value"] = True + task.get_param("clip")["value"] = "clip_map_name" + task.get_param("output")["value"] = "output_map_name" + actual = " ".join(task.get_cmd()) + expected = "v.clip -r input=map_name clip=clip_map_name output=output_map_name" + assert actual == expected From 161658b94c323fffa2db7ea3d1ffe7d54d05bff3 Mon Sep 17 00:00:00 2001 From: Martin Landa Date: Sun, 15 Dec 2024 23:01:01 +0100 Subject: [PATCH 008/162] win: patch from OSGeo4W applied (#4121) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * patch from https://github.com/jef-n/OSGeo4W/blob/master/src/grass/osgeo4w/patch applied * attempt to fix osgeo4w CI * re-introduce mingw-w64-x86_64-libpng * sync with osgeo4w patch * add NumPy into deps in order to fix some tests * CI(OSGeo4W): Sort OSGeo4W packages in a multiline list * Add back matplotlib package * style: Sort packages and configure flags in mswindows build scripts * packaging: Removed changes from patch that was removed upstream https://github.com/jef-n/OSGeo4W/commit/c678c71d080e5c33e8cb64b12386be2ca4b6c54a * packaging: Apply upstream patch update https://github.com/jef-n/OSGeo4W/commit/4bd721f07ac8036274328a9e4500c1fa944a0926 * packaging: Keep --with-libpng with libpng-config from repo * CI: Split msys2 packages on multiple lines, using pacboy for environment-specific packages * Remove DLL list as unused after applying latest patch The dll files are copied with the following line, which doesn't need to use that list anymore # copy dependencies cp -uv $(/usr/bin/find apps/grass/grass$POSTFIX -iname "*.dll" -o -iname "*.exe" | PATH=$PWD/apps/grass/grass$POSTFIX/lib:$PWD/bin:/mingw64/bin:/usr/bin /usr/bin/xargs /usr/bin/ldd | /usr/bin/sed -ne 's#^.* => \(/mingw64/bin/.*\) (.*)$#\1#p' | /usr/bin/sort -u) apps/grass/grass$POSTFIX/bin --------- Co-authored-by: Edouard Choinière <27212526+echoix@users.noreply.github.com> Co-authored-by: Jürgen Fischer --- .github/workflows/osgeo4w.yml | 13 +---- mswindows/osgeo4w/build_osgeo4w.sh | 5 +- mswindows/osgeo4w/env.bat.tmpl | 2 + mswindows/osgeo4w/libpng-config | 2 +- mswindows/osgeo4w/package.sh | 91 +++++++++++------------------- 5 files changed, 44 insertions(+), 69 deletions(-) diff --git a/.github/workflows/osgeo4w.yml b/.github/workflows/osgeo4w.yml index b58b168cb3d..b031d55de6b 100644 --- a/.github/workflows/osgeo4w.yml +++ b/.github/workflows/osgeo4w.yml @@ -55,7 +55,6 @@ jobs: gcc gettext libiconv - libpng libsystre libtre-git libwinpthread-git @@ -72,20 +71,15 @@ jobs: package-dir: "D:/OSGeo4W_pkg" packages: | cairo-devel - fftw freetype-devel gdal-devel - gdal-ecw - gdal-mrsid geos-devel + libjpeg-turbo-devel liblas-devel libpng-devel libpq-devel libtiff-devel - libxdr netcdf-devel - pdal-devel - pdcurses proj-devel python3-core python3-jupyter @@ -95,8 +89,9 @@ jobs: python3-ply python3-pytest python3-pywin32 + python3-six python3-wxpython - regex-devel + sqlite3-devel zstd-devel - name: Set number of cores for compilation @@ -107,8 +102,6 @@ jobs: - name: Compile GRASS GIS shell: msys2 {0} run: | - export CFLAGS="${CFLAGS} -pipe" - export CXXFLAGS="${CXXFLAGS} -pipe" .github/workflows/build_osgeo4w.sh - name: Print installed versions diff --git a/mswindows/osgeo4w/build_osgeo4w.sh b/mswindows/osgeo4w/build_osgeo4w.sh index 98ed16aac1e..252b615339f 100755 --- a/mswindows/osgeo4w/build_osgeo4w.sh +++ b/mswindows/osgeo4w/build_osgeo4w.sh @@ -21,6 +21,8 @@ export C_INCLUDE_PATH=".:${OSGEO4W_ROOT_MSYS}/include:${SRC}/dist.${ARCH}/includ export PYTHONHOME=${OSGEO4W_ROOT_MSYS}/apps/Python312 export ARCH=x86_64-w64-mingw32 +CFLAGS="$CFLAGS -pipe" \ +CXXFLAGS="$CXXFLAGS -pipe" \ ./configure \ --bindir=${OSGEO4W_ROOT_MSYS}/bin \ --enable-largefile \ @@ -34,7 +36,7 @@ export ARCH=x86_64-w64-mingw32 --with-cairo \ --with-cairo-includes=${OSGEO4W_ROOT_MSYS}/include \ --with-cairo-ldflags="-L${SRC}/mswindows/osgeo4w/lib -lcairo" \ - --with-cairo-libs=$OSGEO4W_ROOT_MSYS/lib \ + --with-cairo-libs=${OSGEO4W_ROOT_MSYS}/lib \ --with-cxx \ --with-fftw \ --with-freetype \ @@ -44,6 +46,7 @@ export ARCH=x86_64-w64-mingw32 --with-includes=${OSGEO4W_ROOT_MSYS}/include \ --with-lapack \ --with-liblas=${SRC}/mswindows/osgeo4w/liblas-config \ + --with-libpng=${SRC}/mswindows/osgeo4w/libpng-config \ --with-libs="${OSGEO4W_ROOT_MSYS}/lib ${OSGEO4W_ROOT_MSYS}/bin" \ --with-netcdf=${OSGEO4W_ROOT_MSYS}/bin/nc-config \ --with-nls \ diff --git a/mswindows/osgeo4w/env.bat.tmpl b/mswindows/osgeo4w/env.bat.tmpl index 200c86f2687..04065161a78 100644 --- a/mswindows/osgeo4w/env.bat.tmpl +++ b/mswindows/osgeo4w/env.bat.tmpl @@ -8,6 +8,8 @@ REM Uncomment if you want to use Bash instead of Cmd REM Note that msys package must be also installed REM set GRASS_SH=%OSGEO4W_ROOT%\apps\msys\bin\sh.exe +set PYTHONPATH=%OSGEO4W_ROOT%\apps\grass\grass@POSTFIX@\etc\python;%PYTHONPATH% +set GRASS_COMPATIBILITY_TEST=0 set GRASS_PYTHON=%OSGEO4W_ROOT%\bin\python3.exe set GRASS_PROJSHARE=%OSGEO4W_ROOT%\share\proj diff --git a/mswindows/osgeo4w/libpng-config b/mswindows/osgeo4w/libpng-config index f00a136be1e..e8d8be2f671 100755 --- a/mswindows/osgeo4w/libpng-config +++ b/mswindows/osgeo4w/libpng-config @@ -14,7 +14,7 @@ prefix="${OSGEO4W_ROOT_MSYS}" version="$(sed '/^#define PNG_LIBPNG_VER_STRING/!d; s/^[^"]*"\|"//g' ${prefix}/include/libpng*/png.h)" -dll_version="$(sed '/^#define PNG_LIBPNG_VER_DLLNUM/!d; s/^[^0-9]*\|[^0-9]*$//g' ${prefix}/include/libpng*/png.h)" +dll_version="$(sed '/^#define PNG_LIBPNG_VER_SHAREDLIB/!d; s/^[^0-9]*\|[^0-9]*$//g' ${prefix}/include/libpng*/png.h)" exec_prefix="${prefix}" libdir="${prefix}/lib" includedir="${prefix}/include/libpng${dll_version}" diff --git a/mswindows/osgeo4w/package.sh b/mswindows/osgeo4w/package.sh index 643d6735362..50d5b9ddc4d 100755 --- a/mswindows/osgeo4w/package.sh +++ b/mswindows/osgeo4w/package.sh @@ -1,8 +1,9 @@ -#!/usr/bin/bash +#!/bin/bash set -e -PWD="$(pwd)" +export ARCH=x86_64-w64-mingw32 +export SRC=$PWD if ! [ -d mswindows ]; then echo Start from GRASS toplevel dir @@ -106,34 +107,6 @@ fi exec 3>&1 > >(tee mswindows/osgeo4w/package.log) 2>&1 -DLLS=" - /mingw64/bin/libbrotlicommon.dll - /mingw64/bin/libbrotlidec.dll - /mingw64/bin/libbz2-1.dll - /mingw64/bin/libcairo-2.dll - /mingw64/bin/libfftw3-3.dll - /mingw64/bin/libfontconfig-1.dll - /mingw64/bin/libfreetype-6.dll - /mingw64/bin/libgcc_s_seh-1.dll - /mingw64/bin/libgfortran-5.dll - /mingw64/bin/libglib-2.0-0.dll - /mingw64/bin/libgomp-1.dll - /mingw64/bin/libgraphite2.dll - /mingw64/bin/libharfbuzz-0.dll - /mingw64/bin/libiconv-2.dll - /mingw64/bin/libintl-8.dll - /mingw64/bin/libpcre-1.dll - /mingw64/bin/libpixman-1-0.dll - /mingw64/bin/libpng16-16.dll - /mingw64/bin/libquadmath-0.dll - /mingw64/bin/libstdc++-6.dll - /mingw64/bin/libsystre-0.dll - /mingw64/bin/libtre-5.dll - /mingw64/bin/libwinpthread-1.dll - /mingw64/bin/zlib1.dll - /mingw64/bin/libopenblas.dll -" - if ! [ -f mswindows/osgeo4w/configure-stamp ]; then if [ -e include/Make/Platform.make ] ; then log make distclean @@ -143,52 +116,54 @@ if ! [ -f mswindows/osgeo4w/configure-stamp ]; then log remove old logs rm -f mswindows/osgeo4w/package.log.* - mkdir -p dist.x86_64-w64-mingw32/bin - cp -uv $DLLS dist.x86_64-w64-mingw32/bin - mkdir -p mswindows/osgeo4w/lib - cp -uv $OSGEO4W_ROOT_MSYS/lib/libpq.lib mswindows/osgeo4w/lib/pq.lib cp -uv $OSGEO4W_ROOT_MSYS/lib/sqlite3_i.lib mswindows/osgeo4w/lib/sqlite3.lib + log configure + CFLAGS="$CFLAGS -pipe" \ + CXXFLAGS="$CXXFLAGS -pipe" \ ./configure \ - --bindir=$OSGEO4W_ROOT_MSYS/bin \ + --bindir=${OSGEO4W_ROOT_MSYS}/bin \ --enable-largefile \ --enable-shared \ - --host=x86_64-w64-mingw32 \ - --includedir=$OSGEO4W_ROOT_MSYS/include \ - --libexecdir=$OSGEO4W_ROOT_MSYS/bin \ - --prefix=$OSGEO4W_ROOT_MSYS/apps/grass \ + --host=${ARCH} \ + --includedir=${OSGEO4W_ROOT_MSYS}/include \ + --libexecdir=${OSGEO4W_ROOT_MSYS}/bin \ + --prefix=${OSGEO4W_ROOT_MSYS}/apps/grass \ --with-blas \ --with-bzlib \ --with-cairo \ - --with-cairo-includes=$OSGEO4W_ROOT_MSYS/include \ - --with-cairo-ldflags="-L$PWD/mswindows/osgeo4w/lib -lcairo -lfontconfig" \ + --with-cairo-includes=${OSGEO4W_ROOT_MSYS}/include \ + --with-cairo-ldflags="-L${SRC}/mswindows/osgeo4w/lib -lcairo" \ + --with-cairo-libs=${OSGEO4W_ROOT_MSYS}/lib \ --with-cxx \ --with-fftw \ --with-freetype \ - --with-freetype-includes=/mingw64/include/freetype2 \ - --with-gdal=$PWD/mswindows/osgeo4w/gdal-config \ - --with-geos=$PWD/mswindows/osgeo4w/geos-config \ - --with-includes=$OSGEO4W_ROOT_MSYS/include \ + --with-freetype-includes=${OSGEO4W_ROOT_MSYS}/include/freetype2 \ + --with-gdal=${SRC}/mswindows/osgeo4w/gdal-config \ + --with-geos=${SRC}/mswindows/osgeo4w/geos-config \ + --with-includes=${OSGEO4W_ROOT_MSYS}/include \ --with-lapack \ - --with-liblas=$PWD/mswindows/osgeo4w/liblas-config \ - --with-libs="$OSGEO4W_ROOT_MSYS/lib" \ + --with-liblas=${SRC}/mswindows/osgeo4w/liblas-config \ + --with-libpng=${SRC}/mswindows/osgeo4w/libpng-config \ + --with-libs="${OSGEO4W_ROOT_MSYS}/lib ${OSGEO4W_ROOT_MSYS}/bin" \ --with-netcdf=${OSGEO4W_ROOT_MSYS}/bin/nc-config \ --with-nls \ --with-odbc \ --with-opengl=windows \ --with-openmp \ --with-postgres \ - --with-postgres-includes=$OSGEO4W_ROOT_MSYS/include \ - --with-postgres-libs=$PWD/mswindows/osgeo4w/lib \ - --with-proj-includes=$OSGEO4W_ROOT_MSYS/include \ - --with-proj-libs=$OSGEO4W_ROOT_MSYS/lib \ - --with-proj-share=$OSGEO4W_ROOT_MSYS/share/proj \ + --with-postgres-includes=${OSGEO4W_ROOT_MSYS}/include \ + --with-postgres-libs=${OSGEO4W_ROOT_MSYS}/lib \ + --with-proj-includes=${OSGEO4W_ROOT_MSYS}/include \ + --with-proj-libs=${OSGEO4W_ROOT_MSYS}/lib \ + --with-proj-share=${OSGEO4W_ROOT_MSYS}/share/proj \ + --with-readline \ --with-regex \ --with-sqlite \ - --with-sqlite-includes=$OSGEO4W_ROOT_MSYS/include \ - --with-sqlite-libs=$PWD/mswindows/osgeo4w/lib \ + --with-sqlite-includes=${OSGEO4W_ROOT_MSYS}/include \ + --with-sqlite-libs=${OSGEO4W_ROOT_MSYS}/lib \ --with-zstd \ --without-pdal \ --without-x @@ -244,9 +219,11 @@ if [ -n "$PACKAGE_PATCH" ]; then unix2dos etc/postinstall/grass${PACKAGE_POSTFIX}.bat unix2dos etc/preremove/grass${PACKAGE_POSTFIX}.bat - # copy dependencies (TODO: to be reduced) - cp -uv $DLLS apps/grass/grass$POSTFIX/bin - cp -uv /mingw64/etc/fonts/fonts.conf apps/grass/grass$POSTFIX/etc + # copy dependencies + cp -uv $(/usr/bin/find apps/grass/grass$POSTFIX -iname "*.dll" -o -iname "*.exe" | PATH=$PWD/apps/grass/grass$POSTFIX/lib:$PWD/bin:/mingw64/bin:/usr/bin /usr/bin/xargs /usr/bin/ldd | /usr/bin/sed -ne 's#^.* => \(/mingw64/bin/.*\) (.*)$#\1#p' | /usr/bin/sort -u) apps/grass/grass$POSTFIX/bin + + # copy R batch files + cp -uv $SRC/mswindows/external/rbatch/* apps/grass/grass$POSTFIX/bin # creating grass package /bin/tar -cjf $PDIR/grass$PACKAGE_POSTFIX-$VERSION-$PACKAGE_PATCH.tar.bz2 \ From f33c0b9ac9254cfebaebfb7aa304a96b17578ad9 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 16 Dec 2024 02:12:35 +0000 Subject: [PATCH 009/162] CI(deps): Update rui314/setup-mold digest to bac87d5 (#4848) --- .github/workflows/codeql-analysis.yml | 2 +- .github/workflows/pytest.yml | 2 +- .github/workflows/python-code-quality.yml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml index bfc207cb68a..8e1f8da2edf 100644 --- a/.github/workflows/codeql-analysis.yml +++ b/.github/workflows/codeql-analysis.yml @@ -52,7 +52,7 @@ jobs: sudo apt-get install -y wget git gawk findutils xargs -a <(awk '! /^ *(#|$)/' ".github/workflows/apt.txt") -r -- \ sudo apt-get install -y --no-install-recommends --no-install-suggests - - uses: rui314/setup-mold@b015f7e3f2938ad3a5ed6e5111a8c6c7c1d6db6e # v1 + - uses: rui314/setup-mold@bac87d5a5820d626ba77131fbbfbce77faf03b6e # v1 if: ${{ matrix.language == 'c-cpp' }} - name: Initialize CodeQL diff --git a/.github/workflows/pytest.yml b/.github/workflows/pytest.yml index 5ccf299f3ef..477bde359d3 100644 --- a/.github/workflows/pytest.yml +++ b/.github/workflows/pytest.yml @@ -48,7 +48,7 @@ jobs: xargs -a <(awk '! /^ *(#|$)/' ".github/workflows/apt.txt") -r -- \ sudo apt-get install -y --no-install-recommends --no-install-suggests - - uses: rui314/setup-mold@b015f7e3f2938ad3a5ed6e5111a8c6c7c1d6db6e # v1 + - uses: rui314/setup-mold@bac87d5a5820d626ba77131fbbfbce77faf03b6e # v1 - name: Install Python dependencies run: | diff --git a/.github/workflows/python-code-quality.yml b/.github/workflows/python-code-quality.yml index 59f723e1e7e..83853dd4f5f 100644 --- a/.github/workflows/python-code-quality.yml +++ b/.github/workflows/python-code-quality.yml @@ -147,7 +147,7 @@ jobs: run: | echo "MAKEFLAGS=-j$(nproc)" >> $GITHUB_ENV - - uses: rui314/setup-mold@b015f7e3f2938ad3a5ed6e5111a8c6c7c1d6db6e # v1 + - uses: rui314/setup-mold@bac87d5a5820d626ba77131fbbfbce77faf03b6e # v1 - name: Build run: .github/workflows/build_${{ matrix.os }}.sh $HOME/install From ba48ca90e4df5a2e17d2cf099b1354f0de2bd1a6 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 16 Dec 2024 02:15:08 +0000 Subject: [PATCH 010/162] CI(deps): Lock file maintenance (#4847) --- flake.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/flake.lock b/flake.lock index ac3afa5fcf9..d355c3a89bb 100644 --- a/flake.lock +++ b/flake.lock @@ -19,11 +19,11 @@ }, "nixpkgs": { "locked": { - "lastModified": 1733376361, - "narHash": "sha256-aLJxoTDDSqB+/3orsulE6/qdlX6MzDLIITLZqdgMpqo=", + "lastModified": 1734126203, + "narHash": "sha256-0XovF7BYP50rTD2v4r55tR5MuBLet7q4xIz6Rgh3BBU=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "929116e316068c7318c54eb4d827f7d9756d5e9c", + "rev": "71a6392e367b08525ee710a93af2e80083b5b3e2", "type": "github" }, "original": { From 8bfcb8a7f99f9bc2cb0c89e3d23468dc93821331 Mon Sep 17 00:00:00 2001 From: Shreshth Malik Date: Mon, 16 Dec 2024 16:13:58 +0530 Subject: [PATCH 011/162] r.coin: added tests for r.coin module (#4755) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Added tests for r.coin module * Added config file for pytest --------- Co-authored-by: Edouard Choinière <27212526+echoix@users.noreply.github.com> --- raster/r.coin/tests/conftest.py | 57 +++++++++++++++++++++++++++++ raster/r.coin/tests/test_coin.py | 63 ++++++++++++++++++++++++++++++++ 2 files changed, 120 insertions(+) create mode 100644 raster/r.coin/tests/conftest.py create mode 100644 raster/r.coin/tests/test_coin.py diff --git a/raster/r.coin/tests/conftest.py b/raster/r.coin/tests/conftest.py new file mode 100644 index 00000000000..29c9eb0c3a2 --- /dev/null +++ b/raster/r.coin/tests/conftest.py @@ -0,0 +1,57 @@ +import os +import pytest +import grass.script as gs + + +@pytest.fixture +def setup_maps(tmp_path): + """Set up a GRASS session and create test raster maps.""" + + # Initialize GRASS project + project = tmp_path / "r_coin_project" + gs.create_project(project) + with gs.setup.init(project, env=os.environ.copy()) as session: + # Set the region + gs.run_command( + "g.region", + n=3, + s=0, + e=3, + w=0, + res=1, + env=session.env, + ) + + # Create the raster maps + # map1: + # 1 1 2 + # 1 2 3 + # 2 2 3 + gs.mapcalc( + "map1 = " + "if(row() == 1 && col() <= 2, 1, " + "if(row() == 1 && col() == 3, 2, " + "if(row() == 2 && col() == 1, 1, " + "if(row() == 2 && col() == 2, 2, " + "if(row() == 2 && col() == 3, 3, " + "if(row() == 3 && col() <= 2, 2, 3))))))", + overwrite=True, + env=session.env, + ) + + # map2: + # 1 2 2 + # 2 1 3 + # 3 3 3 + gs.mapcalc( + "map2 = " + "if(row() == 1 && col() == 1, 1, " + "if(row() == 1 && col() >= 2, 2, " + "if(row() == 2 && col() == 1, 2, " + "if(row() == 2 && col() == 2, 1, " + "if(row() == 2 && col() == 3, 3, " + "if(row() >= 3, 3, null()))))))", + overwrite=True, + env=session.env, + ) + yield session # Pass the session to tests diff --git a/raster/r.coin/tests/test_coin.py b/raster/r.coin/tests/test_coin.py new file mode 100644 index 00000000000..1befeed88d0 --- /dev/null +++ b/raster/r.coin/tests/test_coin.py @@ -0,0 +1,63 @@ +import grass.script as gs + + +def validate_r_coin_output(actual_results, expected_results): + """Validate r.coin output against expected results.""" + assert set(actual_results) == set( + expected_results + ), f"Expected {expected_results}, but got {actual_results}" + + +def test_r_coin(setup_maps): + """Test the r.coin module.""" + session = setup_maps + coin_output = gs.parse_command( + "r.coin", first="map1", second="map2", units="c", env=session.env + ) + + # Start parsing the output + actual_results = [] + is_data_section = False + + for line in coin_output: + # Detect the start of the data section + if "| cat# |" in line: + is_data_section = True + continue + + # Stop parsing after the data section ends + if is_data_section and line.startswith("+"): + break + + # Parse rows in the data section + if is_data_section: + columns = line.split("|") + if len(columns) > 2: + try: + # Extract categories and counts from the table + cat1 = int(columns[1].strip()[1:]) # Category from the row header + val1 = int(columns[2].strip()) # Value in column 1 + val2 = int(columns[3].strip()) # Value in column 2 + val3 = int(columns[4].strip()) # Value in column 3 + + actual_results.extend( + [(cat1, 1, val1), (cat1, 2, val2), (cat1, 3, val3)] + ) + except ValueError: + pass # Ignore lines that cannot be parsed as numbers + + # Expected results + expected_results = [ + (1, 1, 1), + (1, 2, 1), + (1, 3, 0), + (2, 1, 2), + (2, 2, 1), + (2, 3, 0), + (3, 1, 0), + (3, 2, 2), + (3, 3, 2), + ] + + # Validate results + validate_r_coin_output(actual_results, expected_results) From 3f405b91ba7564d2bb567796d7f8c902f20c5003 Mon Sep 17 00:00:00 2001 From: Arohan Ajit Date: Mon, 16 Dec 2024 05:45:44 -0500 Subject: [PATCH 012/162] wxGUI: Fix bare except in graphics.py (#4808) --- .flake8 | 1 - gui/wxpython/mapwin/graphics.py | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/.flake8 b/.flake8 index 6f7ca25c163..3bfab3179ce 100644 --- a/.flake8 +++ b/.flake8 @@ -37,7 +37,6 @@ per-file-ignores = gui/wxpython/mapswipe/g.gui.mapswipe.py: E501 gui/wxpython/mapwin/base.py: E722 gui/wxpython/mapwin/buffered.py: E722 - gui/wxpython/mapwin/graphics.py: E722 gui/wxpython/timeline/g.gui.timeline.py: E501 # Generated file gui/wxpython/menustrings.py: E501 diff --git a/gui/wxpython/mapwin/graphics.py b/gui/wxpython/mapwin/graphics.py index 0bc94bae6d2..b0cb7f36d6b 100644 --- a/gui/wxpython/mapwin/graphics.py +++ b/gui/wxpython/mapwin/graphics.py @@ -388,7 +388,7 @@ def _clearId(self, drawid): """Clears old object before drawing new object.""" try: self.pdc.ClearId(drawid) - except: + except (wx.PyDeadObjectError, KeyError): pass From 0b9b67246e0db4108f1a276f3c018cd41f241bd7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Edouard=20Choini=C3=A8re?= <27212526+echoix@users.noreply.github.com> Date: Mon, 16 Dec 2024 05:53:59 -0500 Subject: [PATCH 013/162] messages: Uniformize NumPy spelling and URLs (#4846) --- doc/python/m.distance.py | 2 +- gui/wxpython/nviz/wxnviz.py | 2 +- locale/po/grassmods_ar.po | 4 ++-- locale/po/grassmods_cs.po | 2 +- locale/po/grassmods_de.po | 4 ++-- locale/po/grassmods_es.po | 4 ++-- locale/po/grassmods_it.po | 2 +- locale/po/grassmods_ja.po | 2 +- locale/po/grassmods_lv.po | 2 +- locale/po/grassmods_pl.po | 2 +- locale/po/grassmods_sl.po | 4 ++-- locale/po/grassmods_tr.po | 2 +- locale/po/grasswxpy_ar.po | 2 +- locale/po/grasswxpy_bn.po | 2 +- locale/po/grasswxpy_cs.po | 4 ++-- locale/po/grasswxpy_de.po | 4 ++-- locale/po/grasswxpy_el.po | 4 ++-- locale/po/grasswxpy_es.po | 6 +++--- locale/po/grasswxpy_fi.po | 2 +- locale/po/grasswxpy_fr.po | 4 ++-- locale/po/grasswxpy_hu.po | 4 ++-- locale/po/grasswxpy_id_ID.po | 2 +- locale/po/grasswxpy_it.po | 4 ++-- locale/po/grasswxpy_ja.po | 8 ++++---- locale/po/grasswxpy_ko.po | 4 ++-- locale/po/grasswxpy_lv.po | 2 +- locale/po/grasswxpy_ml.po | 2 +- locale/po/grasswxpy_pl.po | 2 +- locale/po/grasswxpy_pt.po | 2 +- locale/po/grasswxpy_pt_BR.po | 4 ++-- locale/po/grasswxpy_ro.po | 4 ++-- locale/po/grasswxpy_ru.po | 6 +++--- locale/po/grasswxpy_si.po | 2 +- locale/po/grasswxpy_sl.po | 2 +- locale/po/grasswxpy_ta.po | 2 +- locale/po/grasswxpy_th.po | 2 +- locale/po/grasswxpy_tr.po | 2 +- locale/po/grasswxpy_uk.po | 2 +- locale/po/grasswxpy_vi.po | 2 +- locale/po/grasswxpy_zh.po | 4 ++-- locale/po/grasswxpy_zh_CN.po | 2 +- locale/templates/grasswxpy.pot | 2 +- python/grass/imaging/images2swf.py | 2 +- python/grass/pygrass/raster/buffer.py | 4 ++-- python/grass/pygrass/vector/table.py | 2 +- 45 files changed, 67 insertions(+), 67 deletions(-) diff --git a/doc/python/m.distance.py b/doc/python/m.distance.py index 2383cbfb669..e6e26bc2842 100755 --- a/doc/python/m.distance.py +++ b/doc/python/m.distance.py @@ -20,7 +20,7 @@ ############################################################################ # # Requires GRASS Python Ctypes interface -# Requires Numeric module (NumPy) from http://numpy.scipy.org/ +# Requires Numeric module (NumPy) from https://numpy.org # # %module diff --git a/gui/wxpython/nviz/wxnviz.py b/gui/wxpython/nviz/wxnviz.py index 06812e81be6..1e6943af18a 100644 --- a/gui/wxpython/nviz/wxnviz.py +++ b/gui/wxpython/nviz/wxnviz.py @@ -34,7 +34,7 @@ "This module requires the NumPy module, which could not be " "imported. It probably is not installed (it's not part of the " "standard Python distribution). See the Numeric Python site " - "(http://numpy.scipy.org) for information on downloading source or " + "(https://numpy.org) for information on downloading source or " "binaries." ) print("wxnviz.py: " + msg, file=sys.stderr) diff --git a/locale/po/grassmods_ar.po b/locale/po/grassmods_ar.po index 3c4c68d45f8..87ec29f267c 100644 --- a/locale/po/grassmods_ar.po +++ b/locale/po/grassmods_ar.po @@ -73052,11 +73052,11 @@ msgstr "اسم خريطة الراستر المخرجة" #~ msgstr "ملف المدخل" #, fuzzy -#~ msgid "Numpy array with vector cats." +#~ msgid "NumPy array with vector cats." #~ msgstr "%d نقطة كتبت للمخرج\n" #, fuzzy -#~ msgid "Numpy array with columns names." +#~ msgid "NumPy array with columns names." #~ msgstr "لاتشمل اسماء الأعمدة في المخرج" #, fuzzy diff --git a/locale/po/grassmods_cs.po b/locale/po/grassmods_cs.po index 0b4d04a2008..d48ba2bd1e1 100644 --- a/locale/po/grassmods_cs.po +++ b/locale/po/grassmods_cs.po @@ -69845,7 +69845,7 @@ msgstr "" #~ msgstr "Číslo vrstvy (to)" #, fuzzy -#~ msgid "Numpy array with columns names." +#~ msgid "NumPy array with columns names." #~ msgstr "Příliš mnoho názvů sloupců" #, fuzzy diff --git a/locale/po/grassmods_de.po b/locale/po/grassmods_de.po index 2a168b388ca..206bd448858 100644 --- a/locale/po/grassmods_de.po +++ b/locale/po/grassmods_de.po @@ -70489,11 +70489,11 @@ msgstr "" #~ msgstr "Layer-Nummer für Flächen-Karte" #, fuzzy -#~ msgid "Numpy array with vector cats." +#~ msgid "NumPy array with vector cats." #~ msgstr "Keine Flächen in Vektorkarte <%s>" #, fuzzy -#~ msgid "Numpy array with columns names." +#~ msgid "NumPy array with columns names." #~ msgstr "Zu viele Spaltennamen." #, fuzzy diff --git a/locale/po/grassmods_es.po b/locale/po/grassmods_es.po index 8a0188b6448..f60bf9cf011 100644 --- a/locale/po/grassmods_es.po +++ b/locale/po/grassmods_es.po @@ -72203,11 +72203,11 @@ msgstr "" #~ msgstr "Número o nombre de capa (write to)" #, fuzzy -#~ msgid "Numpy array with vector cats." +#~ msgid "NumPy array with vector cats." #~ msgstr "No hay áreas en mapa vectorial <%s>" #, fuzzy -#~ msgid "Numpy array with columns names." +#~ msgid "NumPy array with columns names." #~ msgstr "Demasiados nombres de columna" #, fuzzy diff --git a/locale/po/grassmods_it.po b/locale/po/grassmods_it.po index 53af5452a54..bb84b42a1c3 100644 --- a/locale/po/grassmods_it.po +++ b/locale/po/grassmods_it.po @@ -69850,7 +69850,7 @@ msgstr "" #~ msgstr "Numero o nome del layer 'to'" #, fuzzy -#~ msgid "Numpy array with columns names." +#~ msgid "NumPy array with columns names." #~ msgstr "Troppi nomi di colonna" #, fuzzy diff --git a/locale/po/grassmods_ja.po b/locale/po/grassmods_ja.po index c4aa7ebd561..39bcbe7402b 100644 --- a/locale/po/grassmods_ja.po +++ b/locale/po/grassmods_ja.po @@ -68931,7 +68931,7 @@ msgstr "" #~ msgstr "レイヤー数 (from)" #, fuzzy -#~ msgid "Numpy array with columns names." +#~ msgid "NumPy array with columns names." #~ msgstr "列名が多すぎます " #, fuzzy diff --git a/locale/po/grassmods_lv.po b/locale/po/grassmods_lv.po index cd5cf65275a..f185b50eebc 100644 --- a/locale/po/grassmods_lv.po +++ b/locale/po/grassmods_lv.po @@ -68905,7 +68905,7 @@ msgstr "Izejas rastra kartes nosaukums" #~ msgstr "Slāņa numurs vai nosaukums" #, fuzzy -#~ msgid "Numpy array with columns names." +#~ msgid "NumPy array with columns names." #~ msgstr "Atslēga (id) kolonas nosaukums" #, fuzzy diff --git a/locale/po/grassmods_pl.po b/locale/po/grassmods_pl.po index ce0193ce676..9bd71b3b945 100644 --- a/locale/po/grassmods_pl.po +++ b/locale/po/grassmods_pl.po @@ -69282,7 +69282,7 @@ msgstr "" #~ msgstr "Liczba warstw (na)" #, fuzzy -#~ msgid "Numpy array with columns names." +#~ msgid "NumPy array with columns names." #~ msgstr "Zbyt dużo nazw kolmun" #, fuzzy diff --git a/locale/po/grassmods_sl.po b/locale/po/grassmods_sl.po index c1f78896be4..84ae7a95b4d 100644 --- a/locale/po/grassmods_sl.po +++ b/locale/po/grassmods_sl.po @@ -73421,11 +73421,11 @@ msgstr "Ime izhodnega rastrskega sloja" #~ msgstr "Vhodni sloj" #, fuzzy -#~ msgid "Numpy array with vector cats." +#~ msgid "NumPy array with vector cats." #~ msgstr "%d točk je bilo zapisanih na izhodno datoteko\n" #, fuzzy -#~ msgid "Numpy array with columns names." +#~ msgid "NumPy array with columns names." #~ msgstr "Ime rastrskega sloja" #, fuzzy diff --git a/locale/po/grassmods_tr.po b/locale/po/grassmods_tr.po index ecb42b13505..dad3e4285c7 100644 --- a/locale/po/grassmods_tr.po +++ b/locale/po/grassmods_tr.po @@ -68743,7 +68743,7 @@ msgstr "" #~ msgstr "Katman numarası" #, fuzzy -#~ msgid "Numpy array with columns names." +#~ msgid "NumPy array with columns names." #~ msgstr "Çok fazla sütun adı" #, fuzzy diff --git a/locale/po/grasswxpy_ar.po b/locale/po/grasswxpy_ar.po index 0475f287e81..5a3439edac1 100644 --- a/locale/po/grasswxpy_ar.po +++ b/locale/po/grasswxpy_ar.po @@ -1092,7 +1092,7 @@ msgstr "" msgid "" "This module requires the NumPy module, which could not be imported. It " "probably is not installed (it's not part of the standard Python " -"distribution). See the Numeric Python site (http://numpy.scipy.org) for " +"distribution). See the Numeric Python site (https://numpy.org) for " "information on downloading source or binaries." msgstr "" diff --git a/locale/po/grasswxpy_bn.po b/locale/po/grasswxpy_bn.po index 76ade0c0e31..70368624833 100644 --- a/locale/po/grasswxpy_bn.po +++ b/locale/po/grasswxpy_bn.po @@ -1094,7 +1094,7 @@ msgstr "" msgid "" "This module requires the NumPy module, which could not be imported. It " "probably is not installed (it's not part of the standard Python " -"distribution). See the Numeric Python site (http://numpy.scipy.org) for " +"distribution). See the Numeric Python site (https://numpy.org) for " "information on downloading source or binaries." msgstr "" diff --git a/locale/po/grasswxpy_cs.po b/locale/po/grasswxpy_cs.po index 24423cf5314..c2e97a4a0ba 100644 --- a/locale/po/grasswxpy_cs.po +++ b/locale/po/grasswxpy_cs.po @@ -1111,12 +1111,12 @@ msgstr "Nastavení 3D zobrazení bylo uloženo do souboru <%s>." msgid "" "This module requires the NumPy module, which could not be imported. It " "probably is not installed (it's not part of the standard Python " -"distribution). See the Numeric Python site (http://numpy.scipy.org) for " +"distribution). See the Numeric Python site (https://numpy.org) for " "information on downloading source or binaries." msgstr "" "Tento modul vyžaduje modul NumPy, který nelze importovat. Nejspíše není " "nainstalován (není součástí standardní instalace Pythonu). Podívejte se na " -"stránku Numeric Python (http://numpy.scipy.org), kde naleznete další " +"stránku Numeric Python (https://numpy.org), kde naleznete další " "informace o stažení a instalaci." #: ../gui/wxpython/nviz/wxnviz.py:361 ../gui/wxpython/nviz/wxnviz.py:372 diff --git a/locale/po/grasswxpy_de.po b/locale/po/grasswxpy_de.po index f0047ccae3d..42e35b2a4c8 100644 --- a/locale/po/grasswxpy_de.po +++ b/locale/po/grasswxpy_de.po @@ -1122,12 +1122,12 @@ msgstr "Einstellungen für 3D-Ansicht gespeichert in Datei <%s>." msgid "" "This module requires the NumPy module, which could not be imported. It " "probably is not installed (it's not part of the standard Python " -"distribution). See the Numeric Python site (http://numpy.scipy.org) for " +"distribution). See the Numeric Python site (https://numpy.org) for " "information on downloading source or binaries." msgstr "" "Dieses erfordert NumPy, das nicht importiert werden konnte. Es ist eventuell " "nicht installiert (es ist nicht Bestandteil der Standard-Python-" -"Distribution). Gehe zur Numeric Python Website (http://numpy.scipy.org), um " +"Distribution). Gehe zur Numeric Python Website (https://numpy.org), um " "den Quellcode oder Binaries zu erhalten." #: ../gui/wxpython/nviz/wxnviz.py:361 ../gui/wxpython/nviz/wxnviz.py:372 diff --git a/locale/po/grasswxpy_el.po b/locale/po/grasswxpy_el.po index 582972aba2b..59e9e135df9 100644 --- a/locale/po/grasswxpy_el.po +++ b/locale/po/grasswxpy_el.po @@ -1097,14 +1097,14 @@ msgstr "Οι επιλογες της 3D προβολής αποθηκεύτηκ msgid "" "This module requires the NumPy module, which could not be imported. It " "probably is not installed (it's not part of the standard Python " -"distribution). See the Numeric Python site (http://numpy.scipy.org) for " +"distribution). See the Numeric Python site (https://numpy.org) for " "information on downloading source or binaries." msgstr "" "Αυτό το πρόσθετο απαιτεί το πρόσθετο NumPy, το οποίο δεν μπόρεσε να " "εισαχθεί. Πιθανότατα να μην είναι εγκατεστημένο (δεν είναι μέρος της γενικής " "διανομής της Python). Για περισσότερες πληροφορίες και για λήψη αρχείων προς " "εγκατάσταση καθώς και του πηγαίου κώδικα, απευθυνθήτε στην ιστοσελίδα της " -"Numpy (http://numpy.scipy.org)." +"NumPy (https://numpy.org)." #: ../gui/wxpython/nviz/wxnviz.py:361 ../gui/wxpython/nviz/wxnviz.py:372 #: ../gui/wxpython/iclass/g.gui.iclass.py:88 diff --git a/locale/po/grasswxpy_es.po b/locale/po/grasswxpy_es.po index dd64f3e2ca1..e5ccaf4d59c 100644 --- a/locale/po/grasswxpy_es.po +++ b/locale/po/grasswxpy_es.po @@ -1130,12 +1130,12 @@ msgstr "Las configuraciones de la vista 3D se han guardado en el archivo <%s>." msgid "" "This module requires the NumPy module, which could not be imported. It " "probably is not installed (it's not part of the standard Python " -"distribution). See the Numeric Python site (http://numpy.scipy.org) for " +"distribution). See the Numeric Python site (https://numpy.org) for " "information on downloading source or binaries." msgstr "" -"Este módulo requiere el módulo NumP, que no pudo ser importado. " +"Este módulo requiere el módulo NumPy, que no pudo ser importado. " "Probablemente no está instalado (no es parte de la distibución estándar de " -"Python). Ver el site Numérico de Python (http://numpy.scipy.org) para más " +"Python). Ver el site Numérico de Python (https://numpy.org) para más " "información sobre la fuente de descarga o binarios." #: ../gui/wxpython/nviz/wxnviz.py:361 ../gui/wxpython/nviz/wxnviz.py:372 diff --git a/locale/po/grasswxpy_fi.po b/locale/po/grasswxpy_fi.po index 72ce83830d8..ab1451450e7 100644 --- a/locale/po/grasswxpy_fi.po +++ b/locale/po/grasswxpy_fi.po @@ -1094,7 +1094,7 @@ msgstr "" msgid "" "This module requires the NumPy module, which could not be imported. It " "probably is not installed (it's not part of the standard Python " -"distribution). See the Numeric Python site (http://numpy.scipy.org) for " +"distribution). See the Numeric Python site (https://numpy.org) for " "information on downloading source or binaries." msgstr "" diff --git a/locale/po/grasswxpy_fr.po b/locale/po/grasswxpy_fr.po index 8879c526ca7..ca568bbe2ae 100644 --- a/locale/po/grasswxpy_fr.po +++ b/locale/po/grasswxpy_fr.po @@ -1127,12 +1127,12 @@ msgstr "Paramètres de vue 3D enregistrés dans le fichier <%s>." msgid "" "This module requires the NumPy module, which could not be imported. It " "probably is not installed (it's not part of the standard Python " -"distribution). See the Numeric Python site (http://numpy.scipy.org) for " +"distribution). See the Numeric Python site (https://numpy.org) for " "information on downloading source or binaries." msgstr "" "Ce module requiert le module NumPy, qui n'a pas pu être importé. Il n'est " "probablement pas installé (ne fait pas partie de la distribution standard " -"Python). Voir le site Numeric Python (http://numpy.scipy.org) pour " +"Python). Voir le site Numeric Python (https://numpy.org) pour " "télécharger les binaires ou le code source." #: ../gui/wxpython/nviz/wxnviz.py:361 ../gui/wxpython/nviz/wxnviz.py:372 diff --git a/locale/po/grasswxpy_hu.po b/locale/po/grasswxpy_hu.po index c461a875154..4b1d57eb8fe 100644 --- a/locale/po/grasswxpy_hu.po +++ b/locale/po/grasswxpy_hu.po @@ -1101,12 +1101,12 @@ msgstr "3D nézet beállításait mentettem a <%s> fájlba." msgid "" "This module requires the NumPy module, which could not be imported. It " "probably is not installed (it's not part of the standard Python " -"distribution). See the Numeric Python site (http://numpy.scipy.org) for " +"distribution). See the Numeric Python site (https://numpy.org) for " "information on downloading source or binaries." msgstr "" "Ez a modul a NumPy modult igényli, melyet nem tudtam importálni. Ezt " "valószínűleg nem telepítették (ez nem része a standard Python kiadásoknak). " -"Lásd a Numeric Python oldalt (http://numpy.scipy.org) a forrás vagy bináris " +"Lásd a Numeric Python oldalt (https://numpy.org) a forrás vagy bináris " "letöltési információkért." #: ../gui/wxpython/nviz/wxnviz.py:361 ../gui/wxpython/nviz/wxnviz.py:372 diff --git a/locale/po/grasswxpy_id_ID.po b/locale/po/grasswxpy_id_ID.po index e1983612035..16ef34c40be 100644 --- a/locale/po/grasswxpy_id_ID.po +++ b/locale/po/grasswxpy_id_ID.po @@ -1094,7 +1094,7 @@ msgstr "" msgid "" "This module requires the NumPy module, which could not be imported. It " "probably is not installed (it's not part of the standard Python " -"distribution). See the Numeric Python site (http://numpy.scipy.org) for " +"distribution). See the Numeric Python site (https://numpy.org) for " "information on downloading source or binaries." msgstr "" diff --git a/locale/po/grasswxpy_it.po b/locale/po/grasswxpy_it.po index ddeb21e75d2..6f400df3b19 100644 --- a/locale/po/grasswxpy_it.po +++ b/locale/po/grasswxpy_it.po @@ -1119,12 +1119,12 @@ msgstr "Impostazioni visualizzazione 3D salvate nel file <%s>." msgid "" "This module requires the NumPy module, which could not be imported. It " "probably is not installed (it's not part of the standard Python " -"distribution). See the Numeric Python site (http://numpy.scipy.org) for " +"distribution). See the Numeric Python site (https://numpy.org) for " "information on downloading source or binaries." msgstr "" "Questo modulo richiede NumPy, che non è stato possibile importare. " "Probabilmente non è installato (non fa parte della distribuzione standard di " -"Python). Controlla il sito di Numeric Python (http://numpy.scipy.org) per " +"Python). Controlla il sito di Numeric Python (https://numpy.org) per " "maggiori informazione sul download del sorgente o dei binari." #: ../gui/wxpython/nviz/wxnviz.py:361 ../gui/wxpython/nviz/wxnviz.py:372 diff --git a/locale/po/grasswxpy_ja.po b/locale/po/grasswxpy_ja.po index dce28745650..6e43667a294 100644 --- a/locale/po/grasswxpy_ja.po +++ b/locale/po/grasswxpy_ja.po @@ -1102,13 +1102,13 @@ msgstr "3D表示設定がファイルに保存されました <%s>." msgid "" "This module requires the NumPy module, which could not be imported. It " "probably is not installed (it's not part of the standard Python " -"distribution). See the Numeric Python site (http://numpy.scipy.org) for " +"distribution). See the Numeric Python site (https://numpy.org) for " "information on downloading source or binaries." msgstr "" -"このモジュールはインポートされないNumpyモジュールを必要とします. おそらくイン" +"このモジュールはインポートされないNumPyモジュールを必要とします. おそらくイン" "ストールされていません(標準的なPython分布の一環ではありません). ソースまた" -"はバイナリのダウンロードに関する情報は数値Pythonのサイト(http://numpy.scipy." -"org)を参照してください" +"はバイナリのダウンロードに関する情報は数値Pythonのサイト(https://numpy.org" +")を参照してください" #: ../gui/wxpython/nviz/wxnviz.py:361 ../gui/wxpython/nviz/wxnviz.py:372 #: ../gui/wxpython/iclass/g.gui.iclass.py:88 diff --git a/locale/po/grasswxpy_ko.po b/locale/po/grasswxpy_ko.po index 2562d99de06..aedfb614f94 100644 --- a/locale/po/grasswxpy_ko.po +++ b/locale/po/grasswxpy_ko.po @@ -1094,12 +1094,12 @@ msgstr "" msgid "" "This module requires the NumPy module, which could not be imported. It " "probably is not installed (it's not part of the standard Python " -"distribution). See the Numeric Python site (http://numpy.scipy.org) for " +"distribution). See the Numeric Python site (https://numpy.org) for " "information on downloading source or binaries." msgstr "" "이 모듈은 NumPy 모듈이 필요하지만 가져올 수 없었습니다. 표준 파이썬 배포에 포" "함되지 않았기 때문에 아마도 설치되지 않은 것 같습니다. 소스나 이진코드를 내려" -"받는데 필요한 정보는 Numeric Python 사이트 http://numpy.scipy.org에서 확인하" +"받는데 필요한 정보는 Numeric Python 사이트 https://numpy.org에서 확인하" "세요." #: ../gui/wxpython/nviz/wxnviz.py:361 ../gui/wxpython/nviz/wxnviz.py:372 diff --git a/locale/po/grasswxpy_lv.po b/locale/po/grasswxpy_lv.po index e733c4449a3..55fc29c8662 100644 --- a/locale/po/grasswxpy_lv.po +++ b/locale/po/grasswxpy_lv.po @@ -1096,7 +1096,7 @@ msgstr "" msgid "" "This module requires the NumPy module, which could not be imported. It " "probably is not installed (it's not part of the standard Python " -"distribution). See the Numeric Python site (http://numpy.scipy.org) for " +"distribution). See the Numeric Python site (https://numpy.org) for " "information on downloading source or binaries." msgstr "" diff --git a/locale/po/grasswxpy_ml.po b/locale/po/grasswxpy_ml.po index f0cd245758a..6add41bd33a 100644 --- a/locale/po/grasswxpy_ml.po +++ b/locale/po/grasswxpy_ml.po @@ -1094,7 +1094,7 @@ msgstr "" msgid "" "This module requires the NumPy module, which could not be imported. It " "probably is not installed (it's not part of the standard Python " -"distribution). See the Numeric Python site (http://numpy.scipy.org) for " +"distribution). See the Numeric Python site (https://numpy.org) for " "information on downloading source or binaries." msgstr "" diff --git a/locale/po/grasswxpy_pl.po b/locale/po/grasswxpy_pl.po index f399314c413..d049c5c7263 100644 --- a/locale/po/grasswxpy_pl.po +++ b/locale/po/grasswxpy_pl.po @@ -1105,7 +1105,7 @@ msgstr "Ustawienia widoku 3D zapisano w pliku <%s>." msgid "" "This module requires the NumPy module, which could not be imported. It " "probably is not installed (it's not part of the standard Python " -"distribution). See the Numeric Python site (http://numpy.scipy.org) for " +"distribution). See the Numeric Python site (https://numpy.org) for " "information on downloading source or binaries." msgstr "" diff --git a/locale/po/grasswxpy_pt.po b/locale/po/grasswxpy_pt.po index 9ac71057c8c..5e097cfeb15 100644 --- a/locale/po/grasswxpy_pt.po +++ b/locale/po/grasswxpy_pt.po @@ -1097,7 +1097,7 @@ msgstr "" msgid "" "This module requires the NumPy module, which could not be imported. It " "probably is not installed (it's not part of the standard Python " -"distribution). See the Numeric Python site (http://numpy.scipy.org) for " +"distribution). See the Numeric Python site (https://numpy.org) for " "information on downloading source or binaries." msgstr "" diff --git a/locale/po/grasswxpy_pt_BR.po b/locale/po/grasswxpy_pt_BR.po index bd7f33c244d..dc2cfb7d4c2 100644 --- a/locale/po/grasswxpy_pt_BR.po +++ b/locale/po/grasswxpy_pt_BR.po @@ -1121,12 +1121,12 @@ msgstr "Configurações de visualização 3D salvas no arquivo <%s>." msgid "" "This module requires the NumPy module, which could not be imported. It " "probably is not installed (it's not part of the standard Python " -"distribution). See the Numeric Python site (http://numpy.scipy.org) for " +"distribution). See the Numeric Python site (https://numpy.org) for " "information on downloading source or binaries." msgstr "" "Este módulo requer o módulo NumPy, que não pôde ser importado. Provavelmente " "não está instalado (não faz parte da distribuição padrão do Python). " -"Consulte o site Numeric Python (http://numpy.scipy.org) para obter " +"Consulte o site Numeric Python (https://numpy.org) para obter " "informações sobre como baixar source ou binários." #: ../gui/wxpython/nviz/wxnviz.py:361 ../gui/wxpython/nviz/wxnviz.py:372 diff --git a/locale/po/grasswxpy_ro.po b/locale/po/grasswxpy_ro.po index 973569f6110..0d1c17d2d7f 100644 --- a/locale/po/grasswxpy_ro.po +++ b/locale/po/grasswxpy_ro.po @@ -1118,12 +1118,12 @@ msgstr "Setările de vizualizare 3D salvate ca fișier <%s>." msgid "" "This module requires the NumPy module, which could not be imported. It " "probably is not installed (it's not part of the standard Python " -"distribution). See the Numeric Python site (http://numpy.scipy.org) for " +"distribution). See the Numeric Python site (https://numpy.org) for " "information on downloading source or binaries." msgstr "" "Acest modul necesită modulul NumPy, care nu a putut fi importat. Probabil nu " "este instalat (nu este parte a distribuției standard de Python). Vezi site-" -"ul Numeric Python (http://numpy.scipy.org) pentru informații despre " +"ul Numeric Python (https://numpy.org) pentru informații despre " "descărcarea codului sursă." #: ../gui/wxpython/nviz/wxnviz.py:361 ../gui/wxpython/nviz/wxnviz.py:372 diff --git a/locale/po/grasswxpy_ru.po b/locale/po/grasswxpy_ru.po index 67c026b0770..5d3705c7621 100644 --- a/locale/po/grasswxpy_ru.po +++ b/locale/po/grasswxpy_ru.po @@ -1118,14 +1118,14 @@ msgstr "Параметры трёхмерного вида сохранены в msgid "" "This module requires the NumPy module, which could not be imported. It " "probably is not installed (it's not part of the standard Python " -"distribution). See the Numeric Python site (http://numpy.scipy.org) for " +"distribution). See the Numeric Python site (https://numpy.org) for " "information on downloading source or binaries." msgstr "" "Для работы данного модуля необходимо наличие модуля NumPy, который не " "удалось импортировать. Вероятно, он не установлен (не является частью " "стандартного дистрибутива Python). Для получения информации о загрузке " -"исходного кода или двоичных файлы посетите сайт «Числовой Python» (http://" -"numpy.scipy.org)." +"исходного кода или двоичных файлы посетите сайт «Числовой Python» (https://" +"numpy.org)." #: ../gui/wxpython/nviz/wxnviz.py:361 ../gui/wxpython/nviz/wxnviz.py:372 #: ../gui/wxpython/iclass/g.gui.iclass.py:88 diff --git a/locale/po/grasswxpy_si.po b/locale/po/grasswxpy_si.po index f3d27cc8385..7d7c44acc16 100644 --- a/locale/po/grasswxpy_si.po +++ b/locale/po/grasswxpy_si.po @@ -1094,7 +1094,7 @@ msgstr "" msgid "" "This module requires the NumPy module, which could not be imported. It " "probably is not installed (it's not part of the standard Python " -"distribution). See the Numeric Python site (http://numpy.scipy.org) for " +"distribution). See the Numeric Python site (https://numpy.org) for " "information on downloading source or binaries." msgstr "" diff --git a/locale/po/grasswxpy_sl.po b/locale/po/grasswxpy_sl.po index d38b3ea58a5..0fd856d5061 100644 --- a/locale/po/grasswxpy_sl.po +++ b/locale/po/grasswxpy_sl.po @@ -1092,7 +1092,7 @@ msgstr "" msgid "" "This module requires the NumPy module, which could not be imported. It " "probably is not installed (it's not part of the standard Python " -"distribution). See the Numeric Python site (http://numpy.scipy.org) for " +"distribution). See the Numeric Python site (https://numpy.org) for " "information on downloading source or binaries." msgstr "" diff --git a/locale/po/grasswxpy_ta.po b/locale/po/grasswxpy_ta.po index 7d752f435f6..78526979368 100644 --- a/locale/po/grasswxpy_ta.po +++ b/locale/po/grasswxpy_ta.po @@ -1095,7 +1095,7 @@ msgstr "" msgid "" "This module requires the NumPy module, which could not be imported. It " "probably is not installed (it's not part of the standard Python " -"distribution). See the Numeric Python site (http://numpy.scipy.org) for " +"distribution). See the Numeric Python site (https://numpy.org) for " "information on downloading source or binaries." msgstr "" diff --git a/locale/po/grasswxpy_th.po b/locale/po/grasswxpy_th.po index b65840cfe09..f3b63365d9b 100644 --- a/locale/po/grasswxpy_th.po +++ b/locale/po/grasswxpy_th.po @@ -1094,7 +1094,7 @@ msgstr "" msgid "" "This module requires the NumPy module, which could not be imported. It " "probably is not installed (it's not part of the standard Python " -"distribution). See the Numeric Python site (http://numpy.scipy.org) for " +"distribution). See the Numeric Python site (https://numpy.org) for " "information on downloading source or binaries." msgstr "" diff --git a/locale/po/grasswxpy_tr.po b/locale/po/grasswxpy_tr.po index 760a131dcc6..34c69f06ff0 100644 --- a/locale/po/grasswxpy_tr.po +++ b/locale/po/grasswxpy_tr.po @@ -1096,7 +1096,7 @@ msgstr "" msgid "" "This module requires the NumPy module, which could not be imported. It " "probably is not installed (it's not part of the standard Python " -"distribution). See the Numeric Python site (http://numpy.scipy.org) for " +"distribution). See the Numeric Python site (https://numpy.org) for " "information on downloading source or binaries." msgstr "" diff --git a/locale/po/grasswxpy_uk.po b/locale/po/grasswxpy_uk.po index 4bf446da553..db3b10f93f3 100644 --- a/locale/po/grasswxpy_uk.po +++ b/locale/po/grasswxpy_uk.po @@ -1095,7 +1095,7 @@ msgstr "" msgid "" "This module requires the NumPy module, which could not be imported. It " "probably is not installed (it's not part of the standard Python " -"distribution). See the Numeric Python site (http://numpy.scipy.org) for " +"distribution). See the Numeric Python site (https://numpy.org) for " "information on downloading source or binaries." msgstr "" diff --git a/locale/po/grasswxpy_vi.po b/locale/po/grasswxpy_vi.po index 364aed72ba1..1e15d066449 100644 --- a/locale/po/grasswxpy_vi.po +++ b/locale/po/grasswxpy_vi.po @@ -1095,7 +1095,7 @@ msgstr "" msgid "" "This module requires the NumPy module, which could not be imported. It " "probably is not installed (it's not part of the standard Python " -"distribution). See the Numeric Python site (http://numpy.scipy.org) for " +"distribution). See the Numeric Python site (https://numpy.org) for " "information on downloading source or binaries." msgstr "" diff --git a/locale/po/grasswxpy_zh.po b/locale/po/grasswxpy_zh.po index 4d2ab8dfd85..330b876a438 100644 --- a/locale/po/grasswxpy_zh.po +++ b/locale/po/grasswxpy_zh.po @@ -1089,11 +1089,11 @@ msgstr "" msgid "" "This module requires the NumPy module, which could not be imported. It " "probably is not installed (it's not part of the standard Python " -"distribution). See the Numeric Python site (http://numpy.scipy.org) for " +"distribution). See the Numeric Python site (https://numpy.org) for " "information on downloading source or binaries." msgstr "" "该模块需要使用的NumPy模块无法导入。可能没有安装该模块(非Python标准模块)。参" -"见Numeric Python网站(http://numpy.scipy.org)查看下载源码或安装文件信息。" +"见Numeric Python网站(https://numpy.org)查看下载源码或安装文件信息。" #: ../gui/wxpython/nviz/wxnviz.py:361 ../gui/wxpython/nviz/wxnviz.py:372 #: ../gui/wxpython/iclass/g.gui.iclass.py:88 diff --git a/locale/po/grasswxpy_zh_CN.po b/locale/po/grasswxpy_zh_CN.po index cbb050149b9..f03f638b9eb 100644 --- a/locale/po/grasswxpy_zh_CN.po +++ b/locale/po/grasswxpy_zh_CN.po @@ -1095,7 +1095,7 @@ msgstr "" msgid "" "This module requires the NumPy module, which could not be imported. It " "probably is not installed (it's not part of the standard Python " -"distribution). See the Numeric Python site (http://numpy.scipy.org) for " +"distribution). See the Numeric Python site (https://numpy.org) for " "information on downloading source or binaries." msgstr "" diff --git a/locale/templates/grasswxpy.pot b/locale/templates/grasswxpy.pot index 57126b7f1a1..899d4518078 100644 --- a/locale/templates/grasswxpy.pot +++ b/locale/templates/grasswxpy.pot @@ -1093,7 +1093,7 @@ msgstr "" msgid "" "This module requires the NumPy module, which could not be imported. It " "probably is not installed (it's not part of the standard Python " -"distribution). See the Numeric Python site (http://numpy.scipy.org) for " +"distribution). See the Numeric Python site (https://numpy.org) for " "information on downloading source or binaries." msgstr "" diff --git a/python/grass/imaging/images2swf.py b/python/grass/imaging/images2swf.py index 7d6f5a25f9b..c262a352272 100644 --- a/python/grass/imaging/images2swf.py +++ b/python/grass/imaging/images2swf.py @@ -776,7 +776,7 @@ def writeSwf(filename, images, duration=0.1, repeat=True): if np is None: raise RuntimeError("Need Numpy to write an SWF file.") - # Check images (make all Numpy) + # Check images (make all NumPy) images2 = [] images = checkImages(images) if not images: diff --git a/python/grass/pygrass/raster/buffer.py b/python/grass/pygrass/raster/buffer.py index 0e34ac84159..67ba86563bc 100644 --- a/python/grass/pygrass/raster/buffer.py +++ b/python/grass/pygrass/raster/buffer.py @@ -45,8 +45,8 @@ def __array_finalize__(self, obj): def __array_wrap__(self, out_arr, context=None): """See: - http://docs.scipy.org/doc/numpy/user/ - basics.subclassing.html#array-wrap-for-ufuncs""" + https://numpy.org/doc/stable/user/basics.subclassing.html#array-wrap-for-ufuncs-and-other-functions + """ if out_arr.dtype == bool: # there is not support for boolean maps, so convert into integer out_arr = out_arr.astype(np.int32) diff --git a/python/grass/pygrass/vector/table.py b/python/grass/pygrass/vector/table.py index b83f751a0dd..a58b83b8077 100644 --- a/python/grass/pygrass/vector/table.py +++ b/python/grass/pygrass/vector/table.py @@ -824,7 +824,7 @@ def connection(self): if driver == "sqlite": import sqlite3 - # Numpy is using some custom integer data types to efficiently + # NumPy is using some custom integer data types to efficiently # pack data into memory. Since these types aren't familiar to # sqlite, you'll have to tell it about how to handle them. for t in ( From cf9349f6bae41bf59f51a0184c1944d48214683c Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 16 Dec 2024 06:06:41 -0500 Subject: [PATCH 014/162] CI(deps): Lock file maintenance (#4849) From f622271e7a18e15e9b8ce0e3cf955f7a18169935 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 16 Dec 2024 12:19:44 +0000 Subject: [PATCH 015/162] CI(deps): Update docker/setup-buildx-action action to v3.8.0 (#4850) --- .github/workflows/docker.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/docker.yml b/.github/workflows/docker.yml index 577a9702011..a9279fede7b 100644 --- a/.github/workflows/docker.yml +++ b/.github/workflows/docker.yml @@ -68,7 +68,7 @@ jobs: - name: Set up QEMU uses: docker/setup-qemu-action@49b3bc8e6bdd4a60e6116a5414239cba5943d3cf # v3.2.0 - name: Set up Docker Buildx - uses: docker/setup-buildx-action@c47758b77c9736f4b2ef4073d4d51994fabfe349 # v3.7.1 + uses: docker/setup-buildx-action@6524bf65af31da8d45b59e8c27de4bd072b392f5 # v3.8.0 - name: Login to DockerHub uses: docker/login-action@9780b0c442fbb1117ed29e0efdff1e18412f7567 # v3.3.0 with: From c69da9f2ca8852fd5a97766efc1e48677db1c3cb Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 17 Dec 2024 12:48:44 -0500 Subject: [PATCH 016/162] CI(deps): Update docker/dockerfile:1.12 Docker digest to 93bfd3b (#4852) --- Dockerfile | 2 +- docker/ubuntu/Dockerfile | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Dockerfile b/Dockerfile index 6b18a841ad4..7fe43704f2f 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,4 +1,4 @@ -# syntax=docker/dockerfile:1.12@sha256:db1ff77fb637a5955317c7a3a62540196396d565f3dd5742e76dddbb6d75c4c5 +# syntax=docker/dockerfile:1.12@sha256:93bfd3b68c109427185cd78b4779fc82b484b0b7618e36d0f104d4d801e66d25 # Note: This file must be kept in sync in ./Dockerfile and ./docker/ubuntu/Dockerfile. # Changes to this file must be copied over to the other file. diff --git a/docker/ubuntu/Dockerfile b/docker/ubuntu/Dockerfile index 6b18a841ad4..7fe43704f2f 100644 --- a/docker/ubuntu/Dockerfile +++ b/docker/ubuntu/Dockerfile @@ -1,4 +1,4 @@ -# syntax=docker/dockerfile:1.12@sha256:db1ff77fb637a5955317c7a3a62540196396d565f3dd5742e76dddbb6d75c4c5 +# syntax=docker/dockerfile:1.12@sha256:93bfd3b68c109427185cd78b4779fc82b484b0b7618e36d0f104d4d801e66d25 # Note: This file must be kept in sync in ./Dockerfile and ./docker/ubuntu/Dockerfile. # Changes to this file must be copied over to the other file. From ab90c5e5a9b668894da360fa97ffd4a51a38931e Mon Sep 17 00:00:00 2001 From: Markus Neteler Date: Tue, 17 Dec 2024 20:17:20 +0100 Subject: [PATCH 017/162] docs: various updates and text fixes in HTML for MD conversion (#4837) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This PR contains various HTML updates and textual fixes in preparation for the planned markdown conversion (see also #4748). For this PR, I have (briefly) reviewed all ~600 GRASS GIS manual pages by converting them to MD for a quality check, and then updated the original HTML files accordingly. Thus it is also a backport candidate for G84. Changes in detail: - adding missing intro sentences - added module name in the first sentence where missing - http -> https - selected URL updates for broken URLs - selected additions in "SEE ALSO" sections - fix suboptimal HTML formatting (flags, special names, ...) - add missing keywords on metapages - remove leftover `Last changed: $Date$` entries from CVS/SVN days - simplify selected `-
...` to `
  • ...` for improved MD conversion - replaced `...` with `...` For an easier review, the changes have been submitted in separate commits: - [x] **db**: 473b95bdb95d6ead5dd3af5ab9ea10397665bcb4 - [x] **display**: fca42daab0e81b369b42ff7921bb1a70f774c03d - [x] **doc**: e473bc85cf46af0a4b1a84e70ac26e5400dc1e2c - [x] **general**: 00930f566b386683c3d0b7c8e52a4658ea0339d8 - [x] **gui**: e9259cf7c89a4677b162fa44fa84cb63a586ead4 - [x] **imagery**: e700a7c93d4d04d4108f61a0857b784febe908f6, c888dba357797e59ad0d35fd6c1e5efd5d48f08e - [x] **lib**: 6da27ca26e6bc498d3d169a0de14e556e17b9508 - [x] **misc**: bfa7c0d95cdb3ea87af3c578664bd305bd8c29bb - [x] **raster**: 0c5ca83e88cc63df2e24f5cb47ae57648f793327 - [x] **raster3d**: 0c44c957869680fb52d1e09ea42ccbb65c5c2e6f - [x] **scripts**: e5bd68354ff26dc2f9f78cb705b34ffe0eec4dbe, 7b70b03c1e4d9e6f6775f554cd322545f19d0e21 - [x] **temporal**: a173a8f5b09ce2651e45eb5627732f39dc711cc2 - [x] **vector**: b5167faec4bddf99447131ca2151e3a63a085dd5 - [x] **visualization**: 81e97561d2b80c1917d01d2353aaf119fa811157 Extra changes: - [x] replaced `...` with `...` in 14841b2a91e41d18585e329f97ed32fdf42335fb - [x] dot product: replaced `.` with `·` f8ea2004d2b8b06c9293d41fbe27d6aee2c12044 - [x] review by @echoix: 16456855344da3bca75977fc33a04bd624cd9bbc and 6fd0a667f0e2a739db3bea43114a32b39e0b0702 - [x] `utils/g.html2man/htmltags.txt`: dropped outdated file (see instead `utils/g.html2man/ggroff.py`) in 92597b258ffd83c8b19473c183d0a469681bee6f Co-authored-by: Edouard Choinière <27212526+echoix@users.noreply.github.com> --- db/databaseintro.html | 2 +- db/db.connect/db.connect.html | 2 +- db/db.execute/db.execute.html | 2 +- db/db.login/db.login.html | 4 +- db/drivers/ogr/README | 2 +- db/drivers/postgres/README | 4 +- db/drivers/postgres/grass-pg.html | 14 +-- db/drivers/sqlite/grass-sqlite.html | 4 +- display/d.extract/d.extract.html | 2 +- display/d.graph/d.graph.html | 6 +- display/d.grid/d.grid.html | 2 +- display/d.his/d.his.html | 4 + display/d.labels/d.labels.html | 2 +- display/d.legend.vect/d.legend.vect.html | 2 +- display/d.linegraph/d.linegraph.html | 4 +- display/d.mon/d.mon.html | 8 +- display/d.path/d.path.html | 2 +- display/d.profile/d.profile.html | 2 +- display/d.rast.arrow/d.rast.arrow.html | 4 +- display/d.rast.num/d.rast.num.html | 3 +- display/d.rgb/d.rgb.html | 3 + display/d.title/d.title.html | 25 ++-- display/d.vect.thematic/d.vect.thematic.html | 4 +- display/d.vect/d.vect.html | 10 +- display/displaydrivers.html | 2 +- .../legal_aspects_of_code_contributions.md | 2 +- doc/projectionintro.html | 4 +- general/g.filename/g.filename.html | 2 +- general/g.findfile/g.findfile.html | 2 +- general/g.gisenv/g.gisenv.html | 9 +- general/g.gui/g.gui.html | 10 +- general/g.list/g.list.html | 6 +- general/g.mapset/g.mapset.html | 2 +- general/g.mapsets/g.mapsets.html | 11 +- general/g.message/g.message.html | 37 +++--- general/g.mkfontcap/g.mkfontcap.html | 8 +- general/g.parser/g.parser.html | 40 +++---- general/g.proj/g.proj.html | 60 +++++----- general/g.region/g.region.html | 88 +++++++------- general/g.remove/g.remove.html | 10 +- general/g.setproj/g.setproj.html | 6 +- general/g.tempfile/g.tempfile.html | 21 ++-- general/g.version/g.version.html | 10 +- gui/wxpython/dbmgr/g.gui.dbmgr.html | 2 +- gui/wxpython/docs/wxGUI.components.html | 13 +++ gui/wxpython/docs/wxGUI.html | 14 +-- gui/wxpython/docs/wxGUI.iscatt.html | 8 +- gui/wxpython/docs/wxGUI.modules.html | 7 +- gui/wxpython/docs/wxGUI.nviz.html | 4 +- gui/wxpython/docs/wxGUI.toolboxes.html | 45 ++++---- gui/wxpython/docs/wxGUI.vnet.html | 2 +- gui/wxpython/gmodeler/g.gui.gmodeler.html | 44 +++---- gui/wxpython/mapswipe/g.gui.mapswipe.html | 4 +- gui/wxpython/rlisetup/g.gui.rlisetup.html | 12 +- gui/wxpython/vdigit/g.gui.vdigit.html | 2 +- imagery/i.aster.toar/i.aster.toar.html | 2 +- imagery/i.atcorr/i.atcorr.html | 42 +++---- imagery/i.eb.netrad/i.eb.netrad.html | 2 +- imagery/i.landsat.acca/i.landsat.acca.html | 10 +- imagery/i.landsat.toar/i.landsat.toar.html | 2 +- imagery/i.modis.qc/i.modis.qc.html | 4 +- .../i.ortho.elev/i.ortho.elev.html | 10 +- .../i.ortho.transform/i.ortho.transform.html | 2 +- imagery/i.rectify/i.rectify.html | 8 +- imagery/i.segment/i.segment.html | 13 ++- imagery/i.svm.predict/i.svm.predict.html | 7 +- imagery/i.svm.train/i.svm.train.html | 7 +- imagery/i.vi/i.vi.html | 4 +- imagery/imageryintro.html | 6 +- lib/cairodriver/cairodriver.html | 14 +-- lib/db/sqlp/sql.html | 12 +- lib/htmldriver/htmldriver.html | 16 +-- lib/init/grass.html | 52 ++++----- lib/init/variables.html | 108 +++++++++--------- lib/pngdriver/pngdriver.html | 14 +-- lib/psdriver/psdriver.html | 12 +- lib/vector/rtree/docs/sources.htm | 2 +- lib/vector/vectorascii.html | 21 ++-- macosx/ReadMe.md | 4 +- macosx/pkg/resources/ReadMe.rtf | 4 +- misc/m.cogo/m.cogo.html | 4 +- misc/m.transform/m.transform.html | 22 ++-- ps/ps.map/ps.map.html | 62 +++++----- python/grass/docs/src/gunittest_testing.rst | 2 +- raster/r.buffer/r.buffer.html | 4 +- raster/r.buildvrt/r.buildvrt.html | 4 +- raster/r.carve/r.carve.html | 2 +- raster/r.category/r.category.html | 34 +++--- raster/r.circle/r.circle.html | 2 +- raster/r.coin/r.coin.html | 23 ++-- raster/r.colors/r.colors.html | 8 +- raster/r.colors/r3.colors.html | 2 +- raster/r.compress/r.compress.html | 46 ++++---- raster/r.cost/r.cost.html | 8 +- raster/r.covar/r.covar.html | 4 +- raster/r.describe/r.describe.html | 23 ++-- raster/r.fill.stats/r.fill.stats.html | 12 +- raster/r.flow/r.flow.html | 4 +- raster/r.geomorphon/r.geomorphon.html | 5 +- raster/r.gwflow/r.gwflow.html | 4 +- raster/r.his/r.his.html | 2 +- raster/r.horizon/r.horizon.html | 10 +- raster/r.in.ascii/r.in.ascii.html | 2 +- raster/r.in.bin/r.in.bin.html | 2 +- raster/r.in.gdal/r.in.gdal.html | 25 ++-- raster/r.in.lidar/r.in.lidar.html | 42 +++---- raster/r.in.mat/r.in.mat.html | 12 +- raster/r.in.pdal/r.in.pdal.html | 34 +++--- raster/r.in.poly/r.in.poly.html | 8 +- raster/r.in.xyz/r.in.xyz.html | 26 ++--- raster/r.info/r.info.html | 4 +- raster/r.lake/r.lake.html | 8 +- raster/r.li/r.li.cwed/r.li.cwed.html | 8 +- raster/r.li/r.li.daemon/r.li.daemon.html | 2 +- .../r.li/r.li.dominance/r.li.dominance.html | 8 +- .../r.li.edgedensity/r.li.edgedensity.html | 12 +- raster/r.li/r.li.html | 12 +- raster/r.li/r.li.mpa/r.li.mpa.html | 8 +- raster/r.li/r.li.mps/r.li.mps.html | 6 +- raster/r.li/r.li.padcv/r.li.padcv.html | 6 +- raster/r.li/r.li.padrange/r.li.padrange.html | 6 +- raster/r.li/r.li.padsd/r.li.padsd.html | 6 +- .../r.li.patchdensity/r.li.patchdensity.html | 6 +- raster/r.li/r.li.patchnum/r.li.patchnum.html | 6 +- raster/r.li/r.li.pielou/r.li.pielou.html | 8 +- raster/r.li/r.li.renyi/r.li.renyi.html | 8 +- raster/r.li/r.li.richness/r.li.richness.html | 8 +- raster/r.li/r.li.shannon/r.li.shannon.html | 8 +- raster/r.li/r.li.shape/r.li.shape.html | 6 +- raster/r.li/r.li.simpson/r.li.simpson.html | 8 +- raster/r.mapcalc/r.mapcalc.html | 34 +++--- raster/r.mapcalc/r3.mapcalc.html | 16 +-- raster/r.null/r.null.html | 2 +- .../r.object.geometry/r.object.geometry.html | 6 +- raster/r.out.bin/r.out.bin.html | 2 +- raster/r.out.gdal/r.out.gdal.html | 24 ++-- raster/r.out.mat/r.out.mat.html | 4 +- raster/r.out.mpeg/r.out.mpeg.html | 4 +- raster/r.out.png/r.out.png.html | 2 +- raster/r.out.pov/r.out.pov.html | 2 +- raster/r.out.ppm/r.out.ppm.html | 8 +- raster/r.out.vrml/r.out.vrml.html | 8 +- raster/r.out.vtk/r.out.vtk.html | 12 +- raster/r.out.vtk/writeascii.c | 2 +- raster/r.patch/r.patch.html | 4 +- raster/r.profile/r.profile.html | 2 +- raster/r.proj/r.proj.html | 10 +- raster/r.quant/r.quant.html | 32 ++++-- raster/r.random.surface/r.random.surface.html | 2 +- raster/r.reclass/r.reclass.html | 6 +- raster/r.region/r.region.html | 2 +- raster/r.ros/r.ros.html | 16 +-- .../r.series.accumulate.html | 2 +- raster/r.series/r.series.html | 2 +- raster/r.slope.aspect/r.slope.aspect.html | 3 +- raster/r.spread/r.spread.html | 4 +- raster/r.stats.quantile/r.stats.quantile.html | 4 +- raster/r.stats.zonal/r.stats.zonal.html | 4 +- raster/r.stream.extract/r.stream.extract.html | 16 +-- raster/r.sun/r.sun.html | 4 +- raster/r.support/r.support.html | 2 +- raster/r.surf.area/r.surf.area.html | 18 +-- raster/r.surf.gauss/r.surf.gauss.html | 2 +- raster/r.texture/r.texture.html | 2 +- raster/r.timestamp/r.timestamp.html | 2 +- raster/r.to.rast3/r.to.rast3.html | 3 +- raster/r.to.rast3elev/r.to.rast3elev.html | 4 +- raster/r.topidx/r.topidx.html | 16 +-- raster/r.transect/r.transect.html | 2 +- raster/r.univar/r.univar.html | 6 +- raster/r.viewshed/r.viewshed.html | 12 +- raster/r.volume/r.volume.html | 14 +-- raster/r.walk/r.walk.html | 6 +- raster/r.watershed/front/r.watershed.html | 24 ++-- raster/r.what.color/r.what.color.html | 6 +- raster/r.what/r.what.html | 10 +- raster/rasterintro.html | 10 +- raster3d/r3.cross.rast/r3.cross.rast.html | 2 +- raster3d/r3.flow/r3.flow.html | 2 +- raster3d/r3.gradient/r3.gradient.html | 2 +- raster3d/r3.in.lidar/r3.in.lidar.html | 10 +- raster3d/r3.in.v5d/r3.in.v5d.html | 2 +- raster3d/r3.mask/r3.mask.html | 11 +- raster3d/r3.null/r3.null.html | 2 +- raster3d/r3.out.netcdf/r3.out.netcdf.html | 4 +- raster3d/r3.out.v5d/r3.out.v5d.html | 2 +- raster3d/r3.out.vtk/r3.out.vtk.html | 6 +- raster3d/r3.showdspf/r3.showdspf.html | 24 ++-- .../r3.showdspf/r3.showdspf_opengl_mods.html | 16 +-- raster3d/r3.support/r3.support.html | 2 +- raster3d/r3.to.rast/r3.to.rast.html | 6 +- raster3d/raster3dintro.html | 8 +- scripts/d.correlate/d.correlate.html | 2 +- scripts/d.out.file/d.out.file.html | 2 +- scripts/d.rast.leg/d.rast.leg.html | 2 +- scripts/d.shade/d.shade.html | 6 +- scripts/d.to.rast/d.to.rast.html | 2 +- scripts/d.what.rast/d.what.rast.html | 4 +- scripts/d.what.vect/d.what.vect.html | 4 +- scripts/db.droptable/db.droptable.html | 2 +- scripts/db.in.ogr/db.in.ogr.html | 4 +- scripts/db.test/db.test.html | 3 +- scripts/g.extension.all/g.extension.all.html | 6 +- scripts/g.extension/g.extension.html | 18 +-- .../r.plus.example/r.plus.example.html | 2 +- scripts/g.manual/g.manual.html | 2 +- scripts/i.band.library/i.band.library.html | 12 +- scripts/i.in.spotvgt/i.in.spotvgt.html | 2 + scripts/i.oif/i.oif.html | 2 +- scripts/i.pansharpen/i.pansharpen.html | 36 +++--- scripts/i.tasscap/i.tasscap.html | 3 +- scripts/i.tasscap/i.tasscap.py | 2 +- scripts/m.proj/m.proj.html | 40 +++---- scripts/r.fillnulls/r.fillnulls.html | 4 +- scripts/r.import/r.import.html | 6 +- scripts/r.in.srtm/r.in.srtm.html | 9 +- scripts/r.in.wms/r.in.wms.html | 24 ++-- .../r.mapcalc.simple/r.mapcalc.simple.html | 4 +- scripts/r.mask/r.mask.html | 10 +- scripts/r.out.xyz/r.out.xyz.html | 2 +- scripts/r.plane/r.plane.html | 2 +- scripts/r.shade/r.shade.html | 8 +- scripts/r.tileset/r.tileset.html | 25 ++-- scripts/r3.in.xyz/r3.in.xyz.html | 4 +- .../v.db.reconnect.all.html | 10 +- scripts/v.dissolve/v.dissolve.html | 2 +- scripts/v.import/v.import.html | 8 +- scripts/v.in.geonames/v.in.geonames.html | 14 +-- scripts/v.in.geonames/v.in.geonames.py | 12 +- scripts/v.in.lines/v.in.lines.html | 2 +- scripts/v.in.mapgen/v.in.mapgen.html | 4 +- scripts/v.in.wfs/v.in.wfs.html | 2 +- scripts/v.rast.stats/v.rast.stats.html | 6 +- scripts/v.what.vect/v.what.vect.html | 2 +- temporal/t.connect/t.connect.html | 2 +- temporal/t.copy/t.copy.html | 7 +- temporal/t.merge/t.merge.html | 4 +- temporal/t.rast.algebra/t.rast.algebra.html | 2 +- temporal/t.rast.extract/t.rast.extract.html | 2 +- temporal/t.rast.mapcalc/t.rast.mapcalc.html | 4 +- temporal/t.rast.out.vtk/t.rast.out.vtk.html | 2 +- temporal/t.rast.univar/t.rast.univar.html | 4 +- .../t.rast3d.algebra/t.rast3d.algebra.html | 4 +- temporal/t.rast3d.univar/t.rast3d.univar.html | 4 +- temporal/t.register/t.register.html | 4 +- temporal/t.remove/t.remove.html | 14 +-- temporal/t.rename/t.rename.html | 7 +- temporal/t.sample/t.sample.html | 2 +- temporal/t.select/t.select.html | 4 +- temporal/t.support/t.support.html | 3 +- temporal/t.unregister/t.unregister.html | 4 +- temporal/t.upgrade/t.upgrade.html | 4 +- temporal/t.vect.algebra/t.vect.algebra.html | 2 +- temporal/t.vect.extract/t.vect.extract.html | 2 +- temporal/t.vect.list/t.vect.list.html | 2 +- .../t.vect.observe.strds.html | 2 +- utils/g.html2man/htmltags.txt | 28 ----- vector/v.buffer/v.buffer.html | 2 +- vector/v.build/v.build.html | 3 +- vector/v.cluster/v.cluster.html | 13 ++- vector/v.colors/v.colors.html | 10 +- vector/v.db.select/v.db.select.html | 14 +-- vector/v.decimate/v.decimate.html | 2 +- vector/v.delaunay/v.delaunay.html | 2 + vector/v.distance/v.distance.html | 6 +- vector/v.edit/v.edit.html | 4 +- vector/v.external.out/v.external.out.html | 64 +++++------ vector/v.external/v.external.html | 8 +- vector/v.in.ascii/v.in.ascii.html | 20 ++-- vector/v.in.lidar/v.in.lidar.html | 30 +++-- vector/v.in.ogr/v.in.ogr.html | 22 ++-- vector/v.in.pdal/v.in.pdal.html | 4 +- vector/v.label/v.label.html | 24 ++-- .../v.lidar.correction.html | 2 +- .../v.lidar.edgedetection.html | 2 +- vector/v.lidar.growing/v.lidar.growing.html | 2 +- vector/v.lrs/lrs.html | 16 +-- vector/v.lrs/v.lrs.create/v.lrs.create.html | 2 +- vector/v.lrs/v.lrs.label/v.lrs.label.html | 2 +- vector/v.lrs/v.lrs.segment/v.lrs.segment.html | 4 +- vector/v.lrs/v.lrs.where/v.lrs.where.html | 2 +- vector/v.mkgrid/v.mkgrid.html | 4 +- vector/v.net.path/v.net.path.html | 26 ++--- vector/v.net/v.net.html | 6 +- vector/v.out.ascii/v.out.ascii.html | 8 +- vector/v.out.dxf/v.out.dxf.html | 2 +- vector/v.out.lidar/v.out.lidar.html | 6 +- vector/v.out.ogr/v.out.ogr.html | 22 ++-- vector/v.out.postgis/v.out.postgis.html | 64 +++++------ vector/v.out.vtk/v.out.vtk.html | 6 +- vector/v.proj/v.proj.html | 4 +- vector/v.random/v.random.html | 2 +- vector/v.reclass/v.reclass.html | 4 +- vector/v.segment/v.segment.html | 4 +- vector/v.select/v.select.html | 2 +- vector/v.support/v.support.html | 4 +- vector/v.to.db/v.to.db.html | 4 +- vector/v.to.rast/v.to.rast.html | 2 +- vector/v.to.rast3/v.to.rast3.html | 2 +- vector/v.voronoi/v.voronoi.html | 2 + vector/v.what.rast/v.what.rast.html | 8 +- visualization/ximgview/ximgview.html | 10 +- 302 files changed, 1498 insertions(+), 1424 deletions(-) delete mode 100644 utils/g.html2man/htmltags.txt diff --git a/db/databaseintro.html b/db/databaseintro.html index c400ab6e0ed..f7fb11a3b47 100644 --- a/db/databaseintro.html +++ b/db/databaseintro.html @@ -35,7 +35,7 @@

    Attribute data import and export

    Further conversion tools: diff --git a/db/db.connect/db.connect.html b/db/db.connect/db.connect.html index 434124b4e65..5b6e2fa1517 100644 --- a/db/db.connect/db.connect.html +++ b/db/db.connect/db.connect.html @@ -9,7 +9,7 @@

    DESCRIPTION

    NOTES

    -Values are stored in the mapset's VAR file; +Values are stored in the mapset's VAR file; the connection is not tested for validity.

    The -p flag will display the current connection parameters.

    The -c flag will silently check if the connection parameters have diff --git a/db/db.execute/db.execute.html b/db/db.execute/db.execute.html index b8fcce41d7b..08d5b10ae54 100644 --- a/db/db.execute/db.execute.html +++ b/db/db.execute/db.execute.html @@ -76,7 +76,7 @@

    EXAMPLES

    Update attribute with multiple SQL instructions in file -(e.g., file.sql, instruction line must end with a semicolon): +(e.g., file.sql, instruction line must end with a semicolon):
     UPDATE roads SET travelcost=5 WHERE cat=1;
     UPDATE roads SET travelcost=2 WHERE cat=2;
    diff --git a/db/db.login/db.login.html b/db/db.login/db.login.html
    index 7173f2c044c..6f2eb652e4b 100644
    --- a/db/db.login/db.login.html
    +++ b/db/db.login/db.login.html
    @@ -15,8 +15,8 @@ 

    NOTE

    file in the user account, specifically
      -
    • in the 'home' directory, i.e. $HOME/.grass8/dblogin (Unix-like systems)
    • -
    • %APPDATA%\Roaming\GRASS8\dblogin (MS-Windows)
    • +
    • in the 'home' directory, i.e. $HOME/.grass8/dblogin (Unix-like systems)
    • +
    • %APPDATA%\Roaming\GRASS8\dblogin (MS-Windows)
    Only the file owner can access this file. diff --git a/db/drivers/ogr/README b/db/drivers/ogr/README index b5fa80bb25e..fde41d85722 100644 --- a/db/drivers/ogr/README +++ b/db/drivers/ogr/README @@ -5,4 +5,4 @@ SQL DB support via OGR ----------------------------------------------------- General Documentation - http://www.remotesensing.org/gdal/ogr/ogr_sql.html + https://gdal.org/en/stable/user/ogr_sql_dialect.html diff --git a/db/drivers/postgres/README b/db/drivers/postgres/README index a2959739f6e..76d44e6bf6b 100644 --- a/db/drivers/postgres/README +++ b/db/drivers/postgres/README @@ -10,7 +10,7 @@ by G_warning(). FIELD TYPES: Field type code may change. See for example -http://git.postgresql.org/gitweb/?p=postgresql.git;a=blob;f=src/include/catalog/pg_type.h;hb=refs/heads/master +https://git.postgresql.org/gitweb/?p=postgresql.git;a=blob;f=src/include/catalog/pg_type.h;hb=refs/heads/master Because of this, type codes must be read from server when database is opened. @@ -19,7 +19,7 @@ Check also for PostgreSQL data types for defining them in GRASS: Supported types in ./globals.h: -(See https://www.postgresql.org/docs/9.4/interactive/datatype.html) +(See https://www.postgresql.org/docs/current/datatype.html) DB_C_TYPE_INT: bit, int2, smallint, int4, int, integer, int8, bigint, serial, oid diff --git a/db/drivers/postgres/grass-pg.html b/db/drivers/postgres/grass-pg.html index 3950c0dd315..721d9a035b0 100644 --- a/db/drivers/postgres/grass-pg.html +++ b/db/drivers/postgres/grass-pg.html @@ -5,7 +5,7 @@

    Creating a PostgreSQL database

    -A new database is created with createdb, see +A new database is created with createdb, see the PostgreSQL manual for details. @@ -76,7 +76,7 @@

    Geometry import from PostgreSQL table into GRASS

    PostGIS: PostgreSQL with vector geometry

    -PostGIS: +PostGIS: adds geographic object support to PostgreSQL.

    Example: Import from PostGIS

    @@ -114,15 +114,15 @@

    Example: Import from PostGIS

    Geometry Converters

      -
    • PostGIS with shp2pgsql:
      - shp2pgsql -D lakespy2 lakespy2 test > lakespy2.sql +
    • PostGIS with shp2pgsql:
      + shp2pgsql -D lakespy2 lakespy2 test > lakespy2.sql
    • -
    • e00pg: E00 to PostGIS filter, +
    • e00pg: E00 to PostGIS filter, see also v.in.e00.
    • GDAL/OGR ogrinfo and ogr2ogr: GIS vector format converter and library, e.g. ArcInfo or SHAPE to PostGIS.
      - ogr2ogr -f "PostgreSQL" shapefile ?? + ogr2ogr -f "PostgreSQL" shapefile ??
    @@ -143,6 +143,6 @@

    REFERENCES

    diff --git a/db/drivers/sqlite/grass-sqlite.html b/db/drivers/sqlite/grass-sqlite.html index ea2f9526506..57808ccb79c 100644 --- a/db/drivers/sqlite/grass-sqlite.html +++ b/db/drivers/sqlite/grass-sqlite.html @@ -34,7 +34,7 @@

    Operators available in conditions

    Browsing table data in DB

    -A convenient SQLite front-end is sqlitebrowser. +A convenient SQLite front-end is sqlitebrowser. To open a DB file stored within the current mapset, the following way is suggested (corresponds to above database connection): @@ -78,5 +78,5 @@

    SEE ALSO

    SQLite web site, SQLite manual, - sqlite - Management Tools + sqlite - Management Tools diff --git a/display/d.extract/d.extract.html b/display/d.extract/d.extract.html index 39c37915ade..9e09ddadc03 100644 --- a/display/d.extract/d.extract.html +++ b/display/d.extract/d.extract.html @@ -6,7 +6,7 @@

    DESCRIPTION

    EXAMPLE

    -

    Graphically extract roads from a roads map:

    +

    Graphically extract roads from a roads map

     d.mon x0
     d.vect roads
    diff --git a/display/d.graph/d.graph.html b/display/d.graph/d.graph.html
    index d70530f5da1..34017d34bc7 100644
    --- a/display/d.graph/d.graph.html
    +++ b/display/d.graph/d.graph.html
    @@ -132,10 +132,10 @@ 

    COMMANDS

    symbol type size xper yper [line_color [fill_color]]
    A symbol is drawn at the given size on the display monitor. The xper and yper options define the center of the icon and -are given as a percentage of the display frame (0,0 is lower left). -The symbol can be any of those stored in $GISBASE/etc/symbol/ +are given as a percentage of the display frame (0,0 is lower left). +The symbol can be any of those stored in $GISBASE/etc/symbol/ (e.g. basic/circle) or stored in the user's mapset directory in the -form $MAPSET/symbol/type/name. +form $MAPSET/symbol/type/name. The colors may be either a standard color name, an R:G:B triplet, or "none". If using an R:G:B triplet, each color value can range from 0-255. If not specified the default line_color is black and the default diff --git a/display/d.grid/d.grid.html b/display/d.grid/d.grid.html index 7d775d71bc7..412a6a413ca 100644 --- a/display/d.grid/d.grid.html +++ b/display/d.grid/d.grid.html @@ -9,7 +9,7 @@

    DESCRIPTION

    If the user provides a -g flag a geographic (projected) grid will be drawn. With the -g flag the size argument accepts both decimal degrees and colon separated -ddd:mm:ss coordinates (eg. 00:30:00 for half of a degree). +ddd:mm:ss coordinates (eg. 00:30:00 for half of a degree). A geographic grid cannot be drawn for a latitude/longitude or XY projection. diff --git a/display/d.his/d.his.html b/display/d.his/d.his.html index 56f7d99bebc..49909d20d04 100644 --- a/display/d.his/d.his.html +++ b/display/d.his/d.his.html @@ -1,5 +1,9 @@

    DESCRIPTION

    +d.his displays the result obtained by combining hue, +intensity, and saturation (HIS) values from user-specified input +raster map layers. +

    HIS stands for hue, intensity, and saturation. This program produces a raster map layer providing a visually pleasing combination of hue, intensity, and diff --git a/display/d.labels/d.labels.html b/display/d.labels/d.labels.html index 61a9f94052e..0bcf9b07c57 100644 --- a/display/d.labels/d.labels.html +++ b/display/d.labels/d.labels.html @@ -7,7 +7,7 @@

    DESCRIPTION

    the v.label program or simply created by the user as an ASCII file (using a text editor) and placed in the appropriate directory under the user's current mapset and project -(i.e. $MAPSET/paint/labels/). +(i.e. $MAPSET/paint/labels/).

    NOTES

    diff --git a/display/d.legend.vect/d.legend.vect.html b/display/d.legend.vect/d.legend.vect.html index 43602b0e936..36a2e4e6533 100644 --- a/display/d.legend.vect/d.legend.vect.html +++ b/display/d.legend.vect/d.legend.vect.html @@ -1,6 +1,6 @@

    DESCRIPTION

    -Module d.legend.vect draws vector legend of currently displayed vector maps. +d.legend.vect draws vector legend of currently displayed vector maps.

    Parameter at defines the screen position of upper-left legend corner. Parameter columns defines the number of legend columns. diff --git a/display/d.linegraph/d.linegraph.html b/display/d.linegraph/d.linegraph.html index 23a11463df9..a9782c98c2c 100644 --- a/display/d.linegraph/d.linegraph.html +++ b/display/d.linegraph/d.linegraph.html @@ -24,7 +24,7 @@

    File inputs

    should) be only relative paths to these files. While this is not recommended for scripting, it can be advantageous when typing the paths manually. For example when all files are stored in the directory -/home/john/data, the user can provide the following in the command +/home/john/data, the user can provide the following in the command line:
    @@ -145,7 +145,7 @@ 

    EXAMPLE

    -->

    -The next command sequence creates a file plot.png in the current +The next command sequence creates a file plot.png in the current directory which is the drawing made by d.linegraph.

    diff --git a/display/d.mon/d.mon.html b/display/d.mon/d.mon.html
    index ed1e6cb2344..9f76cff9880 100644
    --- a/display/d.mon/d.mon.html
    +++ b/display/d.mon/d.mon.html
    @@ -52,8 +52,8 @@ 

    Releasing (unselecting) a monitor

    NOTES

    d.mon is designed for interactive use. If non-interactive use -is needed (e.g., in a script) set GRASS_RENDER_IMMEDIATE=png -(or =cairo) and use the related environment +is needed (e.g., in a script) set GRASS_RENDER_IMMEDIATE=png +(or =cairo) and use the related environment variables to control output size etc.

    EXAMPLES

    @@ -73,7 +73,7 @@

    wx0 monitor

    Figure: The initialization of display monitor wx0
    -All subsequently displayed data will be rendered on monitor wx0. +All subsequently displayed data will be rendered on monitor wx0.
     g.region raster=elevation -p
    @@ -95,7 +95,7 @@ 

    CAIRO file renderer monitor

    From this moment on all displayed data will be rendered into -file output.pdf. +file output.pdf.

    List running monitors

    diff --git a/display/d.path/d.path.html b/display/d.path/d.path.html index b98e5d90dde..922e0582f75 100644 --- a/display/d.path/d.path.html +++ b/display/d.path/d.path.html @@ -10,7 +10,7 @@

    NOTE

    The user needs to display a vector map before using d.path. If no graphics monitor -is open, a file map.png is generated in the current directory. +is open, a file map.png is generated in the current directory.

    The 'from' and 'to' points are entered by mouse into the map displayed in the GRASS monitor, diff --git a/display/d.profile/d.profile.html b/display/d.profile/d.profile.html index 1f4e789639a..cb17088d4de 100644 --- a/display/d.profile/d.profile.html +++ b/display/d.profile/d.profile.html @@ -1,6 +1,6 @@

    DESCRIPTION

    -This command displays the profile for a specified transect. +d.profile displays the profile for a specified transect.

    SEE ALSO

    diff --git a/display/d.rast.arrow/d.rast.arrow.html b/display/d.rast.arrow/d.rast.arrow.html index 5face5ec59c..912daad0edf 100644 --- a/display/d.rast.arrow/d.rast.arrow.html +++ b/display/d.rast.arrow/d.rast.arrow.html @@ -17,7 +17,7 @@

    DESCRIPTION

    of that category. Cells containing null data will be marked with an "X". You can disable drawing of null data and unknown aspect values by -setting its color to "none". +setting its color to "none".

    When specifying the magnitude_map option, arrow lengths denoting magnitude will be extracted from the cell values of the specified @@ -35,7 +35,7 @@

    DESCRIPTION

    the raster map is relatively close in scale. You can use the skip option to draw arrows every n-th cell in both directions if you are working with relatively high resolutions. It may be useful to disable the grid in -this case, which is accomplished by setting its color to "none". +this case, which is accomplished by setting its color to "none".

    For GRASS and Compass type aspect maps, the cell values of the aspect map will determine the corresponding direction in 360 degrees. ANSWERS type aspect maps will be plotted in multiples of 15 degrees counterclockwise from east, and diff --git a/display/d.rast.num/d.rast.num.html b/display/d.rast.num/d.rast.num.html index 28d30b75bfc..f35c1c5abf9 100644 --- a/display/d.rast.num/d.rast.num.html +++ b/display/d.rast.num/d.rast.num.html @@ -24,7 +24,8 @@

    NOTES

    EXAMPLE

    -A) Distance from the streams network (North Carolina sample dataset): +Distance from the streams network (North Carolina sample dataset): +
     g.region raster=streams_derived -p
     r.grow.distance input=streams_derived distance=dist_from_streams
    diff --git a/display/d.rgb/d.rgb.html b/display/d.rgb/d.rgb.html
    index 9b706f2b3ce..deae068cb19 100644
    --- a/display/d.rgb/d.rgb.html
    +++ b/display/d.rgb/d.rgb.html
    @@ -1,5 +1,8 @@
     

    DESCRIPTION

    +d.rgb displays three user-specified raster maps as red, green, +and blue overlays in the active graphics frame. +

    RGB stands for red, green, and blue. d.rgb visually combines three raster maps to form a color image. For each map, the corresponding component from the diff --git a/display/d.title/d.title.html b/display/d.title/d.title.html index 15a0d8e75cd..be02c674f60 100644 --- a/display/d.title/d.title.html +++ b/display/d.title/d.title.html @@ -25,17 +25,18 @@

    EXAMPLES

    For example, a user wishing to create a suitable TITLE for the Spearfish, SD soils map layer and to display this TITLE in the active display frame on the graphics monitor might type the following: -
    -
    d.title map=soils color=red size=5 > TITLE.file -
    d.text < TITLE.file -
    + +
    +d.title map=soils color=red size=5 > TITLE.file
    +d.text < TITLE.file
    +
    + Alternately, the user might pipe d.title output directly into d.text: -
    -
    -d.title map=soils color=red size=5 | -d.text -
    + +
    +d.title map=soils color=red size=5 | d.text
    +

    A file created by d.title can be displayed with d.text. @@ -45,8 +46,10 @@

    EXAMPLES

    SEE ALSO

    -d.font
    -d.text
    + +d.font, +d.text +

    AUTHOR

    diff --git a/display/d.vect.thematic/d.vect.thematic.html b/display/d.vect.thematic/d.vect.thematic.html index 52ce4908d38..a40a31005b4 100644 --- a/display/d.vect.thematic/d.vect.thematic.html +++ b/display/d.vect.thematic/d.vect.thematic.html @@ -40,8 +40,8 @@

    Thematic map with classes

    Thematic map with calculated class breaks

    -The following example uses a calculated attribute (density = -pop/area) and the standard deviation algorithm to calculate class +The following example uses a calculated attribute (density = +pop/area) and the standard deviation algorithm to calculate class breaks for 5 classes:
    diff --git a/display/d.vect/d.vect.html b/display/d.vect/d.vect.html
    index 4ba8494c41f..38341d0afcb 100644
    --- a/display/d.vect/d.vect.html
    +++ b/display/d.vect/d.vect.html
    @@ -5,14 +5,14 @@ 

    DESCRIPTION

    NOTES

    -d.vect can simply be used typing d.vect -map=vector_map. There are a large variety of optional parameters +d.vect can simply be used typing d.vect +map=vector_map. There are a large variety of optional parameters which allow the user to specify vector type, colors, data fields, SQL queries, label size and justification, etc.

    When d.vect is used with where parameter on MS Windows -Command Prompt, it is important to use ˆ -carret symbol for escaping special characters < > ( ) & | , ; ". +Command Prompt, it is important to use ˆ +carret symbol for escaping special characters < > ( ) & | , ; ".

     d.vect map=vector_map where="cat ˆ> 10 AND cat ˆ< 20"
     
    @@ -32,7 +32,7 @@

    NOTES

    Feature colors may be specified by v.colors in a form of color -table or in an attribute table column containing RRR:GGG:BBB +table or in an attribute table column containing RRR:GGG:BBB values.

    A table for a vector map might look like this: diff --git a/display/displaydrivers.html b/display/displaydrivers.html index 2a8f4f71213..2caab56be77 100644 --- a/display/displaydrivers.html +++ b/display/displaydrivers.html @@ -3,7 +3,7 @@ The current command line rendering mechanism is direct rendering into a file. The driver is selected by setting -the GRASS_RENDER_IMMEDIATE variable or by +the GRASS_RENDER_IMMEDIATE variable or by running d.mon module.

    diff --git a/doc/development/rfc/legal_aspects_of_code_contributions.md b/doc/development/rfc/legal_aspects_of_code_contributions.md index 596cf301183..9607569c45e 100644 --- a/doc/development/rfc/legal_aspects_of_code_contributions.md +++ b/doc/development/rfc/legal_aspects_of_code_contributions.md @@ -66,4 +66,4 @@ source repository: Questions regarding GRASS GIS should be directed to the GRASS Development Team at the following address: -Internet: +Internet: diff --git a/doc/projectionintro.html b/doc/projectionintro.html index 33bc964e3d7..c51c9efc761 100644 --- a/doc/projectionintro.html +++ b/doc/projectionintro.html @@ -63,8 +63,8 @@

    References

  • ASPRS Grids and Datum
  • Projections Transform List (PROJ)
  • Coordinate operations by PROJ (projections, conversions, transformations, pipeline operator)
  • -
  • MapRef - The Collection of Map Projections and Reference Systems for Europe
  • -
  • Information and Service System for European Coordinate Reference Systems - CRS
  • +
  • MapRef - The Collection of Map Projections and Reference Systems for Europe
  • +
  • Information and Service System for European Coordinate Reference Systems - CRS

See also

diff --git a/general/g.filename/g.filename.html b/general/g.filename/g.filename.html index 0f6c89357e3..5462f5cb48e 100644 --- a/general/g.filename/g.filename.html +++ b/general/g.filename/g.filename.html @@ -6,7 +6,7 @@

DESCRIPTION

The list of element names to search for is not fixed; any subdirectory of the mapset directory is a valid element name.

However, the user can find the list of standard GRASS GIS element names in -the file $GISBASE/etc/element_list. This is the file which +the file $GISBASE/etc/element_list. This is the file which g.remove/g.rename/g.copy use to determine which files need to be deleted/renamed/copied for a given entity type. diff --git a/general/g.findfile/g.findfile.html b/general/g.findfile/g.findfile.html index 140495691d9..5746759fbd9 100644 --- a/general/g.findfile/g.findfile.html +++ b/general/g.findfile/g.findfile.html @@ -7,7 +7,7 @@

DESCRIPTION

The list of element names to search for is not fixed; any subdirectory of the mapset directory is a valid element name.

However, the user can find the list of standard GRASS element -names in the file $GISBASE/etc/element_list. This is the file +names in the file $GISBASE/etc/element_list. This is the file which g.remove, g.rename and g.copy use to determine which files need to be deleted/renamed/copied for a given entity type. diff --git a/general/g.gisenv/g.gisenv.html b/general/g.gisenv/g.gisenv.html index 4eb2a88ed13..bf95770390c 100644 --- a/general/g.gisenv/g.gisenv.html +++ b/general/g.gisenv/g.gisenv.html @@ -1,5 +1,8 @@

DESCRIPTION

+g.gisenv outputs and modifies the user's current GRASS GIS +variable settings. + When a user runs GRASS, certain variables are set specifying the GRASS data base, project, mapset, peripheral device drivers, etc., being used in the current GRASS session. These variable name settings are @@ -46,7 +49,7 @@

OPTIONS

"project" directory itself contains subdirectories called "mapsets"; each "mapset" stores "data base elements" - the directories (e.g., -the cell, cellhd, vector, etc., directories) +the cell, cellhd, vector, etc., directories) in which GRASS data files are actually stored.
LOCATION_NAME @@ -118,7 +121,7 @@

OPTIONS

The full path to the current mapset is determined from GISDBASE, LOCATION_NAME, MAPSET variables, in the example -above: /opt/grassdata/spearfish/PERMANENT. The full path can +above: /opt/grassdata/spearfish/PERMANENT. The full path can be printed using g.gisenv by providing multiple variables:
@@ -146,7 +149,7 @@ 

NOTES

By default the GRASS variables are stored in gisrc file (defined by environmental variable GISRC). If store=mapset is given then the -variables are stored in <gisdbase>/<project>/<mapset>/VAR +variables are stored in <gisdbase>/<project>/<mapset>/VAR after the current GRASS session is closed.

EXAMPLES

diff --git a/general/g.gui/g.gui.html b/general/g.gui/g.gui.html index 4c8b162b6b1..3988edb68e3 100644 --- a/general/g.gui/g.gui.html +++ b/general/g.gui/g.gui.html @@ -11,18 +11,18 @@

DESCRIPTION

NOTES

-If the -d update flag is given or the GRASS_GUI +If the -d update flag is given or the GRASS_GUI environmental variable is unset, then -the GRASS internal variable GUI is permanently changed and +the GRASS internal variable GUI is permanently changed and the selected ui will be used as the default UI from then on.

All GRASS internal variables (see g.gisenv) are stored in the user's home directory in a hidden file called -$HOME/.grass8/rc on Unix-based operating systems -and %APPDATA%\GRASS8\rc on MS Windows. Note that these GRASS +$HOME/.grass8/rc on Unix-based operating systems +and %APPDATA%\GRASS8\rc on MS Windows. Note that these GRASS internal variables are not the shell environment variables and the -rc file is not a classic UNIX run command file, it just +rc file is not a classic UNIX run command file, it just contains persistent GRASS variables.

EXAMPLES

diff --git a/general/g.list/g.list.html b/general/g.list/g.list.html index b99b46cde61..cc646c6ad7b 100644 --- a/general/g.list/g.list.html +++ b/general/g.list/g.list.html @@ -42,7 +42,7 @@

Mapset search path

If mapset is not specified, then g.list searches for data files in the mapsets that are included in the search path (defined by g.mapsets). -See g.mapsets -p. +See g.mapsets -p.
 g.list rast -p
@@ -66,7 +66,7 @@ 

Mapset search path

Similarly, mapset=* (one asterisk) prints data files from all available mapsets also including those that are not listed in the -current search path (see g.mapsets -l). +current search path (see g.mapsets -l).
 g.list rast mapset=* -p
@@ -177,7 +177,7 @@ 

Maps whose region overlaps with a saved region

g.list type=rast,vect region=*
-Note that, without region=*, g.list type=rast,vect simply +Note that, without region=*, g.list type=rast,vect simply lists all available raster and vector maps from the current search path regardless of their region. diff --git a/general/g.mapset/g.mapset.html b/general/g.mapset/g.mapset.html index d8838b59a26..dd32c1d00d8 100644 --- a/general/g.mapset/g.mapset.html +++ b/general/g.mapset/g.mapset.html @@ -4,7 +4,7 @@

DESCRIPTION

as location), or GISDBASE (directory with one or more projects).

-With g.mapset, the shell history (i.e. .bash_history file +With g.mapset, the shell history (i.e. .bash_history file of the initial project will be used to record the command history.

NOTES

diff --git a/general/g.mapsets/g.mapsets.html b/general/g.mapsets/g.mapsets.html index 3fe1a52df73..8fa75baaf2f 100644 --- a/general/g.mapsets/g.mapsets.html +++ b/general/g.mapsets/g.mapsets.html @@ -1,5 +1,8 @@

DESCRIPTION

+g.mapsets modifies/prints the user's current mapset search +path. + For basic information about GRASS mapset, project and data base refer to GRASS Quickstart. @@ -23,7 +26,7 @@

DESCRIPTION

their current mapset. Although the user can also access (i.e., use) data that are stored under other mapsets in the same GRASS project using the -mapname@mapsetname notation or mapset search path, the user +mapname@mapsetname notation or mapset search path, the user can only make permanent changes (create or modify data) located in the current mapset. The user's mapset search path lists the order in which other mapsets in @@ -33,7 +36,7 @@

DESCRIPTION

using the g.mapsets command. This program allows the user to use other's relevant map data without altering the original data layer, and without taking up disk space with a copy of the original -map. The mapname@mapsetname notation may be used irrespective +map. The mapname@mapsetname notation may be used irrespective of the mapset search path, i.e., any map found in another mapset with sufficient g.access privileges may be called in such a manner. @@ -60,8 +63,8 @@

DESCRIPTION

g.copy raster=soils@PERMANENT,my_soils
-ensures that a new file named my_soils is to be a copy of -the file soils from the mapset PERMANENT. +ensures that a new file named my_soils is to be a copy of +the file soils from the mapset PERMANENT.

In each project there is the special mapset PERMANENT included diff --git a/general/g.message/g.message.html b/general/g.message/g.message.html index 07bf643c97b..67587eaf002 100644 --- a/general/g.message/g.message.html +++ b/general/g.message/g.message.html @@ -1,10 +1,13 @@

DESCRIPTION

-

This program is to be used in Shell/Perl/Python scripts, so the author does not -need to use the echo program. The advantage of g.message is +g.message prints a message, warning, progress info, or fatal error +in the GRASS GIS way. + +This program is to be used in Shell/Perl/Python scripts, so the author does not +need to use the echo program. The advantage of g.message is that it formats messages just like other GRASS modules do and that its -functionality is influenced by the GRASS_VERBOSE and -GRASS_MESSAGE_FORMAT environment variables. +functionality is influenced by the GRASS_VERBOSE and +GRASS_MESSAGE_FORMAT environment variables.

The program can be used for standard informative messages as well as warnings @@ -14,7 +17,7 @@

DESCRIPTION

NOTES

-Messages containing "=" must use the full message= syntax so +Messages containing "=" must use the full message= syntax so the parser doesn't get confused.

If you want a long message (multi-line) to be dealt with as a single @@ -31,18 +34,18 @@

NOTES

It's advisable to single quote the messages that are to be printed literally. It prevents a number of characters (most notably, space and the dollar sign -'$') from being treated specifically by the shell. +'$') from being treated specifically by the shell.

When it is necessary to include, for example, a variable's value as part of the message, the double quotes may be used, which do not deprive the dollar sign of its special variable-expansion powers.

While it is known that the interactive Bash instances may treat the -exclamation mark '!' character specifically (making single quoting +exclamation mark '!' character specifically (making single quoting of it necessary), it shouldn't be the case for the non-interactive instances of Bash. Nonetheless, to avoid context-based confusion later on you are encouraged to single-quote messages that do not require -$VARIABLE expansion. +$VARIABLE expansion.

Usage in Python scripts

@@ -51,13 +54,13 @@

Usage in Python scripts

for g.message.
    -
  • debug() for g.message -d
  • -
  • error() for g.message -e
  • -
  • fatal() for g.message -e + exit()
  • -
  • info() for g.message -i
  • -
  • message() for g.message
  • -
  • verbose() for g.message -v
  • -
  • warning() for g.message -w
  • +
  • debug() for g.message -d
  • +
  • error() for g.message -e
  • +
  • fatal() for g.message -e + exit()
  • +
  • info() for g.message -i
  • +
  • message() for g.message
  • +
  • verbose() for g.message -v
  • +
  • warning() for g.message -w

@@ -78,7 +81,7 @@

Usage in Python scripts

VERBOSITY LEVELS

-Controlled by the "GRASS_VERBOSE" environment variable. Typically this +Controlled by the "GRASS_VERBOSE" environment variable. Typically this is set using the --quiet or --verbose command line options.
  • 0 - only errors and warnings are printed
  • @@ -88,7 +91,7 @@

    VERBOSITY LEVELS

DEBUG LEVELS

-Controlled by the "DEBUG" GRASS gisenv variable (set with +Controlled by the "DEBUG" GRASS gisenv variable (set with g.gisenv).
Recommended levels: diff --git a/general/g.mkfontcap/g.mkfontcap.html b/general/g.mkfontcap/g.mkfontcap.html index b1ddeb0663b..2854d808a3b 100644 --- a/general/g.mkfontcap/g.mkfontcap.html +++ b/general/g.mkfontcap/g.mkfontcap.html @@ -2,7 +2,7 @@

DESCRIPTION

g.mkfontcap is a utility to generate a GRASS font configuration file ("fontcap") containing details of the fonts available on the current system. -If Freetype is not installed, +If Freetype is not installed, the font list will be limited to the set of Hershey stroke fonts supplied with GRASS. With Freetype enabled however, the module will recursively scan all files within a predefined hierarchy to find Freetype-compatible scalable @@ -24,10 +24,10 @@

DESCRIPTION

of the string, if enclosed in ${xxx} syntax (see examples above).

The module will normally write to the standard fontcap file location, -$GISBASE/etc/fontcap. If the environment variable -GRASS_FONT_CAP is set, the output will instead be written +$GISBASE/etc/fontcap. If the environment variable +GRASS_FONT_CAP is set, the output will instead be written to the file specified by that variable. This is useful if you don't have -permission to modify $GISBASE/etc/fontcap: in this case you can +permission to modify $GISBASE/etc/fontcap: in this case you can use e.g.

diff --git a/general/g.parser/g.parser.html b/general/g.parser/g.parser.html
index 224049b46bb..c438a675454 100644
--- a/general/g.parser/g.parser.html
+++ b/general/g.parser/g.parser.html
@@ -75,8 +75,8 @@ 

OPTIONS

# %end
-With {NULL} it is possible to suppress a predefined description -or label. +With {NULL} it is possible to suppress a predefined description +or label.

The parsers allows using predefined standardized options and @@ -150,9 +150,9 @@

NOTES

-A "guisection" field may be added to each option and flag to +A "guisection" field may be added to each option and flag to specify that the options should appear in multiple tabs in the -auto-generated GUI. Any options without a guisection field +auto-generated GUI. Any options without a guisection field go into the "Required" or "Options" tab. For example:

 # % guisection: tabname
@@ -160,23 +160,23 @@ 

NOTES

would put that option in a tab named tabname.

-A "key_desc" field may be added to each option to specify the text that +A "key_desc" field may be added to each option to specify the text that appears in the module's usage help section. For example:

 # % key_desc: filename
 
added to an input option would create the usage summary -[input=filename]. +[input=filename].

If a script is run with --o, the parser will -set GRASS_OVERWRITE=1, which has the same effect as passing +set GRASS_OVERWRITE=1, which has the same effect as passing --o to every module which is run from the script. Similarly, passing ---q or --v will set GRASS_VERBOSE to 0 or 3 respectively, +--q or --v will set GRASS_VERBOSE to 0 or 3 respectively, which has the same effect as passing --q or --v to every module which is run from the script. Rather than checking whether --o, --q or --v -were used, you should be checking GRASS_OVERWRITE and/or -GRASS_VERBOSE instead. If those variables are set, the script +were used, you should be checking GRASS_OVERWRITE and/or +GRASS_VERBOSE instead. If those variables are set, the script should behave the same way regardless of whether they were set by --o, --q or --v being passed to the script or set by other means. @@ -191,13 +191,13 @@

Conditional parameters

Marking an option as "required" will result in the parser raising a fatal error if the option is not given, with one exception: if a flag -has the suppress_required option, and that flag is given, all +has the suppress_required option, and that flag is given, all requirements are ignored. This feature is intended for flags which abandon "normal operation" for the module; e.g. r.in.gdal's -f flag (list supported formats) uses it.
But in general, an option cannot be marked as required if it is -optional except for the special case of a suppress_required flag. +optional except for the special case of a suppress_required flag. The parser has the ability to specify option relationships.

@@ -219,15 +219,15 @@

Conditional parameters

The available rule types are:
    -
  • exclusive: at most one of the options may be given
  • -
  • required: at least one of the options must be given
  • -
  • requires: if the first option is given, at least one of the +
  • exclusive: at most one of the options may be given
  • +
  • required: at least one of the options must be given
  • +
  • requires: if the first option is given, at least one of the subsequent options must also be given
  • -
  • requires_all: if the first option is given, all of the +
  • requires_all: if the first option is given, all of the subsequent options must also be given
  • -
  • excludes: if the first option is given, none of the +
  • excludes: if the first option is given, none of the subsequent options may be given
  • -
  • collective: all or nothing; if any option is given, all +
  • collective: all or nothing; if any option is given, all must be given
@@ -305,7 +305,7 @@

reStructuredText

reStructuredText is sometimes abbreviated as reST, ReST, or RST. -The commonly used file extension is .rst. +The commonly used file extension is .rst. Don't be confused with Representational State Transfer (REST) technology.

TRANSLATION

@@ -334,7 +334,7 @@

EXAMPLES

To run properly, the script needs to be copied into a directory listed -in $GRASS_ADDON_PATH environmental variable with the +in $GRASS_ADDON_PATH environmental variable with the executable flag being set.

diff --git a/general/g.proj/g.proj.html b/general/g.proj/g.proj.html index b7f4f185af3..89a44c93622 100644 --- a/general/g.proj/g.proj.html +++ b/general/g.proj/g.proj.html @@ -11,9 +11,9 @@

DESCRIPTION

If compiled without OGR present, the functionality is limited to:
    -
  • Reporting the CRS information for the current project -(previously called location), -either in conventional GRASS (-p flag) or PROJ (-j flag) format
  • +
  • Reporting the CRS information for the current project (previously called +location), either in conventional GRASS (-p flag) or PROJ (-j +flag) format
  • Changing the datum, or reporting and modifying the datum transformation parameters, for the current project
@@ -32,25 +32,25 @@

DESCRIPTION

read from this file. If the file is not georeferenced or cannot be read, XY (unprojected) will be used. -
wkt=filename or -
+
wkt=filename or -
The file filename should contain a CRS description in WKT -format with or without line-breaks (e.g. a '.prj' file). If - is given +format with or without line-breaks (e.g. a '.prj' file). If - is given for the filename, the WKT description will be read from stdin rather than a file.
-
proj4=description or -
+
proj4=description or -
description should be a CRS description in PROJ format, enclosed in -quotation marks if there are any spaces. If - is given for +quotation marks if there are any spaces. If - is given for description, the PROJ description will be read from stdin rather than as a directly-supplied command-line parameter.
epsg=number
number should correspond to the index number of a valid -co-ordinate system in the EPSG +co-ordinate system in the EPSG database. EPSG code support is based upon a local copy of the GDAL CSV co-ordinate system and datum information files, stored in the directory -$GISBASE/etc/proj/ogr_csv. These can be updated if necessary +$GISBASE/etc/proj/ogr_csv. These can be updated if necessary to support future revisions of the EPSG database.
@@ -65,22 +65,22 @@

DESCRIPTION

datumtrans parameter should in general always be used in conjunction with datum. -

The -p, -j, -w, etc. flags are all functional when importing CRS -information from an external source, meaning that g.proj can be -used to convert between representations of the information. It is +

The -p, -j, -w, etc. flags are all functional when +importing CRS information from an external source, meaning that g.proj +can be used to convert between representations of the information. It is not required that either the input or output be in GRASS format. -

In addition however, if the -c flag is specified, g.proj will +

In addition however, if the -c flag is specified, g.proj will create new GRASS CRS files (PROJ_INFO, PROJ_UNITS, WIND and DEFAULT_WIND) based on the imported information. If the project -parameter is specified in addition to -c, then a new project will be created. +parameter is specified in addition to -c, then a new project will be created. Otherwise the CRS information files in the current project will be overwritten. The program will not warn before doing this. -

The final mode of operation of g.proj is to report on the datum +

The final mode of operation of g.proj is to report on the datum information and datum transformation parameters associated with the -co-ordinate system. The -d flag will report a human-readable summary of +co-ordinate system. The -d flag will report a human-readable summary of this.

NOTES

@@ -88,17 +88,21 @@

NOTES

If the input co-ordinate system contains a datum name but no transformation parameters, and there is more than one suitable parameter set available (according to the files datum.table and datumtransform.table in -$GISBASE/etc/proj), g.proj will check the value of -the datumtrans option and act according to the following:
--1: List available parameter sets in a GUI-parsable (but also -human-readable) format and exit.
-0 (default): Continue without specifying parameters - if +$GISBASE/etc/proj), g.proj will check the value of +the datumtrans option and act according to the following: + +

    +
  • -1: List available parameter sets in a GUI-parsable (but also +human-readable) format and exit.
  • +
  • 0 (default): Continue without specifying parameters - if used when creating a project, other GRASS modules will use the "default" -(likely non-optimum) parameters for this datum if necessary in the future.
    -Any other number less than or equal to the number of parameter sets +(likely non-optimum) parameters for this datum if necessary in the future.
  • +
  • Any other number less than or equal to the number of parameter sets available for this datum: Choose this parameter set and add it to the -co-ordinate system description.
    -If the -t flag is specified, the module will attempt to change the +co-ordinate system description.
  • +
+ +If the -t flag is specified, the module will attempt to change the datum transformation parameters using one of the above two methods even if a valid parameter set is already specified in the input co-ordinate system. This can be useful to change the datum information @@ -167,10 +171,10 @@

Create new project

Create a new project with the coordinate system referred to by EPSG code -900913 (Google Mercator Projection)
+3857 (Pseudo-Mercator Projection)

-g.proj -c epsg=900913 project=google
+g.proj -c epsg=3857 project=google
 

Create a new project with the coordinate system referred to by EPSG code @@ -229,7 +233,7 @@

REFERENCES

Further reading

diff --git a/general/g.region/g.region.html b/general/g.region/g.region.html index 85d75a058df..2eb4e58aa08 100644 --- a/general/g.region/g.region.html +++ b/general/g.region/g.region.html @@ -4,7 +4,7 @@

DESCRIPTION

settings of the current geographic region. These regional boundaries can be set by the user directly and/or set from a region definition file (stored under the -windows directory in the user's current +windows directory in the user's current mapset). The user can create, modify, and store as many geographic region definitions as desired for any given mapset. However, only one of these geographic region @@ -50,8 +50,8 @@

DEFINITIONS

Each GRASS project (previously called location) has a fixed geographic region, called the default geographic region -(stored in the region file DEFAULT_WIND under -the special mapset PERMANENT), that defines the +(stored in the region file DEFAULT_WIND under +the special mapset PERMANENT), that defines the extent of the data base. While this provides a starting point for defining new geographic regions, user-defined geographic regions need not fall within this geographic @@ -73,14 +73,14 @@

DEFINITIONS

Each GRASS MAPSET may contain any number of pre-defined, and named, geographic regions. These region definitions are stored in the user's current mapset -location under the windows directory (also +location under the windows directory (also referred to as the user's saved region definitions). Any of these pre-defined geographic regions may be selected, by name, to become the current geographic region. Users may also access saved region definitions stored under other mapsets in the current project, if these mapsets are included in the user's mapset search -path or the '@' operator is used (region_name@mapset). +path or the '@' operator is used (region_name@mapset).

NOTES

@@ -118,7 +118,7 @@

NOTES

The -g flag prints the current region settings in shell script style. This format can be given back to g.region on its command line. This may also be used to save region settings as shell environment variables -with the UNIX eval command, "eval `g.region -g`". +with the UNIX eval command, "eval `g.region -g`".

With -u flag current region is not updated even if one or more options for changing region is used (res=, raster=, etc). @@ -163,9 +163,9 @@

EXAMPLES

Printing extent and raster resolution in 2D and 3D

-
+
g.region -p - +
This will print the current region in the format: @@ -185,9 +185,9 @@

Printing extent and raster resolution in 2D and 3D

-

+
g.region -p3 - +
This will print the current region and the 3D region (used for voxels) in the format: @@ -216,9 +216,9 @@

Printing extent and raster resolution in 2D and 3D

-

+
g.region -g - +
The -g option prints the region in the following script style (key=value) format: @@ -235,9 +235,9 @@

Printing extent and raster resolution in 2D and 3D

-

+
g.region -bg - +
The -bg option prints the region in the following script style (key=value) format plus the @@ -259,9 +259,9 @@

Printing extent and raster resolution in 2D and 3D

-

+
g.region -l - +
The -l option prints the region in the following format: @@ -278,9 +278,9 @@

Printing extent and raster resolution in 2D and 3D

-

+
g.region -pm - +
This will print the current region in the format (latitude-longitude project): @@ -303,36 +303,36 @@

Printing extent and raster resolution in 2D and 3D

Changing extent and raster resolution using values

-
+
g.region n=7360100 e=699000 - +
will reset the northing and easting for the current region, but leave the south edge, west edge, and the region cell resolutions unchanged.

-

+
g.region n=51:36:05N e=10:10:05E s=51:29:55N w=9:59:55E res=0:00:01 - +
will reset the northing, easting, southing, westing and resolution for the current region, here in DMS latitude-longitude style (decimal degrees and degrees with decimal minutes can also be used).

-

+
g.region -dp s=698000 - +
will set the current region from the default region for the GRASS project, reset the south edge to 698000, and then print the result.

-

+
g.region n=n+1000 w=w-500 - +
The n=value may also be specified as a function of its current value: n=n+value @@ -344,9 +344,9 @@

Changing extent and raster resolution using values

decreased by 500 units.

-

+
g.region n=s+1000 e=w+1000 - +
This form allows the user to set the region boundary values relative to one another. Here, the northern @@ -364,19 +364,18 @@

Changing extent and raster resolution using values

Changing extent and raster resolution using maps

-
+
g.region raster=soils - +
This form will make the current region settings exactly the same as those given in the cell header file for the raster map layer soils.

- -

+
g.region raster=soils zoom=soils - +
This form will first look up the cell header file for the raster map layer soils, use this as the @@ -385,14 +384,13 @@

Changing extent and raster resolution using maps

data in the map layer soils. Note that if the parameter raster=soils were not specified, the zoom would shrink to encompass all non-NULL data values in -the soils map that were located within the current region +the soils map that were located within the current region settings.

- -

+
g.region -up raster=soils - +
The -u option suppresses the re-setting of the current region definition. This can be useful when it is @@ -401,24 +399,24 @@

Changing extent and raster resolution using maps

without changing the current region settings.

-

+
g.region -up zoom=soils save=soils - +
This will zoom into the smallest region which encompasses all non-NULL soils data values, and save the new region settings in a file to be called soils -and stored under the windows directory in the +and stored under the windows directory in the user's current mapset. The current region settings are not changed.

Changing extent and raster resolution in 3D

-
+
g.region b=0 t=3000 tbres=200 res3=100 g.region -p3 - +
This will define the 3D region for voxel computations. In this example a volume with bottom (0m) to top (3000m) @@ -430,7 +428,7 @@

Using g.region in a shell in combination with OGR

Extracting a spatial subset of the external vector map -soils.shp into new external vector map soils_cut.shp +soils.shp into new external vector map soils_cut.shp using the OGR ogr2ogr tool:
@@ -443,8 +441,8 @@ 

Using g.region in a shell in combination with OGR

Using g.region in a shell in combination with GDAL

Extracting a spatial subset of the external raster map -p016r035_7t20020524_z17_nn30.tif into new external raster -map p016r035_7t20020524_nc_spm_wake_nn30.tif using the GDAL +p016r035_7t20020524_z17_nn30.tif into new external raster +map p016r035_7t20020524_nc_spm_wake_nn30.tif using the GDAL gdalwarp tool:
diff --git a/general/g.remove/g.remove.html b/general/g.remove/g.remove.html
index b6554a398db..974a5d7c40e 100644
--- a/general/g.remove/g.remove.html
+++ b/general/g.remove/g.remove.html
@@ -3,16 +3,16 @@ 

DESCRIPTION

g.remove removes data files matching a pattern given by wildcards or POSIX Extended Regular Expressions. If the -f force flag is not given then nothing is removed, instead the list of selected file names is printed to -stdout as a preview of the files to be deleted. +stdout as a preview of the files to be deleted.

EXAMPLES

-Delete map1 and map2 raster maps in the current mapset: +Delete map1 and map2 raster maps in the current mapset:
 g.remove -f type=raster name=tmp1,tmp2
 
-Delete all raster and vector maps starting with "tmp_" in the current +Delete all raster and vector maps starting with "tmp_" in the current mapset:
 # show matching raster and vector maps but do not delete yet (as verification)
@@ -22,8 +22,8 @@ 

EXAMPLES

g.remove -f type=raster,vector pattern="tmp_*"
-Delete all vector maps starting with "stream_" in the current mapset, -but exclude those ending with "_final": +Delete all vector maps starting with "stream_" in the current mapset, +but exclude those ending with "_final":
 g.remove -f type=vector pattern="stream_*" exclude="*_final"
 
diff --git a/general/g.setproj/g.setproj.html b/general/g.setproj/g.setproj.html index f59d8331ced..eb39ccb4010 100644 --- a/general/g.setproj/g.setproj.html +++ b/general/g.setproj/g.setproj.html @@ -52,7 +52,7 @@

NOTES

If the datum or ellipsoid required are not listed within this program, the user/administrator may add the definition to the files datum.table, datumtransform.table and ellipse.table in the -$GISBASE/etc/proj directory. +$GISBASE/etc/proj directory.

Depending on the projection selected, the user will then be prompted for the various other parameters required to define it. @@ -74,9 +74,9 @@

SEE ALSO

Further reading

diff --git a/general/g.tempfile/g.tempfile.html b/general/g.tempfile/g.tempfile.html index 8952e531b78..224db92106e 100644 --- a/general/g.tempfile/g.tempfile.html +++ b/general/g.tempfile/g.tempfile.html @@ -3,7 +3,7 @@

DESCRIPTION

g.tempfile is designed for shell scripts that need to use large temporary files. GRASS provides a mechanism for temporary files that does not depend on -/tmp. GRASS temporary files are created in the data base with the assumption +/tmp/. GRASS temporary files are created in the data base with the assumption that there will be enough space under the data base for large files. GRASS periodically removes temporary files that have been left behind by programs that failed to remove them before terminating. @@ -13,18 +13,21 @@

DESCRIPTION

creates an unique file and prints the name. The user is required to provide a process-id which will be used as part of the name of the file. Most Unix shells provide a way to get the process id of the current shell. -For /bin/sh and /bin/csh this is $$. -It is recommended that $$ be specified as the process-id for +For /bin/sh and /bin/csh this is $$. +It is recommended that $$ be specified as the process-id for g.tempfile.

EXAMPLE

-For /bin/sh scripts the following syntax should be used: +For /bin/sh scripts the following syntax should be used: +
 temp1=`g.tempfile pid=$$`
 temp2=`g.tempfile pid=$$`
 
-For /bin/csh scripts, the following can be used: + +For /bin/csh scripts, the following can be used: +
 set temp1=`g.tempfile pid=$$`
 set temp2=`g.tempfile pid=$$`
@@ -38,10 +41,10 @@ 

NOTES

Although GRASS does eventually get around to removing tempfiles that have been left behind, the programmer should make every effort to remove these files. They often get -large and take up disk space. If you write /bin/sh scripts, -learn to use the /bin/sh trap command. If you -write /bin/csh scripts, learn to use the /bin/csh -onintr command. +large and take up disk space. If you write /bin/sh scripts, +learn to use the /bin/sh related trap command. If you +write /bin/csh scripts, learn to use the /bin/csh +related onintr command.

AUTHOR

diff --git a/general/g.version/g.version.html b/general/g.version/g.version.html index f5d2f63043c..abb3867c9d5 100644 --- a/general/g.version/g.version.html +++ b/general/g.version/g.version.html @@ -22,7 +22,7 @@

NOTES

by -e flag.

-See also function version() +See also function version() from Python Scripting Library. @@ -69,10 +69,10 @@

Full info in shell script style

sqlite=3.36.0
-Note: if revision=exported is reported instead of the git hash then the -git program was not available during compilation of GRASS GIS and the -source code did not contain the .git/ subdirectory (requires e.g. to -git clone the GRASS GIS software repository.) +Note: if revision=exported is reported instead of the git hash then the +git program was not available during compilation of GRASS GIS and the +source code did not contain the .git/ subdirectory (requires e.g. to +git clone the GRASS GIS software repository.)

Citing GRASS GIS

diff --git a/gui/wxpython/dbmgr/g.gui.dbmgr.html b/gui/wxpython/dbmgr/g.gui.dbmgr.html index 0416843d43b..114e36fd46a 100644 --- a/gui/wxpython/dbmgr/g.gui.dbmgr.html +++ b/gui/wxpython/dbmgr/g.gui.dbmgr.html @@ -74,7 +74,7 @@

SEE ALSO

AUTHORS

-Martin Landa, FBK-irst (2007-2008), +Martin Landa, FBK-irst (2007-2008), Trento, Italy, and OSGeoREL at the Czech Technical University in Prague, Czech Republic
Michael Barton, Arizona State University, USA
diff --git a/gui/wxpython/docs/wxGUI.components.html b/gui/wxpython/docs/wxGUI.components.html index 5dd0cb3b657..b1be3d092f5 100644 --- a/gui/wxpython/docs/wxGUI.components.html +++ b/gui/wxpython/docs/wxGUI.components.html @@ -1,6 +1,13 @@ +

KEYWORDS

+ + +general, GUI + +

DESCRIPTION

+ List of available wxGUI components: + +

SEE ALSO

+ + + wxGUI + diff --git a/gui/wxpython/docs/wxGUI.html b/gui/wxpython/docs/wxGUI.html index fec5ced8c22..70643d6b24f 100644 --- a/gui/wxpython/docs/wxGUI.html +++ b/gui/wxpython/docs/wxGUI.html @@ -441,7 +441,7 @@

Map Display Toolbar

  • Zoom to saved region. Zooms to previously saved named region.
  • Set computational region extent from display. - The computational region (the mapset's WIND file) + The computational region (the mapset's WIND file) is set to match the current display extent (does not change the resolution), see g.region.
  • Set computational region extent interactively. @@ -657,9 +657,9 @@

    Starting the GUI from command line

  • Alternatively, it may be defined in the main configuration file -($HOME/.grass8/rc on GNU/Linux and macOS, %APPDATA%\Roaming\GRASS8\rc -on MS Windows) using the GUI variable set to wxpython -(GUI: wxpython) or by the environmental variable GRASS_GUI. +($HOME/.grass8/rc on GNU/Linux and macOS, %APPDATA%\Roaming\GRASS8\rc +on MS Windows) using the GUI variable set to wxpython +(GUI: wxpython) or by the environmental variable GRASS_GUI. To start with a previously saved workspace file: @@ -670,7 +670,7 @@

    Starting the GUI from command line

    The user can also start GRASS from the shell command line with the wxGUI -specifying the --gui switch: +specifying the --gui switch:

     grass --gui
    @@ -680,14 +680,14 @@ 

    Starting the GUI from command line

    The GUI can be quit by selecting the 'File > Quit GRASS GIS' menu item which gives options to close only GUI or to quit GRASS GIS entirely if GRASS GIS is running with a command line (a shell in a terminal application). -Exiting the shell (typically by the exit command) ends the GRASS session +Exiting the shell (typically by the exit command) ends the GRASS session including any running GUIs.

    Background information

    wxGUI is a native Graphical User Interface (GUI) for GRASS GIS written in Python -using wxPython library. +using wxPython library.

    SEE ALSO

    diff --git a/gui/wxpython/docs/wxGUI.iscatt.html b/gui/wxpython/docs/wxGUI.iscatt.html index d1601eb1c0d..6e263d2d1fb 100644 --- a/gui/wxpython/docs/wxGUI.iscatt.html +++ b/gui/wxpython/docs/wxGUI.iscatt.html @@ -10,8 +10,8 @@

    DESCRIPTION

    Interactive Scatter Plot Tool allows analyzing group of raster maps. The tool is integrated into Supervised Classification Tool (see the screen shot below). -Also it is possible to launch it from Map Display Window (Analyze map -→ Interactive Scatter Plot Tool). +Also it is possible to launch it from Map Display Window (Analyze map +→ Interactive Scatter Plot Tool). The main idea of the tool is that everything is linked together (scatter plots together and mapwindow with the scatter plots). @@ -39,7 +39,7 @@

    TOOL CONTROLS LAYOUT

    If editing mode is activated (the green polygon tool in toolbar), the areas which were selected -in the scatter plots are highlighted. In the image you can see this area for scatter plot of bands B_6, B_7 inside the ellipse. +in the scatter plots are highlighted. In the image you can see this area for scatter plot of bands B_6, B_7 inside the ellipse. Opacity and color of the selected area can be set in settings. The area corresponds to the active class (in this case clouds). Selected areas are subset of areas, which belongs to the category.

    @@ -71,7 +71,7 @@

    SEE ALSO

    wxGUI, wxGUI components, - r.rescale
    + r.rescale

    diff --git a/gui/wxpython/docs/wxGUI.modules.html b/gui/wxpython/docs/wxGUI.modules.html index 44aeedace61..7e8125f7443 100644 --- a/gui/wxpython/docs/wxGUI.modules.html +++ b/gui/wxpython/docs/wxGUI.modules.html @@ -1,5 +1,10 @@ + +

    KEYWORDS

    + +general, GUI +

    DESCRIPTION

    GRASS GIS functionality is organized into modules, which are standalone programs @@ -76,7 +81,7 @@

    Current working directory

    It can be changed in wxGUI menu Settings - GRASS working environment - Change working directory, -or by typing cd and pressing Enter in the wxGUI Command console. +or by typing cd and pressing Enter in the wxGUI Command console. If the working directory is changed to a directory where the input files are, then it is enough to specify just the name of the file instead of the full path. diff --git a/gui/wxpython/docs/wxGUI.nviz.html b/gui/wxpython/docs/wxGUI.nviz.html index 3c0767f9598..df62a7a8d23 100644 --- a/gui/wxpython/docs/wxGUI.nviz.html +++ b/gui/wxpython/docs/wxGUI.nviz.html @@ -395,10 +395,8 @@

    SEE ALSO

    (especially various video tutorials). -

    - +

    Command-line module m.nviz.image. -

    AUTHORS

    diff --git a/gui/wxpython/docs/wxGUI.toolboxes.html b/gui/wxpython/docs/wxGUI.toolboxes.html index ccbf4f6415c..8679a8eab31 100644 --- a/gui/wxpython/docs/wxGUI.toolboxes.html +++ b/gui/wxpython/docs/wxGUI.toolboxes.html @@ -1,5 +1,10 @@ + +

    KEYWORDS

    + +general, GUI +

    DESCRIPTION

    The Toolboxes is a way to customize items in wxGUI @@ -15,22 +20,22 @@

    DESCRIPTION

    -Toolboxes are configured through two XML files (main_menu.xml and -toolboxes.xml) located in your user home -GRASS directory, subdirectory toolboxes - ($HOME/.grass8/toolboxes/ on UNIX). +Toolboxes are configured through two XML files (main_menu.xml and +toolboxes.xml) located in your user home +GRASS directory, subdirectory toolboxes + ($HOME/.grass8/toolboxes/ on UNIX). Currently, there is no GUI front-end for toolboxes, however only simple editing of text files is needed.

    -

    Brief description of file main_menu.xml

    +

    Brief description of file main_menu.xml

    This file represents the main menu (File, Settings, Raster, ...). By modifying this file you show and hide menu items which are -represented by subtoolbox tag.

    +represented by subtoolbox tag.

    -

    Tag user-toolboxes-list is interpreted as a menu containing a list of all user-defined toolboxes. If not needed it can be removed.

    +

    Tag user-toolboxes-list is interpreted as a menu containing a list of all user-defined toolboxes. If not needed it can be removed.

    -

    Following lines can be copied to .grass8/toolboxes/main_menu.xml +

    Following lines can be copied to .grass8/toolboxes/main_menu.xml and by removing, adding or reordering lines users can change the main menu items. See further examples.

    @@ -52,16 +57,16 @@

    Brief description of file main_menu.xml

    </toolbox>
    -

    Brief description of file toolboxes.xml

    +

    Brief description of file toolboxes.xml

    This file contains structure and description of individual toolboxes. Note that both Raster and e.g. Query raster maps are individual toolboxes although one contains the other. -Tag toolbox contains subtoolbox tags +Tag toolbox contains subtoolbox tags which are defined later in the file. These nested toolboxes are linked -through name attribute.

    +through name attribute.

    -

    Apart from subtoolbox tag, tag toolbox can contain individual items (modules) +

    Apart from subtoolbox tag, tag toolbox can contain individual items (modules) and separators (for visual separation in the menu tree).

    @@ -94,9 +99,9 @@ 

    Brief description of file toolboxes.xml

    To redefine a toolbox (or use it as a template), -copy specific part of file grass7/gui/wxpython/xml/toolboxes.xml +copy specific part of file grass7/gui/wxpython/xml/toolboxes.xml from GRASS installation to a new file in user home -(.grass8/toolboxes/toolboxes.xml) and edit it. +(.grass8/toolboxes/toolboxes.xml) and edit it. Rename this new toolbox.

    EXAMPLES

    @@ -104,7 +109,7 @@

    EXAMPLES

    Hiding menu items

    If we are for example working only with raster data, we can hide menu items Vector and Database. -The file main_menu.xml then contains the following lines +The file main_menu.xml then contains the following lines where we omitted the two toolboxes:

    @@ -129,7 +134,7 @@

    Creating custom toolbox

    In this example we create a new toolbox Favorites containing existing GRASS module and toolbox, custom module created by the user and addon module. -The toolboxes.xml file contains following lines:

    +The toolboxes.xml file contains following lines:

     <?xml version="1.0" encoding="UTF-8"?>
    @@ -157,7 +162,7 @@ 

    Creating custom toolbox

    Optionally, we can add this toolbox to the main menu items. -The main_menu.xml file contains following lines:

    +The main_menu.xml file contains following lines:

     <?xml version="1.0" encoding="UTF-8"?>
    @@ -178,7 +183,7 @@ 

    Creating custom toolbox

    </toolbox>
    -

    If we have user-toolboxes-list tag in the main_menu.xml file, +

    If we have user-toolboxes-list tag in the main_menu.xml file, our custom toolbox will be listed in the automatically added Toolboxes main menu item. The screenshot shows the resulting menu:

    @@ -188,8 +193,8 @@

    Creating custom toolbox

    NOTES

    After the first start of wxGUI with custom toolboxes, -.grass/toolboxes directory will contain file -menudata.xml which is auto-generated and should not be edited.

    +.grass/toolboxes directory will contain file +menudata.xml which is auto-generated and should not be edited.

    SEE ALSO

    diff --git a/gui/wxpython/docs/wxGUI.vnet.html b/gui/wxpython/docs/wxGUI.vnet.html index c1b8a51831b..f6be4446e3f 100644 --- a/gui/wxpython/docs/wxGUI.vnet.html +++ b/gui/wxpython/docs/wxGUI.vnet.html @@ -8,7 +8,7 @@

    KEYWORDS

    DESCRIPTION

    Vector Network Analysis Tool is graphical front-end -for v.net* modules. It allows perform network analysis +for v.net* modules. It allows perform network analysis directly in wxGUI without need to use command line. The tool can be launched from Layer Manager menu Vector → Network analysis → Vector network analysis diff --git a/gui/wxpython/gmodeler/g.gui.gmodeler.html b/gui/wxpython/gmodeler/g.gui.gmodeler.html index dae5aefea52..9a31c63c85c 100644 --- a/gui/wxpython/gmodeler/g.gui.gmodeler.html +++ b/gui/wxpython/gmodeler/g.gui.gmodeler.html @@ -46,7 +46,7 @@

    DESCRIPTION

    Main dialog

    The Graphical Modeler can be launched from the Layer Manager menu -File -> Graphical modeler or from the main +File -> Graphical modeler or from the main toolbar icon. It's also available as stand-alone module g.gui.gmodeler. @@ -152,8 +152,8 @@

    Components of models

    EXAMPLE

    -In this example the zipcodes_wake vector data and the -elev_state_500m raster data from the North Carolina +In this example the zipcodes_wake vector data and the +elev_state_500m raster data from the North Carolina sample dataset (original raster and vector data) are used to calculate average elevation for every @@ -209,7 +209,7 @@

    Defining the workflow in the Graphical Modeler

    Managing model parameters

    All used modules can be parameterized in the model. That causes launching the dialog with input options for model after the model is run. In this example, -input layers (zipcodes_wake vector map and elev_state_500m +input layers (zipcodes_wake vector map and elev_state_500m raster map) are parameterized. Parameterized elements show their diagram border slightly thicker than those of unparameterized elements. @@ -260,7 +260,7 @@

    Managing model parameters

    Managing model properties

    When the user wants to run the model again with the same data or the same names, it is -necessary to use --overwrite option. It will cause maps with identical +necessary to use --overwrite option. It will cause maps with identical names to be overwritten. Instead of setting it for every module separately it is handy to change the Model Property settings globally. This dialog includes also metadata settings, where model name, model description @@ -283,9 +283,9 @@

    Defining variables

    Then it is not necessary to set any parameters for input data. The dialog with variable settings is automatically displayed after the model is run. So, instead of model parameters -(e.g. r.import a v.import, see the Figure +(e.g. r.import a v.import, see the Figure Run model dialog above) -there are Variables. +there are Variables.
    @@ -295,13 +295,13 @@

    Defining variables

    -The key point is the usage of % before the substituting variable and -settings in the Variables dialog. For example, in the case of a model variable -raster that points to an input file path and which value is required to be +The key point is the usage of % before the substituting variable and +settings in the Variables dialog. For example, in the case of a model variable +raster that points to an input file path and which value is required to be used as one of inputs for a particular model, it should be specified in the -Variables dialog with its respective name (raster), data type, +Variables dialog with its respective name (raster), data type, default value and description. Then it should be set in the module dialog as -input called %raster. +input called %raster.

    @@ -320,13 +320,13 @@

    Defining variables

    Saving the model file

    Finally, the model settings can be stored as a GRASS GIS Model file with -*.gxm extension. The advantage is that it can be shared as a +*.gxm extension. The advantage is that it can be shared as a reusable workflow that may be run also by other users with different data.

    For example, this model can later be used to calculate the average precipitation -for every administrative region in Slovakia using the precip raster data from +for every administrative region in Slovakia using the precip raster data from Slovakia precipitation dataset and administration boundaries of Slovakia from Slovak Geoportal @@ -335,7 +335,7 @@

    Saving the model file

    Handling intermediate data

    There can be some data in a model that did not exist before the process and that it is not worth it to maintain after the process executes. They can -be described as being Intermediate by single clicking using the right +be described as being Intermediate by single clicking using the right mouse button, see figure below. All such data should be deleted following model completion. The boundary of intermediate component is dotted line. @@ -348,7 +348,7 @@

    Handling intermediate data

    Using the Script editor

    By using the Script editor in the Graphical Modeler, the user can add Python code and then -run it with Run button or just save it as a Python script *.py. +run it with Run button or just save it as a Python script *.py. The result is shown in the Figure below:
    @@ -388,21 +388,21 @@

    Using the Script editor

    By default GRASS script package API is used -(grass.script.core.run_command()). This can be changed in the +(grass.script.core.run_command()). This can be changed in the settings. Alternatively also PyGRASS API is supported -(grass.pygrass.modules.Module). +(grass.pygrass.modules.Module).

    Defining loops

    In the example below the MODIS MOD13Q1 (NDVI) satellite data products are used in a loop. The original data are stored as coded integer values that need to be multiplied by the -value 0.0001 to represent real ndvi values. Moreover, GRASS GIS -provides a predefined color table called ndvi to represent ndvi data. +value 0.0001 to represent real ndvi values. Moreover, GRASS GIS +provides a predefined color table called ndvi to represent ndvi data. In this case it is not necessary to work with every image separately.
    The Graphical Modeler is an appropriate tool to -process data in an effective way using loop and variables (%map for a -particular MODIS image in mapset and %ndvi for original data name suffix). +process data in an effective way using loop and variables (%map for a +particular MODIS image in mapset and %ndvi for original data name suffix). After the loop component is added to model, it is necessary to define series of maps with required settings of map type, mapset, etc. diff --git a/gui/wxpython/mapswipe/g.gui.mapswipe.html b/gui/wxpython/mapswipe/g.gui.mapswipe.html index ae4fe135a0f..105cf612c74 100644 --- a/gui/wxpython/mapswipe/g.gui.mapswipe.html +++ b/gui/wxpython/mapswipe/g.gui.mapswipe.html @@ -6,7 +6,7 @@

    DESCRIPTION

    which allows the user to interactively compare two raster maps of the same area by revealing different parts of the raster maps. It is useful e.g. for comparing raster maps from different time periods. -Map Swipe can be launched from the menu File -> Map Swipe. +Map Swipe can be launched from the menu File -> Map Swipe.

    Map Swipe allows you to: @@ -32,7 +32,7 @@

    DESCRIPTION

    MODIS image on March 13, 2011, shows a clear view of tsunami flooding along the coastline. Water, black and dark blue in these false-color images, still covers the ground as much as five kilometers (three miles) from the coast. -Source: Earth Observatory/NASA +Source: Earth Observatory/NASA
    diff --git a/gui/wxpython/rlisetup/g.gui.rlisetup.html b/gui/wxpython/rlisetup/g.gui.rlisetup.html index ae5663bb7d6..cda5d236ccd 100644 --- a/gui/wxpython/rlisetup/g.gui.rlisetup.html +++ b/gui/wxpython/rlisetup/g.gui.rlisetup.html @@ -61,14 +61,14 @@

    Usage details

    and other notes (disposition of sample areas etc). --> Configuration files are saved in the folder - C:\Users\userxy\AppData\Roaming\GRASS8\r.li\ (MS-Windows) or - $HOME/.r.li/ (GNU/Linux) (the file name can be + C:\Users\userxy\AppData\Roaming\GRASS8\r.li\ (MS-Windows) or + $HOME/.r.li/ (GNU/Linux) (the file name can be defined by the user). The output or an analysis can either be a new raster map (in case of using a "moving window" analysis) or be an ASCII text file (when not performing a "moving window" analysis) containing the result. Such text file will be saved in the folder - C:\Users\userxy\AppData\Roaming\GRASS8\r.li\output\ - (MS-Windows) or $HOME/.grass8/r.li/output/ (GNU/Linux). + C:\Users\userxy\AppData\Roaming\GRASS8\r.li\output\ + (MS-Windows) or $HOME/.grass8/r.li/output/ (GNU/Linux).
    All dimensions are percentages of raster rows or columns. @@ -315,7 +315,7 @@

    Whole region analysis

    r.li.shannon input=lsat7_2000_40 conf=whole_region output=lsat7_2000_40_shannon
    -The result is the new text file "forests_p_dens7" (stored in folder $HOME/.r.li/output/. +The result is the new text file "forests_p_dens7" (stored in folder $HOME/.r.li/output/.
    See the respective modules for further examples. @@ -323,7 +323,7 @@

    REFERENCES

    McGarigal, K., and B. J. Marks. 1995. FRAGSTATS: spatial pattern analysis program for quantifying landscape structure. USDA For. Serv. -Gen. Tech. Rep. PNW-351. (PDF) +Gen. Tech. Rep. PNW-351. (PDF)

    SEE ALSO

    diff --git a/gui/wxpython/vdigit/g.gui.vdigit.html b/gui/wxpython/vdigit/g.gui.vdigit.html index d02064b997f..766c0209270 100644 --- a/gui/wxpython/vdigit/g.gui.vdigit.html +++ b/gui/wxpython/vdigit/g.gui.vdigit.html @@ -161,7 +161,7 @@

    DIGITIZER TOOLBAR

  • Break selected lines/boundaries at intersection
    Split given vector line or boundary into two lines on given position (based on v.clean, - tool=break).
  • + tool=break).
  • Connect two selected lines/boundaries
    Connect selected lines or boundaries, the first given line is connected to the diff --git a/imagery/i.aster.toar/i.aster.toar.html b/imagery/i.aster.toar/i.aster.toar.html index 793d0834447..aaaf287e200 100644 --- a/imagery/i.aster.toar/i.aster.toar.html +++ b/imagery/i.aster.toar/i.aster.toar.html @@ -38,7 +38,7 @@

    SEE ALSO

    ASTER sensor data download: -ASTER: Advanced Spaceborne Thermal Emission and Reflection Radiometer +ASTER: Advanced Spaceborne Thermal Emission and Reflection Radiometer

    AUTHOR

    diff --git a/imagery/i.atcorr/i.atcorr.html b/imagery/i.atcorr/i.atcorr.html index bf122963aba..8365c6294cf 100644 --- a/imagery/i.atcorr/i.atcorr.html +++ b/imagery/i.atcorr/i.atcorr.html @@ -849,14 +849,14 @@

    Atmospheric correction of a Sentinel-2 band

    1. Geometrical conditions -

      For Sentinel-2A, the geometrical conditions take the value 25 and for -Sentinel-2B, the geometrical conditions value is 26 (See table A). +

      For Sentinel-2A, the geometrical conditions take the value 25 and for +Sentinel-2B, the geometrical conditions value is 26 (See table A). Our scene comes from the Sentinel-2A mission (the file name begins with S2A_...).

    2. Day, time, longitude and latitude of measurement

      Day and time of the measurement are hidden in the filename (i.e., the -second datum in the file name with format YYYYMMDDTHHMMSS), +second datum in the file name with format YYYYMMDDTHHMMSS), and are also noted in the metadata file, which is included in the downloaded scene (file with .xml extension). Our sample scene was taken on October 28th (20161028) at 15:54:02 (155402). Note @@ -873,20 +873,20 @@

      Atmospheric correction of a Sentinel-2 band

      The longitude and latitude of the centre are stored in ll_clon -and ll_clat. In our case, ll_clon=-78.691 and -ll_clat=35.749. +and ll_clat. In our case, ll_clon=-78.691 and +ll_clat=35.749.

    3. Atmospheric model

      We can choose between various atmospheric models as defined at the -beginning of this manual. For North Carolina, we can choose 2 - -midlatitude summer. +beginning of this manual. For North Carolina, we can choose 2 - +midlatitude summer.

    4. Aerosol model

      We can also choose between various aerosol models as defined at the -beginning of this manual. For North Carolina, we can choose 1 - -continental model. +beginning of this manual. For North Carolina, we can choose 1 - +continental model.

    5. Visibility or Aerosol Optical Depth @@ -909,13 +909,13 @@

      Atmospheric correction of a Sentinel-2 band

      The mean elevation is stored in mean. In our case, -mean=110. In the 6S file it will be displayed in [-km], -i.e., -0.110. +mean=110. In the 6S file it will be displayed in [-km], +i.e., -0.110.

    6. Sensor height

      Since the sensor is on board a satellite, the sensor height will be -set to -1000. +set to -1000.

    7. Sensor band @@ -926,7 +926,7 @@

      Atmospheric correction of a Sentinel-2 band

      Finally, here is what the 6S file would look like for Band 02 of our scene. In order to use it in the i.atcorr module, we can save -it in a text file, for example params_B02.txt. +it in a text file, for example params_B02.txt.

       25
       10 28 15.901 -78.691 35.749
      @@ -947,7 +947,7 @@ 

      Atmospheric correction of a Sentinel-2 band

    8. input = raster band to be processed,
    9. parameters = path to 6S file created in the previous step (we could also enter the values directly),
    10. output = name for the output corrected raster band,
    11. -
    12. range = from 1 to the QUANTIFICATION_VALUE stored in the metadata file. It is 10000 for both Sentinel-2A and Sentinel-2B.
    13. +
    14. range = from 1 to the QUANTIFICATION_VALUE stored in the metadata file. It is 10000 for both Sentinel-2A and Sentinel-2B.
    15. rescale = the output range of values for the corrected bands. This is up to the user to choose, for example: 0-255, 0-1, 1-10000.
    16. If the data is available, the following parameters can be specified @@ -1007,7 +1007,7 @@

      Atmospheric correction of a Landsat-7 band

      If the overpass time is unknown, use the -NASA LaRC Satellite Overpass Predictor. +NASA LaRC Satellite Overpass Predictor.

      Convert digital numbers (DN) to radiance at top-of-atmosphere (TOA)

      @@ -1039,7 +1039,7 @@

      Convert digital numbers (DN) to radiance at top-of-atmosphere (TOA)

      and maximal DN value, and they are reported in the metadata file of each image. High gain or low gain is also reported in the metadata file of each satellite image. For Landsat ETM+, the minimal DN value (QCALMIN) is 1 -(see Landsat handbook, chapter 11), +(see Landsat handbook, chapter 11), and the maximal DN value (QCALMAX) is 255. QCAL is the DN value for every separate pixel in the Landsat image.

      We extract the coefficients and apply them in order to obtain the @@ -1072,7 +1072,7 @@

      Create the parameters file for i.atcorr

      defining geometrical and atmospherical conditions of the satellite overpass. -Here we create a control file icnd_lsat4.txt for band 4 (NIR), +Here we create a control file icnd_lsat4.txt for band 4 (NIR), based on metadata. For the overpass time, we need to define decimal hours: 10:42:07 NC local time = 10.70 decimal hours (decimal minutes: 42 * 100 / 60) which is 15.70 GMT. @@ -1098,7 +1098,7 @@

      Create the parameters file for i.atcorr

      Note that the altitude value from 'icnd_lsat4.txt' file is read at the beginning to compute the initial transform. Therefore, it is necessary to provide a value that might be the mean value of the elevation model -(r.univar elevation). For the atmospheric correction per se, the +(r.univar elevation). For the atmospheric correction per se, the elevation values from the raster map are used.

      Note that the process is computationally intensive. Note also, that i.atcorr reports solar elevation angle above horizon rather @@ -1125,7 +1125,7 @@

      REFERENCES

    17. 6S Manual: PDF1, PDF2, and PDF3
    18. -
    19. RapidEye sensors have been provided by RapidEye AG, Germany
    20. +
    21. RapidEye sensors have been provided by RapidEye AG, Germany
    22. Barsi, J.A., Markham, B.L. and Pedelty, J.A., 2011, The operational land imager: spectral response and spectral uniformity., Proc. SPIE 8153, 81530G; doi:10.1117/12.895438
    23. @@ -1164,10 +1164,10 @@

      AUTHORS

      RapidEye sensors addition 11/2010:
      Peter Löwe, Anne Ghisla -

      VGT1 and VGT2 sensors addition from 6SV-1.1 sources, addition 07/2011: +

      VGT1 and VGT2 sensors addition from 6SV-1.1 sources, addition 07/2011:
      Alfredo Alessandrini, Anne Ghisla -

      Added Landsat 8 from NASA sources, addition 05/2014: +

      Added Landsat 8 from NASA sources, addition 05/2014:
      Nikolaos Ves

      Geoeye1 addition 7/2015: diff --git a/imagery/i.eb.netrad/i.eb.netrad.html b/imagery/i.eb.netrad/i.eb.netrad.html index c6cba3ad484..d4d96b7d966 100644 --- a/imagery/i.eb.netrad/i.eb.netrad.html +++ b/imagery/i.eb.netrad/i.eb.netrad.html @@ -14,7 +14,7 @@

      NOTES

      In the old methods, dT was taken as flat images (dT=5.0), if you don't have a dT map from ground data, you would want to try something in this line, this is to calculate atmospherical energy balance. In the same way, a standard tsw is used -in those equations. Refer to r_net.c for that and for other non-used equations, +in those equations. Refer to r_net.c for that and for other non-used equations, but stored in there for further research convenience.

      TODO

      diff --git a/imagery/i.landsat.acca/i.landsat.acca.html b/imagery/i.landsat.acca/i.landsat.acca.html index 5e594389762..41f69905706 100644 --- a/imagery/i.landsat.acca/i.landsat.acca.html +++ b/imagery/i.landsat.acca/i.landsat.acca.html @@ -22,9 +22,9 @@

      EXAMPLES

      Run the standard ACCA algorithm with filling of small cloud holes (the -f flag): With per-band reflectance raster maps -named 226_62.toar.1, 226_62.toar.2, [...] and LANDSAT-7 -thermal band 226_62.toar.61, outputting to a new raster map -named 226_62.acca: +named 226_62.toar.1, 226_62.toar.2, ... and LANDSAT-7 +thermal band 226_62.toar.61, outputting to a new raster map +named 226_62.acca:
       i.landsat.toar sensor=7 gain=HHHLHLHHL date=2003-04-07 \
      @@ -35,7 +35,7 @@ 

      EXAMPLES

      REFERENCES

      -
        +
        • Irish R.R., Barker J.L., Goward S.N., and Arvidson T., 2006. Characterization of the Landsat-7 ETM+ Automated Cloud-Cover Assessment (ACCA) Algorithm. Photogrammetric Engineering and Remote @@ -45,7 +45,7 @@

          REFERENCES

          S.S. Shen and M.R. Descour (Eds.): Algorithms for Multispectral, Hyperspectral, and Ultraspectral Imagery VI. Proceedings of SPIE, 4049: 348-355.
        • -
      +

      SEE ALSO

      diff --git a/imagery/i.landsat.toar/i.landsat.toar.html b/imagery/i.landsat.toar/i.landsat.toar.html index 4a792c26274..3305c80b7de 100644 --- a/imagery/i.landsat.toar/i.landsat.toar.html +++ b/imagery/i.landsat.toar/i.landsat.toar.html @@ -243,7 +243,7 @@

      DOS1 example

      product_date=2004-02-12 gain=HHHLHLHHL
      -The resulting Landsat channels are named lsat7_2002_toar.1 .. lsat7_2002_toar.8. +The resulting Landsat channels are named lsat7_2002_toar.1 .. lsat7_2002_toar.8.

      REFERENCES

      diff --git a/imagery/i.modis.qc/i.modis.qc.html b/imagery/i.modis.qc/i.modis.qc.html index 3147a006bd1..8f96364a937 100644 --- a/imagery/i.modis.qc/i.modis.qc.html +++ b/imagery/i.modis.qc/i.modis.qc.html @@ -498,12 +498,12 @@

      NOTES

      MOD11A2 quality control (QC) bands do not have a FillValue (No-data) according to MODIS Land Products site. -However, the metadata of the QC bands (i.e.: gdalinfo QC_band) shows No-data=0. +However, the metadata of the QC bands (i.e.: gdalinfo QC_band) shows No-data=0. This value is then transformed into GRASS NULLs when data is imported through r.in.gdal. Applying i.modis.qc on those QC bands will not give the expected range of values in the different QC bits. Therefore, before using i.modis.qc, the user needs to set the NULL value in QC bands -back to zero (i.e.: r.null map=QC_band null=0) or just edit the metadata with GDAL +back to zero (i.e.: r.null map=QC_band null=0) or just edit the metadata with GDAL utilities before importing into GRASS GIS. This is a known issue for MOD11A2 (8-day LST product), but other MODIS products might be affected as well. diff --git a/imagery/i.ortho.photo/i.ortho.elev/i.ortho.elev.html b/imagery/i.ortho.photo/i.ortho.elev/i.ortho.elev.html index ab5b66eaa38..21fedea7e7f 100644 --- a/imagery/i.ortho.photo/i.ortho.elev/i.ortho.elev.html +++ b/imagery/i.ortho.photo/i.ortho.elev/i.ortho.elev.html @@ -1,6 +1,14 @@

      DESCRIPTION

      -i.ortho.elev is used to select or modify the target elevation model. +i.ortho.elev is used to select or modify the target elevation +model for orthorectification of imagery. +This elevation model is essential for both the computation of photo-to-target +parameters and for the actual orthorectification of imagery group files. +The elevation model selected should cover the entire area of the image +group to be orthorectified. + +Optionally, scaled elevation data can be converted to real elevation values +specifying a mathematical expression.

      SEE ALSO

      diff --git a/imagery/i.ortho.photo/i.ortho.transform/i.ortho.transform.html b/imagery/i.ortho.photo/i.ortho.transform/i.ortho.transform.html index 4bb60a9c633..83c7f32f65c 100644 --- a/imagery/i.ortho.photo/i.ortho.transform/i.ortho.transform.html +++ b/imagery/i.ortho.photo/i.ortho.transform/i.ortho.transform.html @@ -5,7 +5,7 @@

      DESCRIPTION

      If coordinates are given with the input file option or fed from -stdin, both the input and the output format is "x y z" with one +stdin, both the input and the output format is "x y z" with one coordinate pair per line. Reverse transform is performed with the -r flag. diff --git a/imagery/i.rectify/i.rectify.html b/imagery/i.rectify/i.rectify.html index b8c21b0b7ef..6bfc49dd4c1 100644 --- a/imagery/i.rectify/i.rectify.html +++ b/imagery/i.rectify/i.rectify.html @@ -11,8 +11,8 @@

      DESCRIPTION

      are first, second, and third order polynomial and thin plate spline. Thin plate spline is recommended for ungeoreferenced satellite imagery where ground control points (GCPs) are included. Examples are -NOAA/AVHRR -and ENVISAT +NOAA/AVHRR +and ENVISAT imagery which include throusands of GCPs.

      @@ -161,9 +161,9 @@

      Resampling method

      NOTES

      If i.rectify starts normally but after some time the following text is seen: -
      +
      ERROR: Error writing segment file -

      +

      the user may try the -c flag or the module needs more free space on the hard drive. diff --git a/imagery/i.segment/i.segment.html b/imagery/i.segment/i.segment.html index 43d5e5fde68..74de8f9177a 100644 --- a/imagery/i.segment/i.segment.html +++ b/imagery/i.segment/i.segment.html @@ -1,5 +1,8 @@

      DESCRIPTION

      +i.segment identifies segments (objects) from +imagery data. +

      Image segmentation or object recognition is the process of grouping similar pixels into unique segments, also referred to as objects. Boundary and region based algorithms are described in the literature, @@ -64,10 +67,10 @@

      Calculation Formulas

      In future, the distance calculation will also take into account the shape characteristics of the segments. The normal distances are then multiplied by the input radiometric weight. Next an additional -contribution is added: (1-radioweight) * {smoothness * smoothness -weight + compactness * (1-smoothness weight)}, -where compactness = Perimeter Length / sqrt( Area ) -and smoothness = Perimeter Length / Bounding Box. The +contribution is added: (1-radioweight) * {smoothness * smoothness +weight + compactness * (1-smoothness weight)}, +where compactness = Perimeter Length / sqrt( Area ) +and smoothness = Perimeter Length / Bounding Box. The perimeter length is estimated as the number of pixel sides the segment has. @@ -175,7 +178,7 @@

      Segmentation of RGB orthophoto

      -The output ortho_segs_l4 with threshold=0.2 still has +The output ortho_segs_l4 with threshold=0.2 still has too many segments, but the output with threshold=0.3 has too few segments. A threshold value of 0.25 seems to be a good choice. There is also some noise in the image, lets next force all segments smaller diff --git a/imagery/i.svm.predict/i.svm.predict.html b/imagery/i.svm.predict/i.svm.predict.html index 3ddf4f33879..f0dbcf511cb 100644 --- a/imagery/i.svm.predict/i.svm.predict.html +++ b/imagery/i.svm.predict/i.svm.predict.html @@ -72,11 +72,6 @@

      REFERENCES

      -

      AUTHORS

      +

      AUTHOR

      Maris Nartiss, University of Latvia. - - diff --git a/imagery/i.svm.train/i.svm.train.html b/imagery/i.svm.train/i.svm.train.html index e25397d7ca6..d0ea9b8ba83 100644 --- a/imagery/i.svm.train/i.svm.train.html +++ b/imagery/i.svm.train/i.svm.train.html @@ -101,11 +101,6 @@

      REFERENCES

      -

      AUTHORS

      +

      AUTHOR

      Maris Nartiss, University of Latvia. - - diff --git a/imagery/i.vi/i.vi.html b/imagery/i.vi/i.vi.html index 38786a22abc..0ed45b41d2d 100644 --- a/imagery/i.vi/i.vi.html +++ b/imagery/i.vi/i.vi.html @@ -517,7 +517,7 @@

      Preparation: DN to reflectance

      product_date=2004-02-12 gain=HHHLHLHHL -The resulting Landsat channels are names lsat7_2002_toar.1 .. lsat7_2002_toar.8. +The resulting Landsat channels are names lsat7_2002_toar.1 .. lsat7_2002_toar.8.

      Calculation of NDVI

      @@ -578,7 +578,7 @@

      Calculation of GARI

      NOTES

      -Originally from kepler.gps.caltech.edu (FAQ): +Originally from kepler.gps.caltech.edu (FAQ):

      A FAQ on Vegetation in Remote Sensing
      Written by Terrill W. Ray, Div. of Geological and Planetary Sciences, diff --git a/imagery/imageryintro.html b/imagery/imageryintro.html index a9c93696632..deda9a28a11 100644 --- a/imagery/imageryintro.html +++ b/imagery/imageryintro.html @@ -30,9 +30,9 @@

      Image processing in general

      by the sensor of the satellite platform is encoded in 8 or more bits. This energy is called radiance-at-sensor. To obtain physical values from DNs, satellite image providers use a linear transform -equation (y = a * x + b) to encode the radiance-at-sensor +equation (y = a * x + b) to encode the radiance-at-sensor in 8 to 16 bits. DNs can be turned back into physical values by -applying the reverse formula (x = (y - b) / a). +applying the reverse formula (x = (y - b) / a).

      The GRASS GIS module i.landsat.toar easily transforms Landsat DN to radiance-at-sensor (top of atmosphere, @@ -171,7 +171,7 @@

      Calculation of vegetation indices

      status with NDVI, the Red and the Near Infrared channels (NIR) are taken as used as input for simple map algebra in the GRASS command r.mapcalc -(ndvi = 1.0 * (nir - red)/(nir + red)). With +(ndvi = 1.0 * (nir - red)/(nir + red)). With r.colors an optimized "ndvi" color table can be assigned afterward. Also other vegetation indices can be generated likewise. diff --git a/lib/cairodriver/cairodriver.html b/lib/cairodriver/cairodriver.html index 22f8e1264c8..2e294af5edd 100644 --- a/lib/cairodriver/cairodriver.html +++ b/lib/cairodriver/cairodriver.html @@ -7,7 +7,7 @@

      DESCRIPTION

      The Cairo driver generates PNG, BMP, PPM, PS, PDF or SVG images by GRASS display commands, using the -Cairo graphics library. +Cairo graphics library. The image format is selected from the extension of the output file. The Cairo driver is used for GRASS display commands by default if @@ -44,11 +44,11 @@

      Environment variables

    24. GRASS_RENDER_ANTIALIAS
      can be default, none, gray, or subpixel, corresponding to - cairo_antialias_t + cairo_antialias_t
    25. GRASS_RENDER_FILE=filename
      the name and format of the resulting image file, default is - map.png.
      + map.png.
      The image format is determined from the file extension.
      Supported bitmap formats:
        @@ -67,12 +67,12 @@

        Environment variables

        the Cairo library that GRASS was built with.)
      • GRASS_RENDER_FILE_READ
        - if TRUE, the Cairo driver will initialize the image from + if TRUE, the Cairo driver will initialize the image from the contents of GRASS_RENDER_FILE.
        (Note: This is only supported for bitmap formats)
      • GRASS_RENDER_FILE_MAPPED
        - if TRUE, the Cairo driver will map GRASS_RENDER_FILE as its framebuffer, + if TRUE, the Cairo driver will map GRASS_RENDER_FILE as its framebuffer, rather than using memory.
        (Note: This only works with BMP files.)
      • @@ -152,13 +152,13 @@

        NOTES

        The driver is still in development. Enable it by specifying --with-cairo when configuring GRASS. This requires a reasonably recent version of the Cairo libraries -and a working pkg-config. +and a working pkg-config.

        Antialiasing is enabled by default for bitmap formats. There is currently no way of disabling this.

        The resolution of the output images is defined by current region -extents. Use g.region -p to get the number of rows and cols +extents. Use g.region -p to get the number of rows and cols and use the environment variables to set the image size. If you would like a larger image, multiply both rows and cols by the same whole number to preserve the aspect ratio. diff --git a/lib/db/sqlp/sql.html b/lib/db/sqlp/sql.html index a2dc32da2a5..1fd070b7d3c 100644 --- a/lib/db/sqlp/sql.html +++ b/lib/db/sqlp/sql.html @@ -38,10 +38,10 @@

        Database drivers

        https://postgresql.org/ mysqlData storage in MySQL RDBMS -https://www.mysql.org/ +https://www.mysql.com/ odbcData storage via UnixODBC (PostgreSQL, Oracle, etc.) https://www.unixodbc.org/ @@ -69,8 +69,8 @@

        Database table name restrictions

      • Attempts to use a reserved SQL word (depends on database backend) as column or table name will cause a "SQL syntax error".
      • -
      • An error message such as "dbmi: Protocol - error" either indicates an invalid column name or an +
      • An error message such as "dbmi: Protocol + error" either indicates an invalid column name or an unsupported column type (then the GRASS SQL parser needs to be extended).
      • DBF column names are limited to 10 characters (DBF API definition).
      • @@ -151,7 +151,7 @@

        Example of null handling

        Update of attributes

        -Examples of complex expressions in updates (using v.db.* +Examples of complex expressions in updates (using v.db.* modules):
        @@ -164,7 +164,7 @@ 

        Update of attributes

        -Examples of more complex expressions in updates (using db.* +Examples of more complex expressions in updates (using db.* modules):

        diff --git a/lib/htmldriver/htmldriver.html b/lib/htmldriver/htmldriver.html
        index 81036978dc2..a8ff2f07b43 100644
        --- a/lib/htmldriver/htmldriver.html
        +++ b/lib/htmldriver/htmldriver.html
        @@ -53,11 +53,11 @@ 

        Environment variables

      • GRASS_RENDER_HTMLTYPE=type
        type of image map to create (default is CLIENT):
        -
        CLIENT    Netscape/IE client-side +
        CLIENT    Netscape/IE client-side image map (NAME="map").
        -
        APACHE    Apache/NCSA server-side image +
        APACHE    Apache/NCSA server-side image map.
        -
        RAW +
        RAW         Raw url and polygon vertices (url  x1  y1  x2  y2  .....), suitable for conversion to CERN server format, or @@ -66,7 +66,7 @@

        Environment variables

      • GRASS_RENDER_FILE=filename
        specifies the resulting file to store the html image map, default - is htmlmap. Files without absolute path names are written + is htmlmap. Files without absolute path names are written in the current directory where the driver was started.
        Any existing file of the same name is overwritten without @@ -75,21 +75,21 @@

        Environment variables

      • GRASS_RENDER_HTMLMINDIST=n
        specifies the minimum distance in pixels that a point must change from the previous point to keep in the list of vertices for a - polygon. The default is 2, which means that a point's x + polygon. The default is 2, which means that a point's x and y difference from the previous point must change by a number of pixels greater than this value. This parameter helps to eliminate closely spaced points.
      • GRASS_RENDER_HTMLMINBBOX=n
        specifies the minimum bounding box dimensions to record a polygon - as a clickable area. The default is 2, which means that a + as a clickable area. The default is 2, which means that a polygon with a bounding box of less than this value is not included. This parameter helps to eliminate polygons than are a point or line.
      • GRASS_RENDER_HTMLMAXPOINTS=n
        specifies the maximum number of vertices included in a polygon's - clickable area. The default is 99. Some browsers can only + clickable area. The default is 99. Some browsers can only accommodate polygons of 100 vertices or less. The HTMLMAP driver automatically ensures that a polygon is closed by making the last point the same as the first point.
      • @@ -172,7 +172,7 @@

        NOTES

        If you create an HTML file with two or more images and image maps, you will need to edit the map names. The HTML driver creates its map with the name -map. A small sed script can easily change the map name: +map. A small sed script can easily change the map name:

         sed -e 's/NAME="map"/NAME="foomap"/' < htmlmap > foomap.html
        diff --git a/lib/init/grass.html b/lib/init/grass.html
        index 736be547716..18747b196ae 100644
        --- a/lib/init/grass.html
        +++ b/lib/init/grass.html
        @@ -72,7 +72,7 @@ 

        Parameters:

        GISDBASE
        Initial database directory which should be a fully qualified path - (e.g., /usr/local/share/grassdata) + (e.g., /usr/local/share/grassdata)
        PROJECT
        Initial project directory which is a subdirectory of GISDBASE @@ -128,15 +128,15 @@

        Config flag

        version parameters, with the options:
          -
        • arch: system architecture (e.g., x86_64-pc-linux-gnu)
        • -
        • build: (e.g., ./configure --with-cxx --enable-largefile --with-proj [...])
        • -
        • compiler: (e.g., gcc)
        • -
        • date: (e.g., 2024-04-10T11:44:54+00:00)
        • -
        • path: (e.g., /usr/lib64/grass)
        • -
        • python_path: (e.g., /usr/lib64/grass/etc/python)
        • -
        • revision: (e.g., 745ee7ec9)
        • -
        • svn_revision: (e.g., 062bffc8)
        • -
        • version: (e.g., 8.4.0)
        • +
        • arch: system architecture (e.g., x86_64-pc-linux-gnu)
        • +
        • build: (e.g., ./configure --with-cxx --enable-largefile --with-proj [...])
        • +
        • compiler: (e.g., gcc)
        • +
        • date: (e.g., 2024-04-10T11:44:54+00:00)
        • +
        • path: (e.g., /usr/lib64/grass)
        • +
        • python_path: (e.g., /usr/lib64/grass/etc/python)
        • +
        • revision: (e.g., 745ee7ec9)
        • +
        • svn_revision: (e.g., 062bffc8)
        • +
        • version: (e.g., 8.4.0)

        SAMPLE DATA

        @@ -157,7 +157,7 @@

        ENVIRONMENT VARIABLES

        bother with these.

        In addition to these shell environment variables GRASS maintains a -number of GIS environment variables in the $HOME/.grass8/rc +number of GIS environment variables in the $HOME/.grass8/rc file. User changes to this file will be read during the next startup of GRASS. If this file becomes corrupted the user may edit it by hand or remove it to start afresh. See the list @@ -167,7 +167,7 @@

        ENVIRONMENT VARIABLES

        Note that you will need to set these variables using the appropriate method required for the UNIX shell that you use (e.g. in a -Bash shell you must export the variables for them to +Bash shell you must export the variables for them to propagate).

        User Interface Environment Variable

        @@ -176,8 +176,8 @@

        User Interface Environment Variable

        environment variable called GRASS_GUI which indicates the type of user interface for GRASS to use. If this variable is not set when grass is run, then it will be created and then saved -in the $HOME/.grass8/rc file for the next time GRASS is -run. It can be set to text, gtext or gui. +in the $HOME/.grass8/rc file for the next time GRASS is +run. It can be set to text, gtext or gui.

        There is an order of precedence in the way grass determines the user interface to use. The following is the hierarchy @@ -185,19 +185,19 @@

        User Interface Environment Variable

        1. Command line argument
        2. Environment variable GRASS_GUI
        3. -
        4. Value set in $HOME/.grass8/rc (GUI)
        5. -
        6. Default value - gui
        7. +
        8. Value set in $HOME/.grass8/rc (GUI)
        9. +
        10. Default value - gui

        Python Environment Variables

        If you choose to use wxGUI interface, then the GRASS_PYTHON environment variable can be used to -override your system default python command. +override your system default python command.

        Suppose for example your system has Python 3.6 installed and you install a personal version of the Python 3.8 binaries -under $HOME/bin. You can use the above variables to have +under $HOME/bin. You can use the above variables to have GRASS use the Python 3.8 binaries instead.

        @@ -233,8 +233,8 @@ 

        Addon Base for Extra Local GRASS Addon Modules

        path environment.

        If not defined by user, this variable is set by GRASS startup program -to $HOME/.grass8/addons on GNU/Linux -and %APPDATA%\Roaming\GRASS8\addons on MS Windows. +to $HOME/.grass8/addons on GNU/Linux +and %APPDATA%\Roaming\GRASS8\addons on MS Windows.

        HTML Browser Variable

        @@ -455,20 +455,20 @@

        Using temporary mapset

        Troubleshooting

        -Importantly, to avoid an "[Errno 8] Exec format error" there must be a +Importantly, to avoid an "[Errno 8] Exec format error" there must be a shebang line at the top of -the script (like #!/bin/sh, #!/bin/bash, or #!/usr/bin/env python3) +the script (like #!/bin/sh, #!/bin/bash, or #!/usr/bin/env python3) indicating which interpreter to be used for the script. The script file must have its executable bit set.

        CAVEAT

        If you start GRASS using the wxGUI -interface you must have a python command in your $PATH +interface you must have a python command in your $PATH variable. That is, the command must be named -python and not something like python3.6. Rarely some -Python installations do not create a python command. In these -cases you can override python by GRASS_PYTHON environmental +python and not something like python3.6. Rarely some +Python installations do not create a python command. In these +cases you can override python by GRASS_PYTHON environmental variable.

        Furthermore, if you have more than one version of Python installed, diff --git a/lib/init/variables.html b/lib/init/variables.html index b7704c5537b..4bd369abf4b 100644 --- a/lib/init/variables.html +++ b/lib/init/variables.html @@ -1,5 +1,11 @@ -There are two types of variables: + +A variable in scripting is a symbolic name that holds data which can be +used and modified during script execution. Variables allow scripts to +store and manipulate values dynamically, making them more flexible and +reusable. + +In GRASS GIS, there are two types of variables:

        • shell environment variables,
        • @@ -42,18 +48,18 @@

          Setting shell environment variables

        • To get personal BASH shell definitions (aliases, color listing option, ...) into GRASS, store them in:
          -$HOME/.grass8/bashrc
        • +$HOME/.grass8/bashrc
        • To get personal CSH shell definitions (aliases, color listing option, ...) into GRASS, store them in:
          -$HOME/.grass8/cshrc
        • +$HOME/.grass8/cshrc

        Setting GRASS gisenv variables

        Use g.gisenv within GRASS. This permanently -predefines GRASS variables in the $HOME/.grass8/rc file (Linux, Mac, BSD, ...) -or in the %APPDATA%\Roaming\GRASS8\rc file (Windows) after the +predefines GRASS variables in the $HOME/.grass8/rc file (Linux, Mac, BSD, ...) +or in the %APPDATA%\Roaming\GRASS8\rc file (Windows) after the current GRASS session is closed.

        Usage: @@ -83,7 +89,7 @@

        List of selected (GRASS related) shell environment variables

        startup script.
        GISRC
        -
        name of $HOME/.grass8/rc file. Defines the system wide value +
        name of $HOME/.grass8/rc file. Defines the system wide value when starting a GRASS session. Within a GRASS session, a temporary copy of this file will be used.
        @@ -95,10 +101,10 @@

        List of selected (GRASS related) shell environment variables

        GRASS_ADDON_BASE
        [grass startup script]
        allows specifying additional GISBASE for local GRASS modules (normally installed as GRASS Addons - by g.extension module) extra to standard + by g.extension module) extra to standard distribution. The default on GNU/Linux - is $HOME/.grass8/addons, on MS - Windows %APPDATA%\Roaming\GRASS8\addons.
        + is $HOME/.grass8/addons, on MS + Windows %APPDATA%\Roaming\GRASS8\addons.
  • GRASS_ADDON_ETC
    [libgis, g.findetc]
    @@ -108,9 +114,9 @@

    List of selected (GRASS related) shell environment variables

    GRASS_COMPATIBILITY_TEST
    [libgis]
    By default it is not possible to run C modules with a libgis that has a - different GIS_H_VERSION, the compatibility test will exit with a + different GIS_H_VERSION, the compatibility test will exit with a fatal error. Setting this variable to 0 (zero) with - GRASS_COMPATIBILITY_TEST=0 allows the test to be passed with a + GRASS_COMPATIBILITY_TEST=0 allows the test to be passed with a warning.
    GRASS_COMPRESSOR
    @@ -119,7 +125,7 @@

    List of selected (GRASS related) shell environment variables

    environment variable GRASS_COMPRESSOR. Supported methods are RLE, ZLIB, LZ4, BZIP2, and ZSTD. The default is ZSTD if available, otherwise ZLIB, which can be changed with e.g. - GRASS_COMPRESSOR=ZSTD, granted that GRASS has been + GRASS_COMPRESSOR=ZSTD, granted that GRASS has been compiled with the requested compressor. Compressors that are always available are RLE, ZLIB, and LZ4. The compressors BZIP2 and ZSTD must be enabled when configuring GRASS for compilation.
    @@ -128,8 +134,8 @@

    List of selected (GRASS related) shell environment variables

    [grass startup script]
    specifies root path for GRASS configuration directory. If not specified, the default placement of the - configuration directory is used: $HOME on GNU/Linux, - $HOME/Library on Mac OS X, and %APPDATA% on MS Windows.
    + configuration directory is used: $HOME on GNU/Linux, + $HOME/Library on Mac OS X, and %APPDATA% on MS Windows.
    GRASS_DB_ENCODING
    [various modules, wxGUI]
    @@ -139,7 +145,7 @@

    List of selected (GRASS related) shell environment variables

    If set, GIS_ERROR_LOG should be the absolute path to the log file (a relative path will be interpreted relative to the process' cwd, not the cwd at the point the user set the variable). If not - set, $HOME/GIS_ERROR_LOG is used instead. The file will + set, $HOME/GIS_ERROR_LOG is used instead. The file will only be used if it already exists.
    GRASS_ERROR_MAIL
    @@ -149,7 +155,7 @@

    List of selected (GRASS related) shell environment variables

    GRASS_FONT
    [display drivers]
    specifies the font as either the name of a font from - $GISBASE/etc/fontcap (or alternative fontcap file + $GISBASE/etc/fontcap (or alternative fontcap file specified by GRASS_FONT_CAP), or alternatively the full path to a FreeType font file.
    @@ -160,7 +166,7 @@

    List of selected (GRASS related) shell environment variables

    GRASS_FONT_CAP
    [g.mkfontcap, d.font, display drivers]
    - specifies an alternative location (to $GISBASE/etc/fontcap) for + specifies an alternative location (to $GISBASE/etc/fontcap) for the font configuration file.
    GRASS_FULL_OPTION_NAMES
    @@ -169,10 +175,10 @@

    List of selected (GRASS related) shell environment variables

    a found string is not an exact match for the given string.
    GRASS_GUI
    -
    either text (text user interface), gtext (text - user interface with GUI welcome screen), or gui (graphical +
    either text (text user interface), gtext (text + user interface with GUI welcome screen), or gui (graphical user interface) to define non-/graphical startup. Can also specify - the name of the GUI to use, e.g. wxpython + the name of the GUI to use, e.g. wxpython (wxGUI). Also exists as a GRASS gisenv variable (see below). If this shell variable exists at GRASS startup, it will determine the GUI used. If it is not defined @@ -198,11 +204,11 @@

    List of selected (GRASS related) shell environment variables

    using RLE compression.

    If the variable doesn't exist, or the value is non-zero, zlib compression - will be used instead. Such rasters will have a compressed + will be used instead. Such rasters will have a compressed value of 2 in the cellhd file.

    Obviously, decompression is controlled by the - raster's compressed value, not the environment variable.
    + raster's compressed value, not the environment variable.
    GRASS_ZLIB_LEVEL
    [libgis]
    if the environment variable GRASS_ZLIB_LEVEL exists and its value can @@ -210,9 +216,9 @@

    List of selected (GRASS related) shell environment variables

    raster maps are compressed using zlib compression. This applies to all raster map types (CELL, FCELL, DCELL).

    - Valid zlib compression levels are -1 to 9. The GRASS_ZLIB_LEVEL=-1 corresponds - to the zlib default value (equivalent to GRASS_ZLIB_LEVEL=6). Often - GRASS_ZLIB_LEVEL=1 gives the best compromise between speed and compression. + Valid zlib compression levels are -1 to 9. The GRASS_ZLIB_LEVEL=-1 corresponds + to the zlib default value (equivalent to GRASS_ZLIB_LEVEL=6). Often + GRASS_ZLIB_LEVEL=1 gives the best compromise between speed and compression.

    If the variable doesn't exist, or the value cannot be parsed as an integer, zlib's default compression level 6 will be used.
    @@ -221,13 +227,13 @@

    List of selected (GRASS related) shell environment variables

    [various modules, wxGUI]
    it may be set to either
      -
    • standard - sets percentage output and message +
    • standard - sets percentage output and message formatting style to standard formatting,
    • -
    • gui - sets percentage output and message formatting +
    • gui - sets percentage output and message formatting style to GUI formatting,
    • -
    • silent - disables percentage output and error +
    • silent - disables percentage output and error messages,
    • -
    • plain - sets percentage output and message +
    • plain - sets percentage output and message formatting style to ASCII output without rewinding control characters.
    @@ -236,14 +242,14 @@

    List of selected (GRASS related) shell environment variables

    [various modules]
    swaps mouse buttons for two-button or left-handed mice. Its value has three digits 1, 2, and 3, which represent default left, middle, and right buttons - respectively. Setting to 132 will swap middle and right + respectively. Setting to 132 will swap middle and right buttons. Note that this variable should be set before a display driver is initialized (e.g., - d.mon x0).
    + d.mon x0).
    GRASS_PAGER
    [various modules]
    - it may be set to either less, more, or cat.
    + it may be set to either less, more, or cat.
    GRASS_PERL
    [used during install process for generating man pages]
    @@ -252,7 +258,7 @@

    List of selected (GRASS related) shell environment variables

    GRASS_PROXY
    [used during addon install/reinstall process for generating man pages (download commit from GitHub API server and remote modules.xml file)]
    - set the proxy with: GRASS_PROXY="http=<value>,ftp=<value>".
    + set the proxy with: GRASS_PROXY="http=<value>,ftp=<value>".
    GRASS_SKIP_MAPSET_OWNER_CHECK
    By default it is not possible to work with MAPSETs that are @@ -272,7 +278,7 @@

    List of selected (GRASS related) shell environment variables

    GRASS_PYTHON
    [wxGUI, Python Ctypes]
    set to override Python executable.
    - On Mac OS X this should be the pythonw executable for the + On Mac OS X this should be the pythonw executable for the wxGUI to work.
    GRASS_VECTOR_LOWMEM
    @@ -315,14 +321,14 @@

    List of selected (GRASS related) shell environment variables

    vector maps will be read (if found) also from this directory. It may be set to either:
      -
    • keep - the temporary vector map is not deleted when +
    • keep - the temporary vector map is not deleted when closing the map.
    • -
    • move - the temporary vector map is moved to the +
    • move - the temporary vector map is moved to the current mapset when closing the map.
    • -
    • delete - the temporary vector map is deleted when +
    • delete - the temporary vector map is deleted when closing the map.
    - Default value is keep. + Default value is keep. Note that temporary vector maps are not visible to the user via g.list @@ -332,7 +338,7 @@

    List of selected (GRASS related) shell environment variables

    GRASS_VECTOR_TMPDIR_MAPSET
    [vectorlib]
    By default GRASS temporary directory is located in - $LOCATION/$MAPSET/.tmp/$HOSTNAME. If GRASS_VECTOR_TMPDIR_MAPSET is + $LOCATION/$MAPSET/.tmp/$HOSTNAME. If GRASS_VECTOR_TMPDIR_MAPSET is set to '0', the temporary directory is located in TMPDIR (environmental variable defined by the user or GRASS initialization script if not given).
    @@ -473,7 +479,7 @@

    List of selected internal GRASS environment variables

    This variable is automatically created by g.parser so that the - --overwrite option will + --overwrite option will be inherited by dependent modules as the script runs. Setting either the GRASS_OVERWRITE environment variable or the OVERWRITE gisenv variable detailed below will cause maps with identical names to be overwritten.
    @@ -489,7 +495,7 @@

    List of selected internal GRASS environment variables

  • 3 - additional verbose messages are printed
  • This variable is automatically created by g.parser - so that the --verbose or --quiet flags will be inherited + so that the --verbose or --quiet flags will be inherited by dependent modules as the script runs.
    GRASS_REGION
    @@ -501,7 +507,7 @@

    List of selected internal GRASS environment variables

    WIND_OVERRIDE
    [libgis]
    it causes programs to use the specified named region (created with - e.g. g.region save=...) to be used as the current region, instead of + e.g. g.region save=...) to be used as the current region, instead of the region from the WIND file.

    This allows programs such as the GUI to run external commands on an alternate region without having to modify the WIND file then change it @@ -535,7 +541,7 @@

    List of selected GRASS gisenv variables


    process id of the start-up shell script
    GUI
    -
    See GRASS_GUI environmental variable for details.
    +
    See GRASS_GUI environmental variable for details.
    LOCATION
    full path to project (previously called location) directory
    @@ -570,7 +576,7 @@

    List of selected GRASS gisenv variables

    This variable is automatically created by g.parser so that the - --overwrite option will + --overwrite option will be inherited by dependent modules as the script runs. Setting either the GRASS_OVERWRITE environment variable or the OVERWRITE gisenv variable detailed below will cause maps with identical names to be overwritten. @@ -579,27 +585,27 @@

    List of selected GRASS gisenv variables

    GRASS-related Files

    -
    $HOME/.grass8/rc
    +
    $HOME/.grass8/rc
    stores the GRASS gisenv variables (not shell environment variables)
    -
    $HOME/.grass8/bashrc
    +
    $HOME/.grass8/bashrc
    stores the shell environment variables (Bash only)
    -
    $HOME/.grass8/env.bat
    +
    $HOME/.grass8/env.bat
    stores the shell environment variables (MS Windows only)
    -
    $HOME/.grass8/login
    +
    $HOME/.grass8/login
    stores the DBMI passwords in this hidden file. Only the file owner can access this file.
    -
    $HOME/GIS_ERROR_LOG
    +
    $HOME/GIS_ERROR_LOG
    if this file exists then all GRASS error and warning messages are logged here. Applies to current user. To generate the file, use: - touch $HOME/GIS_ERROR_LOG
    + touch $HOME/GIS_ERROR_LOG
    See also GIS_ERROR_LOG variable.
    -Note: On MS Windows the files are stored in %APPDATA%. +Note: On MS Windows the files are stored in %APPDATA%.

    SEE ALSO

    diff --git a/lib/pngdriver/pngdriver.html b/lib/pngdriver/pngdriver.html index 1b1f6b2a2cb..f22834c0c2e 100644 --- a/lib/pngdriver/pngdriver.html +++ b/lib/pngdriver/pngdriver.html @@ -41,7 +41,7 @@

    Environment variables

    sets true-color support. Default is TRUE.
  • GRASS_RENDER_FILE=filename
    - the filename to put the resulting image in, default is map.png. + the filename to put the resulting image in, default is map.png. If you set GRASS_RENDER_FILE to a filename which ends in ".ppm", a PPM file will be created (with alpha channel stored in a PGM image, if applicable). If you set GRASS_RENDER_FILE to a filename which ends in ".bmp", a 32-bpp @@ -51,11 +51,11 @@

    Environment variables

    compression level of PNG files (0 = none, 1 = fastest, 9 = best, default is 6)
  • GRASS_RENDER_FILE_READ
    - if TRUE, the PNG driver will initialize the image from + if TRUE, the PNG driver will initialize the image from the contents of GRASS_RENDER_FILE.
  • GRASS_RENDER_FILE_MAPPED
    - if TRUE, the PNG driver + if TRUE, the PNG driver will map GRASS_RENDER_FILE as its framebuffer, rather than using memory. This only works with BMP files.
  • @@ -72,7 +72,7 @@

    Example

    d.vect roadsmajor color=red -This writes a file named map.png in your current directory. +This writes a file named map.png in your current directory.

    NOTES

    @@ -83,14 +83,14 @@

    NOTES

    be installed for the PNG driver to work (it's worth it).

    The resolution of the output images is defined by current region -extents. Use g.region -p to get the number of rows and cols +extents. Use g.region -p to get the number of rows and cols and use the environment variables to set the image size. If you would like a larger image, multiply both rows and cols by the same whole number to preserve the aspect ratio.

    Further PNG file processing (e.g. quantization to 1 bit for monochrome -images) can be done with pnmquant of -the netpbm tools. +images) can be done with pnmquant of +the netpbm tools.

    SEE ALSO

    diff --git a/lib/psdriver/psdriver.html b/lib/psdriver/psdriver.html index 31af82fae88..da593702444 100644 --- a/lib/psdriver/psdriver.html +++ b/lib/psdriver/psdriver.html @@ -38,16 +38,16 @@

    Environment variables

    fit a standard paper size, see also GRASS_RENDER_WIDTH, GRASS_RENDER_HEIGHT.
  • GRASS_RENDER_PS_LANDSCAPE
    - if TRUE, the screen is rotated 90 degrees + if TRUE, the screen is rotated 90 degrees counter-clockwise so that a "landscape" screen fits better on "portrait" paper.
  • GRASS_RENDER_PS_HEADER
    - if FALSE, the output is appended to any existing file, + if FALSE, the output is appended to any existing file, and no prolog or setup sections are generated.
  • GRASS_RENDER_PS_TRAILER
    - if FALSE, no trailer section is generated. + if FALSE, no trailer section is generated.
  • @@ -61,12 +61,12 @@

    Example

    d.rast elevation d.vect roadsmajor color=red -This writes a file named map.ps in your current directory. +This writes a file named map.ps in your current directory.

    NOTES

    The resolution of the output files is defined by current region -extents. Use g.region -p to get the number of rows and cols +extents. Use g.region -p to get the number of rows and cols and use the environment variables to set the image size. If you would like a larger image, multiply both rows and cols by the same whole number to preserve the aspect ratio. @@ -75,7 +75,7 @@

    NOTES

    colorimage and setrgbcolor operators (this is the case for colour printers which pre-date level 2 PostScript). -

    Masked images (d.rast, d.rgb, d.his -n) +

    Masked images (d.rast, d.rgb, d.his -n) require PostScript level 3.

    SEE ALSO

    diff --git a/lib/vector/rtree/docs/sources.htm b/lib/vector/rtree/docs/sources.htm index 31e076775ff..7e597c4dba7 100644 --- a/lib/vector/rtree/docs/sources.htm +++ b/lib/vector/rtree/docs/sources.htm @@ -103,7 +103,7 @@

    Implementation of a simple C++ quaternion class called "Squat". Popularized by a seminal paper by Ken Shoemake, a quaternion represents a rotation about an axis.  Squats can be concatenated together via -the * and *= +the * and *= operators and converted back and forth between transformation matrices. Implementation also includes a wonderful 3D vector macro library by Don Hatch. diff --git a/lib/vector/vectorascii.html b/lib/vector/vectorascii.html index cae0ecef5a6..ed22e4e2200 100644 --- a/lib/vector/vectorascii.html +++ b/lib/vector/vectorascii.html @@ -43,7 +43,7 @@ [ LAYER CATEGORY] -Everything above in [ ] is optional. +Everything above in [ ] is optional.

    The primitive codes are as follows:

    ") diff --git a/python/grass/gunittest/testsuite/test_checkers.py b/python/grass/gunittest/testsuite/test_checkers.py index b11b25778a3..f79598aa165 100644 --- a/python/grass/gunittest/testsuite/test_checkers.py +++ b/python/grass/gunittest/testsuite/test_checkers.py @@ -369,17 +369,14 @@ class TestMd5Sums(TestCase): @classmethod def setUpClass(cls): with open(cls.correct_file_name_platform_nl, "w") as f: - for line in CORRECT_LINES: - # \n should be converted to platform newline - f.write(line + "\n") + # \n should be converted to platform newline + f.writelines(line + "\n" for line in CORRECT_LINES) with open(cls.correct_file_name_unix_nl, "w") as f: - for line in CORRECT_LINES: - # binary mode will write pure \n - f.write(line + "\n") + # binary mode will write pure \n + f.writelines(line + "\n" for line in CORRECT_LINES) with open(cls.wrong_file_name, "w") as f: - for line in INCORRECT_LINES: - # \n should be converted to platform newline - f.write(line + "\n") + # \n should be converted to platform newline + f.writelines(line + "\n" for line in INCORRECT_LINES) @classmethod def tearDownClass(cls): diff --git a/python/grass/jupyter/timeseriesmap.py b/python/grass/jupyter/timeseriesmap.py index 0379e19a4c0..5d32cc83e93 100644 --- a/python/grass/jupyter/timeseriesmap.py +++ b/python/grass/jupyter/timeseriesmap.py @@ -28,8 +28,6 @@ def fill_none_values(names): for i, name in enumerate(names): if name == "None": names[i] = names[i - 1] - else: - pass return names diff --git a/raster/r.topidx/gridatb_to_arc.py b/raster/r.topidx/gridatb_to_arc.py index d80f6797a65..351cb07afad 100755 --- a/raster/r.topidx/gridatb_to_arc.py +++ b/raster/r.topidx/gridatb_to_arc.py @@ -54,8 +54,7 @@ NODATA_value 9999 """ ) -for inline in inf: - outf.write(inline) +outf.writelines(inf) inf.close() outf.close() diff --git a/scripts/d.polar/d.polar.py b/scripts/d.polar/d.polar.py index d7e67486a0e..2d5f6d50a7b 100755 --- a/scripts/d.polar/d.polar.py +++ b/scripts/d.polar/d.polar.py @@ -283,10 +283,10 @@ def plot_eps(psout): (x, y) = outercircle[1] outf.write("%.2f %.2f moveto\n" % (x * scale + halfframe, y * scale + halfframe)) - for x, y in outercircle[2:]: - outf.write( - "%.2f %.2f lineto\n" % (x * scale + halfframe, y * scale + halfframe) - ) + outf.writelines( + "%.2f %.2f lineto\n" % (x * scale + halfframe, y * scale + halfframe) + for x, y in outercircle[2:] + ) t = string.Template( """ @@ -338,10 +338,10 @@ def plot_eps(psout): (x, y) = sine_cosine_replic[1] outf.write("%.2f %.2f moveto\n" % (x * scale + halfframe, y * scale + halfframe)) - for x, y in sine_cosine_replic[2:]: - outf.write( - "%.2f %.2f lineto\n" % (x * scale + halfframe, y * scale + halfframe) - ) + outf.writelines( + "%.2f %.2f lineto\n" % (x * scale + halfframe, y * scale + halfframe) + for x, y in sine_cosine_replic[2:] + ) t = string.Template( """ @@ -363,10 +363,10 @@ def plot_eps(psout): (x, y) = vector[1] outf.write("%.2f %.2f moveto\n" % (x * scale + halfframe, y * scale + halfframe)) - for x, y in vector[2:]: - outf.write( - "%.2f %.2f lineto\n" % (x * scale + halfframe, y * scale + halfframe) - ) + outf.writelines( + "%.2f %.2f lineto\n" % (x * scale + halfframe, y * scale + halfframe) + for x, y in vector[2:] + ) t = string.Template( """ diff --git a/scripts/db.univar/db.univar.py b/scripts/db.univar/db.univar.py index 859e0fd831c..3969d4f7caf 100755 --- a/scripts/db.univar/db.univar.py +++ b/scripts/db.univar/db.univar.py @@ -89,8 +89,7 @@ def sortfile(infile, outfile): for i in range(len(lines)): lines[i] = float(lines[i].rstrip("\r\n")) lines.sort() - for line in lines: - outf.write(str(line) + "\n") + outf.writelines(str(line) + "\n" for line in lines) inf.close() outf.close() diff --git a/scripts/g.extension/g.extension.py b/scripts/g.extension/g.extension.py index 01f5b0a969f..aa707912f38 100644 --- a/scripts/g.extension/g.extension.py +++ b/scripts/g.extension/g.extension.py @@ -1041,11 +1041,11 @@ def write_xml_modules(name, tree=None): if bnode is not None: file_.write("%s\n" % (" " * indent)) indent += 4 - for fnode in bnode.findall("file"): - file_.write( - "%s%s\n" - % (" " * indent, os.path.join(options["prefix"], fnode.text)) - ) + file_.writelines( + "%s%s\n" + % (" " * indent, os.path.join(options["prefix"], fnode.text)) + for fnode in bnode.findall("file") + ) indent -= 4 file_.write("%s\n" % (" " * indent)) file_.write('%s\n' % (" " * indent, libgis_revison)) @@ -1091,11 +1091,11 @@ def write_xml_extensions(name, tree=None): if bnode is not None: file_.write("%s\n" % (" " * indent)) indent += 4 - for fnode in bnode.findall("file"): - file_.write( - "%s%s\n" - % (" " * indent, os.path.join(options["prefix"], fnode.text)) - ) + file_.writelines( + "%s%s\n" + % (" " * indent, os.path.join(options["prefix"], fnode.text)) + for fnode in bnode.findall("file") + ) indent -= 4 file_.write("%s\n" % (" " * indent)) # extension modules @@ -1103,8 +1103,10 @@ def write_xml_extensions(name, tree=None): if mnode is not None: file_.write("%s\n" % (" " * indent)) indent += 4 - for fnode in mnode.findall("module"): - file_.write("%s%s\n" % (" " * indent, fnode.text)) + file_.writelines( + "%s%s\n" % (" " * indent, fnode.text) + for fnode in mnode.findall("module") + ) indent -= 4 file_.write("%s\n" % (" " * indent)) @@ -1136,14 +1138,14 @@ def write_xml_toolboxes(name, tree=None): % (" " * indent, tnode.get("name"), tnode.get("code")) ) indent += 4 - for cnode in tnode.findall("correlate"): - file_.write( - '%s\n' % (" " * indent, tnode.get("code")) - ) - for mnode in tnode.findall("task"): - file_.write( - '%s\n' % (" " * indent, mnode.get("name")) - ) + file_.writelines( + '%s\n' % (" " * indent, tnode.get("code")) + for cnode in tnode.findall("correlate") + ) + file_.writelines( + '%s\n' % (" " * indent, mnode.get("name")) + for mnode in tnode.findall("task") + ) indent -= 4 file_.write("%s\n" % (" " * indent)) diff --git a/scripts/i.oif/i.oif.py b/scripts/i.oif/i.oif.py index cb156675927..81ef0b25f7b 100755 --- a/scripts/i.oif/i.oif.py +++ b/scripts/i.oif/i.oif.py @@ -146,8 +146,7 @@ def main(): sys.stdout.write(fmt % (p + (v,))) else: outf = open(output, "w") - for v, p in oif: - outf.write(fmt % (p + (v,))) + outf.writelines(fmt % (p + (v,)) for v, p in oif) outf.close() diff --git a/scripts/i.spectral/i.spectral.py b/scripts/i.spectral/i.spectral.py index 07efd8af31f..62f4a3397a3 100755 --- a/scripts/i.spectral/i.spectral.py +++ b/scripts/i.spectral/i.spectral.py @@ -104,8 +104,7 @@ def draw_gnuplot(what, xlabels, output, img_format, coord_legend): outfile = os.path.join(tmp_dir, "data_%d" % i) outf = open(outfile, "w") xrange = max(xrange, len(row) - 2) - for j, val in enumerate(row[3:]): - outf.write("%d %s\n" % (j + 1, val)) + outf.writelines("%d %s\n" % (j + 1, val) for j, val in enumerate(row[3:])) outf.close() # build gnuplot script @@ -147,8 +146,7 @@ def draw_gnuplot(what, xlabels, output, img_format, coord_legend): plotfile = os.path.join(tmp_dir, "spectrum.gnuplot") plotf = open(plotfile, "w") - for line in lines: - plotf.write(line + "\n") + plotf.writelines(line + "\n" for line in lines) plotf.close() if output: @@ -163,15 +161,13 @@ def draw_linegraph(what): xfile = os.path.join(tmp_dir, "data_x") xf = open(xfile, "w") - for j, val in enumerate(what[0][3:]): - xf.write("%d\n" % (j + 1)) + xf.writelines("%d\n" % (j + 1) for j, val in enumerate(what[0][3:])) xf.close() for i, row in enumerate(what): yfile = os.path.join(tmp_dir, "data_y_%d" % i) yf = open(yfile, "w") - for j, val in enumerate(row[3:]): - yf.write("%s\n" % val) + yf.writelines("%s\n" % val for j, val in enumerate(row[3:])) yf.close() yfiles.append(yfile) diff --git a/scripts/v.in.mapgen/v.in.mapgen.py b/scripts/v.in.mapgen/v.in.mapgen.py index efe7af1075d..e76486b75b4 100755 --- a/scripts/v.in.mapgen/v.in.mapgen.py +++ b/scripts/v.in.mapgen/v.in.mapgen.py @@ -106,8 +106,10 @@ def main(): if f[0].lower() == "nan": if points != []: outf.write("L %d 1\n" % len(points)) - for point in points: - outf.write(" %.15g %.15g %.15g\n" % tuple(map(float, point))) + outf.writelines( + " %.15g %.15g %.15g\n" % tuple(map(float, point)) + for point in points + ) outf.write(" 1 %d\n" % cat) cat += 1 points = [] @@ -134,8 +136,9 @@ def main(): if line[0] == "#": if points != []: outf.write("L %d 1\n" % len(points)) - for point in points: - outf.write(" %.15g %.15g\n" % tuple(map(float, point))) + outf.writelines( + " %.15g %.15g\n" % tuple(map(float, point)) for point in points + ) outf.write(" 1 %d\n" % cat) cat += 1 points = [] @@ -144,8 +147,9 @@ def main(): if points != []: outf.write("L %d 1\n" % len(points)) - for point in points: - outf.write(" %.15g %.15g\n" % tuple(map(float, point))) + outf.writelines( + " %.15g %.15g\n" % tuple(map(float, point)) for point in points + ) outf.write(" 1 %d\n" % cat) cat += 1 outf.close() diff --git a/utils/create_python_init_file.py b/utils/create_python_init_file.py index 567c8b95bba..5642bbc2e75 100755 --- a/utils/create_python_init_file.py +++ b/utils/create_python_init_file.py @@ -34,8 +34,7 @@ def main(path): with open(os.path.join(path, "__init__.py"), "w") as fd: fd.write("all = [%s" % os.linesep) - for m in modules: - fd.write(" '%s',%s" % (m, os.linesep)) + fd.writelines(" '%s',%s" % (m, os.linesep) for m in modules) fd.write(" ]%s" % os.linesep) return 0 From 76ec747e8da2cc1bbda0b9c83aab6687b2e725c5 Mon Sep 17 00:00:00 2001 From: Anna Petrasova Date: Tue, 28 Jan 2025 09:04:59 -0500 Subject: [PATCH 150/162] contributing: add more gitignores and remove accidentally added DS_Store (#4995) gitignore: add more ignores and remove accidently added DS_Store --- .DS_Store | Bin 6148 -> 0 bytes .gitignore | 80 ++++++++++++++++++++++++++++++++++++++++++++++- raster/.DS_Store | Bin 6148 -> 0 bytes 3 files changed, 79 insertions(+), 1 deletion(-) delete mode 100644 .DS_Store delete mode 100644 raster/.DS_Store diff --git a/.DS_Store b/.DS_Store deleted file mode 100644 index a2120322ac33d503cdcdaff6729e6668364fbdcf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6148 zcmeHLu}T9$5S=xrgrqQ~P2fOlB|jji#9j!NLW~KCka!^`0So26KpQ&+wYIQOu(wF9 zg}-27DF|rHG;(k+%XnZ~!&Qo2kxcrBCt#M5}L?%*(m0aKt;wFL|?PW#XO1 ztL<3k1IcW*juYM__p9R;`APQi2+40w17b))6V#TyWgUa(@B3|ze>uB`tYcbCtd5&aszc2wfO|Gsnw~c`RX`O`1*8J>e(Lgt&gpY rjf~eFgLbOGuPX2b7{kA+ diff --git a/.gitignore b/.gitignore index 192fad55de8..fc8d6fbafd4 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,4 @@ /emacs.desktop -*~ *.lock !flake.lock *.pyc @@ -68,3 +67,82 @@ lib/*/latex/ .coverage .coverage.* coverage.xml + +# Created by https://www.toptal.com/developers/gitignore/api/windows,linux,macos +# Edit at https://www.toptal.com/developers/gitignore?templates=windows,linux,macos + +### Linux ### +*~ + +# temporary files which can be created if a process still has a handle open of a deleted file +.fuse_hidden* + +# KDE directory preferences +.directory + +# Linux trash folder which might appear on any partition or disk +.Trash-* + +# .nfs files are created when an open file is removed but is still being accessed +.nfs* + +### macOS ### +# General +.DS_Store +.AppleDouble +.LSOverride + +# Icon must end with two \r +Icon + + +# Thumbnails +._* + +# Files that might appear in the root of a volume +.DocumentRevisions-V100 +.fseventsd +.Spotlight-V100 +.TemporaryItems +.Trashes +.VolumeIcon.icns +.com.apple.timemachine.donotpresent + +# Directories potentially created on remote AFP share +.AppleDB +.AppleDesktop +Network Trash Folder +Temporary Items +.apdisk + +### macOS Patch ### +# iCloud generated files +*.icloud + +### Windows ### +# Windows thumbnail cache files +Thumbs.db +Thumbs.db:encryptable +ehthumbs.db +ehthumbs_vista.db + +# Dump file +*.stackdump + +# Folder config file +[Dd]esktop.ini + +# Recycle Bin used on file shares +$RECYCLE.BIN/ + +# Windows Installer files +*.cab +*.msi +*.msix +*.msm +*.msp + +# Windows shortcuts +*.lnk + +# End of https://www.toptal.com/developers/gitignore/api/windows,linux,macos diff --git a/raster/.DS_Store b/raster/.DS_Store deleted file mode 100644 index 034e2f30fa5befb35d2313541b89c5e2ae86de57..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6148 zcmeHKy-veG4EB{u6j&<6z?dgMidYy!6`r6kKz~p>BwR$(Jr96*3toXo;2qdl*_fF5 ze0EEtv{G0AAzSi&7oVN;eTm|jh}>W~jfwh1)Ppj14lryHUT1AcM=iYQ!aYiw&^(*P z!-;Qro8d1qz|U@X7z2Kf6BK^YUpN-%snFoYHW*o8R==G;qg zOr)47R)Sc8I0*$xsM8k1NjU70`X!2$poEjt=ELdEPCFDAcE|mr;7%?Pw9yza2I>s# z$z`AG|JCmPzaC^)#(**KuNZLMbeIlsB(1HD!*Q*Rpx00q_NxTfA((_x3|}tAr_dm< XM?3*0ij^QN5c?4bG}vGa{3rvTUIb&$ From 13182063a8fa78cd62c0e4e48879bdfd67fd4e3c Mon Sep 17 00:00:00 2001 From: ShubhamDesai <42180509+ShubhamDesai@users.noreply.github.com> Date: Tue, 28 Jan 2025 09:06:09 -0500 Subject: [PATCH 151/162] v.net: Fix Resource Leak issue in arcs.c (#4991) Variable Overwritten --- vector/v.net/arcs.c | 1 - 1 file changed, 1 deletion(-) diff --git a/vector/v.net/arcs.c b/vector/v.net/arcs.c index 20554fc19f9..2ea03111041 100644 --- a/vector/v.net/arcs.c +++ b/vector/v.net/arcs.c @@ -32,7 +32,6 @@ int create_arcs(FILE *file, struct Map_info *Pnts, struct Map_info *Out, points = Vect_new_line_struct(); points2 = Vect_new_line_struct(); - points = Vect_new_line_struct(); cats = Vect_new_cats_struct(); narcs = 0; From 71410de250b93f9d93fabdff6effadbf4c9422a9 Mon Sep 17 00:00:00 2001 From: Arohan Ajit Date: Tue, 28 Jan 2025 10:50:23 -0500 Subject: [PATCH 152/162] wxGUI: Fixed star imports in wxdisplay.py (#4974) --- .flake8 | 1 - gui/wxpython/vdigit/wxdisplay.py | 100 ++++++++++++++++++++++++++++--- 2 files changed, 92 insertions(+), 9 deletions(-) diff --git a/.flake8 b/.flake8 index 03013aa973a..c1e09d417a1 100644 --- a/.flake8 +++ b/.flake8 @@ -25,7 +25,6 @@ per-file-ignores = gui/wxpython/image2target/g.gui.image2target.py: E501 gui/wxpython/photo2image/g.gui.photo2image.py: E501 gui/wxpython/psmap/*: E501 - gui/wxpython/vdigit/*: F405, F403 gui/wxpython/animation/g.gui.animation.py: E501 gui/wxpython/tplot/g.gui.tplot.py: E501 gui/wxpython/iclass/g.gui.iclass.py: E501 diff --git a/gui/wxpython/vdigit/wxdisplay.py b/gui/wxpython/vdigit/wxdisplay.py index 6679e5c5814..f7381fe763f 100644 --- a/gui/wxpython/vdigit/wxdisplay.py +++ b/gui/wxpython/vdigit/wxdisplay.py @@ -18,22 +18,106 @@ """ import locale - import os import sys -import wx +from ctypes import CFUNCTYPE, byref, c_double, c_int, pointer +from grass.lib.ctypes_preamble import UNCHECKED, String +import wx from core.debug import Debug -from core.settings import UserSettings from core.gcmd import DecodeString -from gui_core.wrap import Rect +from core.settings import UserSettings try: - from grass.lib.gis import * - from grass.lib.vector import * - from grass.lib.vedit import * + from grass.lib.gis import ( + G_gisinit, + G_set_error_routine, + G_set_percent_routine, + G_unset_error_routine, + G_unset_percent_routine, + ) + from grass.lib.vector import ( # Types; Functions; Classes + GV_BOUNDARY, + GV_BUILD_NONE, + GV_CENTROID, + GV_LINE, + GV_LINES, + GV_MODE_RW, + GV_POINT, + GV_POINTS, + WITHOUT_Z, + Map_info, + Vect_append_point, + Vect_box_copy, + Vect_box_extend, + Vect_build, + Vect_build_partial, + Vect_close, + Vect_destroy_cats_struct, + Vect_destroy_line_struct, + Vect_destroy_list, + Vect_find_line_list, + Vect_get_area_box, + Vect_get_area_centroid, + Vect_get_centroid_area, + Vect_get_line_box, + Vect_get_map_box, + Vect_get_num_areas, + Vect_get_num_lines, + Vect_is_3d, + Vect_line_alive, + Vect_line_check_duplicate, + Vect_line_distance, + Vect_list_append, + Vect_new_cats_struct, + Vect_new_line_struct, + Vect_new_list, + Vect_open_old, + Vect_open_tmp_old, + Vect_open_tmp_update, + Vect_open_update, + Vect_point_in_area, + Vect_point_in_poly, + Vect_points_distance, + Vect_read_line, + Vect_select_lines_by_polygon, + Vect_set_updated, + bound_box, + PORT_DOUBLE_MAX, + ) + from grass.lib.vedit import ( # Types; Draw flags; Functions + DRAW_AREA, + DRAW_BOUNDARYNO, + DRAW_BOUNDARYONE, + DRAW_BOUNDARYTWO, + DRAW_CENTROIDDUP, + DRAW_CENTROIDIN, + DRAW_CENTROIDOUT, + DRAW_DIRECTION, + DRAW_LINE, + DRAW_NODEONE, + DRAW_NODETWO, + DRAW_POINT, + DRAW_VERTEX, + TYPE_AREA, + TYPE_BOUNDARYNO, + TYPE_BOUNDARYONE, + TYPE_BOUNDARYTWO, + TYPE_CENTROIDDUP, + TYPE_CENTROIDIN, + TYPE_CENTROIDOUT, + TYPE_DIRECTION, + TYPE_ISLE, + TYPE_LINE, + TYPE_NODEONE, + TYPE_NODETWO, + TYPE_POINT, + TYPE_VERTEX, + Vedit_render_map, + ) except (ImportError, OSError, TypeError) as e: - print("wxdigit.py: {}".format(e), file=sys.stderr) + print("wxdisplay.py: {}".format(e), file=sys.stderr) +from gui_core.wrap import Rect log = None progress = None From 8845151f7bc9b4ffbf5094619021cb4ed8a972ca Mon Sep 17 00:00:00 2001 From: Vaclav Petras Date: Tue, 28 Jan 2025 11:11:02 -0500 Subject: [PATCH 153/162] doc: Use lowercase for 2D raster mask (#5000) Similarly to #4401 and #4495, this replaces usage of MASK by mask or raster mask. It removes uppercase MASK when not needed. --- doc/examples/notebooks/parallelization_tutorial.ipynb | 2 +- imagery/i.pca/main.c | 2 +- raster/r.out.gdal/r.out.gdal.html | 7 ++++--- raster/r.resamp.bspline/r.resamp.bspline.html | 5 +++-- vector/vectorintro.html | 2 +- 5 files changed, 10 insertions(+), 8 deletions(-) diff --git a/doc/examples/notebooks/parallelization_tutorial.ipynb b/doc/examples/notebooks/parallelization_tutorial.ipynb index 4611f5d1c24..32f30d78a74 100644 --- a/doc/examples/notebooks/parallelization_tutorial.ipynb +++ b/doc/examples/notebooks/parallelization_tutorial.ipynb @@ -331,7 +331,7 @@ " * write output maps/files with identical names (common mistake, but easy to fix)\n", " * modify computational region\n", " * modify vector attribute database\n", - " * modify MASK\n", + " * modify raster mask\n", " * use [r.reclass](https://grass.osgeo.org/grass-stable/manuals/r.reclass.html) to reclassify from the same base map\n", "\n", "The following sections provide solutions, starting with the option to execute tools in separate mapsets, which addresses all of the issues above, except r.reclass." diff --git a/imagery/i.pca/main.c b/imagery/i.pca/main.c index 8cc6c4f58fe..3ef5b5501da 100644 --- a/imagery/i.pca/main.c +++ b/imagery/i.pca/main.c @@ -4,7 +4,7 @@ * * AUTHOR(S): Original author Center for Space Research (Uni. of TX) * Rewritten by Brad Douglas - * NULL value/MASK handling and speed up by Markus Metz + * NULL value/mask handling and speed up by Markus Metz * * PURPOSE: Principal Component Analysis transform of raster data. * diff --git a/raster/r.out.gdal/r.out.gdal.html b/raster/r.out.gdal/r.out.gdal.html index 8a24e2bb870..a7a0c04332e 100644 --- a/raster/r.out.gdal/r.out.gdal.html +++ b/raster/r.out.gdal/r.out.gdal.html @@ -18,7 +18,7 @@

    DESCRIPTION

    (created imagery groups with the i.group module)

    As with most GRASS raster modules, the current region extents and region -resolution are used, and a MASK is respected if present. +resolution are used, and a raster mask is respected if present. Use g.region's "align=", or "raster=" options if you need to realign the region settings to match the original map's before export. @@ -267,7 +267,8 @@

    Export RGB with alpha channel that encodes NULL cells

    equal to this nodata value will be interpreted as nodata. Using an additional alpha channel means that all pixels with an alpha value of 0 are transparent. The alpha channel thus represents per-pixel encoding of -nodata, just like the GRASS MASK (null file). That means when using an alpha +nodata, just like the GRASS raster mask or per-raster null file. +That means when using an alpha channel, you do not need to "free up" any particular value, but you can use any value you like to replace NULL cells, as long as the value can be represented by the Byte data type. It does not matter if that value is @@ -298,7 +299,7 @@

    Export RGB with alpha channel that encodes NULL cells

    # create group for export i.group group=out_rgba input=out_r,out_g,out_b,out_a -# remove any MASK because this works only if there are +# remove any mask because this works only if there are # no NULL cells in the bands to be exported r.mask -r diff --git a/raster/r.resamp.bspline/r.resamp.bspline.html b/raster/r.resamp.bspline/r.resamp.bspline.html index 8e9250c1f9b..46bc352db56 100644 --- a/raster/r.resamp.bspline/r.resamp.bspline.html +++ b/raster/r.resamp.bspline/r.resamp.bspline.html @@ -9,8 +9,9 @@

    DESCRIPTION

    The input raster map is read at its native resolution, the output raster map will be produced for the current computational region set with -g.region. Any MASK will be respected, masked -values will be treated as NULL cells in both the input and the output map. +g.region. A raster mask, if present, +will be respected. Masked values will be treated like other NULL cells +in both the input and output maps.

    Spline step values ew_step for the east-west direction and ns_step for the north-south direction should not be smaller than the east-west and north-south resolutions of the input map. For a raster diff --git a/vector/vectorintro.html b/vector/vectorintro.html index 814526ec8b1..4755ee1a0db 100644 --- a/vector/vectorintro.html +++ b/vector/vectorintro.html @@ -298,7 +298,7 @@

    Vector-Raster-DB conversion

    With v.to.points, v.to.rast and v.to.rast3 -conversions are performed. Note that a raster mask ("MASK") will not be +conversions are performed. Note that a raster mask will not be respected since it is only applied when reading an existing GRASS raster map. From 1d6f2e11cc18af521f5ad0c50efa716bfb7f619a Mon Sep 17 00:00:00 2001 From: Vaclav Petras Date: Tue, 28 Jan 2025 11:12:25 -0500 Subject: [PATCH 154/162] init: Use mask, not MASK in shell prompt (#5003) --- lib/init/grass.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/lib/init/grass.py b/lib/init/grass.py index befec465b3a..07e454de0c6 100755 --- a/lib/init/grass.py +++ b/lib/init/grass.py @@ -1715,9 +1715,9 @@ def sh_like_startup(location, location_name, grass_env_file, sh): fi }} PROMPT_COMMAND=grass_prompt\n""".format( - both_masks=_("2D and 3D raster MASKs present"), - mask2d=_("Raster MASK present"), - mask3d=_("3D raster MASK present"), + both_masks=_("2D and 3D raster masks present"), + mask2d=_("Raster mask present"), + mask3d=_("3D raster mask present"), mask2d_test=mask2d_test, mask3d_test=mask3d_test, specific_addition=specific_addition, From 984f18cf343316e108ca36a32d6c76e37f7585d6 Mon Sep 17 00:00:00 2001 From: Vaclav Petras Date: Tue, 28 Jan 2025 11:36:13 -0500 Subject: [PATCH 155/162] i.smap: Add detail to NULL handling (#4997) The original text is using MASK in all caps out of context and mixes mitigating issues with plain NULLs and 2D raster mask. This uses lowercase mask in text and names and adds a new expression to handle NULLs in the input as the text promisses. --- imagery/i.smap/i.smap.html | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/imagery/i.smap/i.smap.html b/imagery/i.smap/i.smap.html index 4a57e900378..bc1f7b946b2 100644 --- a/imagery/i.smap/i.smap.html +++ b/imagery/i.smap/i.smap.html @@ -124,12 +124,23 @@

    NOTES

    15% of the goodness values may need some closer inspection.

    -The module i.smap does not support MASKed or NULL cells. Therefore -it might be necessary to create a copy of the classification results -using e.g. r.mapcalc: +The module i.smap does not support NULL cells (in the +raster image or from raster mask). Therefore, if the input image has NULL +cells, it might be necessary to create a masked classification results +as part of post-processing using e.g. r.mapcalc: + +

    +r.mapcalc "masked_results = if(isnull(input_image), null(), classification_results)"
    +
    +

    +Similarly, if the raster mask is active, +it might be necessary to post-process the classification results +using r.mapcalc which will automatically mask the classification +results: +

    -r.mapcalc "MASKed_map = classification_results"
    +r.mapcalc "masked_results = classification_results"
     

    EXAMPLE

    From a82adc22864d854508993e82eddaa652eb9b3c77 Mon Sep 17 00:00:00 2001 From: Vaclav Petras Date: Tue, 28 Jan 2025 21:27:50 -0500 Subject: [PATCH 156/162] r.watershed: Use raster mask, not MASK, simplify doc (#4998) * Replaces uppercase MASK by whatever is more appropriate in the given context. * Simplifies the sentences about mask and nulls cells. They are the same, ignored, and reduce computational requirements. The original text was repetetive. The new text is trying to be more succinct. * The heading mentions no data, but not NULLs while text NULLs and not no data. The new text is trying to address that. * An example which is directly manipulating MASK is left as is. --- raster/r.watershed/front/r.watershed.html | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/raster/r.watershed/front/r.watershed.html b/raster/r.watershed/front/r.watershed.html index 5713f611ea3..6772fabf384 100644 --- a/raster/r.watershed/front/r.watershed.html +++ b/raster/r.watershed/front/r.watershed.html @@ -316,17 +316,15 @@

    Basin threshold

    stream segment is determined by the distance between the tributaries flowing into it. -

    MASK and no data

    +

    Masking and no data

    The r.watershed program does not require the user to have the current geographic region filled with elevation values. Areas without -elevation data (masked or NULL cells) are ignored. It is NOT necessary -to create a raster map (or raster reclassification) -named MASK for NULL cells. Areas without elevation data will -be treated as if they are off the edge of the region. Such areas will -reduce the memory necessary to run the program. Masking out -unimportant areas can significantly reduce processing time if the +elevation data (masked or NULL cells, i.e., no data) are ignored and +treated as if they were outside the region. Masking out +unimportant areas can significantly reduce processing time and memory +requirements if the watersheds of interest occupy a small percentage of the overall area.

    @@ -357,7 +355,7 @@

    Further processing of output layers

    module, a number of approaches may be considered.
      -
    1. Use a resample of the basins catchment raster map as a MASK.
      +
    2. Use a resample of the basins catchment raster map as a raster mask.
      The equivalent vector map method is similar using v.select or v.overlay.
    3. @@ -386,7 +384,7 @@

      Further processing of output layers

      with r.thin. Each stream segment in the vector map will have the value of the associated basin. To isolate -subbasins and streams for a larger basin, a MASK for the larger basin +subbasins and streams for a larger basin, a mask for the larger basin can be created with r.water.outlet. The stream segments output serves as a guide where to place the outlet point used From e135cab634e4308aa9b13730b1afcf14f8a0c060 Mon Sep 17 00:00:00 2001 From: Vaclav Petras Date: Tue, 28 Jan 2025 21:28:24 -0500 Subject: [PATCH 157/162] d.rast.edit: Use raster mask, not uppercase MASK (#5001) Replaces usage of uppercase MASK by 'raster mask' in the documentation. This clarifies the sentence in terms of what respecting means (original says 'respected...including any edits' which may suggest the opposite). It gives me too many errors to verify the behavior as the comments asks for, but the code uses r.patch, so the mask is likely applied and thus the mask is applied for any writing (unlike r.mapcalc). --- scripts/d.rast.edit/d.rast.edit.html | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/scripts/d.rast.edit/d.rast.edit.html b/scripts/d.rast.edit/d.rast.edit.html index cde4f96947a..3a3c66e8fc2 100644 --- a/scripts/d.rast.edit/d.rast.edit.html +++ b/scripts/d.rast.edit/d.rast.edit.html @@ -49,9 +49,10 @@

      NOTES

      There is no "undo" command nor way to exit edit mode without saving changes to the output map.

      - -Any MASK in place will be respected when writing the new raster map layer, -including any edits to the MASKed areas. + +A raster mask in place will be respected both when reading the original raster +map layer and when writing the new raster map layer, +so any edits to the masked areas will be ignored.

      Geographic Region Concerns

      From 5626d0fcb4052e68da51cab3c044185dd811300d Mon Sep 17 00:00:00 2001 From: Vaclav Petras Date: Wed, 29 Jan 2025 01:00:20 -0500 Subject: [PATCH 158/162] v.rast.stats: Mask is simply used, not touched (#5002) Since 9b03a3c2fa557b1b55c31634301afcc36ba2b6d8, v.rast.stats is using r.univar zones instead of looping through categories with individual masked r.univar calls. The note about restoring raster mask does not apply since the mask is not touched. It is just used in the background as with any other tool. The raster grid alignment is modified by a g.region call with align, so that still applies, but the temporary part is not true anymore. It is purely internal instead. --- scripts/v.rast.stats/v.rast.stats.html | 4 ++-- scripts/v.rast.stats/v.rast.stats.py | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/scripts/v.rast.stats/v.rast.stats.html b/scripts/v.rast.stats/v.rast.stats.html index f9093158757..e25f117454b 100644 --- a/scripts/v.rast.stats/v.rast.stats.html +++ b/scripts/v.rast.stats/v.rast.stats.html @@ -30,8 +30,8 @@

      NOTES

      DBF specification to 10 characters. Therefore it is advised to be economical in the use of the column prefix when using DBF as any additional characters will be chopped off. -

      If a MASK is present, it will be restored after the script finished. -The script changes temporarily to the resolution of the given raster map. +

      The script internally aligns the raster grid cells to the grid of the first +input raster map.

      If an area has several categories in the selected layer (equivalent to overlapping polygons in Simple Features), only one category will be kept during the rasterization process. Statistics for the skipped diff --git a/scripts/v.rast.stats/v.rast.stats.py b/scripts/v.rast.stats/v.rast.stats.py index 4096aa49caf..3f8b5c80ddd 100644 --- a/scripts/v.rast.stats/v.rast.stats.py +++ b/scripts/v.rast.stats/v.rast.stats.py @@ -156,8 +156,8 @@ def main(): # save current settings: gs.use_temp_region() - # Temporarily aligning region resolution to $RASTER resolution - # keep boundary settings + # Align region cells with the first input raster, + # keeping the (approximate) extent settings. gs.run_command("g.region", align=rasters[0]) # check if DBF driver used, in this case cut to 10 chars col names: From 36506462860a445a3a74d8d846eb8eae95a269bf Mon Sep 17 00:00:00 2001 From: Vaclav Petras Date: Wed, 29 Jan 2025 01:50:03 -0500 Subject: [PATCH 159/162] r.mapcalc: Use mask and not MASK in the doc (#4999) Uses mask or raster mask instead of MASK in the documentation. Where the raster called MASK needs to be accessed directly in an example, MASK is used as the assumed name mentioning that explicitly. Updates r3.mapcalc in the same way which should be harmless since the wording does not explicitly mention the possibility of a different name. The text looks like a direct copy-paste from r.mapcalc, so that is preserved. The only improvement is that r3.mask is now linked instead of r.mask (in the 3D doc). --- raster/r.mapcalc/r.mapcalc.html | 24 +++++++++++++----------- raster/r.mapcalc/r3.mapcalc.html | 26 ++++++++++++++------------ 2 files changed, 27 insertions(+), 23 deletions(-) diff --git a/raster/r.mapcalc/r.mapcalc.html b/raster/r.mapcalc/r.mapcalc.html index 5f943f2abae..0f41f42b5db 100644 --- a/raster/r.mapcalc/r.mapcalc.html +++ b/raster/r.mapcalc/r.mapcalc.html @@ -619,15 +619,15 @@

      Interactive input in command line

      the map title will contain only some of it, but most (if not all) of the formula will be placed into the history file for the result map. -

      Raster MASK handling

      +

      Raster mask handling

      -r.mapcalc follows the common GRASS behavior of raster MASK handling, -so the MASK is only applied when reading an existing GRASS raster map. +r.mapcalc follows the common GRASS behavior of raster mask handling, +so the mask is only applied when reading an existing GRASS raster map. This implies that, for example, the command:

       r.mapcalc "elevation_exaggerated = elevation * 3"
       
      -create a map respecting the masked pixels if MASK is active. +create a map with NULL cells for the masked-out cells if raster mask is active.

      However, when creating a map which is not based on any map, @@ -636,17 +636,19 @@

      Raster MASK handling

      r.mapcalc "base_height = 200.0" the created raster map is limited only by a computation region -but it is not affected by an active MASK. -This is expected because, as mentioned above, MASK is only applied when reading, -not when writing a raster map. -

      -If also in this case the MASK should be applied, an if() statement including the -MASK should be used, e.g.: +but it is not affected by an active raster mask. +This is expected because, as mentioned above, the mask is only applied +when reading, not when writing a raster map. +If the raster mask should be applied in this case, an if() +function including the mask raster should be used, e.g. +(assuming the mask is called MASK):

       r.mapcalc "base_height = if(MASK, 200.0, null())"
       
      -When testing MASK related expressions keep in mind that when MASK is active +

      +When testing expressions related to mask handling keep in mind that +when the raster mask is active, you don't see data in masked areas even if they are not NULL. See r.mask for details. diff --git a/raster/r.mapcalc/r3.mapcalc.html b/raster/r.mapcalc/r3.mapcalc.html index 742f5974384..46bcbcff3ae 100644 --- a/raster/r.mapcalc/r3.mapcalc.html +++ b/raster/r.mapcalc/r3.mapcalc.html @@ -449,15 +449,15 @@

      Interactive input in command line

      existing map layers. Users should therefore take care to assign program outputs raster map names that do not yet exist in their current mapsets. -

      3D GRID MASK handling

      +

      3D GRID mask handling

      -r3.mapcalc follows the common GRASS behavior of raster MASK handling, -so the MASK is only applied when reading an existing GRASS raster map. +r3.mapcalc follows the common GRASS behavior of raster mask handling, +so the mask is only applied when reading an existing GRASS raster map. This implies that, for example, the command:

       r3.mapcalc "volume_amplified = volume * 3"
       
      -create a map respecting the masked pixels if MASK is active. +create a map with NULL cells for the masked-out cells if raster mask is active.

      However, when creating a map which is not based on any map, @@ -466,19 +466,21 @@

      3D GRID MASK handling

      r3.mapcalc "volume_const = 200.0" the created raster map is limited only by a computation region -but it is not affected by an active MASK. -This is expected because, as mentioned above, MASK is only applied when reading, -not when writing a raster map. -

      -If also in this case the MASK should be applied, an if() statement including the -MASK should be used, e.g.: +but it is not affected by an active raster mask. +This is expected because, as mentioned above, the mask is only applied +when reading, not when writing a raster map. +If the raster mask should be applied in this case, an if() +function including the mask raster should be used, e.g. +(assuming the mask is called MASK):

       r3.mapcalc "volume_const = if(MASK, 200.0, null())"
       
      -When testing MASK related expressions keep in mind that when MASK is active +

      +When testing expressions related to mask handling keep in mind that +when the raster mask is active, you don't see data in masked areas even if they are not NULL. -See r.mask for details. +See r3.mask for details.

      Random number generator initialization

      The pseudo-random number generator used by the rand() function can From 6a32875bd3ba66ec5026010f6eac7ba39edbb31b Mon Sep 17 00:00:00 2001 From: Vaclav Petras Date: Wed, 29 Jan 2025 10:38:14 -0500 Subject: [PATCH 160/162] wxGUI: Use r.mask.status to get info about mask (#4519) This replaces low level checks of MASK raster in the current mapset with calls of r.mask.status. GConsole and SbMask require r.mask.status to output a potential name of the mask regerdless of mask being set or not, so this functionality still needs to be implemented first before moving this PR forward. History changes seem to be complete. --- gui/wxpython/core/gconsole.py | 6 ++++-- gui/wxpython/lmgr/statusbar.py | 26 +++++++++++++++----------- python/grass/grassdb/history.py | 11 +++++++---- 3 files changed, 26 insertions(+), 17 deletions(-) diff --git a/gui/wxpython/core/gconsole.py b/gui/wxpython/core/gconsole.py index d5fc21c5b0d..b46d19254db 100644 --- a/gui/wxpython/core/gconsole.py +++ b/gui/wxpython/core/gconsole.py @@ -856,13 +856,15 @@ def OnCmdDone(self, event): for p in task.get_options()["flags"]: if p.get("name") == "r" and p.get("value"): action = "delete" + mask_full_name = gs.parse_command("r.mask.status", format="json")["name"] + mask_name, mask_mapset = mask_full_name.split("@", maxsplit=1) gisenv = gs.gisenv() self._giface.grassdbChanged.emit( grassdb=gisenv["GISDBASE"], location=gisenv["LOCATION_NAME"], - mapset=gisenv["MAPSET"], + mapset=mask_mapset, action=action, - map="MASK", + map=mask_name, element="raster", ) diff --git a/gui/wxpython/lmgr/statusbar.py b/gui/wxpython/lmgr/statusbar.py index ac4748bfe1f..c30fde67d5c 100644 --- a/gui/wxpython/lmgr/statusbar.py +++ b/gui/wxpython/lmgr/statusbar.py @@ -74,15 +74,14 @@ class SbMask: def __init__(self, parent, giface): self.name = "mask" - self.mask_layer = "MASK" self.parent = parent self.giface = giface self.widget = Button( - parent=parent, id=wx.ID_ANY, label=_(self.mask_layer), style=wx.NO_BORDER + parent=parent, id=wx.ID_ANY, label=_("Mask"), style=wx.NO_BORDER ) self.widget.Bind(wx.EVT_BUTTON, self.OnRemoveMask) self.widget.SetForegroundColour(wx.Colour(255, 0, 0)) - self.widget.SetToolTip(tip=_("Left mouse click to remove the MASK")) + self.widget.SetToolTip(tip=_("Left mouse click to remove the raster mask")) self.giface.currentMapsetChanged.connect(self.Refresh) if not watchdog_used: self.giface.grassdbChanged.connect(self.dbChanged) @@ -94,7 +93,12 @@ def dbChanged(self, map=None, newname=None): :param str map: map that is changed :param str newname: new map """ - if self.mask_layer in {map, newname}: + mask_layer = gs.parse_command("r.mask.status", format="json")["name"].split( + "@", maxsplit=1 + )[0] + # This assumes mask is always in the current mapset (or the event is triggered + # only for the current mapset). + if mask_layer in {map, newname}: self.Refresh() self.giface.updateMap.emit() @@ -124,9 +128,7 @@ def GetWidget(self): def Refresh(self): """Show mask in the statusbar if mask file found""" - if gs.find_file( - name=self.mask_layer, element="cell", mapset=gs.gisenv()["MAPSET"] - )["name"]: + if gs.parse_command("r.mask.status", format="json")["present"]: self.Show() else: self.Hide() @@ -134,20 +136,22 @@ def Refresh(self): def OnRemoveMask(self, event): dlg = wx.MessageDialog( self.parent, - message=_("Are you sure that you want to remove the MASK?"), - caption=_("Remove MASK"), + message=_("Are you sure that you want to remove the current raster mask?"), + caption=_("Remove raster mask"), style=wx.YES_NO | wx.YES_DEFAULT | wx.ICON_QUESTION, ) if dlg.ShowModal() != wx.ID_YES: dlg.Destroy() return RunCommand("r.mask", flags="r") + mask_full_name = gs.parse_command("r.mask.status", format="json")["name"] + mask_name, mask_mapset = mask_full_name.split("@", maxsplit=1) gisenv = gs.gisenv() self.giface.grassdbChanged.emit( grassdb=gisenv["GISDBASE"], location=gisenv["LOCATION_NAME"], - mapset=gisenv["MAPSET"], - map=self.mask_layer, + mapset=mask_mapset, + map=mask_name, action="delete", element="raster", ) diff --git a/python/grass/grassdb/history.py b/python/grass/grassdb/history.py index 8c9bc2223b3..faf9e44eb4d 100644 --- a/python/grass/grassdb/history.py +++ b/python/grass/grassdb/history.py @@ -258,12 +258,13 @@ def get_initial_command_info(env_run): exec_time = datetime.now().isoformat() # 2D raster MASK presence - env = gs.gisenv(env_run) - mapset_path = Path(env["GISDBASE"]) / env["LOCATION_NAME"] / env["MAPSET"] - mask2d_present = (mapset_path / "cell" / "MASK").exists() + mask2d_status = gs.parse_command("r.mask.status", format="json", env=env_run) # 3D raster MASK presence + env = gs.gisenv(env_run) + mapset_path = Path(env["GISDBASE"]) / env["LOCATION_NAME"] / env["MAPSET"] mask3d_present = (mapset_path / "grid3" / "RASTER3D_MASK").exists() + mask3d_name = f"RASTER3D_MASK@{env['MAPSET']}" # Computational region settings region_settings = gs.region(env=env_run) @@ -271,8 +272,10 @@ def get_initial_command_info(env_run): # Finalize the command info dictionary return { "timestamp": exec_time, - "mask2d": mask2d_present, + "mask2d": mask2d_status["present"], + "mask2d_name": mask2d_status["name"], "mask3d": mask3d_present, + "mask3d_name": mask3d_name, "region": region_settings, "status": Status.RUNNING.value, } From 7f964eb1755be61032b772172d784aba89c17b63 Mon Sep 17 00:00:00 2001 From: Arohan Ajit Date: Wed, 29 Jan 2025 15:59:12 -0500 Subject: [PATCH 161/162] wxGUI: Fixed bare except in mapdisp/main.py (#5006) --- .flake8 | 4 ---- gui/wxpython/mapdisp/main.py | 2 +- 2 files changed, 1 insertion(+), 5 deletions(-) diff --git a/.flake8 b/.flake8 index c1e09d417a1..717b42fdc22 100644 --- a/.flake8 +++ b/.flake8 @@ -28,7 +28,6 @@ per-file-ignores = gui/wxpython/animation/g.gui.animation.py: E501 gui/wxpython/tplot/g.gui.tplot.py: E501 gui/wxpython/iclass/g.gui.iclass.py: E501 - gui/wxpython/mapdisp/main.py: E722 gui/wxpython/mapdisp/test_mapdisp.py: E501 gui/wxpython/mapswipe/g.gui.mapswipe.py: E501 gui/wxpython/mapwin/base.py: E722 @@ -40,9 +39,6 @@ per-file-ignores = # TODO: Is this really needed? python/grass/jupyter/__init__.py: E501 python/grass/pygrass/vector/__init__.py: E402 - # Current benchmarks/tests are changing sys.path before import. - # Possibly, a different approach should be taken there anyway. - python/grass/pygrass/tests/benchmark.py: F821 # Configuration file for Sphinx: # Ignoring import/code mix and line length. # Files not managed by Black diff --git a/gui/wxpython/mapdisp/main.py b/gui/wxpython/mapdisp/main.py index 6449bc35d7c..a19c79b5780 100644 --- a/gui/wxpython/mapdisp/main.py +++ b/gui/wxpython/mapdisp/main.py @@ -176,7 +176,7 @@ def GetLayersFromCmdFile(self): mapFile = line.split("=", 1)[1].strip() try: k, v = line[2:].strip().split("=", 1) - except: + except (ValueError, IndexError): pass render_env[k] = v continue From 89c7908aa295329708f4d88fb9c409a73b37f206 Mon Sep 17 00:00:00 2001 From: Vaclav Petras Date: Wed, 29 Jan 2025 18:35:34 -0500 Subject: [PATCH 162/162] doc: Use lowercase for 2D raster mask (#5009) --- imagery/i.smap/i.smap.html | 2 +- python/grass/grassdb/history.py | 4 ++-- raster/r.surf.contour/r.surf.contour.html | 2 +- scripts/r.fillnulls/r.fillnulls.html | 2 +- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/imagery/i.smap/i.smap.html b/imagery/i.smap/i.smap.html index bc1f7b946b2..fedf0bb3560 100644 --- a/imagery/i.smap/i.smap.html +++ b/imagery/i.smap/i.smap.html @@ -228,7 +228,7 @@

      SEE ALSO

      i.group
      for creating groups and subgroups,
      r.mapcalc -to copy classification result in order to cut out MASKed subareas, +to copy classification result in order to cut out masked subareas,
      i.gensigset to generate the signature file required by this program diff --git a/python/grass/grassdb/history.py b/python/grass/grassdb/history.py index faf9e44eb4d..1821e2ffbc1 100644 --- a/python/grass/grassdb/history.py +++ b/python/grass/grassdb/history.py @@ -257,10 +257,10 @@ def get_initial_command_info(env_run): # Execution timestamp in ISO 8601 format exec_time = datetime.now().isoformat() - # 2D raster MASK presence + # 2D raster mask presence mask2d_status = gs.parse_command("r.mask.status", format="json", env=env_run) - # 3D raster MASK presence + # 3D raster mask presence env = gs.gisenv(env_run) mapset_path = Path(env["GISDBASE"]) / env["LOCATION_NAME"] / env["MAPSET"] mask3d_present = (mapset_path / "grid3" / "RASTER3D_MASK").exists() diff --git a/raster/r.surf.contour/r.surf.contour.html b/raster/r.surf.contour/r.surf.contour.html index 0c648371292..482f12c3f0f 100644 --- a/raster/r.surf.contour/r.surf.contour.html +++ b/raster/r.surf.contour/r.surf.contour.html @@ -39,7 +39,7 @@

      Parameters:

      the known category values in the input raster map layer. -

      An existing MASK raster map is respected for both reading input +

      An existing mask raster map is respected for both reading input and writing output.

      NOTES

      diff --git a/scripts/r.fillnulls/r.fillnulls.html b/scripts/r.fillnulls/r.fillnulls.html index 7d29777face..04d060f6339 100644 --- a/scripts/r.fillnulls/r.fillnulls.html +++ b/scripts/r.fillnulls/r.fillnulls.html @@ -34,7 +34,7 @@

      NOTES

      on v.surf.rst regularized splines with tension interpolation module which interpolates the raster cell values for NULL data areas from the boundary values of the -NULL data area. An eventual raster MASK is respected during the NULL +NULL data area. An eventual raster mask is respected during the NULL data area(s) filling. The interpolated values are patched into the NULL data area(s) of the input map and saved into a new raster map.