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 .
anebo z nástrojové lištyJiž hotový skript lze spustit přímo z menu správce vrstev .
anebo z nástrojové lištyPo 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).
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.
Tip
Cesta ke skriptu je součástí historie příkazové řádky. Z ní můžeme vyvolat skript opakovaně.
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
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
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.
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'))