Erste Schritte mit Python in ArcGIS Pro
Projekt einrichten und Datasets prüfen
Bevor Sie mit dem Schreiben von Python-Code beginnen, laden Sie die Datasets herunter, erstellen ein neues Projekt und prüfen die Datasets, die verwendet werden sollen.
- Laden Sie die Daten für dieses Lernprogramm herunter, und extrahieren Sie den Inhalt in den Ordner auf Laufwerk C:\.
Die .zip-Datei enthält einen Ordner namens PythonStart.
Hinweis:
Sie können einen anderen Ordnernamen verwenden, aber Sie müssen diesen Ordner verwenden, wenn Sie Ihr Projekt in den nächsten Schritten erstellen.
- Starten Sie ArcGIS Pro. Melden Sie sich mit Ihrem lizenzierten ArcGIS-Organisationskonto an, falls Sie dazu aufgefordert werden.
Hinweis:
Wenn Sie über keinen Zugriff auf ArcGIS Pro oder über kein ArcGIS-Organisationskonto verfügen, informieren Sie sich über die Optionen für den Zugriff auf die Software.
- Klicken Sie unter Neues Projekt auf Karte.
- Geben Sie im Fenster Neues Projekt unter Name den Text Python Getting Started ein. Wählen Sie als Speicherort den Ordner C:\PythonStart.
- Deaktivieren Sie das Kontrollkästchen Einen neuen Ordner für dieses lokale Projekt erstellen.
- Klicken Sie auf OK.
Das Projekt wird mit einer leeren Karte geöffnet.
- Wenn der Bereich Katalog nicht bereits sichtbar ist, klicken Sie auf der Registerkarte Anzeigen auf den Bereich Katalog. Verankern Sie ggf. den Bereich Katalog auf der rechten Seite der ArcGIS Pro-Bedienoberfläche.
- Blenden Sie im Bereich Katalog das Element Ordner und dann PythonStart ein.
Der Ordner enthält sechs Shapefiles. In diesem Lernprogramm verwenden Sie nur einige wenige Datasets. Der Code kann jedoch auch für die Arbeit mit einer wesentlich größeren Anzahl von Datasets eingesetzt werden.
Sie bestimmen zunächst manuell die Anzahl der Features einer einzelnen Feature-Class und führen dann ein Werkzeug aus, mit dem Sie auf dasselbe Ergebnis kommen. Im Rest des Lernprogramms bestimmen Sie mit Python die Anzahl der Features für alle Shapefiles.
- Klicken Sie mit der rechten Maustaste auf ambulances.shp, und wählen Sie Zu aktueller Karte hinzufügen aus.
Die Karte wird auf Toronto, Kanada gezoomt, wo sich die Punkte für den Layer ambulances befinden.
- Klicken Sie im Bereich Inhalt mit der rechten Maustaste auf den Layer ambulances, und wählen Sie Attributtabelle aus.
Die Attributtabelle wird angezeigt. Unten in der Tabelle wird die Anzahl der Datensätze angezeigt.
Das Shapefile enthält 48 Datensätze, was 48 eindeutigen Features entspricht. Als Nächstes bestimmen Sie diese Anzahl mit einem Werkzeug.
- Schließen Sie die Attributtabelle.
Ein Werkzeug mit Python ausführen
Als Nächstes führen Sie in ArcGIS Pro ein Geoverarbeitungswerkzeug aus. Anschließend führen Sie das Werkzeug mit Python-Code aus.
- Klicken Sie im Menüband auf die Registerkarte Analyse. Klicken Sie in der Gruppe Geoverarbeitung auf Werkzeuge.
Daraufhin wird der Bereich Geoverarbeitung angezeigt.
- Geben Sie in die Suchleiste des Bereichs Geoverarbeitung das Wort Anzahl ein, und drücken Sie die Eingabetaste.
- Klicken Sie auf das Werkzeug Anzahl erhalten.
- Wählen Sie im Werkzeugbereich Anzahl erhalten für den Parameter Eingabezeilen die Option ambulances aus.
- Klicken Sie auf Ausführen.
Nach der Ausführung des Werkzeugs wird unten im Bereich eine Meldung angezeigt.
- Klicken Sie auf Details anzeigen.
Das Fenster Anzahl erhalten (Data Management Tools) wird mit geöffneter Registerkarte Nachrichten angezeigt.
Die Meldung lautet Anzahl an Zeilen = 48, was der Anzahl entspricht, die Sie manuell durch das Öffnen der Attributtabelle bestimmt haben. Sie können diese Schritte wiederholen, um die Anzahl für alle Shapefiles zu ermitteln. Das dauert jedoch sehr lange, wenn viele Datasets vorliegen. Stattdessen entwickeln Sie ein Python-Skript, um diese Aufgabe durchzuführen.
- Schließen Sie das Fenster Anzahl erhalten.
Als Nächstes verwenden Sie zum Ausführen des Werkzeugs Python.
- Klicken Sie auf dem Menüband auf der Registerkarte Analyse in der Gruppe Geoverarbeitung auf Verlauf.
Der Bereich Historie wird mit einer Liste der ausgeführten Werkzeuge angezeigt. Der einzige Eintrag bezieht sich auf das Werkzeug Anzahl erhalten, das gerade ausgeführt wurde.
- Klicken Sie auf der Registerkarte Analyse in der Gruppe Geoverarbeitung auf das Dropdown-Menü für die Schaltfläche Python, und wählen Sie Python-Fenster aus.
Das Fenster Python wird angezeigt.
Hinweis:
Sie können das Fenster Python an eine beliebige Stelle verschieben oder verankern. In den Beispielabbildungen ist das Fenster unter der Karte verankert.
Der obere Abschnitt des Python-Fensters wird als Protokoll bezeichnet, der untere Abschnitt als Eingabeaufforderung. Das Protokoll ist zu Beginn leer. Es enthält als Einträge den zuvor eingegebenen Code mit dessen Ergebnissen.
In die Eingabeaufforderung geben Sie den Code ein. Wenn das Python-Fenster erstmals angezeigt wird, lautet die Meldung in der Eingabeaufforderung Python-Interpreter wird initialisiert. Das bedeutet, dass das Fenster darauf vorbereitet wird, den Code zu empfangen. Nach einigen Sekunden wird die Meldung durch den Eintrag Python-Code hier eingeben ersetzt. Sie können dann mit der Eingabe des Codes beginnen. Nachdem Sie das Python-Fenster zum ersten Mal geöffnet haben, werden diese Meldungen in der aktuellen Sitzung nicht mehr angezeigt.
- Geben Sie im Fenster Python den Text arcpy.management.GetCount("ambulances") ein.
Bei ArcPy handelt es sich um ein Python-Paket, das einen Großteil der Funktionalität von ArcGIS Pro in Python verfügbar macht. GetCount() ist eine Funktion von ArcPy, die das Geoverarbeitungswerkzeug Anzahl erhalten in der Toolbox Data Management Tools ausführt.
Hinweis:
Alle Hilfethemen für Geoverarbeitungswerkzeuge enthalten Python-Beispiele. Klicken Sie beispielsweise im Hilfethema Anzahl erhalten unter Parameter auf Python, um das Codebeispiel des Themas anzuzeigen.
- Drücken Sie die Eingabetaste.
Der Code wird ausgeführt, und das Ergebnis lautet <Result '48'>.
Die Formatierung sieht etwas anders aus, dies ist jedoch dieselbe Anzahl von Datensätzen, die Sie bereits zuvor ermittelt haben. Bei der Ausführung der Codezeile im Python-Fenster wird dasselbe Ergebnis erzeugt wie bei der Ausführung des Werkzeugs mit dem Werkzeugbereich. Durch die Ausführung des Codes im Python-Fenster wird zudem ein neuer Eintrag im Bereich Verlauf erstellt.
Abgesehen vom Zeitstempel sind diese zwei Einträge identisch. Es gibt keinen Unterschied zwischen der Ausführung eines Werkzeugs über den Werkzeugbereich oder Python. Bei der Verwendung von Python können Sie mit dem Code jedoch steuern, wie Werkzeuge ausgeführt werden, und u. a. dasselbe Werkzeug mehrmals für verschiedene Feature-Classes ausführen.
- Klicken Sie im Python-Fenster mit der rechten Maustaste auf den Code, und wählen Sie Transkript löschen.
Alles, was mit dem vorherigen Code ausgeführt wurde, verbleibt im Speicher.
Code im Python-Fenster ausführen
Das Python-Fenster stellt eine praktische Möglichkeit dar, das Schreiben von Python-Code zu üben.
- Klicken Sie im Fenster Python in die Eingabeaufforderung, und geben Sie die folgende Codezeile ein:
print("GIS is cool")
In dieser Codezeile stellt print() eine Funktion dar. In Python wird von einer Funktion eine bestimmte Aufgabe ausgeführt. In diesem Fall wird mit der Funktion Text ausgegeben. Die meisten Funktionen in Python enthalten Argumente oder Parameter, die nach der Funktion in Klammern angegeben werden. In diesem Fall ist das Argument eine Zeichenfolge. Eine Zeichenfolge besteht in Python aus einer Reihe von Zeichen. Sie erstellen eine Zeichenfolge, indem Sie die Zeichen in Anführungszeichen einschließen.
In Python werden Zeichenfolgen mit einfachen und doppelten Anführungszeichen identifiziert, diese müssen jedoch jeweils konsistent verwendet werden. So sind sowohl print("GIS is cool") als auch print('GIS is cool') korrekt, print("GIS is cool') führt jedoch zu einem Fehler. Anführungszeichen in Python sind immer gerade (und nicht schräg). Sie werden automatisch auf diese Weise formatiert, wenn Sie den Code in das Python-Fenster oder eine andere Codierungsumgebung eingeben. Wenn Sie in einer Textverarbeitungssoftware formatierten oder geschriebenen Code kopieren, kann es vorkommen, dass gerade Anführungszeichen durch schräge ersetzt werden. Beispielsweise führt print(“GIS is cool”) zu einem Fehler.
- Klicken Sie auf das Ende der Codezeile, und drücken Sie die Eingabetaste.
Die Codezeile wird ausgeführt und in das Protokoll kopiert. Danach wird das Ergebnis ausgegeben.
Die Eingabeaufforderung ist wieder leer und die nächste Codezeile kann eingetragen werden.
Dieses einfache Beispiel veranschaulicht einen wichtigen Aspekt der Ausführung von Python-Code auf diese Weise. Sie schreiben eine einzelne Codezeile mit spezifischen Anweisungen, die ausgeführt werden sollen. Sobald Sie die Eingabetaste drücken, werden die Codezeile ausgeführt und die Anweisungen umgesetzt. In diesem Beispiel bestehen die Anweisungen daraus, Text auf dem Bildschirm auszugeben. Es kann sich dabei jedoch auch um viele anderen Aufgaben handeln, wie Sie beim Ausführen des Werkzeugs Anzahl erhalten gesehen haben.
Als Nächstes üben Sie mit einigen weiteren Codezeilen.
- Geben Sie die folgende Codezeile in die Eingabeaufforderung ein:
x = 37
In dieser Codezeile stellt x eine Variable dar. Eine Variable ist mit einem Container vergleichbar, in dem ein Wert gespeichert wird. In diesem Beispiel handelt es sich bei diesem Wert um die ganze Zahl 37, möglich wären jedoch auch eine andere Zahl, Text oder der Name eines Datasets. Die Codezeile wird als Zuweisung bezeichnet, da der Variable ein Wert zugewiesen ist. Das einzelne Gleichheitszeichen in der Variablenzuweisung zeigt an, dass die Variable mit dem Wert gleichgesetzt wird. Variablen werden zugewiesen, damit sie später im Code verwendet werden können.
- Drücken Sie am Ende der Codezeile die Eingabetaste.
Die Codezeile wird ausgeführt, es wird jedoch kein Ergebnis ausgegeben. Der Variable wird ein Wert zugewiesen, es gibt jedoch keine weiteren Anweisungen, die ausgeführt werden sollen.
- Geben Sie die folgende Codezeile in die Eingabeaufforderung ein, und drücken Sie die Eingabetaste:
y = 73
Bei dieser Codezeile handelt es sich um eine weitere Zuweisungsanweisung.
- Geben Sie die folgende Codezeile in die Eingabeaufforderung ein, und drücken Sie die Eingabetaste:
x * y
Diese Zeile führt eine Berechnung durch, in diesem Fall die Multiplikation des Wertes x mit dem Wert y. Das Ergebnis wird ausgegeben.
Bislang haben Sie die Codezeilen eingegeben, ohne sich allzu viele Gedanken darüber zu machen, wie genau die einzelnen Zeilen geschrieben werden. Bei Verwendung einer Zuweisungsanweisung sind Leerzeichen optional. Deshalb ist x = 37 gleichbedeutend mit x=37. Leerzeichen werden häufig hinzugefügt, um die Lesbarkeit zu verbessern.
- Geben Sie die folgende Codezeile in die Eingabeaufforderung ein, und drücken Sie die Eingabetaste:
X * y
Hier wird eine Fehlermeldung als Ergebnis ausgegeben:
NameError: name 'X' is not defined. Did you mean: 'x'?
In Python wird zwischen Groß- und Kleinschreibung unterschieden, deshalb unterscheidet sich X von x. Sie haben x definiert, indem Sie ihm den Wert 37 zugewiesen haben. Dem X in Großschreibung wurde jedoch kein Wert zugewiesen, deshalb die Fehlermeldung.
Wenn Sie damit fortfahren, Codezeilen im Python-Fenster auszuführen, werden jeweils der gesamte zuvor ausgeführte Code und die Ergebnisse im Protokoll angezeigt. Sie können das Protokoll löschen, ohne dass dadurch die Werte der zugewiesenen Variablen gelöscht werden. Das geschieht erst nach einem Neustart der ArcGIS Pro-Sitzung.
- Klicken Sie mit der rechten Maustaste in das Protokoll, und wählen Sie Transkript löschen aus.
Als Nächstes folgt ein realitätsnäheres Beispiel: Die Umwandlung von Temperaturwerten in Fahrenheit (F) und Celsius (C). Die allgemeine Formel lautet:
F = 9/5 * C + 32
Dies kann in Python als einfache Berechnung geschrieben werden.
- Geben Sie die folgenden Codezeilen in die Eingabeaufforderung ein, und drücken Sie am Ende jeder Zeile die Eingabetaste:
temp_c = 17
temp_f = temp_c * 9 / 5 + 32
print(temp_f)
Das Ergebnis der Berechnung wird ausgegeben.
In der ersten Codezeile wird der Variable temp_c ein numerischer Wert zugewiesen. In der zweiten Codezeile wird eine Berechnung mit der Variable temp_c durchgeführt und das Ergebnis der neuen Variable temp_f zugewiesen. In der dritten Zeile wird der Wert der Variable temp_f ausgegeben. Diese dritte Zeile kann auch als temp_f geschrieben werden. Die Verwendung der Funktion print() ist jedoch üblich, da sie bessere Formatierungsoptionen bietet.
Dasselbe Ergebnis kann auch erzielt werden, wenn keine Variablen verwendet werden.
- Geben Sie die folgende Codezeile in die Eingabeaufforderung ein, und drücken Sie die Eingabetaste:
17 * 9 / 5 + 32
Das Ergebnis lautet ebenfalls 62.6.
Es gibt einige gute Gründe für die Verwendung von Variablen. Erstens kommt es oft vor, dass Sie eine Berechnung nicht für einen einzelnen Wert, sondern für viele Werte durchführen möchten. Und zweitens müssen Sie oft Code schreiben, um eine Berechnung auszuführen, kennen die zu verwendenden Werte jedoch nicht im Voraus. Wenn Sie die Berechnung als Beziehung zwischen zwei Variablen schreiben, können Sie sie erneut verwenden. Sie hängt dann nicht von einem einzigen Wert ab.
Hilfe beim Schreiben von Code
Das Python-Fenster enthält mehrere Funktionen, die Sie beim Schreiben von Code unterstützen. Denken Sie an das Beispiel mit der Verwendung der Funktion print() zurück.
- Löschen Sie das Protokoll.
- Geben Sie den folgenden Code in die Eingabeaufforderung ein:
pri
Noch bevor Sie "print" vollständig eingegeben haben, wird ein Pop-up mit der Funktion print() geöffnet. Das blaue Symbol mit dem Buchstaben F zeigt an, dass es sich hierbei um eine Funktion handelt. Dies wird als automatische Vervollständigung oder Codevervollständigung bezeichnet.
- Zeigen Sie auf das print()-Pop-up.
Daraufhin wird die Syntaxhilfe für die Funktion geöffnet.
Die Hilfe für die Funktion print() enthält Informationen zu den Parametern, die akzeptiert werden, und ihrer Reihenfolge.
Sie können die Eingabe fortsetzen oder auf das Pop-up klicken, um dieses Codestück automatisch zu vervollständigen.
- Klicken Sie auf das Pop-up print().
Die Funktion print() wird nun in der Eingabeaufforderung angezeigt. Es wurden automatisch Klammern hinzugefügt. Wenn Sie nicht auf das Pop-up klicken, die Eingabe jedoch fortsetzen, wird nach print( automatisch eine schließende Klammer hinzugefügt. Dies ist ein weiteres Beispiel für die Codevervollständigung, um Sie beim Schreiben der richtigen Syntax zu unterstützen.
Wenn sich der Cursor innerhalb der Klammer befindet, wird die Syntaxhilfe für die Funktion erneut geöffnet.
- Geben Sie ein Anführungszeichen in der Klammer der Funktion print() ein.
Ein zweites Anführungszeichen wird automatisch hinzugefügt.
Das Python-Fenster umfasst Pop-ups für die automatische Vervollständigung, eine interaktive Ansicht der Syntaxhilfe und Hinweise zu Syntaxfehlern.
- Löschen Sie den Code in der Eingabeaufforderung.
- Stellen Sie sicher, dass die aktive Karte auch weiterhin einen Feature-Layer mit dem Namen ambulances enthält.
- Geben Sie den folgenden Code in die Eingabeaufforderung ein:
arc
Ein Pop-up mit dem ArcPy-Paket, gekennzeichnet durch das rote Symbol mit dem Buchstaben P, wird geöffnet.
Pakete stellen eine Möglichkeit dar, den Kernsatz des Python-Codes zu erweitern. ArcPy ist ein Paket, das Python um ArcGIS-Funktionalität erweitert.
- Klicken Sie auf das Pop-up arcpy.
Das ArcPy-Paket wird jetzt in der Eingabeaufforderung angezeigt, gefolgt von einem Punkt. Bei sehr kurzen Codestücken wie in diesem Beispiel dauert es nicht lange, alle Zeichen einzugeben. Das Klicken auf die Pop-ups ist entsprechend kaum schneller. Bei längeren Codeelementen jedoch spart die Codevervollständigung Zeit, führt zu weniger Tippfehlern und bietet Hilfe bei der Syntax.
- Geben Sie nach arcpy. Get wie in der folgenden Textzeile ein:
arcpy.Get
Es wird eine Liste mit Codeelementen, die mit Get beginnen und logisch auf arcpy folgen, geöffnet.
Die Codevervollständigung ist kontextsensitiv. Wenn Sie beispielsweise mit der Eingabe von Get (ohne arcpy.) zu Beginn einer Codezeile begonnen haben, werden ganz andere Optionen angezeigt als für arcpy.Get.
- Klicken Sie in der Liste der Optionen auf GetCount()management.
Hinweis:
Das Wort management nach GetCount() zeigt, dass GetCount() zur Gruppe der Management-Werkzeuge gehört.
Der folgende Code wird in der Eingabeaufforderung eingefügt:
arcpy.management.GetCount()
Er ist identisch mit dem zuvor in diesem Lernprogramm verwendeten Code, wobei sich management auf die Toolbox Data Management Tools bezieht und GetCount() auf das Werkzeug Anzahl erhalten.
Wenn der Cursor sich innerhalb von Klammern befindet, werden zwei Pop-ups angezeigt.
Das untere Pop-up zeigt die Syntax für das Werkzeug Anzahl erhalten. Die Syntax weist darauf hin, dass der einzige Parameter den Namen in_rows hat und aus einer Eingabetabellenansicht oder einem Raster-Layer besteht. Das obere Pop-up zeigt den Namen des Layers "ambulances" in der aktiven Karte. Dabei handelt es sich um eine Codevervollständigungseingabe für den Parameter in_rows des Werkzeugs Anzahl erhalten. In anderen Worten: Das Python-Fenster erkennt, dass der Layer in der aktiven Karte ein gültiger Parameter des Werkzeugs ist. Sie können entweder diesen Layer verwenden oder etwas anderes eingeben.
- Klicken Sie auf das Pop-up ambulances.
Der folgende Code wird in der Eingabeaufforderung eingefügt:
arcpy.management.GetCount('ambulances')
Durch die Codevervollständigung werden in diesem Fall automatisch Anführungszeichen um den Namen des Layers eingefügt. Die Codevervollständigung im Python-Fenster stellt eine gute Möglichkeit dar, die richtige Syntax zu erlernen. Mit der Codevervollständigung werden einfache Anführungszeichen hinzugefügt, sie können jedoch auch doppelte Anführungszeichen verwenden.
Der Code muss nicht ausgeführt werden, da er mit dem zuvor ausgeführten Code identisch ist.
- Löschen Sie den Code in der Eingabeaufforderung.
Mit einer for-Schleife iterieren
Als Nächstes kommen wir zur Iteration, bei der dieselben Schritte mehrmals ausgeführt werden. Sie erstellen eine Liste von Werten und führen dieselbe Berechnung für jedes Element in der Liste aus.
- Geben Sie die folgende Codezeile in die Eingabeaufforderung ein, und drücken Sie die Eingabetaste:
templist_c = [17, 19, 24, 21, 16]
Mit diesem Code wird eine Python-Liste mit fünf Elementen desselben Typs erstellt; in diesem Fall handelt es sich hierbei um Temperaturwerte in Grad Celsius. Listen sind ein häufig verwendeter Datentyp in Python. Eine Liste besteht aus einer Reihe von Elementen, die von Klammern [...] umgeben sind (manchmal auch als eckige Klammern bezeichnet), wobei die einzelnen Elemente durch Kommas getrennt werden.
- Geben Sie die folgende Codezeile in die Eingabeaufforderung ein, und drücken Sie die Eingabetaste:
for temp_c in templist_c:
Wenn Sie die Eingabetaste am Ende dieser Codezeile drücken, wird der Code nicht ausgeführt. Stattdessen springt die Eingabeaufforderung zur nächsten Zeile. Die Codezeile endet mit einem Doppelpunkt. Das bedeutet, dass weiterer Code folgt und die Zeile selbst nicht eigenständig ausgeführt werden kann.
Die Codezeile ist der Beginn einer for-Schleife mit der folgenden allgemeinen Struktur:
for <Element> in <Liste>:
<eine oder mehrere Codezeilen ausführen>
Eine for-Schleife erlaubt es Ihnen, die Elemente einer vorhandenen Liste nacheinander zu durchlaufen und für jedes Element die gleichen Schritte auszuführen. Die Codezeile mit dem Schlüsselwort for endet mit einem Doppelpunkt. Die nächste Codezeile ist eingerückt. Alle Codezeilen, die unmittelbar darauf mit demselben Einzug folgen, werden bei jeder Iteration ausgeführt. Der Codeblock, der wiederholt wird, kann durch den Einzug identifiziert werden.
Im Python-Fenster wird die for-Schleife an der Verwendung des Doppelpunkts erkannt und deshalb die nächste Codezeile eingerückt.
- Geben Sie die folgende Codezeile in die Eingabeaufforderung ein, und drücken Sie die Eingabetaste:
temp_f = temp_c * 9 / 5 + 32
Dieser Code sollte mit Einzug stehen bleiben. Wenn Sie den Einzug versehentlich löschen, können Sie die Zeile einrücken, indem Sie vier Leerzeichen am Anfang hinzufügen. Vier Leerzeichen entsprechen dem Standardeinzug für einen Codeblock.
- Geben Sie die folgende Codezeile in die Eingabeaufforderung ein, und drücken Sie die Eingabetaste:
print(temp_f)
Die Verwendung von print() ist hier nicht erforderlich, in vielen Fällen führt sie jedoch zu einer besseren Formatierung der Ausgaben.
Die for-Schleife ist fertig und kann ausgeführt werden.
- Drücken Sie die Eingabetaste, während sich der Cursor noch in der leeren Codezeile befindet.
Daraufhin wird das Ergebnis ausgegeben.
Die for-Schleife wird über alle Elemente in der Liste iteriert und führt die jeweils gleiche Berechnung dafür aus. Es handelt sich hierbei um ein äußerst effektives Programmierkonzept, da der Aufwand für das Schreiben von Code für eine Liste mit 5.000 Elementen nicht größer ist als für eine Liste mit 5 Elementen.
Liste von Feature-Classes erstellen und iterieren
Nachdem Sie nun das Schreiben und Ausführen von Code im Python-Fenster geübt haben, werden Sie zur ursprünglichen Aufgabe zurückkehren und die Anzahl von Features für jede Feature-Class im betreffenden Ordner ermitteln.
Sie verwenden dazu erneut das Werkzeug Anzahl erhalten.
- Löschen Sie das Protokoll. Stellen Sie sicher, dass die aktive Karte auch weiterhin einen Feature-Layer mit dem Namen ambulances enthält.
- Führen Sie die folgenden Codezeilen aus:
count = arcpy.management.GetCount("ambulances")
print(count)
Das Ergebnis ist der Wert 48. Dieser Code ist nahezu identisch mit dem Code, den Sie bereits an früherer Stelle in diesem Lernprogramm ausgeführt haben, jetzt wird das Ergebnis des Werkzeugs Anzahl erhalten jedoch einer Variable zugewiesen. Das erleichtert die Arbeit mit dem Ergebnis, auch wenn Sie jetzt nur den Wert des Ergebnisses ausgeben.
Im Code wird bislang der Name des in der aktiven Karte geöffneten Feature-Layers verwendet. Dies ist zwar bequem, es ist jedoch unpraktisch, alle Shapefiles zu einer Karte hinzufügen und den Code für jeden Feature-Layer manuell ausführen zu müssen. Stattdessen können Sie auf die Feature-Class auf der Festplatte verweisen, indem Sie den vollständigen Pfad angeben.
- Führen Sie die folgenden Codezeilen aus:
count = arcpy.management.GetCount("C:/PythonStart/ambulances.shp")
print(count)
Das ausgegebene Ergebnis ist dasselbe.
Hinweis:
Wenn Sie den Ordner PythonStart an einem anderen Speicherort als im Ordner auf Laufwerk C:\ auf Ihrem Computer gespeichert haben, müssen Sie den Pfad für diese und zukünftige Codezeilen, die auf den Speicherort des Ordners verweisen, entsprechend aktualisieren.
Der Pfad steht in Anführungszeichen, da es sich um eine Zeichenfolge handelt. Im Pfad wird ein Schrägstrich (/) anstelle eines regulären umgekehrten Schrägstrichs (\) verwendet. Umgekehrte Schrägstriche dienen in Python als Escape-Zeichen, wodurch sich die Bedeutung des folgenden Zeichens ändern kann. Entsprechend kann es unbeabsichtigte Folgen haben, wenn Sie umgekehrte Schrägstriche in Zeichenfolgen verwenden. Zudem wird die Feature-Class als ambulances.shp referenziert, da die Dateierweiterung .shp Teil des Namens ist. Wenn nur "ambulances" verwendet wird, führt dies zu einem Fehler, da es keine Feature-Class mit dem Namen "ambulances" im Ordner gibt.
Statt den vollständigen Pfad anzugeben, können Sie den Workspace festlegen. Ein Workspace ist eine von mehreren Umgebungseinstellungen, die sich auf Geoverarbeitungsvorgänge auswirken. Abgesehen vom Workspace enthalten Umgebungen das Standard-Ausgabekoordinatensystem, die Standardzellengröße für die Raster-Datenverarbeitung und mehrere andere Bestandteile.
- Führen Sie die folgenden Codezeilen aus:
arcpy.env.workspace = "C:/PythonStart"
count = arcpy.management.GetCount("ambulances.shp")
print(count)
Das ausgegebene Ergebnis ist dasselbe.
Das Festlegen des Workspace erfordert zwar eine zusätzliche Codezeile, seine Verwendung ist jedoch oft effektiv, da er daraufhin von allen folgenden ArcPy-Codezeilen automatisch verwendet wird. Die zweite Codezeile muss nicht mehr den vollständigen Pfad enthalten. Wenn im Code kein Workspace festgelegt wurde, wird der Standard-Workspace des Projekts verwendet.
Im letzten Schritt der ursprünglichen Aufgabe zum Bestimmen der Anzahl von Features für jedes Dataset im Ordner wird Code hinzugefügt, um eine Liste der Shapefiles im Workspace zu erstellen und das Werkzeug Anzahl erhalten für jedes Element dieser Liste auszuführen. Nachdem der Workspace festgelegt wurde, können Sie mit einer Funktion von ArcPy eine Liste von Feature-Classes in diesem Workspace erstellen.
- Geben Sie die folgende Codezeile ein, und drücken Sie die Eingabetaste:
fc_list = arcpy.ListFeatureClasses()
Mit der Funktion ListFeatureClasses() wird eine Liste der Feature-Classes erstellt. Sie können die Liste in anderen Tasks verwenden, indem Sie sie einer Variable zuweisen.
Um den Inhalt der Liste zu prüfen, können Sie die Werte ausgeben.
- Führen Sie die folgende Codezeile aus:
print(fc_list)
Das Ergebnis lautet:
['ambulances.shp', 'boundary.shp', 'fire_stations.shp', 'fire_zones.shp', 'voting_divisions.shp', 'voting_sites.shp']
Als Nächstes erstellen Sie eine for-Schleife, um durch die Elemente in der Liste zu iterieren.
- Geben Sie die folgende Codezeile ein, und drücken Sie die Eingabetaste, um einen Codeblock zu starten:
for fc in fc_list:
- Geben Sie die folgende Codezeile ein, und drücken Sie die Eingabetaste:
count = arcpy.management.GetCount(fc)
In dieser Codezeile wird das bereits zuvor verwendete Werkzeug Anzahl erhalten verwendet, dieses Mal jedoch mit der Variable fc anstatt dem Namen einer bestimmten Feature-Class. Da fc aktualisiert wird, damit jeder Feature-Class-Name in der Feature-Class-Liste enthalten ist, wird bei jeder Iteration die nächste Feature-Class verwendet.
- Geben Sie die folgende Codezeile ein, und drücken Sie die Eingabetaste zwei Mal:
print(count)
Als Ergebnis wird die Anzahl der Features für jedes Shapefile in den Workspaces ausgegeben.
Mit dem Code, den Sie entwickelt haben, werden die Features in jedem Shapefile gezählt. Der Code ist nicht unbedingt raffiniert, da es bei einer großen Anzahl von Shapefiles mühsam wäre, die Ausgabe zu lesen. Sie können weiteren Code hinzufügen, um eine aussagekräftigere Ausgabe zu erzeugen, und dazu beispielsweise den Namen der Feature-Class nach jeder Zahl hinzufügen, die Ergebnisse in eine Textdatei schreiben, die Gesamtzahl der Features im Workspace berechnen oder die Feature-Class oder Feature-Classes mit den meisten Features berechnen.
Der im Python-Fenster verwendete Code kann auch in ArcGIS Notebooks in ArcGIS Pro (oder in einem Jupyter Notebook außerhalb von ArcGIS Pro) verwendet werden. Diese Schritte werden hier nicht erläutert, Sie können den Code jedoch aus dem Python-Fenster kopieren und in eine Zelle in Notebooks einfügen.
Außerdem lässt sich der Code außerhalb von ArcGIS Pro in einem Python-Editor verwenden. Dies folgt im nächsten Schritt. Sie können den Code aus dem Python-Fenster in einer Python-Skriptdatei speichern, um Ihre Arbeit in einem Python-Editor zu starten.
- Klicken Sie mit der rechten Maustaste auf den Code im Protokoll des Python-Fensters, und wählen Sie Transkript speichern aus.
- Navigieren Sie im Fenster Transkript speichern zum Ordner C:\PythonStart, und speichern Sie die Arbeit unter dem Namen count_features.py.
- Speichern Sie das Projekt, und schließen Sie ArcGIS Pro.
Sie können das Skript jetzt in einem Python-Editor öffnen.
Skript in einem Python-Editor ausführen
Die Ausführung von Python-Code in ArcGIS Pro über das Python-Fenster oder in einem Notebook ist zwar bequem, manchmal müssen Sie Code jedoch auch außerhalb von ArcGIS Pro ausführen. Ein typisches Beispiel hierfür ist die Planung eines Skripts, das zu einer bestimmten Zeit ausgeführt werden soll, es sind jedoch auch andere Szenarien denkbar. So werden für komplexere Projekte oft mehrere Codeelemente benötigt, die gemeinsam verwendet werden. Normalerweise bedeutet dies, dass der Code in mehrere separate .py-Dateien organisiert wird. Sie können ein Skript als Teil der Erstellung eines benutzerdefinierten Werkzeugs verwenden. Auch hierfür ist eine .py-Datei erforderlich.
Für die Ausführung von Python-Code außerhalb von ArcGIS Pro wird ein Python-Code-Editor benötigt. Dies wird auch als integrierte Entwicklungsumgebung (Integrated Development Environment; IDE) bezeichnet. Als Nächstes verwenden Sie eine IDE mit dem Namen IDLE, was kurz für Integrated DeveLopment Environment steht. (Beachten Sie hierbei das L in Großschreibung.) IDLE ist in jeder Installation von Python enthalten. Wenn auf Ihrem Computer Python vorhanden ist, verfügt er also auch über IDLE.
Es gibt noch viele andere Python-IDEs wie PyCharm und Spyder, IDLE eignet sich jedoch sehr gut für den Einstieg. Für IDEs wie PyCharm und Spyder sind weitere Schritte für den Download, die Installation und Konfiguration erforderlich, während IDLE in jeder Python-Installation enthalten und unmittelbar einsatzbereit ist.
- Starten Sie den Datei-Explorer.
- Navigieren Sie zum Ordner C:\PythonStart.
- Klicken Sie mit der rechten Maustaste auf die Datei count_features.py, und wählen Sie Edit with IDLE (ArcGIS Pro) aus.
Daraufhin wird das Python-Skript in einem Skriptfenster in IDLE geöffnet. Die Option Edit with IDLE wird möglicherweise auch angezeigt, wenn Sie ArcGIS Desktop 10.x installiert haben. Verwenden Sie Edit with IDLE (ArcGIS Pro), da mit dieser Option das Skript in der mit ArcGIS Pro installierten Python-Version geöffnet wird. ArcGIS Desktop 10.x nutzt eine ältere Version von Python.
Hinweis:
Wenn Edit with IDLE (ArcGIS Pro) im Kontextmenü nicht angezeigt wird, klicken Sie auf Start, blenden Sie ArcGIS ein, und öffnen Sie die Python-Eingabeaufforderung. Geben Sie im Fenster Python-Eingabeaufforderung idle ein, und drücken Sie die Eingabetaste. Das Fenster von IDLE (Python 3.9-Shell) wird angezeigt. Klicken Sie auf Datei, und wählen Sie Öffnen aus. Navigieren Sie zur Datei count_features.py, und öffnen Sie sie.
Oben im Skriptfenster wird die in Python verwendete IDLE-Version angezeigt. Dabei handelt es sich um die mit Ihrer ArcGIS Pro-Anwendung installierte Python-Version. Ein in Python 3.7 geschriebenes Skript kann in älteren Versionen von Python (2.x) nicht verwendet werden.
Der Code enthält den gesamten Inhalt des Python-Protokollfensters, einschließlich aller Ergebnisse. Den Ergebnissen ist das #-Symbol bzw. Hash-Zeichen vorangestellt, sodass sie als Kommentare betrachtet werden. Python überspringt alles, was sich in den Kommentaren befindet. Dennoch können diese nützlich sein, um zu dokumentieren, welche Aufgaben in verschiedenen Teilen des Codes ausgeführt werden.
Bevor Sie mit diesem Code arbeiten, sehen Sie sich kurz an, wie die Python-Shell in IDLE funktioniert.
- Klicken Sie im oberen Menü in IDLE auf Run, und wählen Sie Python Shell aus.
Daraufhin wird die Python-Shell bzw. der interaktive Interpreter geöffnet. Das Symbol >>> wird als Eingabeaufforderung bezeichnet. Sie können das Skriptfenster mit der Datei count_features.py geöffnet lassen, während Sie den interaktiven Interpreter verwenden, da Sie ihn später erneut benötigen.
- Platzieren Sie den Cursor in der Eingabeaufforderung (hinter >>>), und geben Sie den folgenden Code ein:
print("GIS is cool")
- Drücken Sie die Eingabetaste.
Das Ergebnis wird in die nächste Zeile eingegeben, und eine neue Eingabeaufforderung wird angezeigt.
Die Ausführung von Code im interaktiven Interpreter unterscheidet sich nicht wesentlich von der Ausführung einzelner Codezeilen im Python-Fenster. Immer wenn Sie die Eingabetaste drücken, wird die Codezeile ausgeführt und das Ergebnis ggf. in der nächsten Zeile ausgegeben. Der Hauptunterschied besteht darin, dass die Python-Shell keine separaten Abschnitte für das Protokoll und die Eingabeaufforderung enthält. Davon abgesehen sind die beiden Ansätze nahezu identisch.
Als Nächstes bereinigen Sie das Skript und führen den Code aus.
- Schließen Sie das Python-Shell-Fenster, und kehren Sie zurück zum Skriptfenster für das Skript count_features.py.
- Bereinigen Sie den Code, indem Sie alle Zeilen vor der Zeile, die mit arcpy.env.workspace beginnt, entfernen. Löschen Sie außerdem alle Ergebniszeilen. Diese sind mit dem Symbol # für kommentierten Code gekennzeichnet.
- Löschen Sie diese beiden aufeinanderfolgenden Zeilen:
count = arcpy.management.GetCount("ambulances.shp")
print(count)
- Löschen Sie die folgende Zeile:
print(fc_list)
Der verbleibende Code lautet:
arcpy.env.workspace = "C:/PythonStart" fc_list = arcpy.ListFeatureClasses() for fc in fc_list: count = arcpy.management.GetCount(fc) print(count)
- Stellen Sie sicher, dass die letzte Zeile um vier Leerzeichen eingerückt ist, um sie der Zeile darüber anzupassen.
- Klicken Sie auf File, und wählen Sie Save aus, um das Skript zu speichern.
- Klicken Sie auf Run, und wählen Sie Run Module aus, um das Skript auszuführen.
Das Ergebnis wird im interaktiven Fenster ausgegeben.
Anstelle der Feature-Anzahl wird im interaktiven Fenster die folgende Fehlermeldung ausgegeben:
NameError: name 'arcpy' is not defined
Das liegt daran, dass Sie das ArcPy-Paket verwenden, der Code jedoch außerhalb von ArcGIS Pro ausgeführt wird. Zur Verwendung eines Pakets muss dieses oben im Skript importiert werden.
- Schließen Sie das Python-Shell-Fenster.
- Setzen Sie den Cursor an die erste Zeichenposition der ersten Zeile des Skripts. Drücken Sie die Eingabetaste.
Am Anfang des Skripts wird eine leere Zeile hinzugefügt.
- Fügen Sie in der ersten Skriptzeile den folgenden Code hinzu:
import arcpy
- Speichern Sie das Skript, und führen Sie es aus.
Die Ergebniszahlen werden in das interaktive Fenster ausgegeben.
Wenn Sie ArcPy zum ersten Mal in Ihrem Skript verwenden, kann es einen Moment dauern, bis die Ergebnisse angezeigt werden, da Python einige Sekunden benötigt, um ArcPy zu importieren.
Das Ergebnis ist identisch mit der Ausführung des Codes in ArcGIS Pro. ArcGIS Pro muss nicht geöffnet sein, damit das Skript ausgeführt werden kann (es muss jedoch auf dem verwendeten Computer installiert und lizenziert sein).
Die Verwendung eines Python-Editors für die Arbeit mit Ihrem Code hat einige Vorteile. Dazu zählt vor allem, dass Sie längere Skripts schreiben und den Code als .py-Dateien speichern können. Das Speichern des Codes als Datei erleichtert auch das Debugging und die erneute Verwendung des Codes.
Vergleich der Methoden zum Ausführen von Python-Code
Sie haben zwei Methoden zum Schreiben und Ausführen von Python-Code kennengelernt. Es folgt eine Zusammenfassung der Vor- und Nachteile der einzelnen Methoden. Nicht alle diese Elemente wurden in diesem Lernprogramm ausführlich behandelt, aber es ist gut, die folgenden Punkte zu kennen, wenn Sie sich weiter in Python einarbeiten.
Methode | Vorteile | Nachteile |
---|---|---|
Python-Fenster in ArcGIS Pro |
|
|
Python-Editor (IDE) |
|
|
Hinweis:
Bei Verwendung von Code, der in ArcGIS Pro ausgeführt wird (einschließlich dem Python-Fenster), müssen Sie ArcPy nicht importieren. Bei Verwendung von Code, der außerhalb von ArcGIS Pro ausgeführt wird (z. B. in einem Python-Editor), müssen Sie "import arcpy" verwenden, bevor Sie die Funktionalität des ArcPy-Pakets einsetzen können.
Es gibt mehrere weitere Möglichkeiten, Python-Code auszuführen. Dazu zählt die Ausführung von Code in einem Notebook, die Ausführung eines Skripts über die Befehlszeile oder die Planung einer Skriptausführung über das Betriebssystem. Diese Punkte werden in anderen Lernprogrammen behandelt.
Sie haben erfahren, wie Python-Code im Python-Fenster und in IDLE geschrieben und ausgeführt wird. Außerdem haben Sie Variablen und Schleifen kennengelernt, zwei sehr wichtige Konzepte in Python. Und Sie haben gelernt, wie die Umgebung in Python festgelegt wird und ArcGIS-Standard-Geoverarbeitungswerkzeuge in Python verwendet werden. Dies ist nur das erste in einer ganzen Reihe von Lernprogrammen zur Verwendung von Python in ArcGIS Pro – es kommt noch mehr!
Auch die Bücher Python Scripting for ArcGIS Pro und Advanced Python Scripting for ArcGIS Pro von Dr. Paul A. Zandbergen, veröffentlicht von Esri Press sind für Sie möglicherweise von Interesse.
Weitere Lernprogramme finden Sie in der Lernprogrammgalerie.