C#调用python.exe使用arcpy方式

下面是详细讲解“C#调用python.exe使用arcpy方式”的完整攻略。

一、前置准备

在 C# 中调用 Python 脚本需要借助于 Process 类,同时需要安装好 python 的开发环境以及第三方库 arcpy。

安装 arcpy:

  1. 安装 ArcGIS Desktop 或者 ArcGIS Engine。
  2. 执行 ArcGIS Desktop 安装路径下的 python 文件夹安装 arcpy,比如在我的电脑上是:C:\Python27\ArcGIS10.3\python.exe
  3. 配置 arcpy 的 PYTHONPATH 环境变量,使其能在 Python 解释器中正确地 import。比如在我的电脑上是:C:\Program Files (x86)\ArcGIS\Desktop10.3\bin\Python27\ArcGIS10.3

二、C# 调用 Python

在 C# 中调用 Python 脚本可以采用以下两种方式:

1. 直接调用 python.exe

ProcessStartInfo start = new ProcessStartInfo();
start.FileName = "python.exe";
start.Arguments = "C:\\path\\to\\your\\python_script.py arg1 arg2 arg3";
start.UseShellExecute = false;
start.RedirectStandardOutput = true;

using (Process process = Process.Start(start))
{
    using (StreamReader reader = process.StandardOutput)
    {
        string result = reader.ReadToEnd();
        Console.Write(result);
    }
}

其中,start.Arguments 指定要执行的 Python 脚本及其参数。

2. 调用 IronPython

IronPython 是一种 Python 语言的 .NET 实现。因此,可以直接在 C# 中调用 IronPython 实现 Python 脚本的执行。

var engine = Python.CreateEngine();
var scope = engine.CreateScope();

try
{
    var source = engine.CreateScriptSourceFromFile(@"C:\path\to\your\python_script.py");

    source.Execute(scope);

    var result = scope.GetVariable<string>("result");

    Console.Write(result);
}
catch (Exception ex)
{
    Console.Write(ex.Message);
}

三、使用 arcpy

下面提供两个示例,演示如何在 C# 中调用使用 arcpy 的 Python 脚本。

1. 使用 arcpy 读取 Shapefile 数据

