Einführung in die Verwendung von Map Algebra in Spatial Analyst

Mit der Spatial Analyst-Lizenz verfügbar.

Mit Map Algebra können Sie mit Hilfe von Algebra auf die Werkzeuge, Operatoren, Funktionen und Klassen von Spatial Analyst zugreifen. In seiner einfachsten Form wird ein Ausgabe-Raster links von einem Gleichheitszeichen (=) angegeben und die Werkzeuge, Operatoren und ihre Parameter rechts davon. Beispiel:

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

Mit der obigen Anweisung wird eine Schummerung berechnet, wobei die Beleuchtung bei einem Azimut der Sonne von 99 Grad und einer Höhe von 33 Grad bestimmt wird. Zum Speichern der Ergebnisse wird ein als outShade benanntes Raster-Objekt erstellt.

Mit Map Algebra können einfache Anweisungen ausgeführt werden, die Leistungsfähigkeit der Sprache wird jedoch beim Erstellen komplexer Anweisungen und Modelle deutlich. Da Map Algebra in Python integriert worden ist, stehen alle Funktionen von Python und ArcPy und ihren Erweiterungen (Module, Klassen, Funktionen und Eigenschaften) zur Verfügung.

Mit zunehmenden Anforderungen können Sie viele Aspekte von Map Algebra erkunden. Der folgende kurze Überblick veranschaulicht die wesentlichen ersten Schritte.

Die Grundlagen des Ausführens von Map Algebra

Es gibt drei Verwendungsmöglichkeiten für Map Algebra:

  • Das Werkzeug Raster berechnen
  • Das Python-Fenster
  • Ihre bevorzugte IDE (Integrated Development Environment, integrierte Entwicklungsumgebung) für Python

Raster berechnen

Mit dem Werkzeug Raster berechnen werden Map Algebra-Ausdrücke ausgeführt. Das Werkzeug verfügt über eine Benutzeroberfläche für die Berechnung, auf der die meisten Map Algebra-Anweisungen durch Klicken auf Schaltflächen erstellt werden können. Raster berechnen kann als eigenständiges Werkzeug verwendet werden, es kann jedoch auch in ModelBuilder verwendet werden. Infolgedessen kann Map Algebra in ModelBuilder integriert werden.

Raster berechnen (Benutzeroberfläche)
Hier ist die Benutzeroberfläche "Raster berechnen" dargestellt.

Im obigen Ausdruck werden drei Raster kombiniert, indem das zweite mit dem dritten Raster multipliziert und deren Ergebnis zum ersten Raster addiert wird. Beachten Sie, dass Operatoren eine festgelegte Rangordnung aufweisen.

Das Werkzeug Raster berechnen soll keine anderen Spatial Analyst-Werkzeuge ersetzen. Verwenden Sie die anderen Werkzeuge weiterhin für die entsprechenden Berechnungen. Verwenden Sie z. B. das Werkzeug Neigung für Neigungsberechnungen. Das Werkzeug Raster berechnen ist zum Ausführen einzeiliger algebraischer Anweisungen bestimmt.

Da es sich bei Raster berechnen um ein Geoverarbeitungswerkzeug handelt, kann es wie alle Werkzeuge in ModelBuilder integriert werden. Weitere Informationen finden Sie in den folgenden Themen:

Python-Fenster

Über das Fenster Python können Sie Geoverarbeitungswerkzeuge und Python-Funktionen in ArcGIS Pro verwenden. Die Python-Funktionen, die Sie über dieses Fenster ausführen, reichen von einzeiligen bis zu komplexen mehrzeiligen Codeblöcken. Das Fenster Python bietet außerdem die Möglichkeit, mithilfe von Python-Modulen und -Bibliotheken von Drittanbietern auf weitere Funktionen zuzugreifen.

Sie können das Fenster Python aufrufen, indem Sie auf der Registerkarte Analyse auf das Dropdown-Menü Python klicken und die Schaltfläche für das Fenster Python auswählen Python-Fenster anzeigen. Sie können aber auch auf der Registerkarte Ansicht in der Gruppe Fenster auf das Fenster Python klicken.

Beispiel für das Python-Fenster

