public static ICollection<Field> GetFields(Graphic graphic) { var fields = new List<Field>(); foreach (var attribute in graphic.Attributes) { var field = new Field() { FieldName = attribute.Key, Alias = attribute.Key }; if (attribute.Key.ToLower() == "shape") { field.Type = Field.FieldType.Geometry; } else if (attribute.Key.ToLower() == "fid") { field.Type = Field.FieldType.OID; } else if (attribute.Key.ToLower() == "objectid") { field.Type = Field.FieldType.OID; } else if (attribute.Value is int) { field.Type = Field.FieldType.Integer; } else if (attribute.Value is double) { field.Type = Field.FieldType.Double; } else if (attribute.Value is float) { field.Type = Field.FieldType.Single; } else if (attribute.Value is DateTime) { field.Type = Field.FieldType.Date; } else { field.Type = Field.FieldType.String; } fields.Add(field); } return fields; }
var featureSet = new FeatureSet(); var layer = GetSelectedInputLayer(); featureSet.Fields = new List<Field>((layer as FeatureLayer).LayerInfo.Fields); foreach (var graphic in layer.SelectedGraphics) { featureSet.Features.Add(graphic); } parameters.Add(new GPFeatureRecordSetLayer("InputFeatures", featureSet)); parameters.Add(new GPLinearUnit("Distance", esriUnits.esriMeters, Convert.ToDouble(distanceText.Text)));
public static ICollection<Field> GetFields(Graphic graphic) { var fields = new List<Field>(); foreach (var attribute in graphic.Attributes.Keys) { fields.Add(new Field() { FieldName = attribute, Type = Field.FieldType.Unknown, Alias = attribute }); } return fields; } public static ICollection<Field> GetFields(Layer layer) { if (layer is FeatureLayer) { var featureLayer = layer as FeatureLayer; if (featureLayer.LayerInfo != null) { return featureLayer.LayerInfo.Fields; } else if (featureLayer.Graphics.Count > 0) { return GetFields(featureLayer.Graphics[0]); } } else if (layer is GraphicsLayer) { var graphicsLayer = layer as GraphicsLayer; if (graphicsLayer.Graphics.Count > 0) { return GetFields(graphicsLayer.Graphics[0]); } } return new List<Field>(); }
/* * Build the GP Parameters... */ // We want to specify input attributes - create a new FeatureSet. FeatureSet featureSet = new FeatureSet(); // Create the Fields and add one called "VALUE". featureSet.Fields = new List<Field> { new Field() { FieldName = "VALUE", Type = Field.FieldType.String, Alias = "VALUE" } }; // Create the graphic to submit. Graphic g = new Graphic() { Geometry = _mercator.ToGeographic(e.MapPoint) }; // Add the graphic to the FeatureSet featureSet.Features.Add(g); // Set the graphic's attribute featureSet.Features[0].Attributes["VALUE"] = "Hello"; // Create a new list of GPParameters List<GPParameter> parameters = new List<GPParameter>(); // Add a new GPFeatureRecordSetLayer to the parameter list, passing in the FeatureSet created above. parameters.Add(new GPFeatureRecordSetLayer("Input_Features",featureSet)); // Handler for the completed event _gpTask.ExecuteCompleted += (s, e1) => { //OutputCopyFeatures GPExecuteResults results = e1.Results; GPFeatureRecordSetLayer rs = results.OutParameters[0] as GPFeatureRecordSetLayer; // Check the attributes... output feature should have attribute Field "VALUE" with value "Hello". };
... the tool runs fine if I don't specify the Fields collection. But then the output doesn't contain the fields of the input features; it contains the fields of the schema set in the GPK; which is the problem I'm trying to resolve.!
This may not be related but we had some problems with local GP tasks intermittently failing on some machines, often returning "Error: 000210 : Cannot create output..." (amongst others). This was related to anti-virus and group policy security settings in our corporate environment. (Everything worked fine in my dev environment, but the same code/data failed elsewhere.)
Are you running 1.0 or 10.1.1? The upgrade solved a few quirky issues we were having, so might be worth a try.
Also, if you have access to ArcGIS Server, try publishing a GP service and calling that from your Runtime app. (In my case the full AGS GP service worked, when the local GPK failed.)
var featureSet = new FeatureSet(); var layer = GetSelectedInputLayer(); featureSet.Fields = new List<Field> { new Field() { FieldName = "PROP_ID", Type = Field.FieldType.Double, Alias = "PROP_ID" } }; foreach (var graphic in layer.SelectedGraphics) { featureSet.Features.Add(graphic); } parameters.Add(new GPFeatureRecordSetLayer("InputFeatures", featureSet)); parameters.Add(new GPLinearUnit("Distance", esriUnits.esriMeters, Convert.ToDouble(distanceText.Text)));
Unable to complete operation. Error executing tool.: ERROR 000210: Cannot create output C:\Users\gfaraj\AppData\Local\Temp\arcgisruntime_8188\geotools\jobs\_\j13c432afc4014a6a9eed8b1b446e0a6b\scratch\scratch.gdb\OutputFeature Failed to execute (Buffer). Failed to execute (BufferModel). Failed to execute (BufferModel). Failed to execute (BufferModel).
/* * Build the GP Parameters... */ // We want to specify input attributes - create a new FeatureSet. FeatureSet featureSet = new FeatureSet(); // Create the Fields and add one called "VALUE". featureSet.Fields = new List<Field> { new Field() { FieldName = "VALUE", Type = Field.FieldType.String, Alias = "VALUE" } }; // Create the graphic to submit. Graphic g = new Graphic() { Geometry = e.MapPoint }; // Add the graphic to the FeatureSet featureSet.Features.Add(g); // Set the graphic's attribute featureSet.Features[0].Attributes["VALUE"] = "Hello"; // Create a new list of GPParameters List<GPParameter> parameters = new List<GPParameter>(); // Add a new GPFeatureRecordSetLayer to the parameter list, passing in the FeatureSet created above. parameters.Add(new GPFeatureRecordSetLayer("Input_Features",featureSet));
var inputFeatures = new GPFeatureRecordSetLayer("InputFeatures"); inputFeatures.FeatureSet.Fields = new List<Field> { new Field() { FieldName = "PROP_ID" } };
{ "geometryType" : "esriGeometryPoint", "spatialReference" : {"wkid" : 4326}, "fields":[ {"name":"Id","type":"esriFieldTypeOID","alias":"Id"}, {"name":"Name","type":"esriFieldTypeString","alias":"Name"} ], "features" : [ { "geometry" : {"x" : -104.44, "y" : 34.83}, "attributes" : {"Id" : 43, "Name" : "Feature 1"} }, { "geometry" : {"x" : -100.65, "y" : 33.69}, "attributes" : {"Id" : 67, "Name" : "Feature 2"} } ] }
Error executing tool.: ERROR 000210: Cannot create output C:\Users\gfaraj\AppData\Local\Temp\arcgisruntime_7576\buffertest1\jobs\_\j8adb6feeb81f41cab48b4ec3f22a011d\scratch\scratch.gdb\BufferResult Failed to execute (Buffer). Failed to execute (BufferModel). Failed to execute (BufferModel). Failed to execute (BufferModel).
[0] = "Error executing tool.: ERROR 000800: The value is not a member of parcels."
2013-01-22 10:49:35,418 INFO rid=22 'server' AdminWebService - POST admin/createService 2013-01-22 10:49:35,420 INFO rid=22 'server' GPServer-buffertest1 - Creating. 2013-01-22 10:49:35,420 INFO rid=22 'server' GPServer-buffertest1 - Create 2013-01-22 10:49:35,420 INFO rid=22 'server' ServerObjectHostProcess-buffertest1_host - Creating. 2013-01-22 10:49:35,420 INFO rid=22 'server' ServerObjectHostProcess-buffertest1_host - Launching. 2013-01-22 10:49:35,428 INFO rid=22 'server' ServerObjectHostProcess-buffertest1_host - Launched process 12220 2013-01-22 10:49:35,506 INFO rid= 'worker-12220' STAServerObjectHost - Creating. 2013-01-22 10:49:35,511 INFO rid=22 'worker-12220' STAServerObjectHost - Received Request. 2013-01-22 10:50:09,628 INFO rid=22 'worker-12220' STAServerObjectHost - Received Request. 2013-01-22 10:50:09,632 INFO rid=22 'server' GPServer-buffertest1 - Created 2013-01-22 10:50:09,633 INFO rid=22 'server' WebServer - Added request handler for HTTP resource: /CVGcCl/arcgis/rest/services/buffertest1 2013-01-22 10:50:09,633 INFO rid=22 'server' WebServer - Loaded static web service for resource (/CVGcCl/arcgis/rest/services/buffertest1) 2013-01-22 10:50:09,637 INFO rid=23 'server' GPServer-buffertest1 - GET GPServer?f=json&tstmp=634944486096376811 2013-01-22 10:50:09,650 INFO rid=23 'server' GPServer-buffertest1 - Request handled. 2013-01-22 10:50:09,658 INFO rid=24 'server' GPServer-buffertest1 - GET GPServer/BufferModel?f=json&tstmp=634944486096576831 2013-01-22 10:50:09,659 INFO rid=24 'server' GPServer-buffertest1 - Request handled. 2013-01-22 10:50:09,761 INFO rid=25 'server' GPServer-buffertest1 - POST GPServer/BufferModel/execute 2013-01-22 10:50:09,764 INFO rid=25 'worker-12220' STAServerObjectHost - Received Request. 2013-01-22 10:50:13,087 INFO rid=25 'server' GPServer-buffertest1 - Request handled. 2013-01-22 10:50:23,088 INFO rid= '' WebServer - Lost connection on port 50000
var gp = new Geoprocessor(GetGeoprocessingService().UrlGeoprocessingService + "/BufferModel"); var parameters = new List<GPParameter>(); var gpFeatureRecordSetLayer = new GPFeatureRecordSetLayer("InputLocation"); foreach (var graphic in (MyMap.Layers["parcels"] as FeatureLayer).SelectedGraphics) { gpFeatureRecordSetLayer.FeatureSet.Features.Add(graphic); } parameters.Add(gpFeatureRecordSetLayer); gp.ExecuteCompleted += (senderObject, gpExecuteCompleteEventArgs) => { }; gp.Failed += (senderObject, taskFailedEventArgs) => { }; gp.ExecuteAsync(parameters);
geoprocessor.ExecuteCompleted += (s1, e1) => { GPExecuteResults results = e1.Results; foreach (GPMessage message in results.Messages) { // Do Something e.g. Console.WriteLine(message.Description); } }; geoprocessor.ExecuteAsync(new List<GPParameter>());
Unable to complete operation.
Bad request: POST GPServer/BufferModel/execute The 'execute' operation is not supported.
You'll have to run the tool to get a result to turn into a GPK...
Signed in members can post, follow updates, and more. New here? Register a free account.
Find useful guides, FAQs, and documents to help you navigate and make the most of Esri Community.