当前位置: 首页 > news >正文

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

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

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

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

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

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

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


一、要实现的功能

 

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

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

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

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

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

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

生成结果如下:

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


二、实现流程

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

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

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

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

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工具【添加字段】即可:

// 复制字段
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文件直接安装。

http://www.lryc.cn/news/142589.html

相关文章:

  • 【Tkinter系列02/5】界面初步和布局
  • 2023年03月 C/C++(四级)真题解析#中国电子学会#全国青少年软件编程等级考试
  • 介绍一些编程语言— CSS 语言
  • 一文讲清楚c/c++中的宏
  • typescript进阶语法
  • 宝塔终端 查看 7003端口 占用 并且杀死
  • 可解释性的相关介绍
  • AUTOSAR规范与ECU软件开发(实践篇)6.7 服务软件组件与应用层软件组件端口连接
  • 菜鸟教程《Python 3 教程》笔记(6):列表
  • LeetCode-56-合并区间
  • Git gui教程---番外篇 gitignore 的文件使用
  • javaee spring 用注解的方式实现ioc
  • Linux基础(二)
  • 155. 最小栈(中等系列)
  • 用python从零开始做一个最简单的小说爬虫带GUI界面(3/3)
  • SpringBoot+Vue如何写一个HelloWorld
  • 深度强化学习。介绍。深度 Q 网络 (DQN) 算法
  • 【C++随笔02】左值和右值
  • 几个nlp的小任务(多选问答)
  • 【C++学习记录】为什么需要异常处理,以及Try Catch的使用方法
  • 孪生网络(Siamese Network)
  • 【Redis】Redis是什么、能干什么、主要功能和工作原理的详细讲解
  • 8月26日,每日信息差
  • 云和恩墨面试(部分)
  • volatile 关键字详解
  • Ceph入门到精通-大流量10GB/s LVS+OSPF 高性能架构
  • Unity光照相关
  • Qt基本类型
  • 前端基础(Element、vxe-table组件库的使用)
  • C++学习记录——이십팔 C++11(4)