【ArcGIS Pro二次开发】(62):复制字段

应网友需求,做了这么一个复制字段的小工具。

假定这样一个场景,手头有一个要素1,要素里有10个字段,另一个要素2,除了shape_area等图形字段外,没有其它字段。

现在的需求是,想把要素1中的8个字段复制给要素2。

这里的复制指的是将这8个字段的字段名,别名,字段类型、字段长度等信息完全复制过去。当然字段值是基于图斑的,所以不能复制,新字段的值都为空。

说白了其实就是按要素1的字段样式,在要素2中新建8个一模一样的字段。

虽然我也不清楚这个工具有没有用,有多大用,总之先做出来。


一、要实现的功能

如上图所示,在【字段处理】组---【字段综合】面板下,点击【复制字段】工具。

在弹出的工具框中,分别输入参数:

1、输入包含要复制字段的要素图层。

2、输入要输出字段的目标要素图层。

3、通过下拉选择要复制的字段,选择后会加入列表框4。

4、通过3选择后列出来的字段,可以选择字段行点击喧边的删除键删除不需要的字段。

生成结果如下:

如图,新增的字段完全继续了原来要素字段的属性。


二、实现流程

首先,获取要素1中要复制的8个字段。

这里先创建一个类来存储字段信息,每个字段都有4个信息要采集,用列表的方式不方便。

cs 复制代码
// 创建一个字段类
public class FieldDef
{
    public string fldName { get; set; }
    public string fldAlias { get; set; }
    public string fldType { get; set; }
    public int fldLength { get; set; }
}

再收集字段信息,存入列表:

cs 复制代码
List<FieldDef> fieldDefs = new List<FieldDef>();

// 获取字段属性
foreach (string item in listbox_field.Items)
{
    FieldDef fd = new FieldDef();

    FeatureLayer featureLayer = MapView.Active.Map.GetLayersAsFlattenedList().OfType<FeatureLayer>().FirstOrDefault(x => x.Name == fc_before);
    var inspector = new Inspector();
    inspector.LoadSchema(featureLayer);
    // 获取属性
    foreach (var att in inspector)
    {
        // 如果符合字段名
        if (att.FieldName == item)
        {
            fd.fldName = att.FieldName;
            fd.fldAlias = att.FieldAlias;
            fd.fldType = att.FieldType.ToString();
            fd.fldLength = att.Length;
        }
    }
    // 加入字段集合
    fieldDefs.Add(fd);
}

收集好字段信息后,再用GP工具【添加字段】即可:

cs 复制代码
// 复制字段
foreach (var fd in fieldDefs)
{
    pw.AddProcessMessage(10, time_base, $"复制字段:{fd.fldName}");
    Arcpy.AddField(fc_after, fd.fldName, fd.fldType, fd.fldAlias, fd.fldLength);
}

以上便实现了工具的主要功能。


三、工具文件分享

我把工具都集合成工具箱,不再单独放单个工具,可以到这里下载完整工具箱,会不断更新:

【ArcGIS Pro二次开发】:CC工具箱https://blog.csdn.net/xcc34452366/article/details/131506345PS:可以直接点击...bin\Debug\net6.0-windows\下的.esriAddinX文件直接安装。

相关推荐
吃一碗粉只付一碗钱8 小时前
12-给SPA友好的401和403响应
c#·状态模式
caimouse15 小时前
MonoDevelop 编译用户应用程序时调用的是哪个编译器
c#
非科班Java出身GISer15 小时前
ArcGIS JS 基础教程(46):编辑要素属性 FeatureForm
arcgis·arcgis js编辑要素·arcgis js 要素·arcgis js要素属性·arcgis js 编辑属性·arcgis js编辑要素属性
will_net17 小时前
apollo 站点部署&C#接入
开发语言·c#·apollo
吾与谁归in1 天前
C#脚本工具,支持智能提示自动补全(WPF + Roslyn + AvalonEdit)
开发语言·c#·wpf
昂好的day1 天前
WPF 从零入门(上):WPF 是什么、XAML 语法、布局与样式全解
开发语言·c#·wpf
吃一碗粉只付一碗钱2 天前
10-令牌里的用户主键不要明文
服务器·数据库·sql·sqlserver·c#
胖纸不争2 天前
EnergyStarZ:让 Windows 后台进程给前台让路的能效管理器(v1.2 发布)
windows·性能优化·c#·win32·ef core
梅如你2 天前
ISPRS | 1990-2020年间中国人工林与天然林的空间分布数据
arcgis·gis·遥感