FAQ
ArcObjects によるジオプロセシング ツールの実行方法

ナレッジ番号:2725 | 登録日:2023/05/29 | 更新日:2023/12/28

 

トピックの内容


ジオプロセシング ツールの実行

各ジオプロセシング ツールは、固定のパラメータ セットを持っていて、実行に必要な情報をツールに提供しています。

各ツールはたいてい入力パラメータをもっており、通常は新規の出力データを生成するのに使用されるデータセット(群)を定義しています。パラメータは以下の重要な属性をもっています。

  • 名前 :各ツール パラメータにはユニークな名前があります。
  • 型     :要求されるデータの型。フィーチャクラス、整数型、文字列、ラスターなど。
  • 必須 :値がパラメーターに対して必須か、あるいはオプションであるかどうか。

各ツールには、ツールのリファレンス ページとして知られているドキュメントがあります。パラメーターについてのさらに詳しい情報は、ツールのリファレンス ページの説明をご覧ください。

ツールがプログラムで使用される時、プログラムの起動時にツールが実行されるように そのパラメーターの値は正しく与えられなければなりません。各ツールのドキュメントはパラメータとプロパティを明確に定義しています。

パラメーターの値の有効なセットが一旦与えられると、そのツールは実行の準備ができます。 パラメーターは文字列またはオブジェクトとして指定されます。 文字列は、データセットへのパスやキーワードのようにパラメーターの値をユニークに識別するテキストの値です。 ほとんどのツール パラメーターは単純な文字列として指定することができます。 しかし、空間参照のような複雑なパラメーターはオブジェクトで指定する方が簡単です。 各ツールはそれ自身のパラメーター型をもっています。特定のツールに関して完全な情報を得るにはツールのリファレンス ページを見てください。 ツールのリファレンス ページでは、ツールのリファレンス ページの読み方、情報を取得して .NET で使用する方法について説明しています。

Geoprocessing ライブラリのメソッドを使用するか、あるいは Geoprocessor マネージド アセンブリのメソッドを利用してジオプロツールを実行することができます。

Geoprocessing アセンブリの使用

Geoprocessing アセンブリは Geoprocessing タイプ ライブラリのコンポーネント オブジェクト モデル相互運用機能です。このライブラリの IGeoProcessor2 インタフェースの Execute メソッドは、ツールを実行するのに利用されます。

以下はツールを実行する一般的な手順です。

  1. プロジェクトに ESRI.ArcGIS.Geoprocessing への参照を追加します。
    これは Geoprocessing アセンブリを利用する場合に必要な唯一の参照です。
  2. GeoProcessor オブジェクトを作成します。
  3. カスタム ツールを実行する場合は、カスタム ツールボックスへのパスを追加します。
  4. IVariantArray を作成し、ツールのパラメータの値を格納します。IVariantArray は esriSystem ライブラリ を通じて利用できます。 
  5. GeoProcessor の Execute メソッドを呼びます。

このプロセスはシステム ツールを実行する場合でもカスタム ツールを実行する場合でも同じです。

システム ツールの実行

以下のコード サンプルは、Analysis ツール ツールボックスのバッファ ツールの実行の例です。 ツールが必要とするパラメーターが定義されています。 このケースでは、入力、出力、バッファ距離のプロパティを文字列で定義しているので、ツールの呼び出しは読みやすいものとなっています。
// ライセンシングと IVariantArray を利用するために esriSystem への参照を追加します。
using ESRI.ArcGIS.esriSystem;
// geoprocessing ネームスペースへの参照を追加します。
using ESRI.ArcGIS.Geoprocessing;

public static void RunBuffer()
{
    // geoprocessor を作成
    IGeoProcessor2 gp = new GeoProcessorClass();

    //パラメータ値を保持するために IVariantArray を作成
    IVariantArray parameters = new VarArrayClass();

    // variant 配列にパラメーター値を入力
    parameters.Add(@"D:\St_Johns\data.mdb\roads");
    parameters.Add(@"D:\St_Johns\data.mdb\roads_Buffer");
    parameters.Add("1000 Meters");

    // モデルツールを名前で実行
    gp.Execute("Buffer_analysis", parameters, null);
}
'ライセンシングと IVariantArray を利用するために esriSystem への参照を追加します。
Imports ESRI.ArcGIS.esriSystem
'geoprocessing ネームスペースへの参照を追加します。
Imports ESRI.ArcGIS.Geoprocessing
Public Sub RunBuffer()
    'geoprocessor を作成
    Dim GP As Geoprocessor = New GeoprocessorClass()

    'パラメーター値を保持するために IVariantArray を作成
    Dim parameters As IVariantArray = New VarArrayClass()

    'variant 配列にパラメーター値を入力
    parameters.Add("D:\St_Johns\data.mdb\roads")
    parameters.Add("D:\St_Johns\data.mdb\roads_Buffer")
    parameters.Add("1000 Meters")

    ' モデルツールを名前で実行
    gp.Execute("Buffer_analysis", parameters, Nothing)
 End Sub

