Мосты Python IDL: функции Envi

моя цель - использовать скрипт, написанный на IDL, в python:

ИДЛ-код:

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 Bridge.

В первом случае с помощью команды subprocess.call("idldirectory\idl.exe") я могу открыть приглашение IDL в командной строке Windows. Но я не могу выполнить какую-либо функцию IDL, например простую PRINT, 'hello'.

Во втором случае я пишу следующий код 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 не работает, и у меня нет никаких решений.

Кто-нибудь может мне помочь? Спасибо. Лоренцо


person Lorenzo NAIS    schedule 22.03.2016    source источник
comment
Уважаемые друзья, я попытался изменить код следующим образом: msi_raster=IDL.ENVI().OpenRaster(msi_file) В результате появилось следующее сообщение об ошибке: Невозможно найти точку доступа ??0LTISceneBuffer@LizardTech@@QEAA@AEBVLTIPixel@1@ IIPEEAPEAX@Z в библиотеку динамической компоновки lti_DSDK.dll Я ничего не понимаю в этом сообщении об ошибке. Погуглив, я нашел этот сайт: Сканирование gdal110.dll на наличие вредоносных программ Любая помощь? Спасибо   -  person Lorenzo NAIS    schedule 23.03.2016
comment
Пожалуйста, отредактируйте вопрос с этой дополнительной информацией, а не добавляйте ее в комментарий.   -  person veda905    schedule 05.05.2016


Ответы (1)


Вы на полпути. Вы ошиблись, вызвав метод OpenRaster как статический метод класса IDL. Это не то, чем ты хочешь заниматься. Чтобы использовать OpenRaster, вы действительно захотите вызвать этот метод для объекта ENVI, который вы создали. Например:

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

После того, как вы создали свой объект e, он ведет себя как любой другой объект Python. т. е. вы можете вызывать его методы, получать доступ к свойствам и т. д. Например, чтобы загрузить файл на экран ENVI, вы можете сделать следующее:

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

Класс IDL — это всего лишь интерфейс, который позволяет вам вызывать любую функцию IDL как статический метод класса IDL. Но как только вы создали экземпляр объекта, в данном случае e, используйте его так же, как и любой другой объект.

person spacemanjosh    schedule 26.05.2016