【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));
通过以上流程提取出来的图斑即为检查图斑。
三、工程文件分享
最后,放上工程文件的链接:
CheckYDChange
https://pan.baidu.com/s/1W0fzcPELZM79XvxO7Y3_xQ?pwd=ze0h
PS:可以直接点击...bin\Debug\net6.0-windows\下的.esriAddinX文件直接安装。
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
