【ArcGIS Pro二次开发】(24):现状、规划用地图斑的变化检查

如题如见,这是一个检查现状、规划用地变化的工具。
通过此工具,可以生成变化图斑,检查规划中发生的变化,明确是正常的规划措施,还是因为误操作产生的图斑变化。


一、要实现的功能

【ArcGIS Pro二次开发】(24):现状、规划用地图斑的变化检查_第1张图片

如上图所示,点击【检查现状规划用地变化】按钮,打开工具框,在下拉框中选择自备的现状和规划图层,并选择相应图层的编码或名称字段。这里前后必须保持一致,比如说现状用地选择了用地名称,那么规划图层也要选择用地名称,因为工具是通过这2个字段的值是否发生变化来判断用地变化的。

然后点击运行即可。运行结果如下图:

【ArcGIS Pro二次开发】(24):现状、规划用地图斑的变化检查_第2张图片

运行后会生成一个【chekcResult】图层,这就是发生变化的图斑,通过检查属性表,找到输入的2个检查字段,可以看到字段值是不一致的。


二、实现流程

创建ProWindow工具框、combox列表初始化等内容可以参看往期文章,这里只把实现核心功能的流程列举出来。

以下代码部分只是节选,直接运行未必能跑得通,文章最后放出的工程文件是完整的。

1、获取工具框中选择的图层,字段等参数

根据图层名找到指定图层:

var map = MapView.Active.Map;
FeatureLayer fc_xz = map.FindLayers(combox_fc_xz.Text)[0] as FeatureLayer;
FeatureLayer fc_gh = map.FindLayers(combox_fc_gh.Text)[0] as FeatureLayer;

获取检查字段、定义标记字段:

string field_xz = combox_field_xz.Text;
string field_gh = combox_field_gh.Text;
string field_change = @"用地变化";

设置标识和检查的输出结果:

var DefalutGDB = Project.Current.DefaultGeodatabasePath;
string identityFeatureClass = DefalutGDB + @"\identityFeatureClass";
string checkRezult = DefalutGDB + @"\checkRezult";

2、调用GP标识工具

通过调用GP标识工具,生成标识结果:

var par_Identity = Geoprocessing.MakeValueArray(fc_xz.Name, fc_gh.Name, identityFeatureClass, "ALL", "", "NO_RELATIONSHIPS");
await QueuedTask.Run(() => Geoprocessing.ExecuteToolAsync("analysis.Identity", par_Identity, null, null, null, executeFlags));

3、添加一个标记字段,并计算字段值

添加一个标记字段:

var par_AddField = Geoprocessing.MakeValueArray(identityFeatureClass, field_change, "TEXT");
await QueuedTask.Run(() => Geoprocessing.ExecuteToolAsync("management.AddField", par_AddField, null, null, null, executeFlags));

打开属性表,通过比较2个检查字段的变化,找出变化图斑:

            await QueuedTask.Run(() =>
            {
                FeatureLayer fc_change = map.FindLayers("identityFeatureClass")[0] as FeatureLayer;
                using (Table table = fc_change.GetTable())
                {
                    using (RowCursor rowCursor = table.Search(null, false))
                    {
                        TableDefinition tableDefinition = table.GetDefinition();
                        while (rowCursor.MoveNext())
                        {
                            using (Row row = rowCursor.Current)
                            {
                                // 获取2个检查字段的值
                                var fd_xz = row[field_xz].ToString();
                                var fd_gh = row[field_gh].ToString();
                                if (fd_xz != fd_gh)
                                {
                                    // 赋值
                                    row[field_change] = @"用地有变化";
                                }
                                row.Store();
                            }
                        }
                    }
                }
            });

4、提取发生变化的图斑

通过GP筛选工具提取变化图斑:

string sql = "用地变化 = '用地有变化'";
var par_Select = Geoprocessing.MakeValueArray(identityFeatureClass, checkRezult, sql);
await QueuedTask.Run(() => Geoprocessing.ExecuteToolAsync("analysis.Select", par_Select, null, null, null, executeFlags));

通过以上流程提取出来的图斑即为检查图斑。


三、工程文件分享

 最后,放上工程文件的链接:

CheckYDChangehttps://pan.baidu.com/s/1W0fzcPELZM79XvxO7Y3_xQ?pwd=ze0h

PS:可以直接点击...bin\Debug\net6.0-windows\下的.esriAddinX文件直接安装。

 

你可能感兴趣的:(ArcGIS,Pro,SDK,ArcGIS,c#,二次开发,arcgis,pro,arcgis,pro,sdk)