pythonidl桥:Envi函数

2024-10-04 03:25:17 发布

您现在位置:Python中文网/ 问答频道 /正文

我的目标是在python中使用IDL编写的脚本:

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到Python桥sintax。在

在第一种情况下,使用subprocess.call("idldirectory\idl.exe")命令,我可以在windows命令提示符中打开IDL提示符。但是我不能像简单的PRINT, 'hello'那样执行任何IDL函数。在

在第二种情况下,我编写以下poython代码:

^{pr2}$

指令e=IDL.ENVI()工作正常,实际上环境启动。在

指令msi_file = """IDL.Filepath(mydata.tif", ROOT_DIR = 'mydirectory')"""工作正常。在

我的问题是OpenRaster指令。它是ENVI指令而不是IDL指令。所以,IDL.OpenRaster不起作用,我也没有任何解决办法。在

有人能帮我吗? 谢谢您。 洛伦佐


Tags: the代码from脚本taskdir指令root
1条回答
网友
1楼 · 发布于 2024-10-04 03:25:17

你到一半了。出错的地方是将OpenRaster方法作为IDL类的静态方法调用。这不是你想做的。要使用OpenRaster,实际上需要在您创建的ENVI对象上调用该方法。例如:

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

一旦您创建了对象e,它的行为与任何其他python对象一样。i、 e.您可以调用它的方法、访问属性等。例如,要将文件加载到ENVI显示中,您可以执行以下操作:

^{pr2}$

IDL类只是一个接口,允许您将任何IDL函数作为IDL类上的静态方法调用。但是一旦实例化了一个对象,在本例中是e,请像对待其他对象一样使用它。在

相关问题 更多 >