zoukankan      html  css  js  c++  java
  • 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示例数据/栅格数据/

    示例代码

     1          /// Python图像裁剪
     2         /// </summary>
     3         /// <param name="sender"></param>
     4         /// <param name="e"></param>       
     5         private void ImgClip_ToolStripMenuItem_Click (object sender, EventArgs e)
     6         {
     7             ImageClipForm form = new ImageClipForm();
     8             if (form.ShowDialog() != DialogResult.OK) return;
     9             //启动一个进程
    10             System.Diagnostics.Process p = new System.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(object sender, EventArgs e)
    34         {
    35             //裁剪窗体
    36             FormImageClip form = new FormImageClip();
    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)ArcGISDesktop10.2arcpy");
    52             paths.Add(@"D:Program Files (x86)ArcGISDesktop10.2in");
    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<Func<object, object, object, object>>("ImageClip");
    65             //调用ImageClip函数
    66             object a = ImageClip(form.InputFileName, form.ExtentFileName, 
    67                                form.OutputFileName);
    68             MessageBox.Show(a.ToString());
    69 }
    View Code
  • 相关阅读:
    联想 Vibe Shot(Z90-3) 免recovery 获取ROOT权限 救砖 VIBEUI V3.1_1625
    联想 Z5S(L78071)免解锁BL 免rec 保留数据 ROOT Magisk Xposed 救砖 ZUI 10.5.370
    联想 Z5(L78011) 免解锁BL 免rec 保留数据 ROOT Magisk Xposed 救砖 ZUI 10.5.254
    联想 S5 Pro(L78041)免解锁BL 免rec 保留数据 ROOT Magisk Xposed 救砖 ZUI 5.0.123
    第二阶段 冲刺八
    第二阶段 冲刺七
    第二阶段 冲刺六
    第二阶段 冲刺五
    代码大全阅读笔记03
    学习进度十二
  • 原文地址:https://www.cnblogs.com/PIESat/p/10244229.html
Copyright © 2011-2022 走看看