public enum GPExecuteToolFlags : System.Enum, System.IComparable, System.IConvertible, System.IFormattable
Public Enum GPExecuteToolFlags Inherits System.Enum Implements System.IComparable, System.IConvertible, System.IFormattable
public enum GPExecuteToolFlags : System.Enum, System.IComparable, System.IConvertible, System.IFormattable
Public Enum GPExecuteToolFlags Inherits System.Enum Implements System.IComparable, System.IConvertible, System.IFormattable
Member | Description |
---|---|
AddOutputsToMap | Adds outputs to the current Map. |
AddToHistory | Adds execution logs to geoprocessing project history. |
Default | Adds outputs to map and refreshes project items. |
GPThread | Execute tool in GP thread |
InheritGPOptions | overrides AddOutputsToMap and AddToHistory by Geoprocessing Options settings |
None | No action is taken. |
RefreshProjectItems | Refreshes project items. |
var environment = Geoprocessing.MakeEnvironmentArray(overwriteoutput: true); var prj = Project.Current; var map = MapView.Active; var defaultGDB = Project.Current.DefaultGeodatabasePath; var featLayers = map.Map.Layers.OfType<FeatureLayer>(); var targetLayer = featLayers.ElementAt(0); // First layer in TOC var joinLayer = featLayers.ElementAt(1); // Second layer in TOC var outputFeatureClass = @"C:/temp/outputFC3.shp"; // Specify the field map in Spatial Join with target and join feature class/layers in the App // Run Spatial Join manually - then Copy the fieldmap string from the result in Geoprocessing history and paste it for the fieldmap parameter. // in this example of fieldmap, FireStations is the name of join layer // FireStations layer has two numeric fileds (used in Fieldmap): TYPE and NUMBER - these two fields are used in the FiedlMap // var joinLayerName = joinLayer.Name; var fieldMap = "TYPE 'TYPE' true true false 4 Long 0 0,Count,#,{joinLayerName},TYPE,-1,-1;NUMBER 'NUMBER' true true false 4 Long 0 0,Max,#,{joinLayerName},NUMBER,-1,-1"; var toolParameters = Geoprocessing.MakeValueArray(targetLayer, joinLayer, outputFeatureClass, "JOIN_ONE_TO_ONE", "KEEP_COMMON", fieldMap, "INTERSECT"); GPExecuteToolFlags executeFlags = GPExecuteToolFlags.AddOutputsToMap | GPExecuteToolFlags.GPThread | GPExecuteToolFlags.AddToHistory | GPExecuteToolFlags.RefreshProjectItems; IGPResult gpResult = await Geoprocessing.ExecuteToolAsync("analysis.SpatialJoin", toolParameters, environment, null, null, executeFlags); Geoprocessing.ShowMessageBox(gpResult.Messages, "GP Messages", gpResult.IsFailed ? GPMessageBoxStyle.Error : GPMessageBoxStyle.Default);
// get the syntax of the tool from Python window or from tool help page string in_features = @"C:\data\data.gdb\HighwaysWeb84"; string out_features = @"C:\data\data.gdb\HighwaysUTM"; var param_values = Geoprocessing.MakeValueArray(in_features, out_features); // crate the spatial reference object to pass as an argument to management.CopyFeatures tool var sp_ref = await QueuedTask.Run(() => { return SpatialReferenceBuilder.CreateSpatialReference(26911); // UTM 83 11N: 26911 }); // set output coordinate system environment var environments = Geoprocessing.MakeEnvironmentArray(outputCoordinateSystem: sp_ref); // set environments in the 3rd parameter var gp_result = await Geoprocessing.ExecuteToolAsync("management.CopyFeatures", param_values, environments, null, null, GPExecuteToolFlags.AddOutputsToMap); Geoprocessing.ShowMessageBox(gp_result.Messages, "Contents", GPMessageBoxStyle.Default, "Window Title"); //return gp_result;
// However, settings in Pro App's Geoprocessing Options will override option set in code // for example, in Pro App's Options > Geoprocessing dialog, if you check 'Add output datasets to an open map' // then the output WILL BE added to history overriding settings in code var CopyfeaturesParams = Geoprocessing.MakeValueArray("C:\\data\\Input.gdb\\PlanA_Roads", "C:\\data\\Input.gdb\\Roads_copy"); IGPResult gpResult = await Geoprocessing.ExecuteToolAsync("management.CopyFeatures", CopyfeaturesParams, null, null, null, GPExecuteToolFlags.None);
// However, settings in Pro App's Geoprocessing Options will override option set in code // for example, if in Options > Geoprocessing dialog, if you uncheck 'Write geoprocessing operations to Geoprocessing History' // then the output will not be added to history. var args2 = Geoprocessing.MakeValueArray("C:\\data\\Vegetation.shp", "NewField", "TEXT"); var result2 = await Geoprocessing.ExecuteToolAsync("management.AddField", args2, null, null, null, GPExecuteToolFlags.AddToHistory);
//The data referenced in this snippet can be downloaded from the arcgis-pro-sdk-community-samples repo //https://github.com/Esri/arcgis-pro-sdk-community-samples async Task<IGPResult> CreateRings(EditingTemplate currentTemplate) { var paramsArray = Geoprocessing.MakeValueArray(currentTemplate.MapMember.Name, @"C:\Data\FeatureTest\FeatureTest.gdb\Points_MultipleRingBuffer", new List<string> { "1000", "2000" }, "Meters", "Distance", "ALL", "FULL"); IGPResult ringsResult = await Geoprocessing.ExecuteToolAsync("Analysis.MultipleRingBuffer", paramsArray); var messages = string.IsNullOrEmpty(gpResult.ReturnValue) ? $@"Error in gp tool: {gpResult.ErrorMessages}" : $@"Ok: {gpResult.ReturnValue}"; return ringsResult; }
//The data referenced in this snippet can be downloaded from the arcgis-pro-sdk-community-samples repo //https://github.com/Esri/arcgis-pro-sdk-community-samples string in_data = @"C:\tools\data.gdb\cities"; string cities_buff = @"E:\data\data.gdb\cities_2km"; var valueArray = Geoprocessing.MakeValueArray(in_data, cities_buff, "2000 Meters"); // to let the GP tool run asynchronously without blocking the main thread // use the GPThread option of GPExecuteToolFlasgs // GPExecuteToolFlags flags = GPExecuteToolFlags.GPThread; // instruct the tool run non-blocking GPThread IGPResult bufferResult = await Geoprocessing.ExecuteToolAsync("Analysis.Buffer", valueArray, null, null, null, flags);
var environments = Geoprocessing.MakeEnvironmentArray(overwriteoutput: true); string toolName = "Snap_edit"; // or use edit.Snap // Snap tool takes multiple inputs each of which has // Three (3) parts: a feature class or layer, a string value and a distance // Each part is separated by a semicolon - you can get example of sytax from the tool documentation page var snapEnv = @"'C:/SnapProject/fgdb.gdb/line_1' END '2 Meters';'C:/SnapProject/fgdb.gdb/points_1' VERTEX '1 Meters';'C:/SnapProject/fgdb.gdb/otherline_1' END '20 Meters'"; var infc = @"C:/SnapProject/fgdb.gdb/poly_1"; var snapParams = Geoprocessing.MakeValueArray(infc, snapEnv); GPExecuteToolFlags tokens = GPExecuteToolFlags.RefreshProjectItems | GPExecuteToolFlags.GPThread | GPExecuteToolFlags.AddToHistory; IGPResult snapResult = await Geoprocessing.ExecuteToolAsync(toolName, parameters, environments, null, null, tokens); //return gpResult;
string openProjectPath = @"D\DATA\IGPHistoryItemTestProject\IGPHistoryItemTestProject.aprx"; await Project.OpenAsync(openProjectPath); MapProjectItem mapProjItem = Project.Current.GetItems<MapProjectItem>().FirstOrDefault(item => item.Name.Equals("Map", StringComparison.CurrentCultureIgnoreCase)); var map = await QueuedTask.Run(() => mapProjItem.GetMap()); var ftrLayer = map.Layers[0] as FeatureLayer; string tool1 = "management.GetCount"; var args1 = Geoprocessing.MakeValueArray(ftrLayer); var env = Geoprocessing.MakeEnvironmentArray(overwriteoutput: true); GPExecuteToolFlags executeFlags = GPExecuteToolFlags.AddToHistory; var t = await Geoprocessing.ExecuteToolAsync(tool1, args1,env,null,null,executeFlags); IEnumerable<IGPHistoryItem> hisItems = Project.Current.GetProjectItemContainer(Geoprocessing.HistoryContainerKey) as IEnumerable<IGPHistoryItem>; String hitemID=""; String hitemToolPath="" ; IGPResult hitemGPResult=null; DateTime hitemTimeStamp; foreach (var hitem in hisItems) { // common IGPHistoryItem and Item properties hitemID = (hitem as Item).ID; hitemToolPath = hitem.ToolPath; hitemGPResult = hitem.GPResult; hitemTimeStamp = hitem.TimeStamp; }
var tool_name = "analysis.Clip"; var extent = MapView.Active.Extent; var sel_layer = MapView.Active.Map.GetLayersAsFlattenedList() .OfType<FeatureLayer>().FirstOrDefault(l => l.Name == "GreatLakes"); if (sel_layer == null) return; var gdb = Project.Current.DefaultGeodatabasePath; var out_fc = System.IO.Path.Combine(gdb, "clipped_lakes_out"); var val_array = await QueuedTask.Run(() => { var rect = GeometryEngine.Instance.Scale(extent, extent.Center, 0.5, 0.5) as Envelope; var clip_poly = PolygonBuilderEx.CreatePolygon(rect, rect.SpatialReference); //Add the geometry to a list before calling MakeValueArray //Envelope and Geometry types are supported var geom = new List<object>() { clip_poly }; return Geoprocessing.MakeValueArray(new object[] { sel_layer, geom, out_fc }); }); Geoprocessing.ExecuteToolAsync(tool_name, val_array, null, null, null, GPExecuteToolFlags.InheritGPOptions);
System.Object
System.ValueType
System.Enum
ArcGIS.Desktop.Core.Geoprocessing.GPExecuteToolFlags
Target Platforms: Windows 11, Windows 10