【ArcGIS Pro二次开发】(48):三调土地利用现状分类面积汇总统计

news2024/11/27 2:27:01

之前做了一个三调三大类面积统计,有小伙伴反映太粗糙,想要一个完整的地类面积汇总表。

【ArcGIS Pro二次开发】(35):三调三大类面积统计

本质上并没有多少难度,之前也做过类似的用地用海汇总表,于是拿出来改一改就好了。


一、要实现的功能

如上图所示,点击【三调】下的【统计三调地类】工具。

在弹出的工具框中,分别输入三调图斑,要统计的面积字段,以及要输出Excel表格的位置。

三调图层注意要确保图层中有【DLMC】字段,这是三调自带的字段。

面积字段,以投影面积为例,选择【shape_area】,如果要统计椭球面积,就选择相应的面积字段。

点击执行即可,生成结果如下:


二、实现流程

这里表格中的地类我是按【TDT 1055-2019 第三次全国国土调查技术规程】中的用地表录入的。但是实际使用过程中,发现有些用地在规范之外,比如【1104A养殖坑塘】等,目前我只能按自己碰到的情况先做一个修正,比如【1104A养殖坑塘】就归类到【1104坑塘水面】。

我对三调业务不熟,如果有熟悉业务的请多指导。

                    // 打开GDB数据库
                    using Geodatabase gdb = new Geodatabase(new FileGeodatabaseConnectionPath(new Uri(gdb_path)));
                    // 获取要素类
                    using FeatureClass featureClasse = gdb.OpenDataset<FeatureClass>("fc_sd");
                    // 逐行游标
                    using (RowCursor rowCursor = featureClasse.Search(null, false))
                    {
                        while (rowCursor.MoveNext())
                        {
                            using (Row row = rowCursor.Current)
                            {
                                var mc = row["DLMC"].ToString();
                                // 赋值
                                if (mc == "养殖坑塘")
                                {
                                    row["DLMC"] = "坑塘水面";
                                }
                                else if (mc.Contains("可调整"))
                                {
                                    row["DLMC"] = mc.Replace("可调整", "");
                                }
                                // 保存
                                row.Store();
                            }
                        }
                    }

然后还要归纳一下大类,这里不像用地用海,可以从小类或中类直接取编码前两位归纳大类,只能做一个对照表,然后属性映射。

        // 属性映射
        public static void AttributeMapper(string in_data, string in_field, string map_field, string map_tabel)
        {
            // 获取连接表的2个字段名
            string exl_field01 = GetCellFromExcel(map_tabel, "A1");
            string exl_field02 = GetCellFromExcel(map_tabel, "B1");
            List<string> fields = new List<string>() { exl_field02 };
            // 连接字段
            Arcpy.JoinField(in_data, in_field, map_tabel, exl_field01, fields);
            // 计算字段
            Arcpy.CalculateField(in_data, map_field, "!" + exl_field02 + "!");
            // 删除多余字段
            Arcpy.DeleteField(in_data, fields);
        }

表格像这样:

然后汇总一下【DLMC】和映射后的大类面积:

        // 汇总统计加强版
        public static void MultiStatistics(string in_table, string out_table, string statistics_fields, List<string> case_fields, string total_field = "合计", int unit = 0, bool is_output = false)
        {
            try
            {
                List<string> list_table = new List<string>();
                for (int i = 0; i < case_fields.Count; i++)
                {
                    Arcpy.Statistics(in_table, out_table + i.ToString(), statistics_fields, case_fields[i]);    // 调用GP工具【汇总】
                    Arcpy.AlterField(out_table + i.ToString(), case_fields[i], @"分组字段", @"分组字段");  // 调用GP工具【更改字段】
                    list_table.Add(out_table + i.ToString());
                }
                Arcpy.Statistics(in_table, out_table + "_total", statistics_fields, "");    // // 调用GP工具【汇总】
                Arcpy.AddField(out_table + "_total", @"分组字段", "TEXT");    // 调用GP工具【更改字段】
                Arcpy.CalculateField(out_table + "_total", @"分组字段", "\"" + total_field + "\"");    // 调用GP工具【计算字段】
                list_table.Add(out_table + "_total");     // 加入列表
                // 合并汇总表
                Arcpy.Merge(list_table, out_table, is_output);       // 调用GP工具【合并】
                // 转换为公顷
                if (unit > 0)
                {
                    ChangeUnit(out_table, "SUM_Shape_Area", unit);        // 单位转换
                }
            }
            catch (Exception ee)
            {
                MessageBox.Show(ee.Message + ee.StackTrace);
                return;
            }
        }

