Problembehandlung bei Geoverarbeitungs-Tasks in Webanwendungen
In diesem Thema
Schema des Eingabe-Feature-Sets
Bei der Ausführung eines Geoverarbeitungs-Tasks konvertiert die Webanwendung die Parameter in JSON-Code und sendet diesen zur Ausführung an den Geoverarbeitungs-Service. Der ArcGIS-Server analysiert den vom Client gesendeten JSON-Code und konvertiert diesen in entsprechende Datenobjekte (ArcObjects). Die Parameter GPFeatureRecordSetLayer werden basierend auf den im JSON-Code definierten Schema-Eigenschaften geometryType, spatialReference und fields in ein Feature-Set konvertiert. Wenn die Eigenschaften nicht im JSON-Code angegeben sind, erbt der ArcGIS-Server die Eigenschaften vom Standardschema, das für das Feature-Set definiert ist. Der Task kann aufgrund der Mehrdeutigkeiten in den Eingabewerten und dem Standardschema fehlschlagen. Um Fehler zu vermeiden, sollten Sie als Webentwickler diese Eigenschaften bei der Erstellung von Feature-Sets festlegen. Der folgende JavaScript-Code zeigt, wie Sie die Felder sowie die Eigenschaften spatialReference und geometryType eines Feature-Sets festlegen, das aus einem Feature-Layer in der Webanwendung erstellt wurde.
Erstellen von Feature-Sets aus Feature-Layern in JavaScript APIfunction 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;
}
Tipp:
Für die in Webanwendungen erstellten Eingabe-Feature-Sets werden normalerweise Projektionen von Web Mercator (wkid:4326) oder Web Mercator Auxiliary Sphere (wkid:102100) verwendet. Das zugrunde liegende Modell oder Skript des Geoverarbeitungs-Tasks kann allerdings andere Datasets als Projektdaten verwenden, die einen anderen Raumbezug benutzen. Wenn die Eingabe-Feature-Sets und die Projektdaten des Tasks einen unterschiedlichen Raumbezug verwenden, kann der Task in manchen Fällen fehlschlagen. Dies liegt daran, dass der Task-Autor nicht erwartet hat, Features in anderen Raumbezügen als die Projektdaten zu erhalten. Im Thema Überlegungen zu Raumbezügen für Geoverarbeitungs-Services werden einige Lösungen erläutert, mithilfe derer der Task-Autor diese Fehler vermeiden kann.Ausgabe-Raumbezug (Koordinatensystem)
Der Raumbezug der Ausgabe-Feature-Sets hängt von den Eingabeparametern und anderen Datasets ab, die im Modell oder Skript verwendet werden. Bei Webanwendungen wird jedoch davon ausgegangen, dass die Ausgabe-Features denselben Raumbezug aufweisen wie die Karteninstanz (esri.Map). Daher werden die Features möglicherweise nicht wie erwartet dargestellt. Um derartige Mehrdeutigkeiten zu vermeiden, sollten Sie die Eigenschaft outSpatialReference der Geoverarbeitungs-Instanz auf den Raumbezug der Karte festlegen, wie im folgenden Code dargestellt. Wenn die Eigenschaft "Ausgabe-Raumbezug" festgelegt wurde, gibt der Server die Ausgabe-Feature-Sets im angeforderten outSpatialReference zurück.
Festlegen der Eigenschaft "outSpatialReference" in JavaScript API
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;