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. T-SQL分页功能存储过程

    分页功能存储过程 ALTER PROCEDURE [dbo].[P_SplitPagesQuery] @TablesName NVARCHAR(MAX),--表名或视图名(只能传单一表名) @PK N ...

  2. C#中Winform程序中如何实现多维表头【不通过第三方报表程序】

    问题:C#中Winform程序中如何实现多维表头. 在网上搜了很多方法,大多数方法对于我这种新手,看的都不是很懂.最后在新浪博客看到了一篇比较易懂的文章:[DataGridView二维表头与合并单元格 ...

  3. window中启动vs后鼠标无法移动

    你停止wisptis.exe这个进程,在c:\Windows\System32下删除wispitis.exe就可以了!

  4. 较为复杂的 GraphQL 查询实现

    一.实现功能首页各类排行榜加载数据: 向下遍历子节点并展开: 1.展开过程中动态加载简介summary.书类bookType: 2.book对象上包裹Rank节点,描述book对象在不同排行榜下所处位 ...

  5. android和.net webservice中的DES加密算法

    也是看了一堆的例子,本身并不会写加密算法,好在只要会用就行了,我们把在app中使用的参数加密,然后在.net端的webservice中进行解密,本身并没有什么问题,但是android下和.net下的d ...

  6. 移植 libevent-2.0.22-stable 到ARM平台

    ARM 移植: 移植简单来讲就是使用ARM的编译环境,重新编译一份ARM平台上可以使用的库或执行文件,一般只需要重新制定C编译器和C++编译器即可. 特别注意的地方: 不能从windows解压文件后再 ...

  7. 以太坊系列之十一: 零起步使用remix开发智能合约

    一步一步使用remix开发智能合约 最新版的remix(2017-8-3)只能使用在线开发了,已经没有离线版本了,并且好像在线版本要FQ才能访问(自行解决). 1.打开remix 注意地址如果是htt ...

  8. Spring boot进阶-配置Controller、interceptor...

    1.配置SpringBootApplication(对spring boot来说这是最基本) package io.github.syske.springboot31; import org.spri ...

  9. CentOS 6.3下Samba服务器的安装与配置【转载】

    本文转载自 园友David_Tang的博客,如有侵权请联系本人及时删除,原文地址: http://www.cnblogs.com/mchina/archive/2012/12/18/2816717.h ...

  10. 用HTML,css完成的百叶窗效果,新手必看

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