Algèbre spatiale dans Spatial Analyst

Disponible avec une licence Spatial Analyst.

L’algèbre spatiale vous donne accès aux outils, opérateurs, fonctions et classes Spatial Analyst via l’algèbre. Dans sa forme la plus basique, un raster en sortie est spécifié à gauche d’un signe égal (=) tandis que les outils, les opérateurs et leurs paramètres se situent à droite. Consultez l’exemple ci-dessous :

from arcpy.sa import *
outShade = Hillshade("inelevation.tif", 99, 33)

L’instruction précitée calcule un ombrage, en déterminant l’éclairage par le soleil qui est à un azimut de 99 degrés et à une altitude de 33 degrés, et crée un objet Raster nommé outShade pour stocker les résultats.

L’algèbre spatiale peut exécuter des instructions simples, mais le langage prend toute sa puissance lors de la création d’instructions et de modèles complexes. L’algèbre spatiale étant intégré dans Python, la personne chargée de la modélisation a accès à toutes les fonctionnalités de Python, de ArcPy et de ses extensions (modules, classes, fonctions et propriétés).

Vous pouvez explorer ces nombreuses facettes au fur et à mesure de l’évolution de vos besoins. La présentation rapide suivante vous permettra de démarrer rapidement.

Essentiel de l’exécution de l’algèbre spatiale

Il existe trois façons d’utiliser l’algèbre spatiale :

  • L'outil Calculatrice raster
  • La fenêtre Python
  • Un environnement de développement intégré (IDE) Python

Calculatrice raster

L’outil Calculatrice raster exécute des expressions d’algèbre spatiale. Il offre une interface de calculatrice à partir de laquelle il est possible de créer la plupart des instructions d’algèbre spatiale en cliquant sur des boutons. L’outil Calculatrice raster peut être utilisé de manière autonome, mais il peut aussi être utilisé dans ModelBuilder. L’outil permet donc d’intégrer la puissance de l’algèbre spatiale dans ModelBuilder.

Interface utilisateur de Calculatrice raster
Interface utilisateur de Calculatrice raster

Dans l’expression ci-dessus, trois rasters sont combinés par la multiplication des deuxième et troisième rasters et par l’addition de ce produit (résultat) au premier. Les opérateurs suivent un ordre de précédence défini.

L’outil Calculatrice raster n’est pas conçu pour remplacer d’autres outils Spatial Analyst. Continuez à utiliser les autres outils pour les calculs appropriés. Par exemple, utilisez l'outil Pente pour effectuer les calculs de pente. L’outil Calculatrice raster est conçu pour exécuter des instructions algébriques unilignes.

Puisque Calculatrice raster est un outil de géotraitement, il peut être intégré dans ModelBuilder comme tous les outils. Pour plus d’informations, consultez les rubriques suivantes :

Fenêtre Python

La fenêtre Python vous permet d’utiliser des outils de géotraitement et des fonctionnalités Python depuis ArcGIS Pro. Les fonctionnalités Python que vous exécutez à partir de cette fenêtre varient d’une simple ligne de code à des blocs de code complexes de plusieurs lignes. La fenêtre Python permet également d’accéder à des fonctionnalités supplémentaires via des bibliothèques et des modules Python tiers.

Pour lancer la fenêtre Python, accédez à l’onglet Analysis (Analyse), cliquez sur le menu déroulant Python et choisissez le bouton de la fenêtre Python Afficher la fenêtre Python. Vous pouvez également accéder à l’onglet View (Afficher), puis, dans le groupe Windows (Fenêtres), cliquer sur la fenêtre Python.

Exemple de fenêtre Python

Dans la séquence précitée d’instructions, le paquetage de site ArcPy, les environnements de géotraitement et les modules Spatial Analyst sont importés, l’espace de travail est défini, l’outil Pente est exécuté et la sortie est enregistrée définitivement. Lorsque vous appuyez sur Entrée à la fin d’une instruction, cette instruction est immédiatement exécutée.

Certaines fonctions de la fenêtre Python incluent notamment le remplissage automatique de lignes, l’utilisation de variables, ainsi que l’accès aux fonctionnalités Python et ArcPy.

Environnement de développement intégré Python

Bien qu’il n’y ait aucune limite au nombre d’instructions qui peuvent être entrées dans la fenêtre Python, cela peut devenir pénible pour créer des modèles plus complexes. Les outils, opérateurs, fonctions et classes des modules Spatial Analyst sont également accessibles depuis votre environnement de développement intégré favori. Démarrez votre IDE préféré et entrez les instructions souhaitées.

