Arcgis pro SDK 属性表增加字段

arcgis pro SDK 属性表增加字段,需要用到Geoprocessing.ExecuteToolAsync接口,需要注意  var gpResult = await Geoprocessing.ExecuteToolAsync("Management.AddField", parameters);中parameters的构造,有三个必要参数,分别为输入表、字段名、字段类型。

其中输入表是指 要添加指定字段的输入表。 字段将被添加到现有输入表,并且不会创建新的输出表。可将字段添加到地理数据库中的要素类、shapefile、coverage、独立表、栅格目录、带属性表的栅格和图层。类型为:Mosaic Layer; Raster Layer; Table View

 var parameters = Geoprocessing.MakeValueArray(new object[] { layer, "newField", "LONG" });  第一参数用了layer.GetTable(),会导致插入失败,所以改为指定图层。

 

 await QueuedTask.Run(async() =>
            {
                // 获取当前地图视图(焦点地图和选中的图层)
                MapView mapView = MapView.Active;
                // 获取地图视图的关联地图
                var map = mapView.Map;
                // 获取当前选择的图层
                var layer = mapView.GetSelectedLayers().FirstOrDefault() as FeatureLayer;
                // 确保当前选择的图层不为空且为要素图层
                if (layer != null && layer is FeatureLayer featureLayer)
                {           
                    //要素类
                    var featureClass = layer.GetFeatureClass();
                    // 获取要素数量
                    var featureCount = featureClass.GetCount(null);
                    // 获取存储几何信息的字段名称
                    var shapeField = featureClass.GetDefinition().GetShapeField();
                    // 获取要素类的字段定义
                    var def = featureClass.GetDefinition();
                    // 获取字段列表
                    var fields = def.GetFields();// 如果不存在名为“newField”的字段,则添加该字段
                    if (def.FindField("newField") == -1)
                    {
                        try
                        {
                            var parameters = Geoprocessing.MakeValueArray(new object[] { layer, "newField", "LONG" });
                            // 执行工具,并获取结果
                            var gpResult = await Geoprocessing.ExecuteToolAsync("Management.AddField", parameters);

                            // 检查工具是否执行成功,并输出消息到控制台
                            if (gpResult.IsFailed == true)
                            {
                                var messages = gpResult.Messages.Select(m => m.Text);
                                var errorMessage = string.Join(Environment.NewLine, messages);
                                MessageBox.Show($"Failed to add field:{Environment.NewLine}{errorMessage}", "ERROR");
                            }
                            else
                            {
                                MessageBox.Show($"Field 'newField' added successfully to '{layer}' layer.", "SUCCESS");
                            }
                        }
                        catch (Exception ex)
                        {
                            // 记录异常并输出错误消息到控制台
                            Console.Error.WriteLine($"Error occurred while executing AddField tool: {ex.Message}");
                        }

                    }
                    
                }
             
            });

 

posted @ 2023-06-20 16:36  NeXT、  阅读(346)  评论(0)    收藏  举报