Erstellen einer Python Add-In-Anwendungserweiterung
Eine Anwendungserweiterung kann auf verschiedene Weise verwendet werden, um ergänzende Funktionen für ArcGIS Desktop bereitzustellen.
- Eine Anwendungserweiterung wird häufig verwendet, um einen zusammengehörigen Satz von Funktionen, die ähnliche Aufgaben ausführen, zu gruppieren. Gute Beispiele für Erweiterungen in ArcMap sind die ArcGIS 3D Analyst, Business Analyst usw.
- Anwendungserweiterungen werden in der Regel verwendet, um verschiedene von der Host-Anwendung erzeugte Ereignisse zu überwachen und darauf zu reagieren. Wird beispielsweise ein Layer hinzugefügt oder entfernt, wird ein Ereignis ausgelöst, und die Erweiterung reagiert, indem das Kartendokument automatisch gespeichert wird.
- Anwendungserweiterungen werden verwendet, um die Aktivitäten zwischen anderen Komponenten – wie z. B. Schaltflächen und Werkzeugen – in einem Add-In zu koordinieren. Beispielsweise soll eine Erweiterung einen Satz Werkzeuge in einer Werkzeugleiste erst dann aktivieren, wenn ein bestimmter Satz von Layern zur Karte hinzugefügt wurde.
In diesem Thema erfahren Sie, wie Sie eine Anwendungserweiterung erstellen. Bevor Sie mit dem Workflow beginnen, stellen Sie sicher, dass Sie ein ArcMap Add-In-Projekt erstellt haben und die Projekteinstellungen angegeben haben. Weitere Informationen finden Sie unter Erstellen eines Add-In-Projekts. Dieser Workflow ist eine Anleitung zum Erstellen einer Erweiterung für ArcMap; das Erstellen von Menüs für eine ArcGIS Desktop-Anwendung läuft jedoch genauso ab. In diesem Thema wird der Prozess zum Erstellen einer Erweiterung, die einen Basis-Layer zu ArcMap hinzufügt, wenn ein Dokument geöffnet oder ein neues Dokument erstellt wird, näher erläutert. Die vom Python Add-In-Assistenten erstellte Python-Klasse wird dann näher untersucht, um die Eigenschaften und Methoden zu erläutern, die die Funktionen für die Erweiterung bereitstellen.
Das Erstellen einer Add-In-Anwendungserweiterung erfolgt in zwei Schritten:
-
Erstellen Sie die Anwendungserweiterung.
Nachdem Sie die erforderlichen Projekteinstellungen eingegeben haben, klicken Sie auf die Registerkarte Add-In Contents. Klicken Sie zu Beginn mit der rechten Maustaste auf EXTENSIONS und dann auf "New Extension".
Eine Erweiterung verfügt über verschiedene Eigenschaften, die Sie eingeben können. In der folgenden Liste sind alle Eigenschaften mit einer kurzen Beschreibung aufgeführt. Diese Eigenschaften sind in der Datei config.xml für das Projekt gespeichert.
Eigenschaft Beschreibung Name (erforderlich)
Enthält den Namen der Anwendungserweiterung. Auf der Bildschirmaufnahme unten ist dies der Name, der im Dialogfeld "Erweiterungen" für Desktop-Anwendungen verwendet wird.
Class Name (erforderlich)
Die Python-Klasse, die die Erweiterung darstellt. In der Python-Klasse schreiben Sie die Geschäftslogik für die Erweiterung. Diese Klasse ist wichtig, da sie aufgerufen wird, wenn die Anwendungserweiterung in einer Desktop-Anwendung verwendet wird. Verwenden Sie die Python Benennungsregeln zum Erstellen der Klasse. Python-Klassen verwenden Groß- und Kleinschreibung in den Namen. In diesem Beispiel erstellen wir eine Klasse namens AddBaseLayer.
ID (erforderlich)
Dies ist der eindeutige Name zur Identifizierung der Erweiterung. Es ist möglich, dass Sie mehrere Erweiterungen für ein bestimmtes Projekt erstellen, und diese ID wird verwendet, um zwischen den verschiedenen Anwendungserweiterungen zu unterscheiden. Idealerweise sollten Sie die Standard-ID durch einen aussagekräftigeren Wert ersetzen. Die ID darf keine Leerzeichen enthalten. Sie können Unterstriche als Trennzeichen zwischen Wörtern verwenden. Verwenden Sie keine Python-Schlüsselwörter. Reservierte Wörter finden Sie in der Python-Dokumentation. Der Add-In-Namespace wird der ID vorangestellt. Der Namespace ist in der Datei config.xml gespeichert.
Description (optional)
Beschreibt den Zweck der Anwendungserweiterung. Die Erweiterung 3D Analyst stellt beispielsweise Werkzeuge für die Oberflächenmodellierung und 3D-Visualisierung bereit. Die Beschreibung wird im unteren Teil des Dialogfeldes "Erweiterungen" angezeigt.
Loads Automatically (optional)
Ermöglicht Ihnen, die Anwendungserweiterung zu laden, wenn eine Desktop-Anwendung geöffnet wird. Diese Option ist standardmäßig aktiviert. Wenn sie ausgewählt ist, wird die aktivierte Eigenschaft im Python-Skript auf True eingestellt.
Nachdem Sie die Eigenschaften eingegeben haben, können Sie zum Speichern auf die Schaltfläche Save unten im Assistenten klicken. Daraufhin werden alle erforderlichen Dateien und Ordner im Arbeitsordner erstellt.
- Bearbeiten Sie das Python-Skript.
Im nächsten Schritt bearbeiten Sie das Python-Skript und aktualisieren die Python-Klasse, um die Funktion zum Hinzufügen eines Basis-Layers, immer wenn ein Kartendokument geöffnet oder erstellt wird, einzubauen. Dazu werden die Ereignisse openDocument und newDocument für ArcMap überwacht und darauf reagiert. Zum Hinzufügen der Funktion zur benutzerdefinierten Erweiterung führen Sie die folgenden Schritte aus:
- Bearbeiten Sie das Python-Skript im Ordner Install, der sich im Arbeitsordner befindet, den Sie mit dem Assistenten erstellt haben.
Es sollte eine Klasse mit demselben Namen vorhanden sein, den Sie im Assistenten eingegeben haben. Benennen Sie diese Klasse nicht um, da der Klassenname in der Datei config.xml referenziert wird. Details zu den einzelnen Funktionen in der Erweiterungsklasse finden Sie im Thema Erweiterungsklasse.
- Aktualisieren Sie die Ereignisfunktionen newDocument und openDocument wie unten dargestellt.
Dieser Code liefert die Funktionalität zum Hinzufügen eines Basis-Layers zum aktiven Datenrahmen, falls noch keiner vorhanden ist.
def newDocument(self): """ Adds a base layer if it is not already added to the active data frame of the map. """ # Provide a layer file and the layer name as it would appear in the Table of contents. base_layer = r'C:\GISData\module5\World_Street_Map.lyr' base_layer_name = 'World Street Map' mxd = arcpy.mapping.MapDocument('current') active_view = mxd.activeView df = arcpy.mapping.ListDataFrames(mxd, active_view)[0] if arcpy.mapping.ListLayers(mxd, base_layer_name) == []: arcpy.mapping.AddLayer(df, arcpy.mapping.Layer(base_layer)) arcpy.RefreshTOC() else: return def openDocument(self): """ Adds a base layer if it is not already added to the active data frame of the map. """ base_layer = r'C:\GISData\module5\World_Street_Map.lyr' base_layer_name = 'World Street Map' mxd = arcpy.mapping.MapDocument('current') active_view = mxd.activeView df = arcpy.mapping.ListDataFrames(mxd, active_view)[0] if arcpy.mapping.ListLayers(mxd, base_layer_name) == []: arcpy.mapping.AddLayer(df, arcpy.mapping.Layer(base_layer)) arcpy.RefreshTOC() else: return
- Löschen Sie alle Funktionen, die nicht vom Skript implementiert werden.
Sie müssen alle Funktionen löschen, die nicht vom Skript implementiert werden. Dadurch wird sichergestellt, dass sie nicht von der Anwendung aufgerufen werden.
- Speichern Sie das Skript.
- Bearbeiten Sie das Python-Skript im Ordner Install, der sich im Arbeitsordner befindet, den Sie mit dem Assistenten erstellt haben.
- Testen Sie die Anwendungserweiterung.
Nachdem Sie die Anwendungserweiterung erstellt und den Skriptcode hinzugefügt haben, müssen Sie die Add-In-Datei erstellen und testen, bevor Sie sie freigeben. Eine Anleitung dazu finden Sie unter Testen von Add-Ins.
- Nun können Sie die Anwendungserweiterung bereitstellen und freigeben.
Eine Anleitung zum Bereitstellen und Freigeben eines Add-Ins finden Sie unter Freigeben von Add-Ins.