Dans le script suivant, ArcPy, les environnements de géotraitement et le module Spatial Analyst sont importés, les variables sont définies, l’extension Spatial Analyst est extraite, l’outil Pente est exécuté et la sortie est enregistrée.

# Name: Slope
# Description: Identifies the rate of maximum change
#               in z-value from each cell.
# Requirements: Spatial Analyst Extension


# Import system modules
import arcpy
from arcpy import env
from arcpy.sa import *

# Set environment settings
env.workspace = "C:/data"

# Set local variables
inRaster = "elevation"
outMeasurement = "DEGREE"
zFactor = 0.3043

# Check out the ArcGIS Spatial Analyst extension license
arcpy.CheckOutExtension("Spatial")

# Run Slope
outSlope = Slope(inRaster, outMeasurement, zFactor)

# Save the output
outSlope.save("C:/output/outslope02")

Comme c’est le cas avec la fenêtre Python, un IDE donne accès à toutes les fonctionnalités Python et ArcPy disponibles.

Utiliser des outils

Tous les outils Spatial Analyst qui créent un raster en sortie sont disponibles dans le format algébrique. Le nom du jeu de données peut être utilisé s’il se trouve dans la fenêtre Contents (Contenu) ou dans l’espace de travail courant ; dans le cas contraire, vous devez saisir le chemin en entier.

# In the following statement, indem is either  
#   in the TOC or in the current workspace
outRas = Aspect("indem")

# In the following statement the full path is specified
outRas2 = Aspect("C:/Data/indem2.tif")

La sortie d'une instruction peut être entrée dans une instruction suivante.

outRas = Select("inras.tif", "Value > 105")

# outRas is variable defined by the previous statement and is not quoted
outdist = EucDistance(outRas)

Utiliser des opérateurs

L’algèbre spatiale prend en charge une série d’opérateurs (par exemple, +, - et *). Ces mêmes opérateurs existent également dans Python, mais sous une forme adaptée de sorte que l’algèbre spatiale puisse gérer les objets Raster différemment. Par exemple, les éléments suivants additionnent deux nombres dans une variable :

# set outVar to 14 using the Python + operator
outVar = 5 + 9

Pour souligner que l’instruction doit fonctionner sur les rasters (autrement dit, pour utiliser l’opérateur Spatial Analyst), vous devez redéfinir le jeu de données en tant que Raster. L’exemple suivant utilise l’opérateur Spatial Analyst + pour additionner deux rasters :

outRas = Raster("inras1.tif") + Raster("inras2.tif")

Les opérateurs peuvent accepter une combinaison de rasters et de nombres. Par exemple, les instructions suivantes ajoutent une valeur constante de 8 à toutes les cellules dans le raster en entrée :

outRas = Raster("inras1.tif") + 8

Créer des expressions complexes

Les outils et opérateurs peuvent être enchaînés dans une même instruction. L’exemple suivant exécute plusieurs outils et opérateurs dans chaque expression :

outRas = Slope("indem" * 2) / 57
outdist = EucDistance(ExtractByAttributes("inras", "Value > 105"))

Les parenthèses permettent de déterminer l’ordre du traitement. Considérez les deux exemples suivants, qui utilisent les mêmes opérateurs mais qui donnent des résultats différents en raison de l'utilisation de parenthèses :

outRas1 = (Raster("inras1") + Raster("inras2")) / Raster("inras3")

et

outRas2 = Raster("inras1") + Raster("inras2") / Raster("inras3")

Dans la première instruction, inras1 est additionné à inras2 et le résultat est divisé par inras3. Sans les parenthèses, comme dans la deuxième instruction, inras2 serait divisé par inras3 et le résultat serait ajouté à inras1.

Lors de l’emploi consécutif de plusieurs opérateurs booléens (~, &, ^, |) ou relationnels (<, <=, >, >=, ==, !=) dans une même expression, il convient d’utiliser des parenthèses. Par exemple, les parenthèses sont requises dans l’expression suivante : (a>2) & (a<5). En l’absence de parenthèses, l’expression génère une erreur : a>2 & a<5. L’expression suivante est exécutée parce que les parenthèses sont utilisées :

outRas = (Raster("a") > 2) & (Raster("a") < 5)
Approfondissement :

