Création d'instructions complexes

Disponible avec une licence Spatial Analyst.

Disponible avec une licence Image Analyst.

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 à la fonctionnalité fournie 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 priorité supérieur aux opérateurs relationnels (<, <=, >, >=, ==, !=), ce qui a un impact sur la manière 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’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).
    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. Puisque outAdd est une variable, aucun guillemet n’est requis lorsqu’il est utilisé en entrée de l’outil Focal Statistics suivant.

  • Tout outil peut être intégré 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]))
    Dans cet exemple, la sortie émanant de l'outil Liste d'isolignes est utilisée en entrée dans l'outil Distance euclidienne.
    dist = EucDistance(arcpy.Select_analysis("schools", "#", "Pop>2000"))
    Dans l'exemple ci-dessus, la sortie émanant de l'outil Sélectionner de la boîte à outils Analysis est utilisée en entrée dans l'outil Distance euclidienne.
    Remarque :

    Puisque l’outil intégré crée une sortie qui n’est qu’une étape intermédiaire d’un plus grand workflow, l’argument en sortie peut être substitué au symbole hash « # », permettant à l’outil de créer un chemin unique et un nom 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é.
    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 en sortie optionnel est créé dans l'espace de travail avec le nom "out_bklink".
    bklink = "C:/results/out_bklink"
    costDist = CostDistance("source", "in_cost", 15000, bklink) 
    costOut = CostPath("dest", costDist, bklink)
    Dans l’exemple ci-dessus, le raster d’antécédence est défini par une variable avant que l’outil ne soit exécuté. Les variables désignent l'emplacement et le nom que le raster d'antécédence en aura sortie.

Rubriques connexes