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

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


一、要实现的功能

60f16f0e38c746558c79fec20576cda6.png

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

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

7ad4d6e496ca449bbf743694e5dfe344.png

运行后会生成一个【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文件直接安装。

 


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部