ジオプロセシング サービスを作成するには、サービス内のタスクを作成する必要があります。タスクのオーサリングとは、ツールを選択または作成し、タスクの入出力パラメーター、およびタスクが使用するデータの場所を定義することです。次に、さらに詳しい具体的な手順を挙げます。
- サービス内のタスクになるジオプロセシング ツールを 1 つ以上選択します。ArcGIS に付属しているシステム ツールのいずれかを使用することも、あるいは ModelBuilder または Python スクリプトを使用して独自のツールを作成することもできます。
- ツールの実行に必要な入力データを収集します。これらのデータセットとしては、ArcMap の [コンテンツ] ウィンドウ内のレイヤーを使用するのが一般的です。
- ツールを実行すると、実行結果が [結果] ウィンドウ内に表示されます。
- 必要に応じて、入出力データセットのシンボルを定義します。
- 結果をジオプロセシング サービスとして共有します。結果を共有する際は、[サービス エディター] を使用して、データセットの入力モード (下記)、サービスおよびそのタスクの他のプロパティを定義します。
例: 単純な需要/供給モデル
次の図は、ModelBuilder で作成されてタスクとなったツールの例です。モデル (および公開されるタスク) は、非常に単純な需要/供給モデルです。サービスの供給を表すポイント位置 (たとえば、緊急対応施設や小売施設)、および需要を表す別のポイント (たとえば、サービスを必要とする世帯や企業) をそれぞれ条件として与えると、モデルは需要地点を最寄りの施設に割り当て、施設ごとに商圏ポリゴンを作成し、それらの施設の商圏内のすべての需要をまとめます。出力は、ポリゴンのセットです。入力施設ごとに 1 つのポリゴンが生成され、各ポリゴンは、ポリゴン内の総需要を含む属性を持っています。
上のモデルで、[施設] 変数、[需要] 変数、および [出力ティーセン ポリゴン] 変数はモデル パラメーターです (変数の横に P が付きます)。このようなモデル パラメーターは、タスクのクライアントがタスク実行時に指定するタスク引数になります。
次の図に示すように、ArcMap の [カタログ] ウィンドウからモデル ツールを開くと、その (モデル ツールの) ツール ダイアログ ボックスにモデル パラメーターが表示されます。
次の図に示すように、モデルをツールとして実行すると、実行結果が [結果] ウィンドウに書き出されます。その結果には、ArcGIS でのタスク作成に必要とされるあらゆる情報が含まれています。
- 結果を作成したツールボックスおよびツールの名前/場所。
- ツールの実行によって作成された出力 (ThiessenPolys1)。
- 出力のスキーマ (フィーチャ タイプおよび属性)。
- 出力のシンボル。この例で、出力シンボルは各ポリゴン内の総需要に応じた等級色です。
- ツールへの入力 (「消防署」レイヤーおよび「危険物サイト」レイヤー)。
- 各入力のスキーマ (フィーチャ タイプおよび属性)。この例で、「消防署」には FacilityName (施設名) という 1 つのテキスト属性が備わっています。同様に、「危険物サイト」にも属性が 1 つ備わっています。long integer 型の Demand (需要) です。
- 入力のシンボル。この例の場合、「消防署」レイヤーは各場所の消防署シンボルでシンボル表示されていて、 [需要] は等級シンボルでシンボル表示されています。
- ツールを実行したときに有効になるジオプロセシング環境設定。
備考:
ModelBuilder 内からモデルを実行しても、結果は得られません。結果を得るには、ツール ダイアログ ボックスまたは Python ウィンドウを使用してモデルを実行する必要があります。結果の重要な側面はそれ以外にも挙げられます。その 1 つは、ArcMap セッションの一部となっていて、[コンテンツ] ウィンドウ内のすべてのレイヤーおよびテーブルにアクセスでき、公開されたタスクは同様にそれらのレイヤーにアクセスできることです。上記の [コンテンツ] ウィンドウには入力レイヤー 2 つと出力しか含まれていませんが、その他にも多くのレイヤー (例: 小売場所のレイヤーなど) を含めて、タスクのクライアントが利用できるように設定してもかまいません。
ジオプロセシング サービスおよびその初期タスクを作成するには、結果を右クリックして [共有] > [ジオプロセシング サービス] の順に選択します。[サービスとして共有] ウィザードが開きます。さらに、サーバー接続を選択してサービスの名前を選択すると、[サービス エディター] が開きます。[サービス エディター] はサービスのプロパティと設定、および個々のタスク パラメーター用のプロパティを定義する場所です。次の図は、施設パラメーターの [入力モード] を設定する様子を示しています。この例では、[入力モード] が [ユーザー定義値] に設定されています。そのため、クライアントは、テキスト属性 FacilityName (施設名) を持つ一連のポイントを指定する必要があります。
ここで重要となるのは、[サービス エディター] を使えばタスクの入出力定義を細かく制御できるという点です。タスクの入出力定義は、共有プロセス中に行われますが、ツールの作成方法に影響する場合があります。
例: 他の入力モード
[近接情報テーブルの生成 (Generate Near Table)] ツールは、入力フィーチャに最も近いフィーチャを計算して、その結果をテーブル内に返すシステム ツールです。この例では、[近接情報テーブルの生成 (Generate Near Table)] を使用して、入力地点から 5 マイル (8.047 km) 以内にあるすべての小学校、高校、消防署、食料雑貨店、および小売店を返します。このシナリオでは、入力地点として売家を考えます。これは住宅購入者が売家を評価する助けになるように設計された単純なサービスです。ArcMap の [コンテンツ] ウィンドウ内のレイヤーは、データセット入力として使用することができます。
結果をジオプロセシング タスクとして共有する場合は、次の図に示すように、[最近接フィーチャ] を近傍フィーチャの [選択リスト] として検索できます。これらのレイヤーのうちの 1 つ以上が、クライアントによって指定されます。たとえば、クライアントの関心が最寄りの高校および小学校だけに限られ、他のレイヤーがまったく注目されない場合です。
あるいは、[最近接フィーチャ] を固定の [定数値] とすることもできます。この場合、[最近接フィーチャ] がタスクへの引数ではなくなり、クライアントはどの [最近接フィーチャ] を返したらよいかを一切制御できないため、常にすべての最近接フィーチャのテーブルが取得されることになります。
入力モード
上の例では、[入力モード] の設定がタスク設計およびオーサリング上の決定において極めて重要であることを見てきました。入力モードの設定は、入力モードを設定します。ジオプロセシング タスクにしか関与せず基本ツールとはならないことから、[サービス エディター] で実行される操作と見なされます。入力フィーチャの入力モードとしては、次の 3 種類があります。
- [ユーザー定義値]: クライアントによってフィーチャ セットが作成されます。フィーチャ セットは、インターネット経由で転送され、タスクによって読み取られます。[ユーザー定義値] が指定されている場合は、入力レイヤーのフィーチャ タイプ、属性、空間参照およびシンボルがフィーチャセットと共に保存されます。クライアントは、このスキーマを取得し使用してフィーチャをフィーチャセットにデジタイズすることも、あるいはディスク上のファイルからのフィーチャをフィーチャセットに読み込むこともできます。入力テーブルには、対応するレコード セットが用意されています。レコード セットは、テーブルの属性スキーマの保存場所となります。
- [選択リスト]: クライアントは、1 つ (それ以上) のレイヤーの名前を入力して、それらのレイヤーをレイヤー一覧で確認することができます。クライアントが複数のレイヤーを入力できるかどうかは、ツールに応じて決まります。上の図に示す [近接情報テーブルの生成 (Generate Near Table)] ツールでは、複数のレイヤーを入力できます。それ以外のツール (たとえば [バッファー (Buffer)]) では、[選択リスト] から入力できるレイヤーが 1 つだけに限られます。
- [定数値]: ツールを実行したときに指定した値が、タスクで使用されます。[定数値] を指定すると、パラメーターを削除した場合と同じ結果が得られます。なぜなら、レイヤー (データセット) はタスクによって内部的に使用され、クライアントに公開されないためです。
例: スクリプト ツール
タスクを作成するには、スクリプト ツールを使用する方法もあります。次の図は、ModelBuilder の代わりに Python だけを使用して上記の単純な需要/供給モデルとまったく同じ作業を実行するスクリプト ツールのプロパティ ページを示しています。スクリプト ツールにはモデルと同じパラメーターが用意されていて、タスクの作成にも同じ手順を使用します。つまり、ツールを実行し、結果を作成した後、その結果をジオプロセシング サービスとして共有します。
プロジェクト データおよびデータ ストア
プロジェクト データは、入力データを説明する際に、ジオプロセシングによって使用される用語です。プロジェクト データは、ツールまたはタスクのユーザーによって提供されるデータではなく、ツールまたはタスクによって内部的に使用されるデータです。たとえば、次のモデル中の San Francisco ネットワーク データセット変数は、モデルによって使用されますがパラメーターとして公開されないので、プロジェクト データです。デフォルト設定では、モデルのプロジェクト データは青色の楕円形で、横に P マークは付きません。
下図の Python コード スニペットに示すように、プロジェクト データはスクリプトにも表示できます。
import arcpy
# The inputPoints variable is considered to be project data
# since it is not an input parameter.
#
inputPoints = r"c:\data\Toronto\residential.gdb\shelters"
arcpy.Buffer_analysis(inputPoints, 'shelterBuffers', '1500 Meters')
[サービス エディター] において [定数値] の [入力モード] を持つ入力データ パラメーターは、プロジェクト データと同等です。ツールによって使用されるデータではあっても、タスク引数として公開されないからです。[定数値] の入力モードは、ModelBuilder で変数の横に表示される P を除いたものと考えるとよいでしょう。
プロジェクト データは、タスクを実行するときにサーバーからアクセス可能でなければならないため、タスクのオーサリングおよび共有にあたって重要な考慮事項となります。ジオプロセシング サービスは、さまざまな場所で多種多様なデータを使用する場合があります。通常、プロジェクト データのアクセスの問題にまでさかのぼってサービス上の問題を追跡できます。
結果を公開すると、結果を得るために使用されるすべてのモデルとスクリプトが公開プロセスによってスキャンされ、プロジェクト データが検出されます。その後、このデータに対する処理を指定します。選択肢は次の 2 つだけです。
- サーバーのデータ ストア内にプロジェクト データが見つかる場合、公開済みタスクはそのデータ ストア内のデータを使用します。
- サーバーのデータ ストア内にプロジェクト データが見つからない場合、プロジェクト データはサーバーにコピーされ、サーバーからアクセス可能な既知の場所 (サーバーの入力ディレクトリ) に格納されます。公開済みタスクは、コピーされたデータを使用します。コピーされたデータは、サーバーのデータ ストアの一部にはなりません。タスクを再公開すると、データが再コピーされます。
データ ストアについて
各 ArcGIS Server のインストール場所にはデータ ストアが格納されています。データ ストアは、サーバーに対してアクセス許可されているデータ格納場所のリストを提供するための手段となります。サーバーからデータにアクセスできる場合、ローカル コンピューター上にあるデータは公開時にサーバーにコピーされません。
ArcGIS Server へのデータ登録については、以下をご参照ください。
備考:
公開時にデータを自動的にコピーするオプションが無効になっている場合は、タスクの入出力データをサーバーのデータ ストアに登録する必要があります。データを自動的にコピーするオプションが無効になっている場合は、タスクで必要とされるデータをサーバーにコピーすることができません。データをサーバーのデータ ストアに登録するか、サーバーへの自動的なデータ コピーを有効にするか、タスクを変更する必要があります。その結果、すべての入力はユーザー定義済みになり、すべての出力は in_memory ワークスペースに書き込まれます。
単純なデータ入出力
GIS サービスは、GIS 機能を搭載していないコンピューター上で使用されている Web ブラウザーのように、非常に単純なクライアントでも動作します。そのような単純なクライアントが理解できるのは、単純なデータのパケット (例: テキスト、数字、テーブル、地理フィーチャおよびその属性) をサーバーに送信する方法だからです。また、ArcGIS Desktop で使用される高度な地理データ リプレゼンテーション (例: ネットワーク データセット、トポロジ、TIN、リレーションシップ クラス、ジオメトリック ネットワークなど) は認識できません。それらのデータセットはコンプレックス データセットであり、単純なフィーチャ間の複雑なリレーションシップをモデリングします。コンプレックス データセットはインターネット経由で転送できません。転送できるのはフィーチャ、テーブル、ラスターおよびファイルの中で単純なものだけです。
タスクを作成する際は、どのクライアントも、このような単純なデータセットの送受信 (転送) 方法しか理解できないということに気をつけてください。クライアントが、Web アプリケーション、Explorer for ArcGIS、または ArcGIS Desktop であるかどうかは関係ありません。サービスが ArcMap などの高度なクライアントからしかアクセスされないとわかっていても、タスクを作成するときに送受信できるのは、単純な入力データのみです。
可搬性データセットおよび非可搬性データセットの詳細については、トピック「入力モードおよびパラメーター データ タイプ」をご参照ください。
タスク結果をマップ サービスで導き出す
ジオプロセシング サービスを公開する際には、自作のタスクの結果 (および他のタスクの結果) をマップとして表示するように選択することができます。ArcMap を使用してサーバー上に作成したマップは、クライアントに転送されます。返されたマップのシンボル、ラベル設定、透過表示および他のすべてのプロパティは、現在の ArcMap セッションの出力レイヤーと同じです。結果としてのマップ サービスを得るワークフローは、次のように簡単な手順です。
- ツールを実行して、実行結果を [結果] ウィンドウ内に表示します。ツールで作成されたデータは ArcMap の [コンテンツ] ウィンドウにレイヤーとして追加されます。
- ツールから出力されたレイヤーのシンボルを変更します。
- 得られた結果を右クリックし、ジオプロセシング サービスとして共有します。
- [サービス エディター] で、[パラメーター] をクリックし、[マップ サービスに結果を表示] を有効にします。
出力レイヤーによって一意の値が導き出される場合は、必要に応じてレイヤー プロパティ内の [<その他の値すべて>] をオフにできます。値が導き出される前に一意の値が強制的に再計算されます。詳細については、「レイヤー シンボル ファイルの作成」をご参照ください。
タスクのドキュメント化
サービスができるだけ幅広い層のユーザーに検出、理解、使用されるようにするには、サービスおよびタスクの作成方法をドキュメント化することが必要不可欠です。
よいドキュメントは、公開する結果を作成したツールを出発点とします。システム内のどのツールも、アイテム説明の表示および編集に使用できます。表示および編集を行うには、[カタログ] ウィンドウでツールを右クリックし、[アイテム説明] を選択します。
ジオプロセシング環境設定
ジオプロセシング環境設定は、ツールの結果に影響する追加パラメーターです。通常のツール パラメーターとは異なり、これらはツールのダイアログ ボックスには表示されません (一部の例外を除きます)。環境設定の値は、別のダイアログ ボックスを使用して設定された値であり、ツールを実行するときに確認、使用されます。
環境設定の階層
環境設定を変更するにはいくつかの方法があります。それらの変更を行う場所は、階層内の 1 レベルと見なすことができます。環境設定はレベル間で渡されます。それぞれのレベルで、渡された環境設定を別の値に上書きすることができます。
- アプリケーション レベル - メイン メニューで [ジオプロセシング] > [環境] の順にクリックします。ここで行った変更は、あらゆるツールの実行に影響します。
- ツール プロパティ - ツールのダイアログ ボックスで、[環境] ボタンをクリックします。[環境設定] ダイアログ ボックスが開きます。すべての環境設定がツールに認識されるかどうに関係なく [環境設定] ダイアログ ボックスに一覧表示されます。環境がツールに認識されているかどうかを確認するには、ツールのリファレンス ページを参照する必要があります。ここで行われた設定は、アプリケーション レベルで行われた設定よりも優先されます。それらの設定はツールの実行にしか適用されないため、アプリケーション レベルの設定は無効になりません。
- モデル、モデル プロセス、またはスクリプト レベル - モデルまたはスクリプトでは、環境設定を高度に制御できます。モデルまたはスクリプト内の特定のツール、ツール セット、またはすべてのツールに合わせて環境を変更することができます。このレベルで行われた設定は、ツール レベルまたはアプリケーション レベルで行われたどの設定よりも優先されます。
環境設定を結果に格納する
アプリケーション レベルまたはツール レベルで行われた環境設定はすべて [結果] ウィンドウの結果に保存されます。サーバー上でタスクを実行すると、タスク実行中に結果内の環境設定が使用されます。ただし、モデル レベルまたはスクリプト レベルで行われた設定は結果には表示されず、代わりにタスクの実行中に使用されます。結果の環境設定は、モデル ツールまたはスクリプト ツールの設定は実行結果前に指定変更できるものと考えればよいでしょう。