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

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

【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文件直接安装。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【已解决】天翼电信宽带改桥模式,使用路由器ppoe拨号

运营商在给办理宽带时会默认给宽带设置成光猫ppoe拨号&#xff0c;路由器只需设置为dhcp获取ip&#xff0c;插入到光猫的lan口即可上网。但运营商的光猫路由性能有限&#xff0c;会影响到网络体验。而将光猫设置为桥模式&#xff0c;使用路由器拨号&#xff0c;可以实现路由器进…

【C语言】深剖数据在内存中的存储

&#x1f466;个人主页&#xff1a;Weraphael ✍&#x1f3fb;作者简介&#xff1a;目前正在回炉重造C语言&#xff08;2023暑假&#xff09; ✈️专栏&#xff1a;【C语言航路】 &#x1f40b; 希望大家多多支持&#xff0c;咱一起进步&#xff01;&#x1f601; 如果文章对你…

酷开科技大屏营销,撬动营销新增量

5G、人工智能、元宇宙等技术的发展促使数字营销的内容、渠道、传播方式发生了一系列变化&#xff1b;存量竞争下&#xff0c;增长成为企业更加迫切、更具挑战的课题&#xff0c;品牌营销活动越来越围绕“生意增长”和“提效转化”的目标展开。 如今的市场环境下&#xff0c;产…

Nacos(服务注册与发现)+SpringBoot+openFeign项目集成

&#x1f4dd; 学技术、更要掌握学习的方法&#xff0c;一起学习&#xff0c;让进步发生 &#x1f469;&#x1f3fb; 作者&#xff1a;一只IT攻城狮 &#xff0c;关注我&#xff0c;不迷路 。 &#x1f490;学习建议&#xff1a;1、养成习惯&#xff0c;学习java的任何一个技术…

基础语言模型LLaMA

LLaMA包含从7B到65B参数的基础语言模型集合。Meta在数万亿个tokens上训练了模型&#xff0c;LLaMA-13B在大多数基准测试中优于GPT-3&#xff08;175B&#xff09;。 来自&#xff1a;LLaMA: Open and Efficient Foundation Language Models 目录 背景概述方法预训练数据架构Op…

openGauss学习笔记-09 openGauss 简单数据管理-创建数据库

文章目录 openGauss学习笔记-09 openGauss 简单数据管理-创建数据库9.1 语法格式9.2 参数说明9.3 示例 openGauss学习笔记-09 openGauss 简单数据管理-创建数据库 数据库安装完成后&#xff0c;默认生成名称为postgres的数据库。您需要自己创建一个新的数据库。 9.1 语法格式…

Appium+python自动化(十一)- 元素定位- 下卷超详解)

1、 List定位 List故名思义就是一个列表&#xff0c;在python里面也有list这一个说法&#xff0c;如果你不是很理解什么是list&#xff0c;这里暂且理解为一个数组或者说一个集合。首先一个list是一个集合&#xff0c;那么他的个数也就成了不确定性&#xff0c;所以这里需要用复…

C\C++ 使用exception类,抛出自定义异常并捕获

文章作者&#xff1a;里海 来源网站&#xff1a;https://blog.csdn.net/WangPaiFeiXingYuan 简介&#xff1a; 抛出异常&#xff0c;并捕获 exception 效果&#xff1a; 代码&#xff1a; #include <iostream> #include <exception> #include <stdexcept&g…

C# OpenCvSharp+DlibDotNet 人脸替换 换脸

效果 Demo下载 项目 VS2022.net4.8OpenCvSharp4DlibDotNet 相关介绍参考 代码 using DlibDotNet; using OpenCvSharp.Extensions; using OpenCvSharp; using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Dra…

和为 K 的子数组——前缀和+哈希

题目链接&#xff1a;力扣 注意&#xff1a;此题不能使用滑动窗口&#xff0c;因为数组中可能会出现负数。也就是说右指针向后移1位不能保证区间会增大&#xff0c;左指针向后移1位也不能保证区间和会减小。给定左右指针的位置没有二段性 已知sum[i]是从nums[0~i]的和&#x…

