在规划工作中,经常需要输入表格数据,如【用地用海分类表】。

之前的经验是做一个Excel表格,通过导入Excel,转换成数据库表格(Tabel)。

但这样有一点不好的地方,Excel表格作为输入数据,在制作成插件或工具之后,必须一起使用,容易发生丢失或路径变化等问题。

于是这有了这个想法,把表格内容以Dictionary形式内置,再通过Dictionary转化成Table。


一、要实现的功能

如上图所示,点击【创建表格】创建一个空表格,再点击【添加新行】插入用地用海的代码和名称。其实2步可以合成1步,这样做只是为了更好的演示。


二、实现流程

1、创建空表格

创建空表格的代码我直接抄的官方文档,看着步骤多,但是运行起来是很快的。基本都是固定套路,直接上代码。(官方代码的质量比百度来的稳定得多)

            // 获取默认数据库var gdb = Project.Current.DefaultGeodatabasePath;// 异步执行,创建Tableawait QueuedTask.Run(() =>{// 创建GeodatabaseGeodatabase geodatabase = new Geodatabase(new FileGeodatabaseConnectionPath(new Uri(gdb)));// 创建字段列表List<FieldDescription> fieldDescriptions = new List<FieldDescription>(){new FieldDescription("用地代码", FieldType.String),new FieldDescription("用地名称", FieldType.String),};// 创建TableDescription对象TableDescription tableDescription = new TableDescription("用地用海表", fieldDescriptions);// 创建SchemaBuilder对象SchemaBuilder schemaBuilder = new SchemaBuilder(geodatabase);// 将表格的创建添加到DDL任务列表中schemaBuilder.Create(tableDescription);// 执行DDLschemaBuilder.Build();});

脚本开头要添加一行using,如下:

using ArcGIS.Core.Data.DDL;

2、将字典键值添加到空表格中

