GP サービス サンプル: データ オンデマンド

難易度: 初級 データ要件 ArcGIS チュートリアル データ セットアップ

フォルダ

DataOnDemand

目的

ユーザによってデジタイズされたポリゴンを使ってファイル ジオデータベース内のデータセットをクリップし、シェープファイルを出力して *.zip ファイルを作成し、電子メールでユーザに送信します。

サービス

PortlandDataMapService(マップ サービス)、DataOnDemand(ジオプロセシング サービス)

ジオプロセシング タスク

ClipZipAndEmail

入力

対象地域(フィーチャ セット ポリゴン)とデータを送信するための電子メール アドレス。

出力

aoizip.zip(データが格納された圧縮ファイル)

データ

オレゴン州、ポートランド市の小さなデータセット。

エクステンション

なし

備考

このサービスは Esri サンプル サーバでホストされています。詳細については、下記の注意事項をご参照ください。これは、「GP サービス サンプル: クリップと送信」で説明している ClipAndShip サービスです。

このサンプルについて

対応するフォルダ

C:\arcgis\ArcTutor\GP Service Examples\DataOnDemand に完全なモデルとデータが含まれています。

このサンプルについて

DataOnDemand サービスは、ClipAndShip サービスのもう 1 つの例です。次の表で示すように、このサービスの機能は「GP サービス サンプル: クリップと送信」の機能と比較されます。このため、DataOnDemand サービスを検証する前に、ClipAndShip サービスの説明を読んでください。カスタム ClipAndShip サービスを構築する場合は、両方のサービスの機能を組み合わせるとよいでしょう。

ClipAndShip サービス

DataOnDemand サービス

ユーザがダウンロードするレイヤを選択できます。

ダウンロードするデータは固定です。

出力データの空間参照を指定できます。

空間参照を指定することはできません。クリップされるデータセットの空間参照に設定されます。

出力フォーマットを指定できます。

出力はシェープファイルのみです。

モデル、スクリプト、ツール レイヤを使用します。サービスはマップ ドキュメントを使って公開されます。

モデルは使用されず、スクリプトだけを使用します。マップ ドキュメントではなくツールボックスが公開されます。

マップ ドキュメント内のレイヤがクリップされます。

データセットがクリップされます(レイヤが含まれたマップ ドキュメントがないため、レイヤを使用することはできず、データセットのみを使用します)。

対象地域(ユーザがデジタイズするクリップ ポリゴン)はダウンロードされません。

対象地域はダウンロードされます。

出力を電子メールで送信できません。

ClipZipAndEmail スクリプト(ソース ファイルは DataOnDemand/Scripts/zipandemail.py)内に電子メール サーバ名を指定することで出力を電子メールで送信できます。

ClipAndShip サービス サンプルと DataOnDemand サービス サンプルとの比較

このサービスには、他に次のような機能があります。

Esri でのホスティング

このサービスは、Esri の ArcGIS Online サーバでホストされます。次の手順に従って、このサービスを実際に試してみることができます。

  1. ArcGIS サーバとして http://sampleserver1.arcgisonline.com/arcgis/services を追加します。
  2. ArcGIS サーバとして http://sampleserver2.arcgisonline.com/arcgis/services を追加します。
  3. ArcMap で、sampleserver1 から Portland/Portland_ESRI_LandBase_AGO マップ サービスを追加します。
  4. Portland/ESRI_CadastralData_Portland ジオプロセシング サービスを sampleserver2 から ArcToolbox に追加します。
  5. [ESRI_CadastralData_Portland] ツールボックスを展開して、ClipAndShip タスクを実行します。

DataOnDemand フォルダにあるスクリプトとツール は、ESRI_CadastralData_Portland ジオプロセシング サービスの ClipAndShip タスクによって使用されるものと同じです。このサンプルに使用されるデータは DataOnDemand/ToolData/Portland.gdb に含まれており、Portland_Portland_ESRI_LandBase_AGO マップ サービスで使用されるデータの一部です。

メモメモ:

sampleserver1 と sampleserver2 に含まれているマップ サービスとジオプロセシング サービスは、将来変更される可能性があります。ここで説明したサービスが常に利用できるという保証はありません。

データ

データはオレゴン州ポートランドの小さなエリアであり、C:\arcgis\ArcTutor\GP Service Examples\DataOnDemand\ToolData\Portland.gdb にあります。

ClipZipAndEmail ツールはフィーチャ セット変数を使用するため、それらのフィーチャ タイプとフィールドを定義するためのスキーマが必要です。このスキーマは C:\arcgis\ArcTutor\GP Service Examples\DataOnDemand\ToolData\Templates.gdb にあります。

ToolData フォルダには、Mapofzip.mxd も含まれています。このファイルは Zip ファイルに含まれており、ClipAndShip されたデータを表示します。

スクリプト

[DataOnDemandTools] ツールボックスには、ClipZipAndEmail という名前のスクリプト ツールが 1 つ含まれています。このスクリプト ツールのソースは DataOnDemand/Scripts/zipandemail.py です。

ClipZipAndEmail ツールを使用する前に、コードを編集して電子メール サーバの名前を指定する必要があります(Python ソースを編集するには、PythonWin などのアプリケーションで直接編集するか、スクリプト ツールを右クリックして [開く] をクリックします)。電子メール サーバの名前はシステム管理者に問い合わせてください。

次に、このスクリプトの重要なプロパティと機能を示します。

公開

PortlandDataMapService はマップ サービスとして公開されます。

[DataOnDemandTools] ツールボックスはジオプロセシング サービスとして公開されます。

サービスの構成

このサービスをデータに合わせて構成するには、ClipZipAndEmail スクリプト ツールを編集する必要があります。このスクリプト ツールのソースは DataOnDemand/Scripts/zipandemail.py です。Python ソースを編集するには、PythonWin などのアプリケーションで直接編集するか、スクリプト ツールを右クリックして [編集] をクリックします。

データの場所とデータセットのリストを変更する必要があります。次に示すメイン ルーチンで、

if __name__ == '__main__':

dataloc 変数の定義を次のように変更します。

 global dataloc; dataloc = os.path.dirname(sys.path[0]) + g + "tooldata" + g + "portland.gdb" + g

データの場所はスクリプトの場所への相対です。

スクリプトの場所に基づいてパス名を構築する方法の詳細

次に、クリップするデータセットのリストを変更します。

    ds = ["Streets" + g + "streets", \
            "Water" + g + "StreamRoute", "Water" + g + "floodplain", "Water" + g + "riv_fill", \
            "Transit" + g + "railroad", \
            "Census" + g + "blockgrp", \
            "Develop" + g + "Buildings", \
            "Land" + g + "zoning", "Land" + g + "Parks", \
            "Places" + g + "schools", "Places" + g + "hospital"]

最後に、sendemail.py スクリプトで電子メール サーバの名前を指定する必要があります。変更するコードはスクリプトの先頭付近にあります。

def send_mail(send_from, send_to, subject, text, f=""):
    assert type(send_to)==list

    # Provide the name of your email server below
    #
    server = "ouremailserver.somewhere.com"

関連項目


3/6/2012