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...
Aangemelde leden kunnen berichten plaatsen, updates volgen en meer. Nieuw hier? Registreer een gratis account.
Find useful guides, FAQs, and documents to help you navigate and make the most of Esri Community.