1.功能简介

Python是一种跨平台语言。无论是在Windows、Linux、Unix还是Mac Os系统,我们都可以使用Python。甚至在Linux、Unix及Mac OS系统内已经集成了Python。语法简洁优美, 简单,易学。拥有强大的标准库及第三方库。本示例程序实现了Python算法与PIESDK集成功能,使得在PIE中也可以调用Python写的算法(以Python图像裁剪算法为例,使用了ArcGIS的arcpy库)。

2. 功能实现说明

2.1. Python算法

2.2. 实现思路及原理说明

Python写的算法是一个*.py文件,我们可以通过直接给Main函数传参来调用,也可以使用IronPython库使Python与C#结合,达到直接调用Python函数的目的。本示例实现方法主要使用第一种(第二种方法IronPython库,直接添加引用即可,详见示例程序)。

Python算法往往使用了很多第三方库,在调用时需要先把三方库的路径添加到sys.path中,需要注意的是,若使用IronPython,有些非Python语言写的文件如(*.pyd)无法被识别,import时会报错(如本示例第二种方法,arcgisscripting.pyd加载报错),这时只能使用Main函数方法。

方法一:通过Main传参

第一步

New一个进程对象

第二步

设置进程执行程序为python.exe

第三步

构造参数,将算法文件(.py)和算法参数一并传入,以空格间隔。

第四步

启动进程

方法二:使用IronPython

第一步

创建脚本引擎对象ScriptEngine

第二步

添加python搜索路径(若需要)

第三步

创建scope并导入python脚本文件

第四步

构造算法需要的参数

第五步

执行算法

2.3 核心接口与方法

接口/类

方法

说明

ScriptEngine

CreateScriptSourceFromFile

导入Python脚本

ScriptScope

GetVariable ()

获取脚本中的方法

ScriptEngine

SetSearchPaths()

设置python搜索路径

2.4. 示例代码

项目路径

百度云盘地址下/PIE示例程序/14.SDK拓展开发/ 03PIESDK与Python结合/ BlendWithPython

数据路径

百度云盘地址下/PIE示例数据/栅格数据/

视频路径

百度云盘地址下/PIE视频教程/14.SDK拓展开发/ 03PIESDK与Python结合.avi

示例代码

          /// Python图像裁剪
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void ImgClip_ToolStripMenuItem_Click (object sender, EventArgs e)
{
ImageClipForm form = new ImageClipForm();
if (form.ShowDialog() != DialogResult.OK) return;
//启动一个进程
System.Diagnostics.Process p = new System.Diagnostics.Process();
p.Exited += p_Exited;
p.StartInfo.UseShellExecute = false;
p.StartInfo.RedirectStandardOutput = true;//重定向输出
p.StartInfo.RedirectStandardError = true;
//启动python.exe
p.StartInfo.FileName = System.IO.Path.Combine(Application.StartupPath,
"../../../../../Python/python.exe");
p.StartInfo.CreateNoWindow = true; /*-------------*/
//此算法依赖ArcGIS,需先安装ArcGIS
/*-------------*/
p.StartInfo.Arguments = System.IO.Path.Combine(Application.StartupPath , "test.py") +" "+ form.InputFileName + " " + form.ExtentFileName + " " + form.OutputFileName; ;//参数以空格分隔,如果某个参数为空,可以传入””
p.EnableRaisingEvents = true;
p.Start();
} //***********************************//
// 此方法不需要python.exe,只需要
// 引用IronPython库,相对上面方法更方便。
// 但是某些情况下import时找不到moudle(如*.pyd)
//**********************************//
private void ImgClip_ToolStripMenuItem_Click2(object sender, EventArgs e)
{
//裁剪窗体
FormImageClip form = new FormImageClip();
if (form.ShowDialog() != DialogResult.OK) return; //(方法1)创建脚本运行时
//ScriptRuntime pyRuntime = Python.CreateRuntime();
//if (pyRuntime == null) return;
//dynamic py = pyRuntime.UseFile(System.IO.Path.Combine( Application.StartupPath , "test.py"));
//object a = py.ImageClip(input,ext,output);//ImageClip()为脚本中的一个函数 //(方法2)创建脚本引擎
ScriptEngine pyEngine = Python.CreateEngine();
pyEngine.Runtime.IO.RedirectToConsole();//重定向 //添加搜索路径
var paths = pyEngine.GetSearchPaths();
paths.Add(@"D:\Program Files (x86)\ArcGIS\Desktop10.2\arcpy");
paths.Add(@"D:\Program Files (x86)\ArcGIS\Desktop10.2\bin");
pyEngine.SetSearchPaths(paths); //创建一个scope
var scope = pyEngine.CreateScope();
//从文件创建脚本源码
var source = pyEngine.CreateScriptSourceFromFile(
System.IO.Path.Combine(Application.StartupPath, "test.py"));
//执行代码
source.Execute(scope); //获得代码中的函数
var ImageClip = scope.GetVariable<Func<object, object, object, object>>("ImageClip");
//调用ImageClip函数
object a = ImageClip(form.InputFileName, form.ExtentFileName,
form.OutputFileName);
MessageBox.Show(a.ToString());
}

