在ArcGIS Pro中,经常会遇到用字段计算器对要素的属性表进行计算。下面以一个例子演示如何在ArcGIS Pro SDK二次开发中实现。
一、要实现的功能
如上图所示的要素图层,要实现如下功能:
当字段【市级行政区】的值为【泉州市】时,将字段【省级行政区】的值修改为【标记结果】。
二、功能代码
1、获取要素图层,这里按选定获取,鼠标选定即可:
var featureLayer = MapView.Active.GetSelectedLayers().FirstOrDefault() as FeatureLayer;
2、打开要素图层的表格:
var table = featureLayer.GetTable();
3、按筛选条件筛选行,并搜索到所在的游标:
var queryFilter = new QueryFilter();
queryFilter.WhereClause = "市级行政区 = '泉州市'";
var tableCursor = table.Search(queryFilter, false)
4、最后给选定的目标赋值即可:
while (tableCursor.MoveNext())
{
row["省级行政区"] = "标记结果";
row.Store();
}
以上就是功能实现的核心代码,整理一下,完整代码如下:
protected override async void OnClick()
{
// 要更新的字段名和字段值
var fieldName = "省级行政区";
var newValue = "标记结果";
// 获取选定的要素图层
var featureLayer = MapView.Active.GetSelectedLayers().FirstOrDefault() as FeatureLayer;
// 使用异步任务在后台进行编辑操作
await QueuedTask.Run(() =>
{
// 如果没有选择要素图层,则返回消息框提醒
if (featureLayer == null)
{
MessageBox.Show("请选择一个要素图层!");
return;
}
// 打开要素图层的表格
var table = featureLayer.GetTable();
// 设定筛选语句
var queryFilter = new QueryFilter();
queryFilter.WhereClause = "市级行政区 = '泉州市'";
// 定位到属性表的游标
using (var tableCursor = table.Search(queryFilter, false))
{
while (tableCursor.MoveNext())
{
// 获取当前记录的值
var row = tableCursor.Current;
var currentValue = row[fieldName];
// 如果当前值不等于新值,则更新该字段的值
if (currentValue.ToString() != newValue)
{
row[fieldName] = newValue;
row.Store();
}
}
MessageBox.Show("字段值更新完成!");
}
});
}
三、调试
点击调试或安装工具后,先点击要编辑的要素图层,再点击自定义的【属性编辑】按钮。
生成结果如下,和预期的一致:
四、工程文件分享
最后,放上工程文件的链接:
AttributeEdithttps://pan.baidu.com/s/15qvlIea7LEQhAS_SFIpPow?pwd=c9k6PS:可以直接点击文件夹bin\Debug\net6.0-windows\下的.esriAddinX文件直接安装。