首先,准备一个字典。可以手工输入,因为我已经有Excel表格,转换了一下打印出来就可以了。

            // 【代码转名称】映射表Dictionary<string, string> dict = new Dictionary<string, string>(){{ "01", "耕地"},{ "0101", "水田"},{ "0102", "水浇地"},{ "0103", "旱地"},{ "02", "园地"},{ "0201", "果园"},{ "0202", "茶园"},{ "0203", "橡胶园"},{ "0204", "其他园地"},{ "03", "林地"},{ "0301", "乔木林地"},{ "0302", "竹林地"},{ "0303", "灌木林地"},{ "0304", "其他林地"},{ "04", "草地"},{ "0401", "天然牧草地"},{ "0402", "人工牧草地"},{ "0403", "其他草地"},{ "05", "湿地"},{ "0501", "森林沼泽"},{ "0502", "灌丛沼泽"},{ "0503", "沼泽草地"},{ "0504", "其他沼泽地"},{ "0505", "沿海滩涂"},{ "0506", "内陆滩涂"},{ "0507", "红树林地"},{ "06", "农业设施建设用地"},{ "0601", "乡村道路用地"},{ "060101", "村道用地"},{ "060102", "村庄内部道路用地"},{ "0602", "种植设施建设用地"},{ "0603", "畜禽养殖设施建设用地"},{ "0604", "水产养殖设施建设用地"},{ "07", "居住用地"},{ "0701", "城镇住宅用地"},{ "070101", "一类城镇住宅用地"},{ "070102", "二类城镇住宅用地"},{ "070103", "三类城镇住宅用地"},{ "0702", "城镇社区服务设施用地"},{ "0703", "农村宅基地"},{ "070301", "一类农村宅基地"},{ "070302", "二类农村宅基地"},{ "0704", "农村社区服务设施用地"},{ "08", "公共管理与公共服务用地"},{ "0801", "机关团体用地"},{ "0802", "科研用地"},{ "0803", "文化用地"},{ "080301", "图书与展览用地"},{ "080302", "文化活动用地"},{ "0804", "教育用地"},{ "080401", "高等教育用地"},{ "080402", "中等职业教育用地"},{ "080403", "中小学用地"},{ "080404", "幼儿园用地"},{ "080405", "其他教育用地"},{ "0805", "体育用地"},{ "080501", "体育场馆用地"},{ "080502", "体育训练用地"},{ "0806", "医疗卫生用地"},{ "080601", "医院用地"},{ "080602", "基层医疗卫生设施用地"},{ "080603", "公共卫生用地"},{ "0807", "社会福利用地"},{ "080701", "老年人社会福利用地"},{ "080702", "儿童社会福利用地"},{ "080703", "残疾人社会福利用地"},{ "080704", "其他社会福利用地"},{ "09", "商业服务业用地"},{ "0901", "商业用地"},{ "090101", "零售商业用地"},{ "090102", "批发市场用地"},{ "090103", "餐饮用地"},{ "090104", "旅馆用地"},{ "090105", "公用设施营业网点用地"},{ "0902", "商务金融用地"},{ "0903", "娱乐康体用地"},{ "090301", "娱乐用地"},{ "090302", "康体用地"},{ "0904", "其他商业服务业用地"},{ "10", "工矿用地"},{ "1001", "工业用地"},{ "100101", "一类工业用地"},{ "100102", "二类工业用地"},{ "100103", "三类工业用地"},{ "1002", "采矿用地"},{ "1003", "盐田"},{ "11", "仓储用地"},{ "1101", "物流仓储用地"},{ "110101", "一类物流仓储用地"},{ "110102", "二类物流仓储用地"},{ "110103", "三类物流仓储用地"},{ "1102", "储备库用地"},{ "12", "交通运输用地"},{ "1201", "铁路用地"},{ "1202", "公路用地"},{ "1203", "机场用地"},{ "1204", "港口码头用地"},{ "1205", "管道运输用地"},{ "1206", "城市轨道交通用地"},{ "1207", "城镇道路用地"},{ "1208", "交通场站用地"},{ "120801", "对外交通场站用地"},{ "120802", "公共交通场站用地"},{ "120803", "社会停车场用地"},{ "1209", "其他交通设施用地"},{ "13", "公用设施用地"},{ "1301", "供水用地"},{ "1302", "排水用地"},{ "1303", "供电用地"},{ "1304", "供燃气用地"},{ "1305", "供热用地"},{ "1306", "通信用地"},{ "1307", "邮政用地"},{ "1308", "广播电视设施用地"},{ "1309", "环卫用地"},{ "1310", "消防用地"},{ "1311", "干渠"},{ "1312", "水工设施用地"},{ "1313", "其他公用设施用地"},{ "14", "绿地与开敞空间用地"},{ "1401", "公园绿地"},{ "1402", "防护绿地"},{ "1403", "广场用地"},{ "15", "特殊用地"},{ "1501", "军事设施用地"},{ "1502", "使领馆用地"},{ "1503", "宗教用地"},{ "1504", "文物古迹用地"},{ "1505", "监教场所用地"},{ "1506", "殡葬用地"},{ "1507", "其他特殊用地"},{ "16", "留白用地"},{ "17", "陆地水域"},{ "1701", "河流水面"},{ "1702", "湖泊水面"},{ "1703", "水库水面"},{ "1704", "坑塘水面"},{ "1705", "沟渠"},{ "1706", "冰川及常年积雪"},{ "18", "渔业用海"},{ "1801", "渔业基础设施用海"},{ "1802", "增养殖用海"},{ "1803", "捕捞海域"},{ "19", "工矿通信用海"},{ "1901", "工业用海"},{ "1902", "盐田用海"},{ "1903", "固体矿产用海"},{ "1904", "油气用海"},{ "1905", "可再生能源用海"},{ "1906", "海底电缆管道用海"},{ "20", "交通运输用海"},{ "2001", "港口用海"},{ "2002", "航运用海"},{ "2003", "路桥隧道用海"},{ "21", "游憩用海"},{ "2101", "风景旅游用海"},{ "2102", "体休闲娱乐用海"},{ "22", "特殊用海"},{ "2201", "军事用海"},{ "2202", "其他特殊用海"},{ "23", "其他土地"},{ "2301", "空闲地"},{ "2302", "田坎"},{ "2303", "田间道"},{ "2304", "盐碱地"},{ "2305", "沙地"},{ "2306", "裸土地"},{ "2307", "裸岩石砾地"},{ "24", "其他海域"}};

创建编辑器,打开刚创建好的空表格,按字典dict的键值给表赋值,再更新保存,代码如下:

            // 打开编辑EditOperation editOperation = new EditOperation();await QueuedTask.Run(() =>{using (Geodatabase geodatabase = new Geodatabase(new FileGeodatabaseConnectionPath(new Uri(gdb))))using (Table table = geodatabase.OpenDataset<Table>("用地用海表")){editOperation.Callback(context =>{TableDefinition tableDefinition = table.GetDefinition();// 按字典dict的键值给表赋值foreach (string key in dict.Keys){using (RowBuffer rowBuffer = table.CreateRowBuffer()){string value = dict[key];// 赋值rowBuffer["用地代码"] = key;rowBuffer["用地名称"] = value;using (Row row = table.CreateRow(rowBuffer)){// 更新context.Invalidate(row);}}}}, table);try{// 执行editOperation.Execute();}

以上就是核心代码部分,完整代码请查看文章末尾放出的工程文件。

PS:和python相比,c#的代码真是又臭又长,上面这些功能,python要实现的话,代码量一半都不要。不过速度上感觉确实比python快。


三、工程文件分享

最后,放上工程文件的链接:

TableSnippethttps://pan.baidu.com/s/1o1lgHo2Nvw241XjsY7Yl3A?pwd=rfpj

PS:可以直接点击...bin\Debug\net6.0-windows\下的.esriAddinX文件直接安装。

