Spuštění skriptu

Začneme jednoduchým skriptem, který vypíše statistiku rastrové mapy. V našem případě digitálního modelu terénu (dmt).

#!/usr/bin/env python3

from grass.pygrass.modules import Module

rast='dmt'

# set computational region
Module('g.region', raster=rast)

# compute & print statistics
Module('r.univar', map=rast)

Soubor (ke stažení zde) uložte na disk.

Bližší popis kódu nechme na kapitolu ndvi-python a PyGRASS.

Spuštění z GUI

Nejjednodušší cestou jak vytvořit a spustit skript, je použít nástroje grafického uživatelského rozhraní systému GRASS. Otevřeme integrovaný textový editor dostupný z menu File ‣ Simple Python editor anebo z nástrojové lišty grass-python.

../_images/python-editor.png

Obr. 2 Nativní Python editor systému GRASS. Skript spustíme pomocí tlačítka grass-execute.

Již hotový skript lze spustit přímo z menu správce vrstev File ‣ Launch script anebo z nástrojové lišty grass-script-load.

Po výběru skriptu si GRASS zkontroluje, zda je skript spustitelný a zda je tzv. v spouštěcí cestě. V připadě, že tomu tak není, tak se objeví příslušné dialogy, které potvrdíme (Yes).

../_images/launch-permission.png

Obr. 3 Dialog pro nastavení spustitelnosti.

../_images/launch-path.png

Obr. 4 Dialog pro přidání adresáře se skriptem do spouštěcí cesty.

Poznámka

Přidání skriptu do spouštěcí cesty má tu výhodu, že lze skript znovu spustit z příkazové řádky správce vrstev jako kterýkoliv modul systému GRASS.

Skript se poté spustí, výpis je přesměrován do okna správce vrstev.

../_images/launch-output.png

Obr. 5 Výsledek spuštění skriptu v okně správce vrstev.

Tip

Cesta ke skriptu je součástí historie příkazové řádky. Z ní můžeme vyvolat skript opakovaně.

../_images/lmgr-launch-cmd.png

Obr. 6 Spuštění skriptu z příkazové řádky správce vrstev.

Spuštění jako batch job

Pokud je definována proměnná prostředí GRASS_BATCH_JOB, tak GRASS spustí soubor uvedený jako hodnota této proměnné. Po doběhnutí skriptu se GRASS sám ukončí.

Příklad pro Linux:

export GRASS_BATCH_JOB=/home/martin/skripty/rastr_stats.py
grass78 /opt/grassdata/gismentors/user1

Příklad pro MS Windows (spuštěno z OSGeo4W Shell):

set GRASS_BATCH_JOB=C:\users\martin\skripty\rastr_stats.py
grass78 C:\users\martin\grassdata\gismentors\user1

Důležité

Tento způsob nemusí být pod MS Windows funkční v případě, že je nainstalován v OS systémový Python (např. díky Esri ArcGIS). V tomto případě doporučujeme postup popsaný níže.

Poznámka

GRASS v tomto případě spouštíme s mapsetem user1 v lokaci gismentors. Pokud bysme tento parametr vynechali, tak GRASS spustí skript v posledně navštíveném mapsetu.

Výstup může vypadat následovně:

Starting GRASS GIS...
Cleaning up temporary files...
Executing </home/martin/skripty/rastr_stats.py> ...
 100%
total null and non-null cells: 220941666
total null cells: 94752766

Of the non-null cells:
----------------------
n: 126188900
minimum: 49.3714
maximum: 1580.95
range: 1531.57
mean: 451.515
mean of absolute values: 451.515
standard deviation: 182.075
variance: 33151.4
variation coefficient: 40.3254 %
sum: 56976182855.044
Execution of </home/martin/skripty/rastr_stats.py> finished.
Cleaning up default sqlite database ...
Cleaning up temporary files...

Proměnnou prostředí deaktivujeme pomocí příkazu unset (pro Linux).

unset GRASS_BATCH_JOB

Pod MS Windows pomůže trik s prázdnout hodnotou:

set GRASS_BATCH_JOB=

Poté se GRASS bude chovat po startu již standardně.