实现小程序商城首页【源码公开】

效果图 页面源码 <view class"index-container"><view class"header"><!--搜索框【仅样式&#xff0c;不做处理】 start--><van-search bindtap"clickSearch" disabled shape"round" background"#9c7bf0&q…

Pycharm安装dlib

目录 一、下载dilb 二、使用pip安装dlib库(亲测有效) 三、使用Pycharm安装(未使用) 一、下载dilb 官方网址:德利卜 皮皮 (pypi.org) 二、使用pip安装dlib库(亲测有效) 将下载好的whl文件放入工程文件中 接下来使用Python自带的pip进行安装 1.winR2.输入cmd&#xff0c;回车…

MySQL第六章、JDBC编程

目录 一、数据库编程的必备条件 二、Java的数据库编程&#xff1a;JDBC 三、JDBC工作原理 四、JDBC使用 4.1JDBC开发案例 一、数据库编程的必备条件 编程语言&#xff0c;如Java&#xff0c;C、C、Python等数据库&#xff0c;如Oracle&#xff0c;MySQL&#xff0c;SQL S…

十大网络安全上市公司分析,让我们重点聊聊F5

网络安全上市厂商业务广泛分布于网络安全硬件、软件&#xff0c;网络安全服务等板块&#xff0c;总体来看&#xff0c;十大网络安全上市公司的竞争可谓是如火如荼。今天让我们把目光集中在F5&#xff0c;这个能为我们所有人创造更安全的数字世界的企业&#xff0c;在应用及API交…

Linux下使用命令行和配置文件两种方式实现主从复制

一、什么是主从复制&#xff1f; Redis的主从复制&#xff08;Master-Slave Replication&#xff09;是一种数据复制机制&#xff0c;其中一个Redis实例充当主节点&#xff08;Master&#xff09;&#xff0c;而其他一个或多个Redis实例则充当从节点&#xff08;Slave&#xff…

基于GIS的生态敏感性评价与产业路径选择研究:以江西省吉安市为例

导读: 确立绿水青山就是金山银山的理念,建立生态经济体系,是新时代生态环境保护与经济发展的协调之道。对产业规划而言,与生态同行,构建绿色产业体系,是推动地区高质量发展的根本要求。鉴于此,文章从实证角度出发,以江西省吉安市为研究对象,采用生态敏感性评价方法,选…

【EXCEL】通过url获取网页表格数据

目录 0.环境 1.背景 2.具体操作 0.环境 windows excel2021 1.背景 之前我用python的flask框架的爬虫爬取过豆瓣网的电影信息&#xff0c;没想到excel可以直接通过url去获取网页表格内的信息&#xff0c;比如下图这是电影信息界面 即将上映电影 (douban.com) 通过excel操作&…

(栈队列堆) 剑指 Offer 31. 栈的压入、弹出序列 ——【Leetcode每日一题】

❓ 剑指 Offer 31. 栈的压入、弹出序列 难度&#xff1a;中等 输入两个整数序列&#xff0c;第一个序列表示栈的压入顺序&#xff0c;请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如&#xff0c;序列 {1,2,3,4,5} 是某栈的压栈序列&#xff0c;序…

【字符串编码解码问题】

字符串中编码解码问题 1.编码 byte[] getBytes()&#xff1a;使用平台的默认字符集将该String编码为一系列字节&#xff0c;将结果存储到新的字节数组中byte[] getBytes(String charsetName)&#xff1a;使用指定的字符集将该String编码为一系列字节&#xff0c;将结果存储到…

AHB协议理解

从小父亲就教育我&#xff0c;做一个对社会有用的人&#xff01; 目录 Chapter1 AHB Block Diagram Ginput signal lnput signals Output Signal Chapter3 Transfers AHB接口Overview Chapter6 Data Buses HWDATA HRDATA Chapter1 Introduction AHB: Advanced High-performanc…