GP サービス サンプル: データ オンデマンド
フォルダ |
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)内に電子メール サーバ名を指定することで出力を電子メールで送信できます。 |
このサービスには、他に次のような機能があります。
- ダウンロードされたデータを表示する ArcMap ドキュメントが *.zip ファイルに含まれています。
- Python スクリプトには次のような便利な手法が具体的に示されています。
- スクリプトの場所に基づいてデータを検索する。
- ツールボックスを追加し、そのツールを使用する。
- スクリプトをインポートし、インポートされたスクリプトでルーチンを呼び出す。
- システム関数を使ってマップ ドキュメントをコピーする。
Esri でのホスティング
このサービスは、Esri の ArcGIS Online サーバでホストされます。次の手順に従って、このサービスを実際に試してみることができます。
- ArcGIS サーバとして http://sampleserver1.arcgisonline.com/arcgis/services を追加します。
- ArcGIS サーバとして http://sampleserver2.arcgisonline.com/arcgis/services を追加します。
- ArcMap で、sampleserver1 から Portland/Portland_ESRI_LandBase_AGO マップ サービスを追加します。
- Portland/ESRI_CadastralData_Portland ジオプロセシング サービスを sampleserver2 から ArcToolbox に追加します。
- [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 などのアプリケーションで直接編集するか、スクリプト ツールを右クリックして [開く] をクリックします)。電子メール サーバの名前はシステム管理者に問い合わせてください。
次に、このスクリプトの重要なプロパティと機能を示します。
- [Area to Zip] パラメータはフィーチャ セットなので、スキーマが必要です。スキーマはツールのプロパティの [パラメータ] タブで設定されます。
- ClipZipAndEmail スクリプトでは、[UtilityTools] ツールボックスが追加され、そのツールボックスの [Zip] スクリプト ツールが使用されます。スクリプト内の zipData ルーチンをご参照ください。
- ClipZipAndEmail スクリプト内の emailZip ルーチンは、sendemail.py スクリプト(DataOnDemand/Scripts にあります)内の send_mail ルーチンをインポートします。
from sendemail import send_mail
公開
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"