// 调用
List<string> list_bm = new List<string>() { "DLMC", "mc_dl" };
ToolManager.MultiStatistics(gdb_path + @"\fc_sd", gdb_path + @"\statistic_sd", bm_field + " SUM", list_bm, "国土调查总面积", 1, true);

最后属性映射到Excel表格中,再删除0值行,这部分详细的可以看之前的用地用海汇总表,这里就不展开放代码了:

                    // 将映射属性表中获取字典Dictionary
                    Dictionary<string, string> dict = ToolManager.GetDictFromTable("statistic_sd", @"分组字段", "SUM_" + bm_field);
                    // 属性映射大类
                    ToolManager.ExcelAttributeMapper(excel_path + @"\sheet1$", 4, 5, dict, 5);

                    pw.AddProcessMessage(20, time_base, "删除0值行");

                    // 删除0值行
                    ToolManager.Delete0Row(excel_path + @"\sheet1$", 5, 5, true);

以上便是工具的核心代码。


三、工具文件分享

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/753375.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

3D开发工具HOOPS 2023 SP2更新:增加了SOLIDWORKS贴花支持!

HOOPS SDK是全球领先开发商TechSoft 3D旗下的原生产品&#xff0c;专注于Web端、桌面端、移动端3D工程应用程序的开发。长期以来&#xff0c;HOOPS通过卓越的3D技术&#xff0c;帮助全球600多家知名客户推动3D软件创新&#xff0c;这些客户包括SolidWorks、SIEMENS、Oracle、Ar…

几款好用软件,嗐,朋友推荐的,真香

1、git加速 官网&#xff1a;https://steampp.net/ 2、gif 截图 官网&#xff1a;https://www.screentogif.com/

scss 预处理器自定义ui框架(bem架构)

BEM架构 bem架构 它是一种css架构 oocss 实现的一种 &#xff08;面向对象css&#xff09; &#xff0c;BEM实际上是block、element、modifier的缩写&#xff0c;分别为块层、元素层、修饰符层&#xff0c;element UI 也使用的是这种架构 BEM 命名约定的模式是&#xff1a; …

kaggle,球员接触检测

比赛链接 比赛目标 检测球员在NFL橄榄球比赛中所经历的外部接触。你将使用视频和球员跟踪数据来识别与接触的时刻&#xff0c;以帮助提高球员的安全。 评价指标 马修斯相关系数&#xff08;Matthews Correlation Coefficient&#xff0c;简称MCC&#xff09;是一种常用的二…

图论算法笔记

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 第12章 最短路径算法12-1 有权图的最短路径问题最短路径问题-路径规划单源最短路径带权图的最短路径和无权图的最短路径带权图的最短路径算法-Dijkstra算法 12-2 Di…

检测到目标Strict-Transport-Security响应头缺失

详细描述 Web 服务器对于 HTTP 请求的响应头中缺少 Strict-Transport-Security&#xff0c;这将导致浏览器提供的安全特性失效。 当 Web 服务器的 HTTP 头中包含 Strict-Transport-Security 头时&#xff0c;浏览器将持续使用 HTTPS 来访问 Web 站点&#xff0c;可以用来对抗协…

Echart柱形图条纹设置

