0

私の目的は、IDL で記述されたスクリプトを Python に使用することです。

IDL コード:

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

上記のコードは IDL コマンド プロンプトで起動され、正しく動作します。次のようなPythonスクリプトを作成したい:

  • オプション 1) 上記の idl .pro スクリプトを起動します
  • オプション 2) IDL to Python Bridge シンタックスを使用します。

最初のケースでは、subprocess.call("idldirectory\idl.exe")コマンドを使用して、IDL プロンプトを Windows コマンド プロンプトで開くことができます。しかし、単純な のような IDL 関数を実行することはできませんPRINT, 'hello'

2 番目のケースでは、次の poython コードを記述します。

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)

命令e=IDL.ENVI()は正しく機能し、実際に Envi の設定が開始されます。

命令msi_file = """IDL.Filepath(mydata.tif", ROOT_DIR = 'mydirectory')"""は正しく機能します。

私の問題は OpenRaster 命令にあります。これは ENVI 命令であり、IDL 命令ではありません。そのため、IDL.OpenRaster が機能せず、解決策がありません。

誰かが私を助けることができますか?ありがとうございました。ロレンツォ

4

1 に答える 1

1

あなたはそこまでの道のりです。あなたが間違っていたのは、OpenRaster メソッドを IDL クラスの静的メソッドとして呼び出したことです。これはあなたがやりたいことではありません。OpenRaster を使用するには、作成した ENVI オブジェクトでそのメソッドを実際に呼び出す必要があります。例えば:

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

object を作成するeと、他の python オブジェクトと同様に動作します。つまり、そのメソッドを呼び出したり、プロパティにアクセスしたりできます。たとえば、ファイルを ENVI ディスプレイにロードするには、次のようにします。

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

このIDLクラスは、任意の IDL 関数をクラスの静的メソッドとして呼び出すことができる単なるインターフェイスですIDL。ただし、オブジェクトをインスタンス化したら (この場合eは )、他のオブジェクトと同じように使用します。

于 2016-05-26T14:22:48.507 に答える