Création d'instructions complexes
Un des aspects les plus puissants de l'algèbre spatiale est la capacité à créer une instruction comprenant plusieurs opérateurs et outils dans une seule instruction. Etre capable d'entrer plusieurs opérateurs et outils dans une seule instruction vous permet de modéliser plus facilement des interactions complexes et le temps de traitement global peut être réduit. Les expressions complexes ne se limitent pas aux fonctionnalités fournies par les outils de l'Extension ArcGIS Spatial Analyst, elles peuvent inclure des outils d'autres boîtes à outils. Lorsque vous créez des instructions complexes, certaines règles d'interaction spécifiques peuvent être requises pour une exécution correcte.
Règles pour les instructions complexes
- Dans les instructions complexes, seule la sortie qui se trouve à gauche du signe égal devient un objet raster.
- L'ordre de l'exécution d'une expression est déterminé par les parenthèses et le niveau de précédence des opérateurs utilisés. Pour plus d'informations sur la précédence des opérateurs, consultez la rubrique Table de précédence des opérateurs.
outRaster = Raster("inras1") + Raster("inras2") / Raster("inras3")
Dans l'instruction ci-dessus, inras2 est divisé par inras3 et le résultat est ajouté à inras1.
Remarque :Il est important de connaître le niveau de précédence des opérateurs. Par exemple, les opérateurs booléens (~, &, ^, |) ont un niveau de précédence supérieur à celui des opérateurs relationnels (<, <=, >, >=, ==, !=), qui ont un impact sur la façon dont vous construisez vos expressions. Pour plus d'informations sur la précédence des opérateurs, consultez la rubrique Table de précédence des opérateurs.
- Vous pouvez utiliser des parenthèses pour contrôler l'ordre d'exécution. Les parenthèses peuvent être imbriquées, auquel cas l'expression comprise dans les parenthèses les plus intérieures est traitée en premier, quelle que soit la valeur de précédence des opérateurs.
outRas = Raster("inras1") / (Raster("inras2") + Raster("inras3"))
Dans l'instruction ci-dessus, inras1 est divisé par la somme de inras3 et de inras3.
- Lors de l'utilisation de plusieurs opérateurs booléens (~, &, ^, |) et/ou relationnels (<, < =, >, > =, ==! =) consécutivement dans une même expression, les parenthèses doivent être utilisées. Par exemple, les parenthèses sont requises dans l'expression suivante (a > 2) & (a< 5).
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 ne sera pas exécutée et l'ajout de parenthèses modifiera la signification de l'expression. Par conséquent, pour être exécutée correctement, cette expression doit être réécrite sous la forme (a< b) & (b< c).
- Les opérateurs, les variables, les nombres et les outils peuvent tous être utilisés dans des instructions complexes.
outRas = Sin("inras1") + Raster("inras2") + 8
const = 10 outRas = Raster("inras1") + 2 * const
- Toutes les règles qui s'appliquent aux parenthèses pour les expressions créées avec des opérateurs s'appliquent également aux instructions créées avec des outils et des opérateurs. L'outil ou l'opérateur placé entre les parenthèses les plus à l'intérieur est traité en premier.
num = 10 outRas = (ZonalStatistics((Raster("inras2") + Raster("inras3")), "Value", "valueras", "MAXIMUM") - num ) / 8
Dans l'instruction ci-dessus, la somme de inras2 et de inras3 est utilisée en entrée dans l'outil Statistiques zonales. La valeur num est ensuite soustraite avant d'être divisée.
- Dans une série d'instructions, la sortie d'une instruction précédente peut être utilisée en entrée dans une instruction suivante.
outAdd = Raster("inras1") + Raster("inras2") outRas = FocalStatistics(outAdd, NbrCircle(5, "Map"), "MEAN")
Dans l'exemple ci-dessus, outAdd est un objet raster créé par la somme de inras1 et de inras2. Comme outAdd est une variable, aucun guillemet n'est requis lorsque cette variable est utilisée en entrée dans l'outil Statistiques focales suivant.
- N'importe quel outil peut être incorporé dans un autre outil, que le résultat soit un raster ou une classe d'entités. La sortie requise émanant de l'outil incorporé est utilisée comme entrée dans l'outil externe.
outdistance = EucDistance(ContourList("elevation", "#", [1500]))
dist = EucDistance(arcpy.Select_analysis("schools", "#", "Pop>2000"))
Remarque :Comme l'outil intégré crée une sortie qui est seulement une étape intermédiaire dans un workflow plus vaste, l'argument en sortie peut être remplacé par le symbole dièse "#", ce qui permet à l'outil de créer un chemin d'accès et un nom unique pour cette sortie temporaire. L'utilisation du symbole dièse est traitée plus en détail dans la section Sortie d'outil de la rubrique d'aide Utilisation d'outils dans Python.
- Pour utiliser une sortie optionnelle d'un outil dans une expression, le nom du jeu de données ou la variable représentant le jeu de données doit être utilisé. Dans l'exemple ci-dessus, le raster d'antécédence en sortie optionnel est créé dans l'espace de travail avec le nom "out_bklink".
costDist = CostDistance("source", "in_cost", 15000, "out_bklink") costOut = CostPath("dest", costDist, "out_bklink")
Dans l'exemple ci-dessus, le raster d'antécédence est défini par une variable avant l'exécution de l'outil. Les variables désignent l'emplacement et le nom que le raster d'antécédence en aura sortie.bklink = "C:/results/out_bklink" costDist = CostDistance("source", "in_cost", 15000, bklink) costOut = CostPath("dest", costDist, bklink)