Chiamare arcpy / python da .NET?


15

Ci sono esempi disponibili che mostrano come python può essere integrato in un componente aggiuntivo o estensione .NET ArcGIS? Ho una serie di script Python che vorrei chiamare dagli eventi del modulo (ad es. Clic sui pulsanti) in .NET. Vorrei anche essere in grado di impostare variabili nello script da un modulo .NET.

Devo mordere il proiettile e riscrivere questi script in .NET o esiste un modo semplice per racchiudere il codice Python?

Risposte:


25

Tieni presente che Arcpy è essenzialmente un wrapper per ArcObjects. Ma se stai solo cercando di chiamare alcuni script Python che non vuoi riscrivere, puoi generare un processo che chiama l'eseguibile python con i tuoi argomenti.

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();

Nota che puoi fare anche cose interessanti per il multithreading con questo.


0

Dalla tua domanda non sono sicuro di quanto tu sia legato a .NET ma, se stai usando ArcGIS 10.1 (o successivo) per Desktop, penso che un approccio più semplice sarà usare un addIn Python :

ArcGIS 10.1 introduce Python nell'elenco delle lingue per la creazione di componenti aggiuntivi desktop, fornendo una soluzione semplice per estendere la funzionalità desktop. Per semplificare lo sviluppo dei componenti aggiuntivi di Python, è necessario scaricare e utilizzare la procedura guidata del componente aggiuntivo Python per dichiarare il tipo di personalizzazione. La procedura guidata genererà tutti i file necessari necessari per il funzionamento del componente aggiuntivo.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.