カスタム ツールの実行

Esri が提供している既存のツールとツールボックスを利用できることに加えて、カスタム ツールボックスの中にある、モデル ツール、スクリプト ツールのようなカスタム ツールも実行できます。IGeoProcessor2.Execute を使用した場合、プロセスはシステム ツールもカスタム ツールも同じです。

すべてのツールボックスは GeoProcessor に対しすぐに利用できる状態にありますので、GeoProcessor にツールボックスを追加する必要はありません。しかし、カスタム ツールボックスは AddToolbox メソッドを使用してジオプロセッサーに対して追加する必要があります。以下のサンプルは BestPath.tbx ツールボックスの中にある CalculateBestPath カスタム ツールを実行する方法を説明しています。

システム ツールとカスタム ツールの間の唯一の違いはジオプロセッサに対してカスタム ツールボックスを追加することです。システム ツールとカスタム ツールについてのさらに詳しい情報は、ジオプロセシングの基本用語をご覧ください。

public static void SampleCalculateBestPathToolGping()
{
    // ジオプロセッサーを初期化
    IGeoProcessor2 gp = new GeoProcessorClass();

    // BestPath ツールボックスを追加
    gp.AddToolbox(@"C:\SanDiego\BestPath.tbx");

    // パラメーター配列を生成
    IVariantArray parameters = new VarArrayClass();
    parameters.Add(@"C:\SanDiego\source.shp");
    parameters.Add(@"C:\SanDiego\destination.shp");
    parameters.Add(@"C:\SanDiego\bestpath.shp");

    // モデルツールを名前で実行
    gp.Execute("CalculateBestPath", parameters, null);
}
Public Sub SampleCalculateBestPathTool()
    'ジオプロセッサーを初期化
    Dim gp As IGeoprocessor2 = New Geoprocessor()

    ' BestPath ツールボックスを追加
    gp.AddToolbox("C:\SanDiego\BestPath.tbx")
    
    'パラメーター配列を生成
    Dim parameters As IVariantArray = New VarArray
    parameters.Add("C:\SanDiego\source.shp")
    parameters.Add("C:\SanDiego\destination.shp")
    parameters.Add("C:\SanDiego\bestpath.shp")
   
    'モデルツールを名前で実行
    gp.Execute("CalculateBestPath", parameters, Nothing)
End Sub

常に try-catch ブロックでコードを囲むようにします。ツールが実行に失敗した場合、Execute メソッドは例外をスローします。

Geoprocessor マネージド アセンブリの使用

以下はツールを実行する一般的なステップです。

  1. ESRI.ArcGIS.Geoprocessor への参照を追加します。result オブジェクトやリスト データセットのリストを使う場合などは ESRI.ArcGIS.Geoprocessing アセンブリも追加する必要があります。
  2. さらに、そのツールが属するツールボックス アセンブリへの参照も追加します。異なるツールボックスから複数のツールを利用する場合は、それらの各ツールボックスのマネージド アセンブリも追加する必要があります。
  3. Geoprocessor オブジェクトを作成します。
  4. カスタム ツールを実行している場合はそのカスタム ツールボックスへのパスも追加します。
  5. 実行するツールのオブジェクトを作成し、パラメータ値を設定します。
  6. Geoprocessor の Execute メソッド を呼びます。

マネージド アセンブリによるシステム ツールの実行

以下のコード例では、バッファ ツールをマネージド アセンブリを使用した時と同じパラメーター値で実行しています。

// geoprocessor ネームスペースを追加
using ESRI.ArcGIS.Geoprocessor;
// ツールボックスのアセンブリを作成
using ESRI.ArcGIS.AnalysisTools;

