Web アプリケーションでのジオプロセシング タスクのトラブルシューティング
このトピックの内容
入力フィーチャ セット スキーマ
ジオプロセシング タスクの実行時に、Web アプリケーションはパラメーターを JSON に変換し、実行のためジオプロセシング サービスに送信します。ArcGIS Server は、クライアントから送信された JSON を解析して、それらを適切なデータ オブジェクト (ArcObjects) に変換します。GPFeatureRecordSetLayer パラメーターは、JSON に定義されたスキーマ プロパティ geometryType、spatialReference、および fields に基づいて、フィーチャ セットに変換されます。JSON にこれらのプロパティが指定されていない場合、ArcGIS Server は、そのフィーチャ セットに対して定義されているデフォルト スキーマからプロパティを引き継ぎます。このタスクは、入力値およびデフォルト スキーマの不明確さが原因で失敗することがあります。失敗を避けるには、Web 開発者として、フィーチャ セットの作成時にこれらのプロパティを設定する必要があります。次の JavaScript コードは、Web アプリケーションでフィーチャ レイヤーから作成されたフィーチャ セットの spatialReference と geometryType プロパティ フィールドを設定する方法を示しています。
JavaScript API でのフィーチャ レイヤーからのフィーチャ セットの作成function getFeatureSetFromFLayer(){
//create featuresets
var featureSet = new esri.tasks.FeatureSet();
//get featurelayer from map's featurelayer (ex:myFeatureLayer)
var layer=map.getLayer("myFeatureLayer")
//get features from featurelayer
featureSet.features = layer.graphics;
//assign fields property
featureSet.fields=layer.fields;
//assign map's spatial reference
// Assumption: map variable is esri.Map instance in the application
featureset.spatialReference=map.spatialReference;
//assign geometryType
featureSet.geometryType=layer.geometryType;
return featureSet;
}
ヒント:
Web アプリケーションで作成された入力フィーチャ セットでは通常、Web メルカトル (wkid:4326) または Web メルカトル球体補正 (wkid:102100) 投影法が使用されます。ただし、ジオプロセシング タスクの基礎となるモデルまたはスクリプトで、異なる空間参照に属するプロジェクト データとして他のデータセットが使用されている場合があります。入力フィーチャ セットの空間参照と、タスクのプロジェクト データが異なる場合は、タスクが失敗する可能性があります。これは、タスクの作成者が、プロジェクト データとは異なる空間参照内のフィーチャの受信を予期していないことが原因です。「ジオプロセシング サービスの空間参照に関する注意事項」では、このような失敗をタスク作成者が回避するための解決策を取り上げています。出力の空間参照 (座標系)
出力フィーチャ セットの空間参照は、モデルまたはスクリプトで使用されている入力パラメーターとその他のデータセットによって決まります。Web アプリケーションは、出力フィーチャの空間参照が、マップ インスタンス (esri.Map) と同じ空間参照に属すると仮定します。このため、フィーチャが期待どおりにレンダリングされない場合があります。このようなあいまいさを排除するために、次のコードに示すように、ジオプロセシング インスタンスの outSpatialReference プロパティをマップの空間参照に設定する必要があります。出力の空間参照プロパティが設定されている場合、サーバーは、要求された outSpatialReference で出力フィーチャ セットを返します。
JavaScript API での outSpatialReference の設定
var gpTask = new esri.tasks.Geoprocessor(
"http://<gp-task-url>");
//map is assumed to be the map instance of the web application
gpTask.outSpatialReference=map.spatialReference;