python代码说明文档_PIE SDK与Python结合说明文档

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

示例代码

f5933714f68a750578949e9e9cb691f6006.jpg

79d445fbd768a25e573288d50651df46732.jpg

1 ///Python图像裁剪2 ///

3 ///

4 ///

5 private void ImgClip_ToolStripMenuItem_Click (objectsender, EventArgs e)6 {7 ImageClipForm form = newImageClipForm();8 if (form.ShowDialog() != DialogResult.OK) return;9 //启动一个进程

10 System.Diagnostics.Process p = newSystem.Diagnostics.Process();11 p.Exited +=p_Exited;12 p.StartInfo.UseShellExecute = false;13 p.StartInfo.RedirectStandardOutput = true;//重定向输出

14 p.StartInfo.RedirectStandardError = true;15 //启动python.exe

16 p.StartInfo.FileName =System.IO.Path.Combine(Application.StartupPath,17 "../../../../../Python/python.exe");18 p.StartInfo.CreateNoWindow = true;19

20 /*-------------*/

21 //此算法依赖ArcGIS,需先安装ArcGIS

22 /*-------------*/

23 p.StartInfo.Arguments = System.IO.Path.Combine(Application.StartupPath , "test.py") +" "+ form.InputFileName + " " + form.ExtentFileName + " " + form.OutputFileName; ;//参数以空格分隔,如果某个参数为空,可以传入””

24 p.EnableRaisingEvents = true;25 p.Start();26 }27

28 //***********************************//

29 //此方法不需要python.exe,只需要30 //引用IronPython库,相对上面方法更方便。31 //但是某些情况下import时找不到moudle(如*.pyd)32 //**********************************//33 private void ImgClip_ToolStripMenuItem_Click2(objectsender, EventArgs e)34 {35 //裁剪窗体

36 FormImageClip form = newFormImageClip();37 if (form.ShowDialog() != DialogResult.OK) return;38

39 //(方法1)创建脚本运行时40 //ScriptRuntime pyRuntime = Python.CreateRuntime();41 //if (pyRuntime == null) return;42 //dynamic py = pyRuntime.UseFile(System.IO.Path.Combine( Application.StartupPath , "test.py"));43 //object a = py.ImageClip(input,ext,output);//ImageClip()为脚本中的一个函数44

45 //(方法2)创建脚本引擎

46 ScriptEngine pyEngine =Python.CreateEngine();47 pyEngine.Runtime.IO.RedirectToConsole();//重定向48

49 //添加搜索路径

50 var paths =pyEngine.GetSearchPaths();51 paths.Add(@"D:\Program Files (x86)\ArcGIS\Desktop10.2\arcpy");52 paths.Add(@"D:\Program Files (x86)\ArcGIS\Desktop10.2\bin");53 pyEngine.SetSearchPaths(paths);54

55 //创建一个scope

56 var scope =pyEngine.CreateScope();57 //从文件创建脚本源码

58 var source =pyEngine.CreateScriptSourceFromFile(59 System.IO.Path.Combine(Application.StartupPath, "test.py"));60 //执行代码

61 source.Execute(scope);62

63 //获得代码中的函数

64 var ImageClip = scope.GetVariable>("ImageClip");65 //调用ImageClip函数

66 object a =ImageClip(form.InputFileName, form.ExtentFileName,67 form.OutputFileName);68 MessageBox.Show(a.ToString());69 }

View Code

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值