Python 脚本:(路径为 C:\path\to\your\read_shapefile.py

import arcpy

# 获取 Shapefile 的路径
shapefile = arcpy.GetParameterAsText(0)

# 打开 Shapefile
cursor = arcpy.da.SearchCursor(shapefile, ["SHAPE@XY", "Name"])

# 遍历 Shapefile 中的每个要素
for row in cursor:
    print(row[0], row[1])

C# 代码:

ProcessStartInfo start = new ProcessStartInfo();
start.FileName = "python.exe";
start.Arguments = string.Format("\"C:\\path\\to\\your\\read_shapefile.py\" {0}", shapeFilePath);
start.UseShellExecute = false;
start.RedirectStandardOutput = true;

using (Process process = Process.Start(start))
{
    using (StreamReader reader = process.StandardOutput)
    {
        string result = reader.ReadToEnd();
        Console.Write(result);
    }
}

2. 使用 arcpy 运行 ArcGIS Model

Python 脚本:(路径为 C:\path\to\your\run_model.py

import arcpy

# 获取 ArcGIS Model 的路径
model = arcpy.GetParameterAsText(0)

# 获取 Model 中要素的路径
input_fc = arcpy.GetParameterAsText(1)

# 运行 Model
arcpy.ImportToolbox(r"C:\path\to\your\model.tbx")
result = arcpy.RunModel(model, {"Input_Features": input_fc})

# 获取 Model 的输出
output_fc = result.getOutput(0)
print(output_fc)

C# 代码:

ProcessStartInfo start = new ProcessStartInfo();
start.FileName = "python.exe";
start.Arguments = string.Format("\"C:\\path\\to\\your\\run_model.py\" {0} {1}", modelPath, inputFeatureClassPath);
start.UseShellExecute = false;
start.RedirectStandardOutput = true;

using (Process process = Process.Start(start))
{
    using (StreamReader reader = process.StandardOutput)
    {
        string result = reader.ReadToEnd();
        Console.Write(result);
    }
}

以上就是使用 C# 调用 Python 脚本并使用 arcpy 的完整攻略和两个示例。希望对你有所帮助。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C#调用python.exe使用arcpy方式 - Python技术站

(1)
上一篇 2023年5月15日
下一篇 2023年5月15日

相关文章

  • C#实现读取指定盘符硬盘序列号的方法

    C#实现读取指定盘符硬盘序列号的方法可以分为以下几个步骤: 引入System.Management命名空间 要使用WMI类来获取硬盘序列号,需要引入System.Management命名空间。 using System.Management; 获取管理对象 可以通过ManagementObjectSearcher类来搜索计算机系统上可用的管理对象。通过查询W…

    C# 2023年6月8日
    00
  • C# WORD操作实现代码

    下面是详细的C# WORD操作实现代码攻略。 环境准备 安装Visual Studio 安装微软官方提供的Office插件 Word操作示例 示例1:创建新的Word文档并添加内容 using Word = Microsoft.Office.Interop.Word; Word.Application wordApp = new Word.Applicati…

    C# 2023年5月15日
    00
  • 详解c# 中的DateTime

    详解C#中的DateTime 什么是DateTime DateTime是C#中非常常用的一个类,用于表示时间和日期。它包括年、月、日、时、分、秒、毫秒等各种时间单位,提供了各种方法用于获取、操作和显示时间和日期。 示例1:创建DateTime对象 在C#中创建DateTime对象非常简单,只需要调用DateTime的静态方法之一,或者使用DateTime构造…

    C# 2023年6月1日
    00
  • SQL Server 2005 中使用 Try Catch 处理异常

    下面是详细讲解 SQL Server 2005 中使用 TryCatch 处理异常的完整攻略。 什么是 TryCatch TryCatch 是一种异常处理机制,可以在代码执行过程中捕获异常,并采取不同的措施对它们进行处理。在 SQL Server 中,TryCatch 可以用来处理 T-SQL 脚本中的异常。 使用 TryCatch 处理异常的基本格式 在 …

    C# 2023年5月15日
    00
  • 浅谈c#设计模式之单一原则

    浅谈C#设计模式之单一原则 什么是单一原则 单一原则(Single Responsibility Principle,SRP)指的是一个类或模块只负责完成一个职责或功能。或者说,一个类只应该有一个改变它的理由。 单一原则的优点 降低了代码的复杂度:一个类只负责一个职责,代码也就更加简单明了了,易于维护和测试。 提高了代码的可读性:代码粒度更小、更清晰,易于理…

    C# 2023年5月15日
    00
  • IIS7配置PHP图解(IIS7+PHP_5.2.17/PHP_5.3.5)

    IIS7配置PHP图解(IIS7+PHP_5.2.17/PHP_5.3.5) IIS7是一种Web服务器,可以用于托管ASP.NET和PHP应用程序。在IIS7中,可以使用PHP来开发Web应用程序。本文提供详细的“IIS7配置PHP图解(IIS7+PHP_5.2.17/PHP_5.3.5)”的完整攻略,包括如何安装PHP和IIS7,以及如何配置PHP和II…

    C# 2023年5月15日
    00
  • C#使用NPOI读取excel转为DataSet

    让我来为你详细讲解“C#使用NPOI读取excel转为DataSet”的完整攻略。 什么是NPOI? NPOI是一款开源的适用于.NET和Java平台的POI开发包。POI是Apache Software Foundation的一个开源项目,其主要功能是对Microsoft Format Documents的解析和创建,比如Word、Excel、PowerP…

    C# 2023年5月15日
    00
  • C# WinForm实现自动更新程序之客户端的示例代码

    C# WinForm实现自动更新程序之客户端的完整攻略 前言 随着软件的不断版本升级,客户端自动更新已成为开发者和用户比较看重的一个功能。本文将从客户端实现的角度讲解C# WinForm应用程序的自动更新。 实现思路 客户端自动更新的实现基本思路为: 从服务端获取最新版本信息 如果本地版本与最新版本不一致,下载更新包并进行更新 其中,获取最新版本信息的方式通…

    C# 2023年6月3日
    00
合作推广
合作推广
分享本页
返回顶部