PIE SDK與IDL算法結合說明文檔

 

1.功能簡介

      IDL是一門簡單易用的科學計算和可視化語言,包含大量的圖形圖像處理函數,尤爲是同ENVI結合集成了該軟件的大量功能,所以被普遍用於遙感、地信領域。算法

     本示例程序實現了IDL算法與PIESDK集成功能,使得在PIE中也能夠調用IDL寫的算法(以IDL圖像裁剪算法爲例)。     ide

2. 功能實現說明

2.1. IDL算法

       IDL寫的算法能夠是.pro文件也能夠是.sav文件,算法若是使用到ENVI函數,須要安裝ENVI,另外還須要調用初始化ENVI批處理方法(詳見示例代碼)。函數

2.2. 實現思路及原理說明

       本示例實現方法主要使用Interop.COM_IDL_connectLib組件,直接添加引用便可(若安裝IDL,也能夠在添加引用->Com組件中找到它)。須要注意的是.pro和.sav的初始化方法不一樣,.pro文件使用.complie命令編譯後才能使用該函數;而.sav文件須要先restore,再調用(oCom.ExecuteString("restore 'idlfunction.sav'");)。spa

  運行時將文件 BlendWithIDL\Libs\Win32\RasterSubsetViaShapefile.pro 複製到 PIESDK\Bin目錄下命令行

  注意:本示例使用的IDL版本是IDL82,需安裝ENVI5.0+IDL82才能正常執行。若有更高版本的ENVI+IDL,先將項目引用裏的Interop.COM_IDL_connectLib、COM_IDL_connectLib、AxInteropIDLDRAWX3Lib三個程序集刪除掉,而後右鍵添加引用,在COM裏面找到COM_IDL_connectLib 1.0 type Library 項,選中添加此引用,並將COM_IDL_connectLib引用的嵌入互操做類型屬性改成false。3d

  

 

第一步rest

添加Interop.COM_IDL_connectLib組件引用code

第二步視頻

建立COM_IDL_connectClass對象,並用CreateObject()初始化對象

第三步

若輸入參數須要使用ENVI函數,則須要初始化ENVI批處理

第四步

編譯算法,使用.compile/restore命令

第五步

構造算法須要的參數

第六步

利用ExecuteString()方法執行算法

 

2.3 . 核心接口與方法

接口/類

方法

說明

COM_IDL_connectClass

CreateObject()

構造IDL鏈接對象

COM_IDL_connectClass

ExecuteString()

執行IDL命令行命令

 

2.4.  示例代碼

項目路徑

百度雲盤地址下/PIE示例程序/14.SDK拓展開發/ 01PIESDK與IDL算法結合/ BlendWithIDL

數據路徑

百度雲盤地址下/PIE示例數據/柵格數據/

視頻路徑

百度雲盤地址下/PIE視頻教程/14.SDK拓展開發/01PIESDK與IDL算法結合.avi

示例代碼

 1          /// <summary>
 2         /// 圖像裁剪
 3         /// </summary>
 4         /// <param name="sender"></param>
 5         /// <param name="e"></param>       
 6         private void button_run_Click (object sender, EventArgs e)
 7         {
 8             string inFile = textBox_srcImg.Text;
 9             string extFile = textBox_ext.Text;
10             string outFile = textBox_dst.Text;
11 
12             COM_IDL_connectClass oCom = new COM_IDL_connectClass();
13             oCom.CreateObject(0, 0, 0);
14 
15             //若依賴envi,先初始化ENVI批處理
16             oCom.ExecuteString("COMPILE_OPT idl2");
17             oCom.ExecuteString("ENVI, /RESTORE_BASE_SAVE_FILES");
18             oCom.ExecuteString("ENVI_BATCH_INIT");
19 
20             //編譯算法
21             oCom.ExecuteString(@".compile '"+System.IO.Path.Combine(Application.StartupPath,"RasterSubsetViaShapefile.pro") +"'");
22             oCom.ExecuteString(@"file='"+inFile+"'");
23             //獲取文件fid(算法須要)
24             oCom.ExecuteString("envi_open_file,file,r_fid=fid");
25             oCom.ExecuteString(@"shpFile = '"+extFile+"'");
26             //調用算法
27             oCom.ExecuteString(@"RasterSubsetViaShapefile, Fid, 
28                          shpFile=shpFile,     outFile='"+outFile+"', r_fid=r_fid");
29 
30             if (m_OutLayer != null) mapControl_dst.FocusMap.DeleteLayer(m_OutLayer);
31             m_OutLayer = LayerFactory.CreateDefaultLayer(outFile);
32             if (m_OutLayer == null) { MessageBox.Show("執行失敗"); return; }
33 
34             mapControl_dst.FocusMap.AddLayer(m_OutLayer);           mapControl_dst.ActiveView.PartialRefresh(ViewDrawPhaseType.ViewAll);
35          }
View Code

 

2.5. 示例截圖

相關文章
相關標籤/搜索