2016-03-22 21 views
0

mein Ziel ist es, ein Skript in IDL geschrieben zu verwenden, in Python:Python IDL Brücken: Envi Funktionen

IDL-Code:

PRO PS_GS 
; Start the application 
e = ENVI() 
;Generate the roi from a vector file 
; Open a vector file 
file_vec = Filepath('Sic_Trapani.shp', ROOT_DIR = 'E:\mydirectory\') 
vettore = e.OpenVector(file_vec) 
; Get the task from the catalog of ENVITasks 
Task_VtoR = ENVITask('VectorRecordsToROI') 
; Define inputs 
Task_VtoR.INPUT_VECTOR = vettore 
; Define outputs 
Task_VtoR.OUTPUT_ROI_URI = Filepath('roi_roi.xml', ROOT_DIR = 'E:\mydirectory\') 
;Run the task 
Task_VtoR.Execute 
END 

Der obige Code startete in IDL-Eingabeaufforderung, funktioniert einwandfrei. Ich möchte ein Python-Skript, das:

  • Option 1) die oben IDL .pro Skript
  • Option 2) verwenden, um die IDL zu Python-Brücke sintax starten.

Im ersten Fall wird der subprocess.call("idldirectory\idl.exe") Befehl kann ich die IDL Aufforderung in die Windows-Eingabeaufforderung. Aber ich kann keine IDL-Funktion wie eine einfache PRINT, 'hello' ausführen.

Im zweiten Fall schreiben i den folgenden poython Code:

import subprocess 
from subprocess import call 
import idlpy 
from idlpy import IDL 
e=IDL.ENVI() 
msi_file = """IDL.Filepath(mydata.tif", ROOT_DIR = 'mydirectory')""" 
msi_raster = IDL.OpenRaster(msi_file) 

Die Anweisung e=IDL.ENVI() richtig funktioniert, in der Tat ein Envi setion beginnt.

Die Anweisung msi_file = """IDL.Filepath(mydata.tif", ROOT_DIR = 'mydirectory')""" funktioniert ordnungsgemäß.

Mein Problem ist mit der OpenRaster-Anweisung. Es ist eine ENVI-Anweisung und keine IDL-Anweisung. Also, IDL.OpenRaster funktioniert nicht, und ich habe keine Lösungen.

Kann mir jemand helfen? Danke. Lorenzo

+0

Hallo zusammen, ich habe tryed den Code wie zu ändern:. Msi_raster = IDL.ENVI() OpenRaster (msi_file) Das Ergebnis ist die folgende Fehlermeldung: Impossible finden Sie den Zugangspunkt ?? 0LTISceneBuffer @ LizardTech @ @ QEAA @ AEBVLTIPixel @ 1 @ IIPEAPEAX @ Z in die dynamische Link-Bibliothek lti_DSDK.dll Ich verstehe nichts von dieser Fehlermeldung. Googeln Ich habe diese Seite gefunden: Malware-Scan von gdal110.dll Irgendwelche Hilfe? Danke –

+0

Bitte bearbeiten Sie die Frage mit dieser zusätzlichen Information, anstatt sie in einen Kommentar zu schreiben. – veda905

Antwort

1

Sie sind auf halbem Weg. Wo Sie falsch gelaufen sind, war der Aufruf der OpenRaster-Methode als statische Methode für die IDL-Klasse. Das ist nicht das, was du machen willst. Um OpenRaster zu verwenden, möchten Sie diese Methode tatsächlich für das von Ihnen erstellte ENVI-Objekt aufrufen. Zum Beispiel:

e=IDL.ENVI() 
msi_file = IDL.Filepath('mydata.tif', ROOT_DIR = 'mydirectory') 
msi_raster = e.OpenRaster(msi_file) 

Sobald Sie Ihr Objekt e erstellt haben, verhält es sich wie jedes andere Python-Objekt. dh Sie können es Methoden aufrufen, Zugriffseigenschaften etc. Zum Beispiel, Ihre Datei in das ENVI-Display laden Sie folgendes tun konnte:

view = e.GetView() 
layer = view.CreateLayer(msi_raster) 

Die IDL Klasse ist nur eine Schnittstelle, die Sie jede IDL-Funktion aufrufen können als statische Methode auf der IDL Klasse. Aber sobald Sie ein Objekt instanziiert haben, in diesem Fall e, verwenden Sie es wie jedes andere Objekt.