如题如见,这是一个检查现状、规划用地变化的工具。
通过此工具,可以生成变化图斑,检查规划中发生的变化,明确是正常的规划措施,还是因为误操作产生的图斑变化。
如上图所示,点击【检查现状规划用地变化】按钮,打开工具框,在下拉框中选择自备的现状和规划图层,并选择相应图层的编码或名称字段。这里前后必须保持一致,比如说现状用地选择了用地名称,那么规划图层也要选择用地名称,因为工具是通过这2个字段的值是否发生变化来判断用地变化的。
然后点击运行即可。运行结果如下图:
运行后会生成一个【chekcResult】图层,这就是发生变化的图斑,通过检查属性表,找到输入的2个检查字段,可以看到字段值是不一致的。
创建ProWindow工具框、combox列表初始化等内容可以参看往期文章,这里只把实现核心功能的流程列举出来。
以下代码部分只是节选,直接运行未必能跑得通,文章最后放出的工程文件是完整的。
根据图层名找到指定图层:
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";
通过调用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));
添加一个标记字段:
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();
}
}
}
}
});
通过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文件直接安装。