ArcGIS中自定义ENVI/IDL图像处理工具

0
分享 2016-06-19
ArcGIS中自定义ENVI/IDL图像处理工具

随着空间信息市场的快速发展,遥感数据与GIS的结合日益紧密。遥感影像已经是GIS的核心组成部分,为GIS提供了即时、丰富的数据。导致遥感与GIS的一体化集成逐渐成为一种趋势和发展潮流。ENVI与ArcGIS一体化集成已经从最开始的数据互操作、工作流的无缝连接发展到了第三阶段,即系统无缝融合阶段,全面提升遥感影像价值。进一步提升了空间和影像分析的工作效率,并有效节约系统成本。
目前ENVI4.8的部分图像处理功能可以无缝集成在ArcGIS931和10版本的ArcToolbox中,在ArcGIS软件中能直接使用ENVITools,并且可以用ModelBuilder将ENVI工具和ArcToolbox中的GIS工具组合成需要的业务模型和工作流。同时这些模型和工具支持ArcGISServer的网络发布。ENVITools中现有的工具在ArcGIS下使用和建模都非常方便,在此不一一细说。
下面主要介绍如何利用Python脚本将ENVI/IDL编写的图像处理功能集成到ArcGIS中,进行一体化的数据处理和分析。(以及如何利用ArcGISServer发布ENVI的图像处理功能。)
一、步骤
1、指定路径和文件夹
指定一个路径创建一个文件夹,用于存放IDL文件和Python代码文件。
如:C:\MyTool

2、编写Python Script
Python script文件是为了从用户交互式界面中获取参数,执行脚本文件时将这些参数传递给图像处理程序(IDL编写了.sav文件)调用图像处理的功能。
利用Python 来编写脚本调用ENVI/IDL工具,包含三个部分:
(1)Import the envipy module.
“envipy”是ITT专门为ENVI/ArcGIS一体化开发的一个python模块,envipy与IDL代码中调用ENVI库函数时的加载的代码ENVI,/RESTORE_BASE_SAVE_FILES和ENVI_BATCH_INIT的效果是一样的,就是加载ENVI的进程。
(2)Get the parameters from the geoprocessor object.
(3)Call the RunTool function in the envipy module.
以ArcGIS10为例(ArcGIS931可查看ENVI的Help文档):
# 导入模块
import envipy, arcpy

# Get input raster
inRasterName = arcpy.GetParameterAsText(0)
# Get output raster
outRasterName = arcpy.GetParameterAsText(1)
# Get the Kernel Size
kernelSize = arcpy.GetParameterAsText(2)
# IDL procedure name in the SAVE file for this tool
toolname = 'MyScriptTool'
# Execute ENVI custom tool
envipy.RunTool(toolname, inRasterName, outRasterName, kernelSize,
Library=r'MyScriptTool.sav')

在Python的编译环境复制粘贴该代码,保存为MyScriptTool.py文件,供后面创建使用界面时使用。
3、编写IDL程序,并编译成sav文件
在IDL的利用IDL调用ENVI的图像处理接口实现某一图像处理功能;再编译成sav文件供Python脚本中envipy.RunTool()调用。
有两种编译方式:
方式1:命令行
IDL> .full_reset_session
IDL> .compile myscripttool.pro;或者点击 按钮,编辑该程序。
IDL> resolve_all,skip_routines='envi',/continue_on_error,/quiet
IDL> save,/routines,filename='C:\MyTool\MyScriptTool1.sav'

方式2:按钮操作
构建一个工程,将所有的pro和function文件加载该工程中,右键该工程文件夹点击“构建工程”(注意工程属性的设置,属性中的RESOLVE_ALL选上与不选都可以)。

需要注意的是:

(1) 可以将多个图像处理的工具(pro toolname1, arg0, arg1, arg2和pro toolname2, arg0, arg1, arg2等等,每一个pro对应一个图像处理功能)打包成一个sav文件,这个sav文件在Python脚本中被调用。如第2节中的例子代码:
toolname = 'MyScriptTool'
envipy.RunTool(toolname, inRasterName, outRasterName, kernelSize,
Library=r'MyScriptTool.sav')
此代码中的 Library=r'MyScriptTool.sav'中MyScriptTool.sav文件的文件名可以是任意的,如ha.sav。但是必须保证该sav文件中有程序名与toolname对应(此代码中的toolname就是为了调用sav文件中的同名的程序,toolname不支持函数function,只支持程序pro)。
将多个图像处理的程序打包成一个sav文件,这就保证了多个脚本工具可以对应一个同一个sav文件,免得每一个脚本对应的pro都要编译成单独的一个sav文件。
如:有5个图像处理的程序pro tool1、pro tool2、pro tool3、pro tool4、pro tool5 。可以编译成5个sav文件,分别建立5个脚本工具。同样地,可以将这5个pro编译成1个sav文件,被5个脚本调用,效果是一样的,只是这种方式更方便些。
(2) 尽量将sav文件与python脚本文件放在一个文件夹(相同目录)下,方便共享。如果不在一个目录下,在envipy.RunTool()中Library要指定sav文件的完整路径,如Library = r'c:\savefiles\MyEnviTool.sav' 。
4、构建用户使用界面
构建界面需要三步骤:
  • 创建文件和工具箱toolbox;
  • 给toolbox添加script;
  • 运行该脚本script。

操作流程如下:
(1)打开arcgis desktop10 ,打开catalog,在catalog中指定或者新建一个文件夹并修改相应的名字,右键该文件夹——NEW——toolbox(并修改相应的名字mytool)。
(2)右键该工具箱(mytool)——Add——Script

点击下一步 “添加脚本文件”,将事先写好的脚本导入即可。
点击下一步 “为IDL或ENVI功能程序中的参数进行设置”。
设置完成后,点击‘finish’即可。

(3)上述步骤完成后,会在已建好的工具mytools下出现 。
双击,即可出现运行界面:

点击OK执行脚本工具。
二、共享脚本工具
如果想将制作的脚本工具与别人共享或移植到别的计算机上运行该脚本,必须保证三个文件在一个文件包(文件夹)中。
  • MyScriptTool.py ——脚本文件。

  • MyScriptTool.sav ——IDL或ENVI的功能文件(sav格式)。

  • MyToolbox.tbx——创建的toolbox界面文件。


以上三个文件放在一个文件包中即可完成共享。

使用时,打开ArcToolbox,右键空白处 点击Add Toolbox,添加共享文件包中的.tbx文件即MyToolbox.tbx。
然后该工具出现在ArcToolbox中,双击即可运行,进一步可以与ArcGIS的其他空间分析工具结合构建业务模型。

文章来源:http://blog.sina.com.cn/s/blog_764b1e9d0100pqii.html

0 个评论

要回复文章请先登录注册