【ArcGIS Pro二次开发】(14):使用字典(Dictionary)创建表格(Table)相关推荐

  1. ArcGIS Pro二次开发环境配置及项目创建示例

    一.软件版本 ArcGIS Pro 2.8 Visual Studio 2019 二.组件 ArcGIS Pro 2.8 SDK for .NET: proapp-sdk-templates.vsix ...

  2. 【ArcGIS Pro二次开发】(15):用地用海名称和代码互转

    在国土空间规划中,用地用海的名称和代码是一一对应的,手动修改用地代码后,还需要相应的修改名称,纯纯的重复工作,因此做了这个工具. 之前用Arcpy做过同样的功能的工具,参看这个: ArcGisPro脚 ...

  3. 【ArcGIS Pro二次开发】系列学习笔记,持续更新,记得收藏

    一.前言 这个系列是本人的一个学习笔记. 作为一个ArcGIS Pro二次开发的初学者,最困扰的就是无从入手.网上关于ArcGIS Pro二次开发的中文资料极少,官方文档对于我这样的英文苦手又太不友好 ...

  4. 【ArcGIS Pro二次开发】(6):工程(Project)的基本操作

    在ArcGIS Pro中我们对工程的基本操作一般包括打开.新建.保存等.下面演示在二次开发中如何用代码进行以上操作. 新建一个项目,命名为[ProjectManager],添加8个按钮,命名为[Cre ...

  5. 【ArcGIS Pro二次开发】(7):地图(Map)的基本操作

    地图是ArcGIS Pro中的基础起点,也是大多数工程的基础.主要用于显示表示空间数据的图层. 一.地图(Map)的基本操作示例 1.获取当前地图 var map = MapView.Active.M ...

  6. 【ArcGIS Pro二次开发】(5):UI管理_自定义控件的位置

    新增的自定义控件一般放在默认的[加载项]选项卡下,但是根据需求,我们可能需要将控件放在新的自定义选项卡下,在自定义选项卡添加系统自带的控件,将自定义的按钮等控件放在右键菜单栏里以方便使用,等等. 下面 ...

  7. 【ArcGIS Pro二次开发】(8):图层(Layer)的基本操作

    在ArcGIS中,图层(Layer)是地理数据的集合.可以在 ArcGIS Pro中将很多不同类型的数据表示为图层. 图层通常包含矢量(要素)或栅格数据. 图层的类型取决于您拥有的数据类型.其基础结构 ...

  8. 【ArcGIS Pro二次开发】(26):数据筛选器

    在使用[OpenItemDialog]打开数据时,其中一个重要的属性[Filter],可用于筛选要打开的数据.示例代码如下: // 打开文件对话框OpenItemDialog dlg = new Op ...

  9. 【ArcGIS Pro二次开发】(17):打开GDB、SHP、CAD等各种数据

    一.打开GDB数据库 // 输入一个数据库路径string gdbPath = @"C:\Users\Administrator\Documents\ArcGIS\Projects\Test ...

最新文章

  1. Property list types and their various representations
  2. 《剑指offer》-数组中只出现一次的数字
  3. lumia920 和htc 8x的对比评测
  4. SAP CRM BP contact detail - workAddress
  5. [Java基础]反射获取成员方法并使用练习
  6. php怎么上传函数,PHP单文件上传原理及上传函数的封装操作示例
  7. Mac OS defaults命令(Access the Mac OS user defaults system)
  8. vuex语法精简(方便开发查阅)
  9. 苹果2021年WWDC大会可能继续采用线上方式举办
  10. mysql转达梦7_从mysql换成达梦7后,查询语句报错,这个是druid的问题吗
  11. dpkg: error processing package sunloginclient (--install): dependency problems - leaving unconfigur
  12. django xadmin 默认密码_Pycharm创建Django项目讲解 python django
  13. schedule()函数的调用时机(周期性调度)
  14. Ubuntu彻底卸载MySQL
  15. TracePro小白学习操作
  16. JAVA设计模式之策略模式
  17. 高等数学在线计算工具
  18. 队列同步器(AbstractQueuedSynchronizer)源码简析
  19. java计算机毕业设计仓库管理系统设计与实现MyBatis+系统+LW文档+源码+调试部署
  20. php调用API支付接口 转至http://www.cnblogs.com/chaochao00o/p/6490463.html

热门文章

  1. JAVA Keytool工具生成Keystore和Truststore文件
  2. 创建Dao接口,用impl类实现对数据的增删改查
  3. mysql、redis操作
  4. 网游之复活 - 最新章节列表
  5. 达梦数据库迁移教程(Mysql迁移到达梦数据库)
  6. 响铃:马云启动“NASA”计划,这真会让阿里一飞冲天?
  7. 1u水冷服务器如何维护,如何正确使用数据中心水冷技术?
  8. Chrome浏览器不兼容lodop打印控件
  9. ps图片基本操作记录
  10. 【基础入门题024】猴子吃桃问题