【ArcGIS Pro二次开发】(29):村庄规划生成空间功能结构调整表

本文主要是介绍【ArcGIS Pro二次开发】(29):村庄规划生成空间功能结构调整表,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

根据现在村规成果要求,【空间功能结构调整表】是必需的。

以福建省为例,它长这样:

下面就来实现从现状用地和规划用地导出这样的Excel表格。


一、要实现的功能

如上图所示,点击【汇总村庄空间功能结构调整表】工具,选择【现状用地】和【规划用地】图层,选择要保存输出的Excel文件路径,再点击【执行】即可。

生成结果如下:

PS:注意输入的【现状用地】和【规划用地】的规范要求

一、【现状用地】

输入的【现状用地】图斑需要注意要有2个字段:【JQDLBM】和【CZCSXM】。

【JQDLBM】是村规入库的标准代码,即基期地类编码。

【CZCSXM】是三调自带的字段,用来表示三调用地的城镇村属性。201、201A是城市建设用地,202、202A是建制镇建设用地,203、203A是村庄建设用地。这里提取【201、201A、202、202A】作为城镇用地。

二、【规划用地】

输入的【规划用地】图斑需要注意要有2个字段:【GHDLBM】和【SSBJLX】。

【GHDLBM】和【SSBJLX】都是村规入库的标准代码。

【GHDLBM】即规划地类编码。

【SSBJLX】用来表示规划用地的城镇村属性,字段值为【Z】则表示该地块为城镇用地。这里为了照顾输入时的误差,字段值为小写的【z】也可以被认得。


二、实现流程

工具的实现流程和我的上一篇文章很像:

【ArcGIS Pro二次开发】(28):用地图斑导出用地用海汇总表

流程长但不复杂,更重要的是Excel模板和输入【现状用地、规划用地】的准备。

1、准备Excel模板

一、【空间功能结构调整表】模板

首先是要输出表的模板,需要输入的单元格包括面积、比重、和面积增减。这里的大部分面积值由用地汇总而来,部分合计值、比重以及面积增减值就在Excel里用公式计算。另外,还需要一个参照列,用来属性映射。

二、【用地用海代码_村庄功能】属性映射表

这个表格是作为用地用海代码向村庄功能映射的参照表,将用地用海代码转换成村庄功能代码。

2、主要代码

实现功能的主要流程如下:

            // 获取默认数据库string init_gdb = Project.Current.DefaultGeodatabasePath;// 获取默认文件夹位置string init_path = Project.Current.HomeFolderPath;// 获取参数string yd_xz = combox_fc_xz.Text;           // 现状用地string yd_gh = combox_fc_gh.Text;         // 规划用地string excel_GN = init_path + @"\用地用海代码_村庄功能.xlsx";    // 村庄功能映射Excelstring excel_TZB = textExcelPath.Text;      // 输出空间功能结构调整表Excelstring output_table_xz = init_gdb + @"\output_table_xz";string output_table_gh = init_gdb + @"\output_table_gh";string statistics_fields = "Shape_Area SUM";string field_xz = "JQDLBM";string field_gh = "GHDLBM";string field_GN = "村庄功能";// 复制模板Excel和输出结果ExcelToolManager.CopyResourceFile(@"CCTool.Excel.用地用海代码_村庄功能.xlsx", excel_GN);ToolManager.CopyResourceFile(@"CCTool.Excel.【模板】空间功能结构调整表.xlsx", excel_TZB);// 现状、规划用地功能映射GN_Mapper(yd_xz, field_xz, field_GN, excel_GN);GN_Mapper(yd_gh, field_gh, field_GN, excel_GN);// 统计面积ToolManager.MultiStatistics(yd_xz, output_table_xz, statistics_fields, new List<string>() { field_GN }, "总计", 1, true);ToolManager.MultiStatistics(yd_gh, output_table_gh, statistics_fields, new List<string>() { field_GN }, "总计", 1, true);// 删除中间字段Arcpy.DeleteField(yd_xz, field_GN);Arcpy.DeleteField(yd_gh, field_GN);// 属性映射至ExcelToolManager.ExcelAttributeMapper(excel_TZB + @"\sheet1$", 13, 6, "output_table_xz", @"分组字段", "SUM_Shape_Area", 5);ToolManager.ExcelAttributeMapper(excel_TZB + @"\sheet1$", 13, 8, "output_table_gh", @"分组字段", "SUM_Shape_Area", 5);// 删除0值行ToolManager.Delete0Row(excel_TZB + @"\sheet1$", new List<int>() {6, 8}, 5);// 删除参照列ToolManager.DeleteColumns(excel_TZB + @"\sheet1$", new List<int>() { 13 });// 删除中间数据Arcpy.Delect(new List<string>() { output_table_xz, output_table_gh });

其中【GN_Mapper】方法用于计算城村庄功能字段:

        // 村庄功能映射public async void GN_Mapper(string yd, string field_bm, string field_GN, string excel_GN){// 汇总统计现状用地Arcpy.AddField(yd, field_GN, "TEXT");     // 添加一个参照字段// 属性映射ToolManager.AttributeMapper(yd, field_bm, field_GN, excel_GN + @"\sheet1$");// 计算城镇用地var map = MapView.Active.Map;FeatureLayer init_layer = map.FindLayers(yd)[0] as FeatureLayer;await QueuedTask.Run(() =>{using (ArcGIS.Core.Data.Table table = init_layer.GetTable()){using (RowCursor rowCursor = table.Search(null, false)){TableDefinition tableDefinition = table.GetDefinition();while (rowCursor.MoveNext()){using (Row row = rowCursor.Current){if (field_bm == "JQDLBM"){// 获取valuevar va = row["CZCSXM"].ToString();// 赋值if (va == "202" || va == "202A" || va == "201" || va == "201A"){row[field_GN] = "城镇用地";}}else if (field_bm == "GHDLBM"){// 获取valuevar va = row["SSBJLX"].ToString();// 赋值if (va == "Z" || va == "z"){row[field_GN] = "城镇用地";}}row.Store();}}}}});}

