Was sind die Vor- und Nachteile von Python-Add-Ins gegenüber .NET-Add-Ins für ArcGIS for Desktop?


11

Ich habe in der ESRI .NET-Hilfe Folgendes gefunden:

Python

Alle ArcGIS Desktop-Anwendungen enthalten eine eingebettete Skriptsprache namens Python. Auf viele Bereiche von ArcGIS - insbesondere die Geoverarbeitung - kann über vereinfachte Python-Anwendungsprogrammierschnittstellen (APIs) zugegriffen werden, sodass allgemeine Aufgaben einfach erstellt und automatisiert werden können. Python-Skripte können problemlos gemeinsam genutzt werden und können ohne externe Entwicklungsumgebung erstellt werden. Es gibt eine Vielzahl von gemeinfreien Python-Modulen, die sich auf Bereiche wie Naturwissenschaften, Ingenieurwesen und Mathematik konzentrieren. Python ist mit all seinen Stärken nicht für jede Programmieraufgabe geeignet. Obwohl sich die Abdeckung verbessert, sind derzeit nicht alle Bereiche von ArcGIS Python ausgesetzt. Darüber hinaus ist die Bearbeitungs- und Debugging-Erfahrung in Python nicht so ausgefeilt oder benutzerfreundlich wie in kommerziellen Entwicklungsumgebungen wie Visual Studio.Schließlich können Sie mit Python nicht auf ArcGIS-Ereignisse warten und darauf reagieren, keine COM-Schnittstelle implementieren oder sich in die vielen COM-Erweiterungspunkte von ESRI einbinden.

und in der ArcGIS Desktop-Hilfe:

ArcGIS 10.1 führt Python in die Liste der Sprachen für die Erstellung von Desktop-Add-Ins ein und bietet Ihnen eine einfache Lösung zur Erweiterung der Desktop-Funktionalität. Um die Entwicklung von Python-Add-Ins zu vereinfachen, müssen Sie den Python-Add-In-Assistenten herunterladen und verwenden, um die Art der Anpassung zu deklarieren. Der Assistent generiert alle erforderlichen Dateien, damit das Add-In funktioniert.

Wenn Python- und .NET-Add-Ins dieselbe Funktionalität haben? Bedeutet das, dass ich in Python dasselbe tun kann wie .NET?


Wo steht "Python und .NET haben die gleichen Funktionen zum Erstellen von Add-Ins"?
PolyGeo

Entschuldigung, ich
drücke

1
implement a COM interface, or plug into ESRI’s many COM extensibility points using PythonDas ist komisch. Python kann gut mit COM funktionieren.
Nathan W

In der Tat habe ich (triviale) Python-Add-Ins erstellt, die ArcObjects über comtypes verwenden. Ich habe jedoch nicht versucht, COM-Schnittstellen in Python zu implementieren. Ich bin mir nicht sicher, ob das möglich ist oder wie schwierig es im Vergleich zu .NET wäre. Außerdem ermöglicht keine der beiden Add-In-Typen die automatische Registrierung bei COM, sodass einige der fortgeschritteneren Funktionen besser mit einer herkömmlichen COM-Komponente bedient werden können, die vom Installationsprogramm oder (ESRI) RegAsm registriert werden kann.
blah238

1
Dies ist nicht ArcGIS, aber so habe ich eine implementierte COM-Schnittstelle mit Python für MapInfo erstellt. Nathanw.net/2011/04/07/using-python-and-mapinfo-with-callbacks Ich würde sagen, es ist einfacher als .NET: )
Nathan W

Antworten:


24

Die Antwort auf diese Frage lautet ja und nein. Mit einigem Aufwand ist es möglich, alles in Python zu tun, was Sie in .Net tun können, aber einfach und möglich sind zwei sehr unterschiedliche Dinge. Danach lautet die einfachste Interpretation: Nein , Python-Add-Ins können nicht so viel wie .Net-Add-Ins. Die Aufgaben, die Python-Add-Ins ausführen können , sind jedoch viel einfacher und schneller zu implementieren und zu testen.

Aus rein technischer Sicht bietet das ArcGIS Desktop Add-In Framework folgende Funktionen:

  • Ein klar definiertes, XML-basiertes Schema zur Beschreibung einer Reihe gängiger Desktop-Integrationspunkte und -Komponenten: Schaltflächen, Symbolleisten, Menüs, Tools, Menüs und Erweiterungen mit mehreren Elementen sowie eine Möglichkeit, diese auf deklarative Weise einfach miteinander zu verbinden Ihren Code auf den ArcGIS-Desktop
  • Ein Dateiformat und eine Dateistruktur ( .esriaddin) zum Verteilen von Desktop-Anpassungscode.
  • Ein Mechanismus zum Installieren, Überprüfen und Zwischenspeichern ist installiert .esriaddins. Wenn sich also die Quelldatei des deinstallierten Add-Ins geändert hat, wird die geänderte Datei erneut in den lokalen Desktop-Add-In-Cache geladen.
  • Eine Reihe von Sicherheits- und Authentifizierungsmechanismen für den Code in Add-Ins: digitales Signieren von .esriaddinDateien, administrative Kontrolle darüber, welche Authentifizierungsstufe erforderlich ist, um die Installation eines Add-Ins zu ermöglichen.