PIE SDK与Python结合说明文档的更多相关文章

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

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

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

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

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

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

  4. Pandas数据分析python环境说明文档

    1. 要求windows系统 2. pycharm编程环境并要求配置好python3.x环境 pycharm可在官网下载,下面是链接. https://www.jetbrains.com/zh/pyc ...

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

  6. Java 调用python说明文档

    Java 调用python说明文档 通过java调用python脚本主要如下三种方式: 1.直接执行python脚本: 2.执行python.py文件: 3.使用Runtime.getRuntime( ...

  7. Highcharts选项配置详细说明文档(zz)

    http://www.helloweba.com/view-blog-156.html Highcharts提供大量的选项配置参数,您可以轻松定制符合用户要求的图表,目前官网只提供英文版的开发配置说明 ...

  8. ICE中间件说明文档

    ICE中间件说明文档 1       ICE中间件简介 2       平台核心功能 2.1        接口描述语言(Slice) 2.2        ICE运行时 2.2.1         ...

  9. 《暗黑世界GM管理后台系统》部署+功能说明文档

    http://www.9miao.com/product-10-1073.html <暗黑世界GM管理后台系统>部署+功能说明文档 <暗黑世界GM管理后台系统>部署+功能说明文 ...

随机推荐

  1. js实现在表格中删除和添加一行

    <!DOCTYPE html><html> <head> <title> new document </title> <meta ht ...

  2. 为docker设置国内镜像

    docker的默认镜像(https://hub.docker.com/)地址,拉取镜像时是比较慢的,经常会超时,有时拉取几个小时.为了加快拉取的时间和速度,需要添加中国的镜像地址: 国内的加速地址: ...

  3. 获取下标实现导航切换jquery代码

    var lis = $(".proDetail_contentnav li");for(var i = 0; i < lis.length; i++) { lis[i].in ...

  4. XE ListBox实现伸缩效果

    功能:实现年月日压缩,初始化时item是所有年,点击年展开月,点击月展开天,再点击则收缩. 思路:实际上一开始是将所有item显示,只是将月日的item.height赋值为0,    记录每一行的it ...

  5. Android 画个电池出来(Paint和canvas)

    1.Android中很多时候都要自己去画一个自定义控件出来,就需要用到Paint和Canvas这两个类. 2.效果图:

  6. HackTwelve 为背景添加圆角边框

    1.概要:     ShapeDrawable是一个为UI控件添加特效的好工具.这个技巧适用于那些可以添加背景的控件 2.添加圆角边框其实就是添加的背景那里不是直接添加图片,而是添加一个XML文件即可 ...

  7. XML在C#与Unity3D中的实战运用

    一.xml文件是什么? XML是指可扩展标记语言,英文:Extensible Markup Language的缩写. 二.xml文件有什么用? 用来传输和存储数据,比如网络通信,本地配置文件等. 三. ...

  8. 操作系统下spinlock锁解析、模拟及损耗分析

    关于spinlock 我们在知道什么是spinlock之前,还需要知道为什么需要这个spinlock?spinlock本质就是锁,提到锁,我们就回到了多线程编程的混沌初期,为了实现多线程编程,操作系统 ...

  9. ECS服务里或者阿里云服务器的二级域名设置方法

    我们要实现的效果是,xuxinshuai.abc.com ,具体怎么实现,看下面的流程 第一步:备案域名要有,假如就是www.abc.com 第二步:网站的服务器是IIS的情况下,在部署网站时,需要设 ...

  10. 「HNOI2013」切糕

    题目链接 戳我 \(Solution\) 对于这道题,我们首先来看看没有\(D\)这个约束的该如何做. 我们考虑构造最小割模型. 其实直接贪心就好了,选出每条路径上的最小值就好了(路径就是将每层的同一 ...