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. 第九课,ROS仿真1

    ---恢复内容开始--- 1.stage simulator 它是一个轻量级的仿真软件,它的包名称是stage_ros,可以进入看看,其包含地图在子目录world下, 启动之: rosrun stag ...

  2. 升级Ubuntu 12.04下的gcc到4.7

    我们知道C++11标准开始支持类内初始化(in-class initializer),Qt creator编译出现error,不支持这个特性,原因在于,Ubuntu12.04默认的是使用gcc4.6, ...

  3. Alternative to iPhone device ID (UDID)

    Alternative to iPhone device ID (UDID) [duplicate] up vote10down votefavorite 3 Possible Duplicate:U ...

  4. JavaEE互联网轻量级框架整合开发(书籍)阅读笔记(1):Mybatis和Hibernate概念理解

    一.关键字说明: oop:面向对象 aop:面向切面 ioc:控制反转 orm:对象关系映射 pojo:数据库表映射的java实体类 二.常识说明:1.hibernate和mybatis都属于持久层. ...

  5. Extjs Hello extjs

    <html > <head runat="server"> <title></title> <link rel="s ...

  6. C#多线程编程实战1.4终止线程

    using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threa ...

  7. C# 高性能对象映射(表达式树实现)

    前言 上篇简单实现了对象映射,针对数组,集合,嵌套类并没有给出实现,这一篇继续完善细节. 开源对象映射类库映射分析 1.AutoMapper 实现原理:主要通过表达式树Api 实现对象映射 优点: . ...

  8. 大数据技术之_11_HBase学习_01_HBase 简介+HBase 安装+HBase Shell 操作+HBase 数据结构+HBase 原理

    第1章 HBase 简介1.1 什么是 HBase1.2 HBase 特点1.3 HBase 架构1.3 HBase 中的角色1.3.1 HMaster1.3.2 RegionServer1.3.3 ...

  9. subset子集全排序问题

    思路一 可以用递推的思想,观察S=[], S =[1], S = [1, 2] 时解的变化. 可以发现S=[1, 2] 的解就是 把S = [1]的所有解末尾添上2,然后再并上S = [1]里面的原有 ...

  10. kali linux之漏洞扫描

    发现弱点:基于端口服务扫描结果版本信息,搜索已公开的漏洞数据库 使用弱点扫描器实现漏洞管理 弱点扫描类型(扫描结果不能确定是不是准确的,应该综合对待威胁) 主动扫描:有身份验证,无身份验证 被动扫描: ...