1.功能简介

IDL是一门简单易用的科学计算和可视化语言,包含大量的图形图像处理函数,尤其是同ENVI结合集成了该软件的大量功能,因此被广泛用于遥感、地信领域。

本示例程序实现了IDL算法与PIESDK集成功能,使得在PIE中也可以调用IDL写的算法(以IDL图像裁剪算法为例)。

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'");)。

  运行时将文件 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。

  

第一步

添加Interop.COM_IDL_connectLib组件引用

第二步

创建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

示例代码

          /// <summary>
/// 图像裁剪
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void button_run_Click (object sender, EventArgs e)
{
string inFile = textBox_srcImg.Text;
string extFile = textBox_ext.Text;
string outFile = textBox_dst.Text; COM_IDL_connectClass oCom = new COM_IDL_connectClass();
oCom.CreateObject(, , ); //若依赖envi,先初始化ENVI批处理
oCom.ExecuteString("COMPILE_OPT idl2");
oCom.ExecuteString("ENVI, /RESTORE_BASE_SAVE_FILES");
oCom.ExecuteString("ENVI_BATCH_INIT"); //编译算法
oCom.ExecuteString(@".compile '"+System.IO.Path.Combine(Application.StartupPath,"RasterSubsetViaShapefile.pro") +"'");
oCom.ExecuteString(@"file='"+inFile+"'");
//获取文件fid(算法需要)
oCom.ExecuteString("envi_open_file,file,r_fid=fid");
oCom.ExecuteString(@"shpFile = '"+extFile+"'");
//调用算法
oCom.ExecuteString(@"RasterSubsetViaShapefile, Fid,
shpFile=shpFile, outFile='"+outFile+"', r_fid=r_fid"); if (m_OutLayer != null) mapControl_dst.FocusMap.DeleteLayer(m_OutLayer);
m_OutLayer = LayerFactory.CreateDefaultLayer(outFile);
if (m_OutLayer == null) { MessageBox.Show("执行失败"); return; } mapControl_dst.FocusMap.AddLayer(m_OutLayer); mapControl_dst.ActiveView.PartialRefresh(ViewDrawPhaseType.ViewAll);
}

2.5. 示例截图

PIE SDK与IDL算法结合说明文档的更多相关文章

  1. PIE SDK水深提取算法

    1.算法功能简介 水深提取算法就是根据输入的水位设为d,dem设为h 这两个数据做一个差值运算,则水深计算公式为d-h;本示例中的是基于洞庭湖提取的水体矢量文件的范围来计算dem和水位25米的差值. ...

  2. PIE SDK创建金字塔算法

    1.算法功能简介 为栅格影像建立了金字塔,这些影像便能快速进行显示.除了在屏幕上显示外,金字塔还包含了很多其他信息.如果没有金字塔,那么在显示时就要访问整理栅格数据集,然后进行大量计算来选择哪些栅格像 ...

  3. PIE SDK图像重采样算法

    1.算法功能简介 图像重采样是指对采样后形成的由离散数据组成的数字图像按所需的像元位置或像元问距重新采样,以构成几何变换后的新图像.重采样过程本质上是图像恢复过程,它用输入的离散数字图像重建代表原始图 ...

  4. PIE SDK缓冲区分析算法

    1.算法功能简介 缓冲区分析是指有点.线.面实体为基础,自动建立其周围一定宽度范围内的缓冲区多边形图层,然后建立该图层与目标图层的叠加,进行分析而得到的所需的结果.他是用来解决邻近度问题的控件分析工具 ...

  5. PIE SDK矢量栅格化算法

    1.算法功能简介 矢量栅格化,由矢量数据向栅格数据的转换一般比较方便.对于点.线目标,由其所在的栅格行.列数表示,对于面状目标,则需判定落人该面积内的像元.通常栅格(像元)尺寸均大于原来坐标表示的分辨 ...

  6. PIE SDK 文章目录索引

    1.PIE SDK介绍 1.1.  PIE软件介绍 1.2.  PIE SDK介绍 1.3.  PIE支持项目介绍 1.4.  PIE.NET-SDK插件式二次开发介绍 1.5.  PIE.NET-S ...

  7. PIE SDK与OpenCV结合说明文档

    1.功能简介 OpenCV是基于BSD许可(开源)发行的跨平台计算机视觉库,可以运行在Linux.Windows.Android和Mac OS操作系统上.它轻量级而且高效——由一系列 C 函数和少量 ...

  8. PIE SDK与Matlab结合说明文档

    1.功能简介 Matlab是三大数学软件之一,它在数学类科技应用软件中在数值计算方面首屈一指.Matlab可以进行矩阵运算.绘制函数和数据.实现算法.创建用户界面.连接其他编程语言的程序等,主要应用于 ...

  9. PIE SDK与GeoServer结合说明文档

    1.  GeoServer简介 GeoServer是OpenGIS Web服务器规范的J2EE实现的社区开源项目,利用GeoServer可以方便的发布地图数据,允许用户对特征数据进行更新.删除.插入操 ...

随机推荐

  1. MSGPACK和PROTOBUF的故事(MSGPACK明显生产力不足)

    作者曾经在2014年测试出MSGPACK的关键字和中文字符有很大的冲突,所以后来放弃了,本文为很多年前写的一个对比,后来我们一直在使用HTTP协议和PROTOBUF. 看看MSGPACK的文档,自称效 ...

  2. 验证码测试-demo

    <!DOCTYPE html><html><head><meta charset="UTF-8"><title>Inse ...

  3. (转)基于 WPF + Modern UI 的 公司OA小助手 开发总结

    原文地址:http://www.cnblogs.com/rainlam163/p/3365181.html 前言: 距离上一篇博客,整整一个月的时间了.人不能懒下来,必须有个阶段性的总结,算是对我这个 ...

  4. Java主线程如何等待子线程执行结束(转)

    工作中往往会遇到异步去执行某段逻辑, 然后先处理其他事情, 处理完后再把那段逻辑的处理结果进行汇总的产景, 这时候就需要使用线程了. 一个线程启动之后, 是异步的去执行需要执行的内容的, 不会影响主线 ...

  5. word 2013如何从某一页开始插入页码

    把光标移入要插入页面的最前面 插入分页符 在要插入页码的页脚双击打开页脚设计 取消页脚和前面页眉的链接 插入页码

  6. Invoke()的使用

    (最近在看协程) Invoke()方法是一种委托机制 Invoke ( "SendMsg", 3 ), 意思是3秒之后调用 SendMsg() 方法 使用时应该注意以下几点: 1. ...

  7. WinForm中的重绘 - 文本的重绘

    两种方式 TextRenderer.DrawText 注意:默认在每次绘制的文本左右有padding,即使参数中设置了TextFormatFlags.NoPadding也是一样,因此在分段绘制文本时( ...

  8. 如何将Sql server数据库中的模型图转化到Word中--并能够查看字段的属性信息

    1. 在Sql server数据库中创建数据库的模型图 -- Database Diagrams 2. 控制面板--管理工具--ODBC数据源链接--创建一个Sql server的数据源链接 3. 打 ...

  9. 数值限制------c++程序设计原理与实践(进阶篇)

    每种c++的实现都在<limits>.<climits>.<limits.h>和<float.h>中指明了内置类型的属性,因此程序员可以利用这些属性来检 ...

  10. django使用auth模块进行身份认证

    https://docs.djangoproject.com/zh-hans/2.0/topics/auth/default/#authentication-in-web-requests djang ...