Aufruf von arcpy / python aus .NET?


15

Gibt es Beispiele, die zeigen, wie Python in ein .NET ArcGIS-Add-In oder eine Erweiterung integriert werden kann? Ich habe eine Reihe von Python-Skripten, die ich aus Formularereignissen (z. B. Tastenklicks) in .NET aufrufen möchte. Ich möchte auch in der Lage sein, Variablen im Index von einem .NET Formular einzustellen.

Sollte ich die Kugel beißen und diese Skripte in .NET neu schreiben, oder gibt es eine einfache Möglichkeit, den Python-Code zu umbrechen?

Antworten:


25

Beachten Sie, dass Arcpy im Wesentlichen ein Wrapper für ArcObjects ist. Aber wenn Sie nur versuchen, einige Python-Skripte aufzurufen, die Sie nicht neu schreiben müssen, können Sie einen Prozess erzeugen, der die ausführbare Python-Datei mit Ihren Argumenten aufruft.

var startInfo = new ProcessStartInfo() {
   CreateNoWindow = false,
   UseShellExecute = false,
   FileName = pathToPythonRuntime,
   WindowStyle = ProcessWindowStyle.Hidden,
   Arguments = pathToYourPythonScriptYouDoNotWantToRewrite+" "+yourOtherArgsEtc
 };
var exeProcess= Process.Start(startInfo);
//If you need synchronous execution you can do this
exeProcess.WaitForExit();

Beachten Sie, dass Sie damit auch einige ziemlich coole Multithreading-Sachen machen können.


0

Aufgrund Ihrer Frage bin ich mir nicht sicher, wie sehr Sie mit .NET verbunden sind. Wenn Sie jedoch ArcGIS 10.1 (oder höher) für Desktop verwenden, ist die Verwendung eines Python-Add-Ins meiner Meinung nach einfacher :

ArcGIS 10.1 führt Python in die Liste der Sprachen zum Erstellen von Desktop-Add-Ins ein und bietet Ihnen eine einfache Lösung zum Erweitern 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 den Typ der Anpassung zu deklarieren. Der Assistent generiert alle erforderlichen Dateien, damit das Add-In funktioniert.

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.