Web アプリケーションでのジオプロセシング タスクのトラブルシューティング

入力フィーチャ セット スキーマ

ジオプロセシング タスクの実行時に、Web アプリケーションはパラメータを JSON に変換し、実行のためジオプロセシング サービスに送信します。ArcGIS Server は、クライアントから送信された JSON を解析して、それらを適切なデータ オブジェクト(ArcObjects)に変換します。GPFeatureRecordSetLayer パラメータは、JSON に定義されたスキーマ プロパティ geometryTypespatialReference、および fields に基づいて、フィーチャ セットに変換されます。JSON にこれらのプロパティが指定されていない場合、ArcGIS Server は、そのフィーチャ セットに対して定義されているデフォルト スキーマからプロパティを引き継ぎます。このタスクは、入力値およびデフォルト スキーマの不明確さが原因で失敗することがあります。失敗を避けるには、Web 開発者として、フィーチャ セットの作成時にこれらのプロパティを設定する必要があります。次の JavaScript コードは、Web アプリケーションでフィーチャ レイヤから作成されたフィーチャ セットの spatialReferencegeometryType プロパティ フィールドを設定する方法を示しています。

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;

関連トピック

5/10/2014