In der Anweisungssequenz oben werden das ArcPy-Site-Paket, die Geoverarbeitungsumgebungen und die Spatial Analyst-Module importiert; der Workspace wird festgelegt; das Werkzeug Neigung wird ausgeführt; und die Ausgabe wird dauerhaft gespeichert. Wenn Sie am Ende der Anweisung die Eingabetaste drücken, wird die Anweisung sofort ausgeführt.

Zu den Features des Python-Fensters gehören integrierte automatische Vervollständigung von Zeilen, die Verwendung von Variablen sowie Zugriff auf die Funktionen von Python und ArcPy.

Integrierte Entwicklungsumgebung für Python

Obwohl die Anzahl der Anweisungen, die in das Python-Fenster eingegeben werden können, nicht begrenzt ist, kann das Erstellen komplexerer Modelle umständlich sein. Sie können auf die Werkzeuge, Operatoren, Funktionen und Klassen der Spatial Analyst-Module auch von Ihrer bevorzugten integrierten Entwicklungsumgebung aus zugreifen. Starten Sie die bevorzugte IDE, und geben Sie die gewünschten Anweisungen ein.

Im folgenden Skript werden ArcPy, die Geoverarbeitungsumgebungen und das Spatial Analyst-Modul importiert; die Variablen werden festgelegt; die Erweiterung wird ausgecheckt; das Werkzeug Neigung wird ausgeführt; und die Ausgabe wird gespeichert.

# 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")

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

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

Wie bei dem Python-Fenster bietet eine IDE Zugriff auf allen verfügbaren Python- und ArcPy-Funktionen.

Arbeiten mit Werkzeugen

Alle Spatial Analyst-Werkzeuge, die ein Raster ausgeben, sind in algebraischer Form verfügbar. Der Dataset-Name kann verwendet werden, wenn er im Fenster Inhalt oder im aktuellen Workspace vorhanden ist. Andernfalls muss der vollständige Pfad eingegeben werden.

# 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")

Die Ausgabe aus einer Anweisung kann in eine nachfolgende Anweisung eingegeben werden.

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

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

Arbeiten mit Operatoren

Von Map Algebra wird eine Reihe von Operatoren (z. B. +, - und *) unterstützt. In Python gibt es dieselben Operatoren, für Map Algebra sind sie jedoch verändert, damit sie Raster-Objekte anders verarbeiten. Im Folgenden werden z. B. zwei Zahlen zu einer Variable addiert:

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

Um zu kennzeichnen, dass die Anweisung für Raster gelten soll (das heißt, dass der Spatial Analyst-Operator verwendet werden soll), muss das Dataset als Raster verarbeitet werden. Im folgenden Beispiel wird der Spatial Analyst-Operator + verwendet, um zwei Raster zu addieren:

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

Operatoren können eine Mischung aus Rastern und Zahlen verarbeiten. Im Folgenden wird z. B. zu allen Zellen im Eingabe-Raster der konstante Wert 8 addiert:

outRas = Raster("inras1") + 8

Erstellen von komplexen Ausdrücken

Werkzeuge und Operatoren können zu einer einzelnen Anweisung verknüpft werden. Im folgenden Beispiel werden in jedem Ausdruck mehrere Werkzeuge und Operatoren ausgeführt:

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

Klammern können dazu verwendet werden, die Reihenfolge der Verarbeitung zu steuern. Betrachten Sie die folgenden beiden Beispiele, in denen dieselben Operatoren verwendet werden, die jedoch aufgrund der Verwendung von Klammern unterschiedliche Ergebnisse haben:

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

und

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

In der ersten Anweisung wird inras1 zu inras2 addiert, und das Ergebnis wird durch inras3 dividiert. Ohne die Klammern, wie bei der zweiten Anweisung, würde inras2 durch inras3 dividiert, und das Ergebnis würde zu inras1 addiert.

Wenn mehrere boolesche (~, &, ^, |) bzw. relationale (<, <=, >, >=, ==, !=) Operatoren nacheinander in einem einzigen Ausdruck verwendet werden, müssen Sie Klammern verwenden. Klammern sind z. B. in folgendem Ausdruck erforderlich: (a>2) & (a<5). Wenn keine Klammern verwendet werden, tritt bei dem Ausdruck ein Fehler auf: a>2 & a<5. Der folgende Ausdruck wird ausgeführt, da Klammern verwendet werden:

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