Od verze GRASS GIS 7.6 lze použít místo proměnné prostředí GRASS_BATCH_JOB elegatnější cestu přes přepínač --exec.

Varianta pro Linux:

grass78 /opt/grassdata/gismentors/user1 --exec /home/martin/skripty/rastr_stats.py

Varianta pro MS Windows (v OSGeo4W Shell):

py3_env
grass78 C:\users\martin\grassdata\gismentors\user1 --exec python3 C:\users\martin\skripty\rastr_stats.py
../_images/windows-exec.png

Obr. 7 Spuštění skriptu z příkazové řádky OSGeo4W.

Spuštění explicitně

Ve všech výše zmíněných příkladech vždy systém GRASS spouštíme explicitně. To není nutné, stačí ve skriptu nastavit cestu k instalaci systému GRASS (proměnná prostředí GISBASE) a datům (tj. lokaci a mapset) - pomocí funkce init().

#!/usr/bin/env python3

import os
import sys

os.environ['GISBASE'] = '/usr/lib/grass78'

sys.path.insert(0, os.path.join(os.environ['GISBASE'], 'etc', 'python'))
import grass.script.setup as gsetup

gsetup.init(os.environ['GISBASE'], '/opt/grassdata', 'gismentors', 'user1')

...

Po této úpravě lze skript spustit přímo bez nutnosti spouštět GRASS GIS jako takový.

python3 /home/martin/skripty/rastr_stats.py

Pod MS Windows nahraďte defici gisbase a cestu k lokaci:

os.environ['GISBASE'] = r'C:\OSGeo4W64\apps\grass\grass78'
...
gsetup.init(os.environ['GISBASE'], r'C:\users\martin\grassdata', 'gismentors', 'user1')

Skript je nutné spustit z OSGeo4W Shell (před spustěním skriptu je nutné zavolat py3_env, který nastaví prostředí pro Python 3):

py3_env
python3 C:\users\martin\skripty\rastr_stats.py
../_images/windows-launch.png

Obr. 8 Spuštění skriptu z příkazové řádky OSGeo4W.

Spuštění v textovém editoru (PyCharm, MS Windows)

Následuje návod pro textový editor PyCharm. Postup nastavení editoru pro prostředí OSGeo4W v operačním systému MS Windows je součástí školení GeoPython pro začátečníky.

../_images/windows-pycharm.png

Obr. 9 Spuštění skriptu z textového editoru PyCharm.

Tip

Do skriptu, který nastavuje prostředí, můžete přidat definici cest pro instalaci GRASS GIS. Po této úpravě již nemusíte ve vašich skriptech pro GRASS GIS uvádět následujícící řádky:

os.environ['GISBASE'] = r'C:\OSGeo4W64\apps\grass\grass78'
sys.path.insert(0, os.path.join(os.environ['GISBASE'], 'etc', 'python'))

Otevřete soubor C:\OSGeo4W64\bin\python-qgis.bat (nebo python-qgis-ltr.bat) a přidejte na jeho konec dvě následující řádky:

set GISBASE=%OSGEO4W_ROOT%\apps\grass\grass78
set PYTHONPATH=%GISBASE%\etc\python;%PYTHONPATH%

Ideálně uložte toto nastavení mimo soubor python-qgis.bat. Vyhnete se tak tomu, že při další aktualizaci QGISu o tyto úpravy přijdete.

Spuštění pomocí BAT souboru pod MS Windows

Skript lze spustit i přímo pomocí řídícího BAT souboru, který nastaví prostředí nutné pro běh systému GRASS. Minimalistický příklad níže.

@echo off

set OSGEO4W_ROOT=C:\OSGeo4W64

call %OSGEO4W_ROOT%\bin\o4w_env.bat
call %OSGEO4W_ROOT%\bin\py3_env.bat

set GISBASE=%OSGEO4W_ROOT%\apps\grass\grass78
set PYTHONPATH=%GISBASE%\etc\python;%PYTHONPATH%

python rastr_stats.py

pause

Ze samotného Python skriptu vypadnou přebytečné dvě řádky:

os.environ['GISBASE'] = r'C:\OSGeo4W64\apps\grass\grass78'
sys.path.insert(0, os.path.join(os.environ['GISBASE'], 'etc', 'python'))