流程里涉及到的其它功能包括:复制Excel、属性映射、统计面积、Excel属性映射、删除0值行等,可以在以往的文章里查到,具体可以看上一篇文章,或在文章末尾提供的工程文件里查看。实在也没什么好讲的。

PS:这次提供的工程文件和别的工具合在一起了。代码里的功能嵌套越来越多,分离开来反而很麻烦,就将整个工具包一块分享了。


三、工程文件分享

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

StatisticVillagehttps://pan.baidu.com/s/1nsjUHqRqfogHrjis5pXDXw?pwd=dwsv

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

这篇关于【ArcGIS Pro二次开发】(29):村庄规划生成空间功能结构调整表的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/588417

相关文章

使用EasyPoi快速导出Word文档功能的实现步骤

《使用EasyPoi快速导出Word文档功能的实现步骤》EasyPoi是一个基于ApachePOI的开源Java工具库,旨在简化Excel和Word文档的操作,本文将详细介绍如何使用EasyPoi快速... 目录一、准备工作1、引入依赖二、准备好一个word模版文件三、编写导出方法的工具类四、在Export

JS纯前端实现浏览器语音播报、朗读功能的完整代码

《JS纯前端实现浏览器语音播报、朗读功能的完整代码》在现代互联网的发展中,语音技术正逐渐成为改变用户体验的重要一环,下面:本文主要介绍JS纯前端实现浏览器语音播报、朗读功能的相关资料,文中通过代码... 目录一、朗读单条文本:① 语音自选参数,按钮控制语音:② 效果图:二、朗读多条文本:① 语音有默认值:②

k8s admin用户生成token方式

《k8sadmin用户生成token方式》用户使用Kubernetes1.28创建admin命名空间并部署,通过ClusterRoleBinding为jenkins用户授权集群级权限,生成并获取其t... 目录k8s admin用户生成token创建一个admin的命名空间查看k8s namespace 的

C#实现高性能拍照与水印添加功能完整方案

《C#实现高性能拍照与水印添加功能完整方案》在工业检测、质量追溯等应用场景中,经常需要对产品进行拍照并添加相关信息水印,本文将详细介绍如何使用C#实现一个高性能的拍照和水印添加功能,包含完整的代码实现... 目录1. 概述2. 功能架构设计3. 核心代码实现python3.1 主拍照方法3.2 安全HBIT

MySQL8.0临时表空间的使用及解读

《MySQL8.0临时表空间的使用及解读》MySQL8.0+引入会话级(temp_N.ibt)和全局(ibtmp1)InnoDB临时表空间,用于存储临时数据及事务日志,自动创建与回收,重启释放,管理高... 目录一、核心概念:为什么需要“临时表空间”?二、InnoDB 临时表空间的两种类型1. 会话级临时表

录音功能在哪里? 电脑手机等设备打开录音功能的技巧

《录音功能在哪里?电脑手机等设备打开录音功能的技巧》很多时候我们需要使用录音功能,电脑和手机这些常用设备怎么使用录音功能呢?下面我们就来看看详细的教程... 我们在会议讨论、采访记录、课堂学习、灵感创作、法律取证、重要对话时,都可能有录音需求,便于留存关键信息。下面分享一下如何在电脑端和手机端上找到录音功能

Android实现图片浏览功能的示例详解(附带源码)

《Android实现图片浏览功能的示例详解(附带源码)》在许多应用中,都需要展示图片并支持用户进行浏览,本文主要为大家介绍了如何通过Android实现图片浏览功能,感兴趣的小伙伴可以跟随小编一起学习一... 目录一、项目背景详细介绍二、项目需求详细介绍三、相关技术详细介绍四、实现思路详细介绍五、完整实现代码

Vue3 如何通过json配置生成查询表单

《Vue3如何通过json配置生成查询表单》本文给大家介绍Vue3如何通过json配置生成查询表单,本文结合实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录功能实现背景项目代码案例功能实现背景通过vue3实现后台管理项目一定含有表格功能,通常离不开表单

Python使用FastAPI实现大文件分片上传与断点续传功能

《Python使用FastAPI实现大文件分片上传与断点续传功能》大文件直传常遇到超时、网络抖动失败、失败后只能重传的问题,分片上传+断点续传可以把大文件拆成若干小块逐个上传,并在中断后从已完成分片继... 目录一、接口设计二、服务端实现(FastAPI)2.1 运行环境2.2 目录结构建议2.3 serv

Java使用Javassist动态生成HelloWorld类

《Java使用Javassist动态生成HelloWorld类》Javassist是一个非常强大的字节码操作和定义库,它允许开发者在运行时创建新的类或者修改现有的类,本文将简单介绍如何使用Javass... 目录1. Javassist简介2. 环境准备3. 动态生成HelloWorld类3.1 创建CtC