代码内容: option {xAxis: {type: category,data: [Mon, Tue, Wed, Thu, Fri, Sat, Sun]},yAxis: {type: value},series: [{data: [120, 200, 150, 80, 70, 110, 130],type: bar},{data: [20, 40, 90, 40, 30, 70, 120],type: bar},{data: [140, 230, 120, 50, 30, 150, 120]…

利用远程调试获取Chromium内核浏览器Cookie

前言 本文将介绍不依靠DPAPI的方式获取Chromium内核浏览器Cookie 远程调试 首先我们以edge为例。edge浏览器是基于Chromium的&#xff0c;而Chromium是可以开启远程调试的&#xff0c;开启远程调试的官方文档如下&#xff1a; https://blog.chromium.org/2011/05/remote-deb…

8.带你入门matlab 数据统计与分析——区间参数估计 均匀分布(matlab 程序 )

1.简述 本文将涉及到数理统计的最后一个模块——参数估计&#xff0c;后续将更新的模块是多项式计算、数据插值和曲线拟合。 在讲述使用matlab来实现参数估计之前&#xff0c;有必要去了解一些基本原理。 1.离散型随机变量的极大似然估计法: (1) 似然函数 若X为离散型, 似然函数…

NFTScan 与 Decert 达成合作伙伴,双方在 NFT 数据方面展开合作

近日&#xff0c;NFT 数据基础设施 NFTScan 与 Decert 达成合作伙伴关系&#xff0c;双方在多链 NFT 数据层面展开合作。在 Decert 产品中&#xff0c;由 NFTScan 为其提供专业的多链 NFT 数据支持&#xff0c;为用户带来优质的 NFT 搜索查询等相关交互功能&#xff0c;提升用户…

SQL 上升的温度

197 上升的温度 SQL架构 表&#xff1a; Weather ---------------------- | Column Name | Type | ---------------------- | id | int | | recordDate | date | | temperature | int | ---------------------- id 是这个表的主键 该表包含特定日期的温度信息 编写一个 SQL …

MySQL主从复制(一主一从)

文章目录 MySQL主从复制(一主一从)什么是主从复制主从复制的原理主从复制的优点准备工作配置主数据库Master配置从数据库Slave测试 MySQL主从复制(一主一从) 什么是主从复制 MySQL主从复制是指数据可以从一个MySQL数据库服务器的主节点复制到一个或多个从节点。主节点记录了所…

CAP原则的一致性、可用性、分区容错性

2000年&#xff0c;Eric Brewer在ACM PODC分布式计算原理专题讨论会上首次提出CAP原则。后来&#xff0c;麻省理工学院的两位科学家(赛斯吉尔伯特和南希林奇)证明了CAP原则的正确性。目前&#xff0c;CAP原则被大型公司广泛采纳&#xff0c;例如Amazon公司。 CAP原则又称CAP定…

Unity Obfuscator

官方仓库 学习日期&#xff1a;2023-07-13&#xff08;防止后续仓库特性或功能更新无对比时间&#xff09; 目标&#xff1a;本文介绍使用此github库&#xff0c;混淆unity项目的代码&#xff0c;在ILSpy中无法正确反编译。 一、说明 官方说明 配置界面 Features: ControlFlow…

Web 前端 Day 6

函数 <script>// parseInt(200px)// getSum(20, 30) ​ ​function sayHi() {console.log(hello,function!)} ​// 函数必须进行调用&#xff0c;才会执行sayHi()let age 21 ​// 函数要有返回值&#xff0c;一定要添加return关键字&#xff0c;否则返回值为undefinedfu…

五子棋小游戏 java版(代码+详细注释)

游戏展示 这周闲来无事&#xff0c;再来写个五子棋小游戏。基本功能都实现了&#xff0c;包括人人对战、人机对战。界面布局和功能都写的还行&#xff0c;没做到很优秀&#xff0c;但也不算差。如有需要&#xff0c;做个java初学者的课程设计或者自己写着玩玩也都是不错的&…

关于酒吧的八个大实话

1、酒吧风格定位取决于你酒吧面向的客户群体 2、酒吧要根据所在地区人流量开酒吧&#xff0c;大酒吧开在人流量少的可能死于客流量太小&#xff0c;合理的酒吧规模才能生存。3、酒吧客群不能只面向亲朋好友&#xff0c;再好的朋友也不可能天天来照顾你的生意。4、酒吧注重酒吧…

Task管理系统项目

Task管理系统项目 项目开发意义和目的 本项目所开发的系统为Task管理系统。管理信息系统是一个由人和计算机等组成的能够提供信息以支持一个组织机构内部的作业、管理、分析和决策职能的系统。管理信息系统利用计算机的硬件和软件&#xff0c;手工规程.分析、计划、控制和决策用…

浏览器视口

目录 css单位相对单位绝对单位 像素分类物理像素逻辑像素css像素 DPRPPI浏览器视口布局视口视觉视口理想视口 css单位 在css中我们会使用到许多单位&#xff0c;如px&#xff0c;em&#xff0c;rem&#xff0c;vw&#xff0c;vh等等 整体上&#xff0c;我们可以将它们分成两类…

XXE漏洞

XML基础 概述 XML是一种用于标记电子文件使其具有结构性的可扩展标记语言。 XML是一种灵活的语言&#xff0c;类似于HTML语言&#xff0c;但是并没有固定的标签&#xff0c;所有标签都可以自定义&#xff0c;其设计的宗旨是传输数据&#xff0c;而不是像HTML一样显示数据。 …