Was dem Add-In-Framework hier fehlt, ist ein formeller Vertrag über das Verhalten oder die Funktionalität hinter Schaltflächen usw. Wenn Sie das .NET SDK für ArcGIS installieren, erhalten Sie die Visual Studio-Integration in Form von Add-In-Assistenten in Ihren Projektverwaltungsdialogen , Dokumentation, Codefragmente, ArcObjects-Bindungen usw. Sobald Sie die vom Add-In-Framework bereitgestellten Einstiegspunkte überschritten haben, können Sie mit einem .Net-Add-In den Rest des Weges mit den ArcObjects-APIs gehen, die auch im Lieferumfang enthalten sind sowie eine Bibliothek mit Codefragmenten allgemeiner Aufgaben, die bereits vorhanden sind. In ArcGIS gibt es kein solches Python Developer SDK: Alle Funktionen von Python werden durch arcgisscripting / arcpy verfügbar gemacht und sind bereits im Produkt enthalten. Wenn das .Net SDK als großer Download angeboten wird, ist der relativ kleine Download des Add-In-Assistenten in Python am nächsten.

Auf der anderen Seite, Python ist fähig zu verbrauchen / Implementierung COM - Schnittstellen , aber COM von Python wird mit einem beliebigen ArcGIS SDK oder dokumentierte in dem ArcGIS - Hilfesystem nicht gebündelt. Wenn Sie mit der Entwicklung in ArcGIS noch nicht vertraut sind, sollte dies als Eintrittsbarriere ausreichen, um Sie von sich zu drängen, es sei denn, Sie wissen wirklich , was Sie tun. Sie können hier COM in Python ausführen , aber es ist nah genug an einem Turing-Tarpit, dass es schwierig ist, die aufgewendete Zeit zu rechtfertigen, es sei denn, Sie sind ein Experte, der bereits mit den Vor- und Nachteilen von COM und ArcObjects vertraut ist.

Ich würde empfehlen, dass Sie sich ansehen, was Sie mit arcpy tun können . Sie können eine Menge von Aufgaben wie automatisieren Aufruf Geoverarbeitungswerkzeuge und Batch - Bearbeitung von Kartendokumenten zu tun , und Python - Add-In können Sie bestimmten , genau definierten Ereignissenken verwenden und einige Dialog Kontrollen zusätzlich zu ArcPy der Basisfunktionen. Wenn Sie sich keine Möglichkeit vorstellen können, Ihre Aufgabe in Python basierend auf den Angaben in der Dokumentation auszuführen (Sie benötigen eine komplexe Interaktion mit der Benutzeroberfläche oder müssen sich mit Ereignissen verbinden, die nicht im Python-Add-In-Assistenten verfügbar sind, oder etwas verwenden, das nur in ArcObjects verfügbar ist). Führen Sie dann Ihre Entwicklung in einem .Net-Add-In durch.

Es tut uns leid, dass dies nuancierter ist als eine schnelle Ja- oder Nein-Antwort, aber es sollte Ihnen einen gewissen Einfluss darauf geben, ob Sie in Ihrem Add-In die Python- oder die .Net-Route wählen sollten.

Ich nehme an, ich sollte diese Offenlegung hinzufügen: Ich habe einen Großteil der Python-spezifischen Funktionen für Add-Ins in ArcGIS entworfen und entwickelt.


1

Sie betrachten die Desktop-Umgebung, daher ist .NET sicherlich eine Option. Sie können jedoch nur eingeschränkt mit .NET arbeiten, da ein Großteil des ArcGIS-Servers auf mehreren Plattformen ausgeführt werden kann.

Meine zwei Cent: Wenn Sie tiefgreifende UI-Arbeit leisten, würde ich .NET vorschlagen, da Sie eine UI ziemlich einfach erstellen können. Wenn Sie wirklich nur Skripte erstellen und die tieferen Analyseteile von ArcGIS Python verwenden, können Sie viel, viel einfacher auf den Server (oder die "Cloud") wechseln.


1

Einer der Nachteile der Entwicklung von Add-Ins in .NET besteht darin, dass jede neue Version von ArcGIS eine andere inkompatible Version von ArcObjects und eine andere inkompatible Version von Visual Studio verwendet. Die von den .NET-Add-Ins generierten Binärdateien sind im Allgemeinen mit späteren Versionen von ArcGIS kompatibel, jedoch nur, wenn Sie in einer Version von ArcGIS, die später als die ursprüngliche Version von ArcGIS ist, keine Änderungen an Ihrem Add-In vornehmen möchten entwickelt.

Ich habe ein .NET-Add-In zum Laden von Census Bureau TIGER / Liniendaten-Layern in eine Karte in ArcGIS 10.0 entwickelt, und das binäre Add-In funktioniert weiterhin in ArcGIS 10.4. Als ich Änderungen am Add-In vornehmen wollte, habe ich leider versucht, die Lösung in die mit ArcGIS 10.4 kompatible Version von Visual Studio zu bringen, und wurde aufgrund inkompatibler Aufrufe von ArcObjects und Funktionen von mit einer großen Anzahl von Fehlermeldungen überflutet Visual Studio.

Bei der Entwicklung von Add-Ins in Python wird ArcPy anstelle von ArcObjects verwendet, sodass die Dokumentation leichter zugänglich ist und die Überarbeitung des Codes für eine neue Version von ArcGIS wesentlich einfacher sein sollte.

Der Hauptnachteil der Verwendung von Python anstelle von .NET besteht darin, dass das Erstellen einer GUI-Schnittstelle in Python viel schwieriger ist. Pakete wie wxPython können verwendet werden, es gibt jedoch viele Schwierigkeiten, sie in ArcGIS zum Laufen zu bringen. Die Toolbox-Benutzeroberfläche ist wesentlich eingeschränkter als die Dialogfelder, die in .NET erstellt werden können.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.