首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python桥: Envi函数

Python桥: Envi函数
EN

Stack Overflow用户
提问于 2016-03-22 18:08:31
回答 1查看 902关注 0票数 0

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

IDL代码:

代码语言:javascript
复制
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到。

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

在第二个例子中,我编写了以下poython代码:

代码语言:javascript
复制
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不起作用,我也没有任何解决方案。

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-05-26 14:22:48

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

代码语言:javascript
复制
e=IDL.ENVI()
msi_file = IDL.Filepath('mydata.tif', ROOT_DIR = 'mydirectory')
msi_raster = e.OpenRaster(msi_file)

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

代码语言:javascript
复制
view = e.GetView()
layer = view.CreateLayer(msi_raster)

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36162037

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档