Erste Schritte mit Notebooks 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 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 einem Verzeichnis auf Ihrem Computer.
Die .zip-Datei enthält einen Ordner namens NotebookStart.
In diesem Lernprogramm werden die Daten in C:\Tutorials\NotebookStart\ angezeigt. Sie können einen anderen Ordner verwenden. Achten Sie dann jedoch darauf, die Pfade in den folgenden Anweisungen anzupassen.
- 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 auf Anderes Projekt öffnen.
- Navigieren Sie im Fenster Projekt öffnen zu dem Ordner, den Sie aus der Datei NotebookStart.zip extrahiert haben, klicken Sie auf Notebooks Getting Started.aprx, um das Projekt auszuwählen, und klicken Sie auf OK.
Das Projekt wird geöffnet. Die aktuelle Karte zeigt die Grenzen der kanadischen Stadt Toronto. Sie fügen dieser Karte nun verschiedene Feature-Classes hinzu.
- Wenn der Bereich Katalog noch nicht sichtbar ist, klicken Sie auf die Registerkarte Anzeigen und auf Bereich "Katalog".
- Verankern Sie den Bereich Katalog rechts neben der Karte.
- Blenden Sie im Bereich Katalog das Element Ordner und dann NotebookStart ein.
- Erweitern Sie die Geodatabase Toronto.gdb.
Die Geodatabase enthält mehrere Feature-Classes.
- Klicken Sie mit der rechten Maustaste auf die Feature-Class etobicoke, und klicken Sie dann auf Zu aktueller Karte hinzufügen.
Diese Polygone stellen verschiedene Gemeinden auf dem Stadtgebiet von Toronto dar.
- Fügen Sie dieser Karte nun die Feature-Classes fire_stations und greenspace hinzu.
Diese Feature-Classes stehen für die Standorte von Feuerwachen und Grünflächen auf dem Stadtgebiet von Toronto. Sie verwenden diese Feature-Classes, um verschiedene Geoverarbeitungswerkzeuge mit Python auszuführen.
Ein Notebook erstellen und Python-Code ausführen
In diesem Abschnitt erstellen Sie ein Notebook in ArcGIS Pro und verwenden es, um Python-Code auszuführen.
- Klicken Sie auf dem Menüband auf die Registerkarte Analyse, klicken Sie in der Gruppe Geoverarbeitung auf den Dropdown-Pfeil für die Schaltfläche Python, und klicken Sie dann auf Python-Notebook.
Beim Klicken auf die Schaltfläche Python wird auch ein neues Notebook geöffnet. Im Dropdown-Menü haben Sie jedoch die Wahl zwischen Python-Notebook und Python-Fenster. Das Python-Fenster ist eine andere Möglichkeit, Python-Code in ArcGIS Pro auszuführen.
Unter Umständen dauert es einen Moment, bis das neue Notebook angezeigt wird, und Sie sehen währenddessen vielleicht die Meldung Kernel wird initialisiert auf dem Bildschirm. Das bedeutet, dass ArcGIS Pro auf die Ausführung von Code im Notebook vorbereitet wird. Der Kernel ist eine Software, die im Hintergrund läuft und den Python-Code ausführt, den Sie in das Notebook eingeben.
Das Notebook wird als neue Ansicht im Hauptfenster von ArcGIS Pro geöffnet.
Das neue Notebook wird als .ipnyb-Datei im Home-Verzeichnis des Projekts gespeichert. Das neue Notebook wird auch im Ordner Notebooks im Bereich Katalog angezeigt.
- Klicken Sie in die leere Zelle im Notebook.
Der Umriss der Zelle wird grün.
- Geben Sie die folgende Codezeile ein:
print("Hello Notebook!")
Dieser Code ruft die print-Funktion mit einem einzigen Eingabeparameter innerhalb der Klammern auf. Dieser Parameter ist eine Zeichenfolge, da der Text in Anführungszeichen eingeschlossen ist. Zeichenfolgen sind wichtige und nützliche Daten für die Arbeit mit Python.
- Klicken Sie in der Werkzeugleiste über der Zelle auf die Schaltfläche Run.
Der Code in der Zelle wird ausgeführt, und das Ergebnis erscheint unter der Zelle. Die print-Funktion wird für den Zeichenfolgenwert "Hello Notebook!" ausgeführt und gibt die Zeichenfolge aus. Die Anführungszeichen werden nicht ausgegeben, da sie nicht Teil der Zeichenfolge sind. Sie kennzeichnen den Text lediglich als Zeichenfolge. Links neben der Zelle erscheint die Zahl 1 in Klammern. Darunter wird eine neue Zeile eingefügt.
Sie können auch die aktuell ausgewählte Zelle ausführen, indem Sie STRG+EINGABETASTE drücken.
Sie können in eine einzige Zelle mehrere Codezeilen eingeben, indem Sie nach jeder Zeile die EINGABETASTE drücken. Das mag für Sie kontraintuitiv sein, wenn Sie normalerweise Code im Python-Fenster oder im interaktiven Fenster eines Python-Editors ausführen, wo die Eingabetaste betätigt wird, um eine Codezeile auszuführen.
- Geben Sie in die Zelle unter Ihrem Hello Notebook-Code die folgenden Codezeilen ein:
a = 5 b = 7 c = 9 print(a * b * c)
Dieser Code erstellt die drei Variablen a, b und c und weist ihnen die Werte 5, 7 und 9 zu. In der letzten Zeile steht das Multiplikationsergebnis der Variablen.
- Drücken Sie STRG+EINGABETASTE.
Nach dem Ausführen der Zelle wird darunter der Wert 315 angezeigt. Links neben der Zelle erscheint die Zahl 2 in Klammern. Dies bedeutet, dass es sich um die zweite ausgeführte Zelle handelt.
- Klicken Sie oben im Notebook auf das Menü Insert und anschließend auf Insert Cell Below.
Unterhalb der aktuell ausgewählten Zelle wird eine neue Zelle eingefügt.
- Geben Sie in die neue Zelle folgende Codezeile ein:
a * b * c
Was wird passieren, wenn Sie die Zelle ausführen?
- Führen Sie die Zelle aus, und sehen Sie sich das Ergebnis an.
Entspricht das Ergebnis Ihren Erwartungen?
Die Werte der Variablen a, b und c werden gespeichert, sobald Sie sie festgelegt haben, sodass Sie sie in einer anderen Zelle verwenden können.
Das Ergebnis der Multiplikation der Werte für a, b und c wird ausgegeben, wenn Sie die Zelle ausführen.
Die print-Anweisung ist nicht erforderlich, da Python in Notebooks, im Python-Fenster und im Python-Interpreter einfache Ausdrucksanweisungen evaluiert und den Wert ausgibt.
- Wenn Sie die Zelle durch Drücken von STRG+EINGABETASTE ausgeführt haben, fügen Sie darunter eine neue Zelle ein.
Wenn Sie die Zelle über die Schaltfläche "Run" ausgeführt haben, sollte eine neue Zelle bereits automatisch eingefügt worden sein.
- Geben Sie in die neue Zelle folgende Codezeile ein:
a * t
Was wird passieren, wenn Sie die Zelle ausführen?
- Führen Sie die Zelle aus, und sehen Sie sich das Ergebnis an.
Entspricht das Ergebnis Ihren Erwartungen?
Variable a wurde auf den Wert 5 festgelegt, für die neue Variable t wurde jedoch noch kein Wert festgelegt. Dies verursacht einen Fehler. In Python können Sie nur Variablen verwenden, denen Sie einen Wert zugewiesen haben.
- Bearbeiten Sie den Code in der Zelle folgendermaßen:
a * "t"
Was wird passieren, wenn Sie die Zelle ausführen?
- Führen Sie die Zelle aus, und sehen Sie sich das Ergebnis an.
Entspricht das Ergebnis Ihren Erwartungen?
Indem Sie t in Anführungszeichen setzen, weiß Python, dass es sich um eine Zeichenfolge handelt. Python versteht den Ausdruck als t mal 5. Der neue Zeichenfolgenwert lautet dementsprechend 'ttttt'.
- Fügen Sie eine neue Zelle hinzu, und geben Sie den folgenden Code ein:
t = 10 a * t
Was wird passieren, wenn Sie die Zelle ausführen?
- Führen Sie die Zelle aus.
Entspricht das Ergebnis Ihren Erwartungen?
Da in der ersten Zeile der Zelle die Variable t als 10 definiert wird, konnte Python die Variable mit dem Wert für Variable a multiplizieren.
Sie haben ein neues Notebook in ArcGIS Pro geöffnet und einige Beispiele für einfachen Python-Code ausgeführt. Als Nächstes verwenden Sie die Notebook-Funktionen, um den Code in den Zellen zu verwalten.
Code in Zellen verwalten
Der Code in Notebooks wird in Zellen ausgeführt. Die Reihenfolge, in der die Zellen ausgeführt wurden, wird durch die Zahlen neben den Zellen angegeben, die nach der Ausführung angezeigt werden. In Notebooks sind Werkzeuge zum Verwalten von Zellen verfügbar. Sie lernen nun diese Aspekte der Arbeit mit Python in einem Notebook kennen.
- Geben Sie die folgende Codezeile in die nächste leere Zelle ein (fügen Sie bei Bedarf eine neue Zelle hinzu), und führen Sie die Zelle aus.
mylist = [1, 2, 3, 4, 5]
Was ist geschehen?
Dieser Code hat eine neue Variable definiert und den Wert festgelegt, es wurde jedoch nichts ausgegeben.
Die Variable mylist ist eine Liste, was an den eckigen Klammern zu erkennen ist. Listen sind ein wichtiger Datentyp in Python. Sie bestehen aus einer Abfolge von Elementen. In diesem Fall sind diese Elemente Zahlen, aber Listen können auch andere Arten von Daten enthalten. Die Elemente in einer Liste werden durch Kommas getrennt.
- Geben Sie den folgenden Code in die nächste leere Zelle ein, und führen Sie die Zelle aus.
mylist[-1]
Was ist geschehen?
Die Elemente in einer Liste werden indiziert, beginnend mit der Indexzahl Null. Über die Indexzahl können Sie bestimmte Elemente in einer Liste abrufen. Die Indexzahl -1 bedeutet, dass die ersten Elemente am Ende der Liste, also beim letzten Element, beginnen. Die Zahl 5 wird zurückgegeben.
Wie Sie gesehen haben, wird nach dem Ausführen der Zelle eine Zahl in den Eingabe- und Ausgabeaufforderungen der Zelle angezeigt. Diese Zahl beginnt bei 1 und erhöht sich für die weiteren Zellen. Die Zahl wird bei jedem Ausführen einer Zelle erhöht, auch wenn eine bereits ausgeführte Zelle erneut ausgeführt wird. Anhand der Zahlen können Sie die Reihenfolge erkennen, in der die Zellen ausgeführt wurden.
- Ändern Sie den Code in der Zelle, in der die Variable mylist definiert wurde, wie unten gezeigt, indem Sie mehr Elemente hinzufügen, aber führen Sie die Zelle noch nicht aus.
mylist = [1, 2, 3, 4, 5, 6, 7, 8]
- Klicken Sie in die Zelle darunter, die den Code mylist[-1] enthält, und klicken Sie auf die Schaltfläche Run.
Entspricht das Ergebnis Ihren Erwartungen?
Das Ergebnis lautet 5. Warum lautet es nicht 8?
Code in Notebooks wird Zelle für Zelle eingegeben. Alle jemals verwendeten Variablen werden gespeichert.
Bis Sie die Zelle mit dem Code ausführen, der die Variable mylist neu definiert, bleibt der Wert von mylist der gespeicherte Wert [1, 2, 3, 4, 5], und der Wert an Position -1 in der Liste bleibt 5.
- Klicken Sie in die Zelle mit mylist = [1, 2, 3, 4, 5, 6, 7, 8], und führen Sie sie aus.
- Klicken Sie in die Zelle mit mylist[-1], und führen Sie sie aus.
Der Wert an der letzten Position der Liste lautet nun 8.
Anstatt Zellen einzeln auszuführen, können Sie auch mehrere Zellen auswählen und zusammen ausführen. Oder Sie können alle Zellen in einem Notebook ausführen, indem Sie im Menü Cell die Option Run All wählen.
Es hat sich bewährt, zusammengehörige Codezeilen in derselben Zelle zu organisieren. Beispielsweise wäre es sinnvoll, die zwei vorherigen Zellen zu einer einzigen Zelle zusammenzuführen. Sie können dazu entweder den Code manuell von einer Zelle in die andere kopieren und einfügen oder die Zellen zusammenführen.
- Klicken Sie in die Zelle, in der die Variable mylist definiert wurde.
In der Zelle steht mylist = [1, 2, 3, 4, 5, 6, 7, 8].
- Klicken Sie auf das Menü Edit, und wählen Sie Merge Cell Below aus.
Das Ergebnis ist eine einzige Zelle mit den kombinierten Codezeilen. Die Ergebnisse unter den Zellen wurden entfernt. Zwischen die beiden Codezeilen aus den zwei zusammengeführten Zellen wird eine leere Zeile eingefügt, die Sie jedoch entfernen können.
- Führen Sie die zusammengeführte Zelle aus.
Das Menü Edit bietet viele Möglichkeiten zum Bearbeiten von Zellen in Ihrem Notebook. Sie können Zellen kopieren und einfügen, löschen, teilen und zusammenfügen und ausgewählte Zellen nach oben oder unten verschieben.
Zusätzliche Werkzeuge finden Sie in den Menüs View, Insert und Cell.
Einige der gebräuchlichsten Werkzeuge sind auch als Schaltflächen auf der Notebook-Werkzeugleiste verfügbar.
Zu diesen zählen folgende:
- Insert Cell Below (Zelle darunter einfügen)
- Cut Selected Cells (Ausgewählte Zellen ausschneiden)
- Copy Selected Cells (Ausgewählte Zellen kopieren)
- Paste Cells Below (Zellen darunter einfügen)
- Move Selected Cells Up (Ausgewählte Zellen nach oben verschieben)
- Move Selected Cells Down (Ausgewählte Zellen nach unten verschieben)
Weitere Werkzeuge finden Sie in der Command Palette.
- Klicken Sie auf die Schaltfläche Command Palette.
Eine Liste mit Befehlen wird angezeigt.
Klicken Sie auf einen Befehl, um ihn auszuführen. Je nach Art des Befehls wird er entweder auf die ausgewählten Zellen im Notebook oder auf alle Zellen angewendet.
- Klicken Sie in der Command Palette auf clear all cells output.
Der Code bleibt unverändert, doch alle Ausgaben wurden entfernt. Die Eingabe- und Ausgabeaufforderungen sind leer, da keine der Zellen ausgeführt wurde. Wenn Sie eine Zelle ausführen, beginnen die Aufforderungen wieder bei 1.
In der Command Palette werden für viele Aufgaben Tastenkombinationen angezeigt.
- Klicken Sie auf die Schaltfläche Command Palette, und führen Sie einen Bildlauf nach unten bis zu insert cell below durch.
Die zugehörige Tastenkombination steht rechts neben dem Befehl. Die Tastenkombination ist der Buchstabe B, wenn sich die Notebook-Zellen im Befehlsmodus befinden.
- Blenden Sie die Command Palette aus, indem Sie neben die Palette, aber in das Notebook klicken.
- Klicken Sie in den Bereich links neben der zweiten Zelle, sodass sie blau wird.
Klicken Sie nicht in den Codeabschnitt. In diesem Fall wird die Zelle grün.
Der blaue Zellrahmen gibt an, dass sich die Zelle im Befehlsmodus befindet.
- Drücken Sie die Taste B auf der Tastatur.
Unterhalb der ausgewählten Zelle wird eine neue Zelle eingefügt. Wäre die Zelle grün gewesen, hätten Sie den Buchstaben b in den Code in der Zelle eingefügt.
Bei den Tastenkombinationen wird nicht zwischen Groß- und Kleinschreibung unterschieden – b und B sind also identisch.
Sie müssen sich diese Befehle nicht merken. Erfahrene Programmierer lernen sie jedoch auswendig, um schneller arbeiten zu können. Für einfache Aufgaben sind die Schaltflächen und Menüoptionen im Notebook ausreichen.
Wenn Sie den Befehl für eine bestimmte Aufgabe suchen, können Sie die Suchleiste über der Command Palette verwenden.
- Öffnen Sie die Command Palette, und geben Sie run in das Feld Search ein.
Daraufhin werden nur Werkzeuge mit dem Wort "run" im Namen angezeigt. Für einige Befehle sind Tastenkombinationen verfügbar. Die Tastenkombination für run selected cells lautet beispielsweise STRG+EINGABETASTE.
- Blenden Sie die Command Palette aus, indem Sie neben die Palette, aber in das Notebook klicken.
- Schließen Sie das Notebook.
Sie haben nun gelernt, wie Sie Python-Code in Notebook-Zellen eingeben und bearbeiten. Außerdem haben Sie Notebook-Funktionen zum Ausführen und Verwalten von Code kennengelernt. Als Nächstes verwenden Sie ein Notebook, um Geoverarbeitungswerkzeuge in ArcGIS Pro auszuführen.
Geoverarbeitungswerkzeuge in einem Notebook ausführen
Nachdem Sie erste Erfahrungen mit der Eingabe von Code in einem Notebook gesammelt haben, lernen Sie jetzt die Verwendung einiger Geoverarbeitungswerkzeuge. Sie starten mit einem neuen Notebook.
- Klicken Sie auf der Registerkarte Analyse in der Gruppe Geoverarbeitung auf Python.
Das neue Notebook wird geöffnet.
- Blenden Sie im Bereich Katalog den Abschnitt Notebooks ein.
- Klicken Sie mit der rechten Maustaste auf das neue Notebook (New Notebook (1).ipynb), und klicken Sie auf Rename.
- Geben Sie geoprocessing_demo ein, und drücken Sie die EINGABETASTE.
Das neue Notebook wird umbenannt. Im Bereich Katalog können Sie sehen, dass die Dateierweiterung .ipynb automatisch an den Namen angehängt wurde. Die Notebook-Registerkarte heißt nun geoprocessing_demo.
Für die nächsten Schritte ist es hilfreich, die Karte und das Notebook nebeneinander anzuzeigen.
- Ziehen Sie die Notebook-Registerkarte geoprocessing_demo an das darunter angezeigte Verankerungsziel.
Das Notebook wird unter der Karte verankert. Sie können nun die Ergebnisse Ihres Codes sehen, wenn Sie im Notebook Python verwenden, um mit Feature-Classes auf der Karte zu arbeiten.
- Geben Sie die folgende Codezeile in die leere Zelle ein, und führen Sie die Zelle aus.
import arcpy
Mit dieser Codezeile wird das ArcPy-Paket importiert. ArcPy ist ein Python-Paket, mit dem zahlreiche Funktionen von ArcGIS Pro über Python verfügbar gemacht werden. Dazu gehört auch die Geoverarbeitung.
Da Sie dieses Notebook in ArcGIS Pro verwenden, wird durch Code, der Geoverarbeitungswerkzeuge nutzt, kein Fehler ausgegeben, wenn Sie ArcPy nicht importiert haben. Es hat sich jedoch bewährt, import arcpy immer ganz oben in Ihrem Geoverarbeitungscode einzufügen, damit der Code auch außerhalb von ArcGIS Pro funktioniert.
- Fügen Sie in dieselbe Zelle eine neue Zeile ein, und geben Sie folgenden Code ein:
arcpy.GetCount_management("fire_stations")
Dieser Code verwendet ArcPy, um das Werkzeug Anzahl erhalten auszuführen, mit dem die Anzahl der Features in der Feature-Class fire_stations bestimmt werden kann.
- Führen Sie die Zelle aus.
GetCount ist eine Funktion von ArcPy, die das Geoverarbeitungswerkzeug Anzahl erhalten in der Toolbox Data Management Tools ausführt.
Das Ergebnis wird unter der Codezelle angezeigt. Die Feature-Class umfasst 84 Zeilen (Features). Diese Ergebnisse ähneln den Meldungen, die angezeigt werden, nachdem Sie ein Werkzeug über das Werkzeug-Dialogfeld in ArcGIS Pro ausgeführt haben. Notebooks sind in die Geoverarbeitungsumgebung von ArcGIS Pro integriert. Das bedeutet, dass das Ausführen eines Werkzeugs in einem Notebook weitgehend dem Ausführen eines Werkzeugs über das Werkzeug-Dialogfeld entspricht. Alle Werkzeuge, die Sie in einem Notebook ausführen, werden auch im Bereich Verlauf angezeigt.
- Klicken Sie im Menüband auf die Registerkarte Analyse. Klicken Sie in der Gruppe Geoverarbeitung auf Verlauf.
Das Werkzeug wird im Geoverarbeitungsverlauf angezeigt.
- Schließen Sie den Bereich Verlauf.
- Ändern Sie die Codezeile arcpy.GetCount folgendermaßen:
arcpy.GetCount_management("ambulances")
- Führen Sie die Zelle aus.
Der Code schlägt fehl, und es wird eine Fehlermeldung angezeigt. Am Ende der Meldung werden folgende Informationen angezeigt:
ExecuteError: Failed to execute. Parameters are not valid. ERROR 000732: Input Rows: Dataset ambulances does not exist or is not supported Failed to execute (GetCount).
Warum ist der Code fehlgeschlagen, obwohl der Code zum Ermitteln der Anzahl von Feuerwachen funktioniert hat?
Die Feature-Class fire_stations ist ein Layer auf der aktiven Karte. In einem Notebook können Sie auf ein Dataset verweisen, indem Sie den Namen des Layers in der aktiven Karte referenzieren. Dies entspricht dem Vorgehen beim Ausführen eines Geoverarbeitungswerkzeugs in der Bedienoberfläche.
Die Feature-Class ambulances ist in der aktiven Karte nicht als Layer vorhanden und ist auch keine Feature-Class in der Standard-Geodatabase für das Projekt. Sie können auf eine Feature-Class, die nicht in der aktiven Karte oder Standard-Geodatabase enthalten ist, verweisen, indem Sie den vollständigen Pfad angeben.
Anschließend suchen Sie den Pfad zu der Feature-Class ambulances.
- Blenden Sie im Bereich Katalog den Eintrag Datenbanken und dann Toronto.gdb ein.
- Klicken Sie mit der rechten Maustaste auf ambulances und dann auf Pfad kopieren.
Der Dateipfad zur Feature-Class "ambulances" wird kopiert. Dieser Pfad enthält auch den Namen der Feature-Class.
In unserem Beispiel lautet der Pfad wie folgt:
C:\Tutorials\NotebookStart\Toronto.gdb\ambulances
Der Pfad auf Ihrem Computer wird nicht exakt identisch sein. Der Pfad hängt davon ab, wo und wie Sie die .zip-Datei mit den Daten entpackt haben. Möglicherweise haben Sie die Daten nicht auf Ihrem Laufwerk C und auch nicht in einem Ordner namens "Tutorials" abgelegt. Verwenden Sie im nächsten Schritt den Pfad von Ihrem eigenen Computer.
- Klicken Sie auf die Notebook-Zelle, und markieren Sie ambulances. Fügen Sie den kopierten Pfad ein.
arcpy.GetCount_management("C:\Tutorials\NotebookStart\Toronto.gdb\ambulances")
Die Zelle ist jetzt fast für die Ausführung bereit. Der Pfad sieht nur auf den ersten Blick richtig aus. Es fehlt noch eine Kleinigkeit.
- Klicken Sie direkt hinter die geöffnete Klammer und vor das erste Anführungszeichen, und geben Sie den Buchstaben r ein.
arcpy.GetCount_management(r"C:\Tutorials\NotebookStart\Toronto.gdb\ambulances")
Sie müssen den Buchstaben "r" hinzufügen, damit Python weiß, dass es sich um eine rohe Zeichenfolge handelt. Unter Windows wird ein umgekehrter Schrägstrich als Pfadtrennzeichen verwendet. Python behandelt den umgekehrten Schrägstrich als Escape-Zeichen, sodass bestimmte darauffolgende Buchstaben in einer Zeichenfolge als Tabulator, neue Zeile oder andere Sonderzeichen interpretiert werden. In diesem Pfad würde Python "\N" in der Zeichenfolge "\NotebookStart" als neue Zeile interpretieren. Das r am Anfang der Zeichenfolge weist Python an, Escape-Zeichen zu ignorieren.
- Führen Sie die Zelle aus.
Das Werkzeug Anzahl erhalten wird ausgeführt. Anschließend wird eine Meldung angezeigt, dass die Feature-Class 48 Features enthält.
Sie können in Python-Code auch den Schrägstrich (/) oder einen doppelten umgekehrten Schrägstrich als Pfadtrennzeichen verwenden.
Alle folgenden Schreibweisen dieses Pfades sind in Python gültig:
r"C:\Tutorials\NotebookStart\Toronto.gdb\ambulances" "C:/Tutorials/NotebookStart/Toronto.gdb/ambulances" "C:\\Tutorials\\NotebookStart\\Toronto.gdb\\ambulances"
Wenn Sie einen Schrägstrich (/) oder einen doppelten umgekehrten Schrägstrich als Pfadtrennzeichen verwenden, müssen Sie am Anfang der Pfadzeichenfolge kein r einfügen.
Für alle, die die umgekehrten Schrägstriche unter Windows gewöhnt sind, mag dies zunächst ungewohnt erscheinen, doch dies ist ein wichtiger Punkt.
Eine Möglichkeit, das Angeben vollständiger Pfade für Werkzeuge zu umgehen, ist das Einrichten des Workspace.
- Bearbeiten Sie den Code, sodass eine neue Zeile zwischen den beiden Zeilen eingefügt wird, die mitimport arcpy und arcpy.GetCount beginnen. Fügen Sie folgende Zeile hinzu:
arcpy.env.workspace =
Mit dieser Zeile wird eine Eigenschaft der Umgebungsklasse arcpy.env auf einen bestimmten Wert festgelegt. Anschließend schneiden Sie den Pfad zu Toronto.gdb aus und fügen ihn nach diesem Code ein, um den Pfad festzulegen.
- Schneiden Sie den Pfad zur Geodatabase einschließlich der Dateiendung .gdb aus der Zeile arcpy.GetCount aus, und fügen Sie ihn nach dem Gleichheitszeichen ein.
arcpy.env.workspace = r"C:\Tutorials\NotebookStart\Toronto.gdb
Denken Sie daran, dass der Pfad auf Ihrem Computer von dem hier gezeigten Beispiel abweichen kann. Verwenden Sie den Pfad von Ihrem eigenen Computer.
Es müssen noch einige Dinge geändert werden. Wissen Sie, welche das sind?
Wenn Sie den Code jetzt ausführen, wird ein Syntaxfehler dieser Art angezeigt:
EOL steht für End of Line. Die Meldung bedeutet, dass Python das Ende der Codezeile erreicht hat, während die Zeichenfolge in Zeile 2 verarbeitet wurde. Es muss ein weiteres Anführungszeichen in die Pfadzeichenfolge eingegeben werden, um die Zeichenfolge zu schließen.
- Fügen Sie ein Anführungszeichen ein, um die Zeichenfolge zu schließen.
Die Zeile sollte nun wie folgt lauten:
arcpy.env.workspace = r"C:\Tutorials\NotebookStart\Toronto.gdb"
Die zweite Zeile ist nun vollständig und korrekt. Was muss noch geändert werden?
- Ändern Sie den umgekehrten Schrägstrich vor ambulances zu einem Anführungszeichen.
Der Code kann jetzt ausgeführt werden.
- Führen Sie die Zelle aus.
Der Code sollte korrekt ausgeführt werden und die Anzahl der Features in der Feature-Class "ambulances" angeben.
Die Geodatabase Toronto enthält mehrere Feature-Classes. Sie können jetzt für jede von ihnen die Anzahl der Features erhalten.
- Fügen Sie eine neue Zelle in das Notebook ein, kopieren Sie die Zeile GetCount in eine neue Zelle, ändern Sie den Namen zu bikeways, und führen Sie anschließend die Zelle aus.
arcpy.GetCount_management("bikeways")
Vielleicht möchten Sie die Anzahl der Features in jeder Feature-Class in der Geodatabase wissen. Sie können die Zelle kopieren und den Namen der Feature-Class bearbeiten. In Python ist es jedoch auch möglich, eine Liste aller Feature-Classes zu erstellen und die Funktion GetCount für alle Feature-Classes auszuführen.
- Fügen Sie eine neue Zelle in das Notebook ein, und fügen Sie den folgenden Code hinzu:
# List the feature classes in a workspace # works on the current workspace or a path fc_list = arcpy.ListFeatureClasses() # Print the list print(fc_list) # use a loop to set the variable fc to be # equal to each feature class name in the list for fc in fc_list: # Run Get Count on the current fc from the list # Set the variable count equal to the result of Get Count count = arcpy.GetCount_management(fc) # Print out the name of the feature class and the count print(fc, count)
Dieser Code enthält Kommentare mit Informationen zu den einzelnen Schritten. Ein Kommentar ist Text, der nach einem Rautezeichen (#) steht. Kommentarzeilen werden nicht ausgeführt. Sie dienen lediglich zum besseren Verständnis des Codes.
Wir haben bereits mit Listen und Listenindizierung gearbeitet. Dieser Code erstellt eine neue Variable namens fc_list und definiert sie als Ergebnis von arcpy.ListFeatureClasses im aktuellen Workspace Toronto.gdb. Die letzte Liste enthielt ganze Zahlen. Diese Liste enthält Zeichenfolgen mit den Namen der Feature-Classes.
Der Code gibt nun diese Liste aus. Es ist nicht unbedingt notwendig, die Liste auszugeben. Es ist jedoch eine gute Möglichkeit sicherzustellen, dass die Variable die erwarteten Ergebnisse enthält. Falls ein Fehler auftritt, ist es nützlich zu wissen, was die Variable enthält.
Der nächste Teil des Codes verwendet eine for-Schleife. For-Schleifen verwenden verschiedene Eingaben und einen Block mit eingerückten Codes und führen den Codeblock für jede Eingabe aus.
In diesem Fall sind die Eingaben die Namen in der Liste, und die Variable fc ist auf die einzelnen Namen festgelegt. Der Code in dem eingerückten Block wird für alle Namen ausgeführt.
Der Codeblock erstellt eine Variable namens count und definiert sie als Ergebnis der Funktion GetCount für das aktuelle Element aus der Liste.
Der Codeblock gibt dann den Namen der Feature-Class (den Inhalt der Variable fc) und die Anzahl (den Inhalt der Variable count) aus.
Ohne Kommentare ist der Code nur wenige Zeilen lang.
fc_list = arcpy.ListFeatureClasses() print(fc_list) for fc in fc_list: count = arcpy.GetCount_management(fc) print(fc, count)
- Führen Sie die Zelle aus.
Als Ergebnis wird die Liste der Feature-Classes in der Geodatabase mit der Anzahl der Features angezeigt.
Analysen mit einem Notebook durchführen
Als Nächstes führen Sie mit dem Notebook einige GIS-Analysen durch. Angenommen, Sie möchten herausfinden, welche Gebiete im Verwaltungsdistrikt Etobicoke am weitesten von Feuerwachen entfernt liegen. Sie können diese Gebiete mit Geoverarbeitungswerkzeugen in einem Notebook identifizieren.
- Fügen Sie unterhalb der aktuellen Zelle eine neue Zelle ein.
- Platzieren Sie den Cursor in der Zelle, und geben Sie Folgendes ein:
arcpy.
- Drücken Sie die TAB-Taste.
Eine Liste aller verfügbaren ArcPy-Optionen wird angezeigt.
Sie können einen Bildlauf nach unten durchführen und auf ein Element klicken, um es aus der Liste auszuwählen, oder Sie können noch mehr Text eingeben.
- Geben Sie ein großes B ein.
- Klicken Sie auf Buffer_Analysis.
In der Zelle steht jetzt arcpy.Buffer_analysis.
Diese Vorgehensweise, bei der Sie Code eingeben und anschließend die TAB-Taste drücken, um passende Optionen anzuzeigen und auszuwählen, wird als Tab-Vervollständigung bezeichnet. Auf diese Weise finden Sie schneller die Befehle, die Sie benötigen.
- Platzieren Sie den Cursor am Ende der Codezeile, und drücken Sie UMSCHALT+TAB.
Ein Fenster mit Hinweisen zu Syntax für das Werkzeug Buffer_analysis wird angezeigt. Sie können auf die Pfeiltaste klicken, um das Fenster zu erweitern und den gesamten Text zu lesen.
- Klicken Sie auf die Schaltfläche "Schließen", um das Fenster Signature zu schließen.
- Geben Sie eine öffnende Klammer ein.
Es wird eine schließende Klammer hinzugefügt und der Cursor zwischen beiden Klammern platziert. Hier können Sie jetzt Parameter für das Werkzeug Buffer_analysis hinzufügen.
- Geben Sie ein Anführungszeichen ein.
Ein zweites Anführungszeichen wird hinzugefügt. Zeichenfolgen in Python müssen in Anführungszeichen gesetzt werden, daher wird das zweite Anführungszeichen ergänzt und der Cursor dazwischen platziert.
Das Werkzeug Buffer_analysis benötigt drei Parameter: die Eingabe-Feature-Class, die Ausgabe-Feature-Class und den Pufferabstand. Es gibt noch weitere optionale Parameter. Diese drei sind jedoch die drei einzigen erforderlichen Parameter.
Sie puffern die Feature-Class fire_stations, nennen die Ausgabe-Feature-Class fire_buffer, und puffern mit dem Werkzeug die Feuerwachen in einer Entfernung von 1.000 Metern.
- Vervollständigen Sie die Codezeile wie folgt:
arcpy.Buffer_analysis("fire_stations", "fire_buffer", "1000 METERS")
Die drei Parameter für das Werkzeug sind Zeichenfolgen. Das Werkzeug kann die Feature-Class fire_stations allein anhand des Namens finden, da es sich um einen Layer auf der Karte handelt und Sie den Workspace bereits auf Toronto.gdb festgelegt haben. Das Werkzeug kann eine Ausgabe-Feature-Class allein anhand des Namens "fire_buffer" schreiben, da der Workspace festgelegt wurde. Das Werkzeug verfügt über eine eingebaute Logik, die den Wert für den Pufferabstand und die Maßeinheiten in der Zeichenfolge "1000 METERS" erkennt.
- Führen Sie das Werkzeug aus.
Die Ausgabe-Features werden zur Karte hinzugefügt.
Die Ergebnisse zeigen, welche Gebiete weniger als 1.000 Meter (1 km) von einer Feuerwache entfernt liegen, und welche nicht. Wenn Sie das Notebook und die Karte gleichzeitig anzeigen, können Sie die Ergebnisse bei verschiedenen Auswahlmöglichkeiten besser vergleichen.
- Ändern Sie den Pufferabstand auf 1.750 Meter, und führen Sie die Zelle erneut aus.
arcpy.Buffer_analysis("fire_stations", "fire_buffer", "1750 METERS")
Hinweis:
Wenn die Fehlermeldung "ExecuteError: Bei der Ausführung ist ein Fehler aufgetreten. Parameter sind ungültig." angezeigt wird, in der angegeben wird, dass fire_buffer bereits vorhanden ist, sind die ArcGIS Pro-Umgebungseinstellungen (Geoverarbeitungsoptionen) nicht so festgelegt, dass vorhandenes Feature-Classes überschrieben werden können. Sie können dieses Problem beheben, indem Sie eine neue Zeile in die Zelle vor der Zeile arcpy.Buffer_analysis einfügen. Fügen Sie den folgenden Code in die neue Zeile ein:
arcpy.env.overwriteOutput = True
Dadurch kann das Werkzeug Puffer die vorherige Ausgabe überschreiben. Die Zelle sollte jetzt Folgendes enthalten:
arcpy.env.overwriteOutput = True arcpy.Buffer_analysis("fire_stations", "fire_buffer", "1750 METERS")
Führen Sie die Zelle aus.
Die Gebiete außerhalb dieser Puffer sind weiter von den Feuerwachen entfernt. Daher kann es hier länger dauern, bis ein Feuerwehrwagen seinen Einsatzort erreicht. Um die betroffenen Gebiete zu finden und die nicht betroffenen Gebiete außer Acht zu lassen, verwenden Sie das Werkzeug "Radieren", um die Gebiete innerhalb der Puffer aus dem Verwaltungsbezirk Etobicoke zu entfernen.
- Fügen Sie eine weitere Zelle hinzu, und geben Sie den folgenden Code ein:
arcpy.PairwiseErase_analysis("etobicoke", "fire_buffer", "no_service")
Damit wird das Werkzeug PairwiseErase_analysis auf der Feature-Class etobicoke ausgeführt, und die Gebiete innerhalb der Feature-Class fire_buffer werden gelöscht. Die Ergebnisse werden in eine neue Feature-Class namens "no_service" geschrieben.
Paarweise radieren ist eine alternative Version des Werkzeugs Radieren, das andere Bibliotheken verwendet und die topologischen Beziehungen von Stützpunkten anders behandelt als das Werkzeug Radieren. Wenn Sie Zweifel an der Qualität Ihrer Eingabe-Datasets haben, sollten Sie vor der Ausführung des Werkzeugs Paarweise radieren das Werkzeug Paarweise integrieren ausführen. In dieser einfachen Situation ist dies jedoch nicht notwendig.
- Führen Sie die Zelle aus.
- Deaktivieren Sie im Bereich Inhalt die Layer fire_buffer, greenspace, etobicoke und boundary.
- Klicken Sie mit der rechten Maustaste auf den Layer no_service, und klicken Sie auf Auf Layer zoomen.
Der Layer no_service enthält Gebiete, die weiter von Feuerwachen entfernt liegen.
- Klicken Sie in die Zelle arcpy.PairwiseErase_analysis, und klicken Sie im Bereich Notebook auf das Menü Edit, und wählen Sie Merge Cell Above aus.
Die zwei Zellen werden zusammengeführt.
Der Vorteil von Notebooks und Python-Code im Allgemeinen ist, dass Sie eine Reihe von Werkzeugen schnell ausführen können. In diesem Fall besteht die Sequenz nur aus zwei Werkzeugen, aber das Konzept sollte dennoch deutlich werden.
- Ändern Sie den Entfernungswert von 1.750 auf 2.500, und führen Sie die Zelle aus.
- Deaktivieren Sie den neuen Layer fire_buffer, um den neuen Layer no_service anzuzeigen.
Möglicherweise müssen Sie auf den Layer zoomen, um die übrigen kleineren Gebiete sehen zu können.
Diese Gebiete gehören zu den potenziell am stärksten gefährdeten Gebieten in Bezug auf Feuerwehrservices. Dieses aktualisierte Ergebnis konnten Sie erzielen, indem Sie mehrere Codezeilen als eine einzelne Zelle im Notebook ausgeführt haben. Hätten Sie die Werkzeuge jeweils über die Bedienoberfläche ausgeführt, hätten Sie sowohl das Werkzeug Puffer als auch das Werkzeug Paarweise radieren erneut ausführen müssen, um das aktualisierte Ergebnis zu erhalten.
Bei nur zwei Werkzeugen ist die Zeitersparnis gering. In vielen Workflows müssen jedoch mehrere Werkzeuge angewendet werden. Die Möglichkeit, in Python ein Werkzeug oder mehrere Werkzeuge in einer Schleife auszuführen, ist nützlich, wenn Sie denselben Prozess für mehrere Eingaben durchführen müssen.
- Speichern Sie Ihr Projekt.
Python-Code in und außerhalb von Notebooks
Sie haben gelernt, wie Sie ein Notebook erstellen und wie Sie Python-Code in einem Notebook schreiben und ausführen. Die Verwendung von Notebooks hat mehrere Vorteile, die nicht alle in diesem Lernprogramm angesprochen werden konnten:
- Mit Notebooks gelingt es Ihnen schnell, Ihren ersten Python-Code zu schreiben, ohne einen Python-Editor installieren oder konfigurieren zu müssen.
- Sie können mit Daten und Karten in ArcGIS Pro direkt interagieren. Auf diese Weise sehen Sie sofort die Ergebnisse Ihres aufgeführten Codes.
- Notebooks sind in der Geoverarbeitungsumgebung von ArcGIS Pro integriert. Die Ausführung von Werkzeugen erfolgt daher auf ähnliche Weise wie über die Dialogfelder. Die Ergebnisse werden zur aktiven Karte hinzugefügt, und die ausgeführten Werkzeuge erscheinen im Geoverarbeitungsverlauf.
- Notebooks in ArcGIS Pro umfassen mehrere Features für die Codevervollständigung, die das korrekte Schreiben von Code erleichtern.
- Notebooks können auch außerhalb von ArcGIS Pro ausgeführt werden, z. B. in bestimmten Python-Editoren und in Jupyter Notebook.
- Notebooks verfügen über integrierte Visualisierungswerkzeuge (wie z. B. Karten-Widgets).
- Alle Inhalte werden als .ipynb-Datei gespeichert, die für andere Benutzer freigegeben werden kann.
- Notebooks können in ArcGIS Enterprise oder ArcGIS Online gehostet werden. So können Sie eine .ipynb-Datei für andere Benutzer in Ihrer Organisation zur Verfügung stellen.
Die Ausführung von Python-Code in Notebooks hat auch einige potenzielle Nachteile:
- Andere Python-IDEs verfügen über bestimmte Funktionen, die in Notebooks fehlen, wie z. B. eine Syntaxprüfung oder Debugging-Funktionen.
- Für die Codevervollständigung sind Tastenkombinationen erforderlich, und der Prozess ist nicht so intuitiv oder vollständig wie in anderen Python-Editoren.
- Nicht alle Funktionen von Jupyter Notebook funktionieren auch in ArcGIS Pro (der Funktionsumfang wird jedoch laufend verbessert).
Es gibt noch einige andere Möglichkeiten, Python-Code auszuführen, Dazu zählt die Ausführung von Code in Notebooks, 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 gelernt, wie Sie Python-Code in einem Notebook in ArcGIS Pro schreiben und ausführen. Außerdem haben Sie Variablen und Schleifen kennengelernt, zwei 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 das zweite einer ganzen Reihe von Lernprogramm zur Verwendung von Python in ArcGIS Pro. Weitere werden folgen!
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.