public static void SampleBufferTool()
{
  // geoprocessor を作成
  Geoprocessor gp = new Geoprocessor();

  // ツール プロセス オブジェクトを作成
  ESRI.ArcGIS.AnalysisTools.Buffer bufferTool = new ESRI.ArcGIS.AnalysisTools.Buffer();

  // parameter 値を設定
  bufferTool.in_features = @"D:\St_Johns\data.mdb\roads";
  bufferTool.out_feature_class = @"D:\St_Johns\data.mdb\roads_Buffer";
  bufferTool.buffer_distance_or_field = "distance";

  // ツールを実行
  gp.Execute(bufferTool, null);
}
' geoprocessor ネームスペースを追加
Imports ESRI.ArcGIS.Geoprocessor
' ツールボックスアセンブリを追加
Imports ESRI.ArcGIS.AnalysisTools

Public Sub SampleBufferTool()
    ' geoprocessor を初期化
    Dim gp As Geoprocessor = New Geoprocessor()

    ' ツール プロセス オブジェクトを作成
    Dim bufferTool As ESRI.ArcGIS.AnalysisTools.Buffer = New ESRI.ArcGIS.AnalysisTools.Buffer()

    ' parameter 値を設定
    bufferTool.in_features = "D:\St_Johns\data.mdb\roads"
    bufferTool.out_feature_class = "D:\St_Johns\data.mdb\roads_Buffer"
    bufferTool.buffer_distance_or_field = "distance"

    ' ツールを実行
    GP.Execute(bufferTool, Nothing)
End Sub

マネージド アセンブリによるカスタム ツールの実行

カスタム ツールボックスはいかなるマネージド アセンブリも持っていません。そのため、カスタム ツールを実行する簡単な方法は IVariantArray を利用して名前でツールを実行することです。Geoprocessor の Execute メソッドはオーバーロードされていて、追加の引数リストがあり、それにより、ツール名、ツールのパラメーター、ITrackCancel インターフェイスを指定することでツールを実行できます。最初に AddToolbox メソッドを使用して、Geoprocessor にカスタム ツールボックスを追加します。以下のコード例をご覧ください。
 
public static void SampleCalculateBestPathTool()
{
    // geoprocessor を初期化
    Geoprocessor gp = new Geoprocessor();

    //BestPath ツールボックスを追加
    gp.AddToolbox(@"C:\SanDiego\BestPath.tbx");

    // パラメーター配列を作成
    IVariantArray parameters = new VarArrayClass();
    parameters.Add(@"C:\SanDiego\source.shp");
    parameters.Add(@"C:\SanDiego\destination.shp");
    parameters.Add(@"C:\SanDiego\bestpath.shp");

    // 名前でモデル ツールを実行
    gp.Execute("CalculateBestPath", parameters, null);
}
Public Sub SampleCalculateBestPathTool()
    ' geoprocessor を初期化す
    Dim gp As Geoprocessor = New Geoprocessor()

    ' BestPath ツールボックスを追加
    gp.AddToolbox("C:\SanDiego\BestPath.tbx")

    ' パラメーター配列を作成
    Dim parameters As IVariantArray = New VarArray
    parameters.Add("C:\SanDiego\source.shp")
    parameters.Add("C:\SanDiego\destination.shp")
    parameters.Add("C:\SanDiego\bestpath.shp")

    ' 名前でモデル ツールを実行
    gp.Execute("CalculateBestPath", parameters, Nothing)
End Sub

この手順は Geoprocessor を作成するステップを除き、Geoprocessing アセンブリを使用してツールを実行する時と同じです。

バッググラウンド ジオプロセシングでツールを実行するには、代わりに ExecuteAsync メソッドを使用します。
さらに詳しい情報は、Running a geoprocessing tool using background geoprocessing をご覧ください。


このトピックのコードを使用するには、Visual Studio プロジェクトに以下のアセンブリへの参照を追加してください。コードファイルでは、対応するネームスペースへの using(C#) または Imports(VB.NET) ディレクティブが必要です(アセンブリ名と異なる場合は、名前空間名が括弧で括られています)。

  • ESRI.ArcGIS.Geoprocessing
  • ESRI.ArcGIS.System (ESRI.ArcGIS.esriSystem)
  • ESRI.ArcGIS.Geoprocessor
  • ESRI.ArcGIS.AnalysisTools

メタデータ

種類

製品