Arcengine调用GP服务

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Arcengine调用GP服务相关的知识,希望对你有一定的参考价值。

注需 2个引用的区别

D:\\Program Files (x86)\\ArcGIS\\DeveloperKit10.1\\DotNet\\ESRI.ArcGIS.Geoprocessor.dll

D:\\Program Files (x86)\\ArcGIS\\DeveloperKit10.1\\DotNet\\ESRI.ArcGIS.Geoprocessing.dll

 

官网代码:

Each geoprocessing tool has a fixed set of parameters that provide the tool with the information it needs for execution. Tools usually have input parameters that define the dataset or datasets that will typically be used to generate new output data. Parameters have the following important properties:
  • Name—Each tool parameter has a unique name.
  • Type—The type of data expected, such as a feature class, integer, string, and raster.
  • Required—Either a value must be provided for a parameter, or it is optional.
Each tool has a documentation page known as a tool reference page. For more information about parameters, see Interpreting a tool reference page.
When a tool is used in a program, its parameter values must be set correctly so it can execute when the program runs. The documentation of each tool clearly defines its parameters and properties. Once a valid set of parameter values is provided, the tool is ready to be executed.
Parameters are specified as strings or objects. Strings are text values that uniquely identify a parameter value, such as a path to a dataset or a keyword. Most tool parameters can be specified as a simple string. However, complex parameters, such as a spatial reference, can be easier to specify with an object. Each tool has its own parameter types. To get complete information on a particular tool, review the tool reference page. Interpreting a tool reference page explains how to read a tool reference page and extract information to use in .NET.
You can run a geoprocessing tool by using the Geoprocessing library methods or by the geoprocessor managed assembly methods. For information about the basic differences between the two approaches, see Executing tools. In both cases, the Execute method of the geoprocessor is called.
The Execute method uses a null reference instead of an ITrackCancel interface. The ITrackCancel interface provides access to properties and methods that determine if a cancellation has been executed by the user and also allows developers to specify what actions constitute a cancellation. Both approaches are elaborated with the following examples.

Using the geoprocessing assembly

The geoprocessing assembly is the Component Object Model (COM) interop of the Geoprocessing type library. The Execute method of the IGeoProcessor2 interface of the library is used to run a tool.
The following are the generic steps to execute a tool:
  1. Add a reference to ESRI.ArcGIS.Geoprocessing to your project. This is the only reference you need if you use the geoprocessing assembly.
  2. Create the geoprocessor object.
  3. Add the path to the custom toolbox if you are running a custom tool.
  4. Create an IVariantArray and populate it with tool parameter values. The IVariantArray is available through the esriSystem library.
  5. Call the Execute method on the geoprocessor.
The process is the same if you run a system tool or a custom tool.
Make sure you maintain the order of parameters as specified in the tool reference page when populating the variant array. Follow the syntax section of the tool reference page (see link at the bottom), it shows the correct ordering of parameters.
If you want to skip an optional parameter, just add an empty string to the variant array in correct order. For example, if a tool‘s third, fourth and fifth parameters are optional and you want to pass value only to the fifth parameter, then you have to pass empty strings to the third and fourth parameters to maintain correct ordering.
Passing an empty string instructs the tool to use the default value of that parameter.
Do not follow the tool‘s dialog box to get the order of parameters; follow the tool‘s Help page (browse to Interpreting a tool reference page link at the end). Parameters are arranged on a tool dialog box by "display order" not by the actual order.

Executing a system tool

The following code example shows the execution of the Buffer tool from the Analysis toolbox. The required parameters for the tool are defined. In this case, strings are used to define the input, output, and buffer distance properties, so the call to the tool is easier to read.

[C#]

using System;
using System.Threading;
// Add references to esriSystem for licensing and IVariantArray.
using ESRI.ArcGIS.esriSystem;
// Add a reference to the geoprocessing namespace.
using ESRI.ArcGIS.Geoprocessing;

// Call this method from your main.
private static void RunBuffer()
{
    // Create the geoprocessor.
    IGeoProcessor2 gp = new GeoProcessorClass();
    gp.OverwriteOutput = true;

    IGeoProcessorResult result = new GeoProcessorResultClass();

    // Create a variant array to hold the parameter values.
    IVariantArray parameters = new VarArrayClass();

    object sev = null;

    try
    {
        // Populate the variant array with parameter values.
        parameters.Add(@"C:\\data\\california.gdb\\cities");
        parameters.Add(@"C:\\data\\california.gdb\\cities_buff");
        parameters.Add("1000 Meters");

        // Execute the tool.
        result = gp.Execute("Buffer_analysis", parameters, null);

        // Wait until the execution completes.
        while (result.Status == esriJobStatus.esriJobExecuting)
            Thread.Sleep(1000);
        // Wait for 1 second.

        // Print geoprocessring messages.
        Console.WriteLine(gp.GetMessages(ref sev));
    }

    catch (Exception ex)
    {
        // Print a generic exception message.
        Console.WriteLine(ex.Message);

        // Print geoprocessing execution error messages.
        Console.WriteLine(gp.GetMessages(ref sev));
    }
}

[VB.NET]

Imports System
Imports System.Threading
 Add references to esriSystem for licensing and IVariantArray.
Imports ESRI.ArcGIS.esriSystem
 Add a reference to the geoprocessing namespace.
Imports ESRI.ArcGIS.Geoprocessing

 Call this method from your main.

Private Sub RunBuffer()
    
     Create the geoprocessor.
    Dim gp As IGeoProcessor2 = New GeoProcessor()
    gp.OverwriteOutput = True
    
    Dim result As IGeoProcessorResult = New GeoProcessorResult()
    
     Create a variant array to hold the parameter values.
    Dim parameters As IVariantArray = New VarArray()
    
    Dim sev As Object = Nothing
    
    Try
     Populate the variant array with parameter values.
    parameters.Add("C:\\data\\california.gdb\\cities")
    parameters.Add("C:\\data\\california.gdb\\cities_buff")
    parameters.Add("1000 Meters")
    
     Execute the tool.
    result = gp.Execute("Buffer_analysis", parameters, Nothing)
    
     Wait until the execution completes.
    While (result.Status = esriJobStatus.esriJobExecuting)
        Thread.Sleep(1000)
    End While
    
     Print geoprocessing messages.
    Console.WriteLine(gp.GetMessages(sev))
    
    Catch ex As Exception
     Print generic exception messages.
    Console.WriteLine(ex.Message)
    
     Print geoprocessing execution error messages.
    Console.WriteLine(gp.GetMessages(sev))
    
    End Try
    
End Sub

 

以上是关于Arcengine调用GP服务的主要内容,如果未能解决你的问题,请参考以下文章

ArcEngine尝试读取或写入受保护的内存

在arcengine里面如何用GP工具实现addjoin .用C#

ArcEngine GP工具使用心得

ArcEngine GP工具使用心得

ArcEngine——异步执行GP工具(Background geoprocessing)

ArcEngine 拓扑检查 总结