《ENVI的二次开发.ppt》由会员分享,可在线阅读,更多相关《ENVI的二次开发.ppt(28页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、ENVI的二次开发介绍邓书斌邓书斌主要内容1、菜单的定制与自定义坐标系、菜单的定制与自定义坐标系2、波段运算与批处理、波段运算与批处理3、ENVI函数函数4、ENVI/IDL与与ArcGIS一体化集成方案一体化集成方案ENVI的菜单文件ENVI的菜单文件保存在的菜单文件保存在HOMEITTIDLxxproductsenvixxmenu文件夹下,有文件夹下,有三个文件:三个文件:display.men:显示窗口菜单文件:显示窗口菜单文件display_shortcut.men:显示窗口右键快捷菜单:显示窗口右键快捷菜单envi.men:主菜单文件:主菜单文件每个菜单项有三部分组成:每个菜单项有三
2、部分组成:LEVELBUTTONNAMEUVALUEEVENTHANDLERPROCEDUREseparatorLEVEL是菜单按钮的级别,从是菜单按钮的级别,从0开始的整数表示,必选项开始的整数表示,必选项BUTTONNAME菜单名称,必选项。菜单名称,必选项。UVALUE分定义了为菜单项所赋给的用户值。用户值在同一用分定义了为菜单项所赋给的用户值。用户值在同一用户函数处理多个菜单项时非常有用,可以区别那个菜单项被选中。户函数处理多个菜单项时非常有用,可以区别那个菜单项被选中。EVENTHANDLERPROCEDURE事件名称,可选项事件名称,可选项separator菜单菜单“横线横线”标示
3、关键字。标示关键字。菜单定制练习在用记事本打开在用记事本打开envi.men文件,在文件的最后添加以下语句:文件,在文件的最后添加以下语句:0MyFunctions1BasicFileInfonotusedfile_info启动启动ENVI+IDL环境。环境。在在IDL环境下新建一个源文件,编写以下代码,环境下新建一个源文件,编写以下代码,PROfile_info,eventENVI_SELECT,title=chooseafile,fid=in_fidIF(in_fideq-1L)THENreturnENVI_FILE_QUERY,in_fid,ns=ns,nl=nl,nb=nb,fname
4、=fnameOpenR,unit,fname,/Get_LUNinfo=FSTAT(unit)Free_LUN,unitprint,youselected,fnameprint,numberofsamples=,nsprint,numberoflines=,nlprint,numberofbands=,nbprint,filesizeinbytes=,info.sizeEND保存为保存为file_info.pro,保存在保存在save_add目录下。目录下。重启重启ENVI+IDL环境,可以看到在环境,可以看到在ENVI最末端新增一个菜单最末端新增一个菜单MyFunctions,点击运行。,点
5、击运行。坐标系原理地理坐标系是以经纬度为单位的地球坐标系统,地理坐标地理坐标系是以经纬度为单位的地球坐标系统,地理坐标系中有系中有2个重要部分,即地球椭球体(个重要部分,即地球椭球体(spheroid)和大地)和大地基准面(基准面(datum)。)。大地基准面指目前参考椭球与大地基准面指目前参考椭球与WGS84参考椭球间的相对位置关系参考椭球间的相对位置关系(3个平移,个平移,3个旋转,个旋转,1个缩放),可以用其中个缩放),可以用其中3个、个、4个或者个或者7个个参数来描述它们之间的关系,每个椭球体都对应一个或多个大地参数来描述它们之间的关系,每个椭球体都对应一个或多个大地基准面。基准面。投
6、影坐标系是利用一定的数学法则把地球表面上的经纬线投影坐标系是利用一定的数学法则把地球表面上的经纬线网表示到平面上,属于平面坐标系。数学法则指的是投影网表示到平面上,属于平面坐标系。数学法则指的是投影类型,目前我国普遍采用的是高斯类型,目前我国普遍采用的是高斯克吕格投影,在英克吕格投影,在英美国家称为横轴墨卡托投影(美国家称为横轴墨卡托投影(TransverseMercator)。)。北京54与西安80坐标系都是投影直角坐标系都是投影直角坐标系北京北京54坐标系、西安坐标系、西安80坐标系实际上指的是我国的两个大坐标系实际上指的是我国的两个大地基准面。地基准面。坐标名称投影类型椭球体基准面北京5
7、4GaussKruger(TransverseMercator)Krasovsky北京54西安80GaussKruger(TransverseMercator)IAG75西安80椭球体名称年代长半轴(米)短半轴(米)扁率WGS8419846378137.06356752.31:298.257克拉索夫斯基(Krasovsky)19406378245.06356863.01:298.3IAG-7519756378140.06356755.31:298.257ENVI中自定义坐标系ENVI中的坐标定义文件存放在中的坐标定义文件存放在HOMEITTIDLxxproductsenvixxmap_proj
8、文件夹下,三个文件夹下,三个文件记录了坐标信息:文件记录了坐标信息:ellipse.txt椭球体参数文件椭球体参数文件datum.txt基准面参数文件基准面参数文件map_proj.txt坐标系参数文件坐标系参数文件在在ENVI中自定义坐标系分三步:定义椭球体、基准面和中自定义坐标系分三步:定义椭球体、基准面和定义坐标参数定义坐标参数定义椭球体语法为语法为,。这里将。这里将“Krasovsky,6378245.0,6356863.0”和和“IAG-75,6378140.0,6356755.3”加入加入ellipse.txt末端。末端。注:注:ellipse.txt文件中已经有了克拉索夫斯基椭球
9、,由于文件中已经有了克拉索夫斯基椭球,由于翻译原因,这里的英文名称是翻译原因,这里的英文名称是Krassovsky,为了让其他,为了让其他软件平台识别,这里新建一个软件平台识别,这里新建一个Krasovsky椭球体。椭球体。添加基准面与定义坐标系语法为语法为,。这里。这里将将“Beijing-54,Krasovsky,-12,-113,-41”和和“Xian-80,IAG-75,0,0,0”加入加入datum.txt末端。末端。注:有的时候为了与其他软件平台兼容,基准面的名称直注:有的时候为了与其他软件平台兼容,基准面的名称直接写成所用的椭球体名称。接写成所用的椭球体名称。在在ENVI任何用到
10、投影坐标的功能模块中都可以新建坐标任何用到投影坐标的功能模块中都可以新建坐标系系(在任何地图投影选择对话框中,点击在任何地图投影选择对话框中,点击“New”按钮。按钮。),或者直接选择主菜单,或者直接选择主菜单-Map-CustomizeMapProjection坐标系定义练习利用自定义坐标系将一幅北京利用自定义坐标系将一幅北京54坐标系转化为西安坐标系转化为西安80坐标坐标系。系。试验的栅格数据情况为:一幅北京坐标系的栅格数据,投试验的栅格数据情况为:一幅北京坐标系的栅格数据,投影参数如下:影参数如下:投影类型:投影类型:TransverseMercator椭球:椭球:Krasovsky基准
11、面:基准面:Krasovsky(自定义)(自定义)中央经线:中央经线:117东向偏移:东向偏移:500000m波段运算波段运算工具用来定义输入的波段或文件,并调用用户编波段运算工具用来定义输入的波段或文件,并调用用户编写的函数,最后将结果输出到文件或是内存中。写的函数,最后将结果输出到文件或是内存中。例如表达式:例如表达式:(float(b1)+float(b2)+float(b3)/3.0基于IDL的波段运算由于由于ENVI为你提供对为你提供对IDL性能的访问,你可以使用内置性能的访问,你可以使用内置的的IDL功能的能力、功能的能力、IDL用户函数,或书写你自己的程序用户函数,或书写你自己的
12、程序执行自定义的操作。有两种方式使用执行自定义的操作。有两种方式使用IDL用户函数:用户函数:将编写好的将编写好的.pro或者或者.sav文件放在文件放在save_add目录下,启动目录下,启动ENVI。当你保存的是当你保存的是.pro文件时候,必须启动文件时候,必须启动ENVI+IDL模式模式,单击主单击主菜单菜单-File-CompileIDLModule;如果你只有单独的如果你只有单独的ENVI,你,你必须提供必须提供,编译好的编译好的sav文件。文件。一个简单的练习下面的程序文本可以在一个文本编辑器中输入,并用文件下面的程序文本可以在一个文本编辑器中输入,并用文件名名user_bm1.
13、pro来保存放到来保存放到save_add文件夹下:文件夹下:实例:实例:FUNCTIONuser_bm1,b1,b2RETURN,b1+b2END启动启动ENVI,单击主菜单,单击主菜单-File-OpenImageFile打开一打开一个多波段文件。个多波段文件。单击主菜单单击主菜单-BasicTools-BandMath,在在Enteranexpressionfield中键入中键入user_bm1(b1,b2)。单击单击OK,为,为b1和和b2选择对应的波段。选择对应的波段。批处理批处理模式的批处理模式的ENVI和正常模式下没有什么区别,只是通和正常模式下没有什么区别,只是通过一系列特定的
14、函数库来执行过一系列特定的函数库来执行ENVI的功能。的功能。ENVI功能函数分散在大约功能函数分散在大约50个小的个小的IDLsave文件中,这文件中,这些二进制的文件包括数据和编译后的程序。这些些二进制的文件包括数据和编译后的程序。这些save文件文件存放在存放在ENVI安装路径下的安装路径下的Save目录下。目录下。ENVI核心核心save文文件包括件包括ENVI的基本功能函数,动态运行函数以及的基本功能函数,动态运行函数以及ENVI运运行所需的内部变量。在典型的行所需的内部变量。在典型的WindowsPC上这些文件存上这些文件存放在:放在:C:rsiidlxxproductsenvix
15、xsave目录下。目录下。批处理例子一个简单的一个简单的ENVI批处理程序批处理程序probt_initenvi,/restore_base_save_files;恢复恢复ENVIsav文件文件envi_batch_init,log_file=batch.log;开始批处理模式开始批处理模式;Batchprocessingwouldgohere;编写批处理过程编写批处理过程envi_batch_exit;结束批处理模式结束批处理模式endENVI函数ENVI提供了大量处理函数供程序员使用,这些函数封装提供了大量处理函数供程序员使用,这些函数封装了交互式了交互式ENVI程序所提供的绝大多数的功能
16、。每个处理程序所提供的绝大多数的功能。每个处理程序都是程序都是IDL的程序或是函数,并可以被任何其它的的程序或是函数,并可以被任何其它的IDL程程序所调用。可以通过序所调用。可以通过ENVI的帮助的帮助WorkingwithENVI-ENVIReferenceGuide-ENVIRoutines查看这些函数查看这些函数的使用说明和例子。的使用说明和例子。开发独立于ENVI界面的系统全国旱情遥感监测系统中科院遥感所ENVI/IDL与ArcGIS一体化集成方案数据互操作与共享数据互操作与共享平台间无缝链接平台间无缝链接系统一体化集成系统一体化集成ENVI/IDL与ArcGIS数据互操作与共享ENV
17、I完全支持完全支持Geodatabase读写读写FileBasedGeodatabasePersonalGeodatabaseEnterprise(SDE)GeodatabaseENVI支持支持E00和和ShapeFile文件格式文件格式ArcGIS支持支持ENVI的文件格式的文件格式ENVI支持支持ArcGIS的企业级服务的企业级服务ArcGIS(IncludingDesktop,Server,ImageServer)ENVI/IDLGeoDatabaseENVI/IDL与ArcGISDesktopENVI/IDL与其它语言集成开发实现技术手段:实现技术手段:Callable技术技术IDLD
18、rawWidgetActiveX对象输出助手对象输出助手CallableIDL技术IDL可以作为动态链接库被外部程序调用,称之为可以作为动态链接库被外部程序调用,称之为CallableIDL技术。技术。外部程序可以像外部程序可以像IDL环境一样使用相关的程序或函数。环境一样使用相关的程序或函数。VC调用ENVI/IDL实例在VC调用ENVI函数:1.首先在建立一个VC的MFC工程,然后ITTIDL70externalinclude目录下拷贝idl_export.h头文件,并添加到VC工程中2.工程设置连接中的对象/库模块中添加idl.lib3.工具选项目录中的Libraryfiles添加安装路
19、径ITTIDL70BINBIN.X864.我的电脑右键属性高级环境变量系统变量path中添加;安装路径ITTIDL70BINBIN.X865.IDL_Win32Init(0,handle,NULL,0);IDL初始化6.IDL_ExecuteStr(“restore,satstretch.sav”);执行IDL命令行7.IDL_Cleanup(true);清除IDLIDLDrawWidgetActiveX实例在C#调用ENVI/IDL函数:1.首先在建立一windows应用程序。在工具箱上右键选择项COM组建选中IDLDrawWidgetControl3.02.拖动控件到窗体上3.axIDLD
20、rawWidget1.IdlPath设定IDL库文件目录4.n=axIDLDrawWidget1.InitIDL(int)this.Handle);初始化IDL控件5.axIDLDrawWidget1.ExecuteStr(“”);执行IDL命令对象输出助手可以将IDL的数据可视化与分析的功能添加到其他应用软件中能够很容易地将IDL对象输出到Java和COM环境自动化处理和直接缩短接口开发时间将IDL对象输出为COM1.定义IDL类(_define)2.我的电脑右键属性高级环境变量系统变量path中添加;C:ProgramFilesMicrosoftVisualStudio8Common7ID
21、E3.在IDL命令行中输入IDLEXBR_ASSISTANT回车打开对象输出助手4.FileNewProjectCOM选择要输出的*_define.pro文件打开将文件加载进输出助手5.设置对象要输出的过程、函数及其参数6.FileSaveproject保存工程7.BuildBuildobject编译输出对象8.生成*.dll和*.tlb文件(或*.ocx和*.tlb)9.在运行中用regsvr32对dll(ocx)注册ENVI/IDL与ArcGISEngine集成构建自己的GIS与RS一体化平台高级语言(高级语言(C#、java)+ArcGISEngine+ENVI/IDL1、快速搭建系统原型2、有效解决了大数据量、数据浏览、栅格矢量叠加、矢量编辑、渲染、专题制图以及空间分析。3、强大的图像处理引擎。4、大大减少了代码开发量、以及程序的开发周期。5、您只需要关注于业务流。