Für manche Ausdrücke sind möglicherweise nicht einfach nur Klammern erforderlich, sondern sie müssen möglicherweise umgeschrieben werden. Ein Ausdruck in der Form von a < b < c wird z. B. nicht ausgeführt, und durch Hinzufügen von Klammern wird die Bedeutung des Ausdrucks verändert. Um diesen Ausdruck erfolgreich auszuführen, muss er daher in der Form von (a < b) & (b < c) umgeschrieben werden.

Verwenden von Klassen

Klassen werden in Map Algebra-Werkzeugen als Parameter mit mehreren Argumenten verwendet. Durch Verwendung von Klassen als Eingabeparameter können Sie auf die einzelnen Argumente eines Parameters zugreifen, um diese abzufragen, zu ändern und um Argumente hinzuzufügen. Unten sehen Sie ein Beispiel, in dem die Verwendung einer Klasse dargestellt wird:

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

In der Anweisung oben wird die Summe für jede Zelle innerhalb einer kreisförmigen Nachbarschaft von fünf Zellen berechnet. NbrCircle ist eine Klasse, die ein NbrCircle-Objekt erstellt.

Unten sehen Sie ein Beispiel für eine Remap-Tabellen-Klasse. In eine Remap-Klasse kann eine beliebige Anzahl von Werten eingegeben werden.

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

In der Anweisung oben wird eine Klasse, RemapRange, verwendet, um die Reklassifizierung der Eingabewerte zu definieren. Die Zellen mit dem Wert 0 in inRaster werden in outReclass 1 zugewiesen, 3 wird 10 und 4 wird 8 zugewiesen.

Map Algebra-Funktionen, die Features, Tabellen oder Dateien ausgeben

Nur Spatial Analyst-Werkzeuge, die ein Raster erzeugen, werden für die Verwendung des algebraischen Formats implementiert. Für Spatial Analyst-Werkzeuge, die eine andere Ausgabe als Raster erzeugen (z. B. Features, Tabellen oder Textdateien), wird die Ausgabe im Werkzeug als Parameter in Klammern angegeben. Beachten Sie die Syntax im folgenden Beispiel, in dem Konturlinien als Ausgabe-Polylinien-Feature-Dataset erstellt werden:

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

Vorschläge zum Ausführen von Map Algebra-Anweisungen

In allen Map Algebra-Beispielen unten wird ein Raster-Objekt ausgegeben. Das Raster-Objekt verweist auf ein temporäres Raster-Dataset, das am Ende der ArcGIS-Sitzung entfernt wird, wenn es nicht ausdrücklich gespeichert wird. Um das temporäre Dataset dauerhaft zu speichern, wird die save-Methode für das Raster-Objekt aufgerufen (weitere Informationen finden Sie in den beiden Beispielen unten).

Es empfiehlt sich, die entsprechenden Analyseumgebungen, insbesondere Aktueller Workspace, Ausdehnung, Zellengröße, Projektionsmethode für Zellengröße, Maske und Fangen vor dem Implementieren des Map Algebra-Werkzeugs oder -Operators festzulegen.

Nachfolgend ein Beispiel, in dem die Workspace-Umgebung veranschaulicht wird:

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")

In der Anweisung oben wird der Workspace festgelegt, daher wird outhillshd01 in C:/sapyexamples/data gespeichert.

Es ist ratsam, für Klassen bei komplexen Eingaben in ein Map Algebra-Werkzeug eine Variable festzulegen und die Variable in der Anweisung zu verwenden. In der Anweisung unten wird für ein RemapRange-Klassenobjekt eine Variable, myRemapRange, festgelegt und als Eingabe in das Werkzeug Reklassifizieren verwendet.

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")

Weiterführende Informationen

Ausführliche Informationen zu ArcPy finden Sie in diesen Themen:

Weitere Informationen zur Geoverarbeitung in Python finden Sie in folgenden Themen:

Verwandte Themen