Dans certaines expressions, les parenthèses peuvent ne pas suffire, elles devront plutôt être réécrites. Par exemple, une expression ayant la forme a< b < c n’est pas exécutée et l’ajout de parenthèses modifie sa signification. Par conséquent, pour être exécutée correctement, cette expression doit être réécrite sous la forme (a< b) & (b< c).

Utiliser des classes

Les classes sont utilisées dans les outils d’algèbre spatiale pour les paramètres qui ont plusieurs arguments. L’utilisation de classes pour les paramètres en entrée vous permet d’accéder aux arguments individuels d’un paramètre pour interroger, modifier et ajouter des arguments. Voici un exemple d’utilisation d’une classe :

outRas = FocalStatistics("inRaster", NbrCircle(5, "CELL"), "SUM")

Dans l'instruction ci-dessus, la somme est calculée pour chaque cellule dans un voisinage circulaire de cinq cellules. NbrCircle est une classe qui crée un objet NbrCircle.

Voici un exemple de classe de tables de classification. Vous pouvez entrer un nombre quelconque de valeurs dans une classe de classification.

outReclass = Reclassify("inRaster", "VALUE", RemapRange([[0, 1], [3, 10], [4, 8]]))

Dans l’instruction ci-dessus, une classe, RemapRange, permet de définir la reclassification des valeurs en entrée. Les cellules dont la valeur inRaster est 0 se voient attribuer la valeur 1 dans outReclass, celles dont la valeur est 3 se voient attribuer la valeur 10, et 4 la valeur 8.

Fonctions d’algèbre spatiale qui produisent des entités, des tables ou des fichiers en sortie

Seuls les outils Spatial Analyst qui produisent un raster en sortie sont implémentés à l’aide du format algébrique. Dans le cas des outils Spatial Analyst qui produisent une sortie qui n’est pas un raster (par exemple, entités, tables ou fichiers texte), la sortie est spécifiée en tant qu’un paramètre de l’outil dans les parenthèses. Notez la syntaxe dans l'exemple suivant, qui crée des isolignes en tant que jeu de données d'entité polyligne en sortie :

indem = "C:/Data/indem"
contourInterval = 100
Contour(indem, "C:/output/outcontours", contourInterval)

Suggestions pour l’exécution d’instructions d’algèbre spatiale

Dans tous les exemples d’algèbre spatiale qui suivent, la sortie est un objet Raster. L’objet Raster pointe sur un jeu de données raster temporaire qui sera supprimé à la fin de la session ArcGIS, à moins d’être explicitement enregistré. Pour enregistrer définitivement le jeu de données temporaire, appelez la méthode save sur l’objet Raster (voir les deux exemples ci-dessous).

Il est recommandé de définir les environnements d’analyse adéquats, plus particulièrement Espace de travail courant, Étendue, Taille de cellule, Méthode de projection de la taille de cellule, Masque et Capturer, avant d’implémenter l’opérateur ou l’outil d’algèbre spatiale.

Exemple présentant l’environnement de l’espace de travail :

import arcpy 
from arcpy import env 
from arcpy.sa import *

env.workspace = "C:/sapyexamples/data" 

outHillshade = Hillshade("elevation", 180, 75, "SHADOWS", 1)

outHillshade.save("outhillshd01")

Dans l’instruction ci-dessus, l’espace de travail est défini, outhillshd01 sera donc enregistré dans C:/sapyexamples/data.

Il est conseillé de définir des classes pour toute entrée complexe d’un outil d’algèbre spatiale sur une variable et d’utiliser la variable dans l’instruction. Dans l’instruction ci-dessous, un objet classe RemapRange est défini sur une variable, myRemapRange, et est utilisé en entrée dans l’outil Reclassification.

import arcpy 
from arcpy import env
from arcpy.sa import *

env.workspace = "C:/sapyexamples/data" 
myRemapRange = RemapRange([[-3, 0, 0], [0, 1.75, 25], [1.75, 3.5, 50], 
                           [3.5, 5.25, 75], [5.25, 7, 100]]) 

outReclassRR = Reclassify("inreclass", "VALUE", myRemapRange)

outReclassRR.save("rclassremran")

Lectures complémentaires

Pour mieux comprendre ArcPy, consultez ces rubriques :

Pour obtenir plus d’informations sur le géotraitement dans Python, reportez-vous aux rubriques suivantes :

Rubriques connexes