【ArcGIS Pro二次开发】(66):三调规程_土地利用现状分类面积汇总表

news2025/1/12 10:00:51

之前做了一个三调的土地利用现状分类统计表,是按照自己的习惯做的,发现不符合土规专业的要求,于是翻开三调规程,按规范重新制作。


一、要实现的功能

 

如上图所示,在【规划应用】组—【三调】面板下,点击【1、土地利用现状分类面积汇总表】工具。

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

1、输入三调图层。

2,3、参数2和3是可选参数。用于需要按地块进行分区统计的情况。参数3为参数2中用于标记地块名称的字段。

4、汇总面积。工具预设了3种,【shape_area、TBMJ、TBDLMJ】。【shape_area】即投影面积,【TBMJ】即椭球面积,【TBDLMJ】为椭球面积扣去扣除面积,即净面积。

5、面积单位。工具预设了【平方米、公顷】2种。

6、输出Excel统计表的位置。

生成结果如下:


二、实现流程

因为全部代码比较长,这里只贴出主流程代码,其中部分汇总数据以及对Excel表的操作,之前的文章都有说到,可以回头翻阅一下。

// 复制嵌入资源中的Excel文件
ToolManager.CopyResourceFile(@"CCTool.Data.Excel.三调规程.土地利用现状分类面积汇总表.xlsx", excel_path);
ToolManager.CopyResourceFile(@"CCTool.Data.Excel.三调用地自转换.xlsx", folder_path + @"\三调用地自转换.xlsx");

// 放到新建的数据库中
Arcpy.CreateFileGDB(folder_path, "新数据库");
string new_gdb = $@"{folder_path}\新数据库.gdb";

if (fc_area_path == "")  // 如果没有分地块统计
{
    Arcpy.CopyFeatures(fc_path, $@"{new_gdb}\{fc_path}");
}

else   // 如果分地块统计
{
    // 按属性分割
    Arcpy.SplitByAttributes(fc_area_path, new_gdb, name_field);
}

// 收集分割后的地块
List<string> list_area = ToolManager.GetFeatureClassAndTablePath(new_gdb);
// 新建的gdb列表
List<string> gdb_list = new List<string>();

foreach (var area in list_area)
{
    // 裁剪新用地
    string area_name = area[(area.LastIndexOf(@"\") + 1)..];
    string new_fc = $@"{new_gdb}\{area_name}_裁剪结果";

    Arcpy.Clip(fc_path, area, new_fc);

    // 如果是计算图斑面积,就重新计算
    if (area_field == "TBMJ")
    {
        Arcpy.CalculateField(new_fc, "TBMJ", "!shape.geodesicarea!");
    }
    else if (area_field == "TBDLMJ")
    {
        Arcpy.CalculateField(new_fc, "TBDLMJ", "!shape.geodesicarea! * (1-!KCXS!)");
    }

    // 添加一个类一、二级字段
    Arcpy.AddField(new_fc, "mc_1", "TEXT");
    Arcpy.AddField(new_fc, "mc_2", "TEXT");

    // 用地编码转换
    ToolManager.AttributeMapper(new_fc, "DLMC", "mc_1", folder_path + @"\三调用地自转换.xlsx\一级$");
    ToolManager.AttributeMapper(new_fc, "DLMC", "mc_2", folder_path + @"\三调用地自转换.xlsx\二级$");

    // 将新用地按【坐落地代码名称】分割放入新的数据库,并收集,方便下一步处理
    Arcpy.CreateFileGDB(folder_path, $"{area_name}_裁剪结果");
    gdb_list.Add(@$"{folder_path}\{area_name}_裁剪结果.gdb");
    // 再分割
    Arcpy.SplitByAttributes(new_fc, $@"{folder_path}\{area_name}_裁剪结果.gdb", "ZLDWDM;ZLDWMC");
    // 收集分割后的地块
    List<string> list_area_detail = ToolManager.GetFeatureClassAndTablePath($@"{folder_path}\{area_name}_裁剪结果.gdb");

    // 新建sheet
    ToolManager.ExcelCopySheet(excel_path, "sheet1", area_name);
    string new_sheet_path = excel_path + @$"\{area_name}$";

    // 处理每个行政单位
    int start_row = 7;
    List<int> row_list = new List<int>();
    foreach (var area_detail in list_area_detail)
    {
        // 复制行
        ToolManager.CopyRow(new_sheet_path, "A6:BS6", $"A{start_row}");
        // 记录写入行数的列表
        row_list.Add(start_row);
        // 要处理的要素名称
        string area_name_detail = area_detail[(area_detail.LastIndexOf(@"\") + 1)..];
        // 获取行政代码和行政名称
        string ad_name = area_name_detail[(area_name_detail.LastIndexOf(@"_") + 1)..];
        string ad_code = area_name_detail[1..area_name_detail.LastIndexOf(@"_")];

        // 汇总大、中类
        List<string> list_bm = new List<string>() { "mc_1", "mc_2" };
        // 单位转算【1:公顷,4:平方米】
        int unit_index = 0;
        if (unit == "平方米") { unit_index = 4; }
        else if (unit == "公顷") { unit_index = 1; }

        ToolManager.MultiStatistics(area_detail, gdb_path + @"\statistic_sd", area_field + " SUM", list_bm, "国土调查总面积", unit_index);

        // 将映射属性表中获取字典Dictionary
        Dictionary<string, string> dict = ToolManager.GetDictFromTable(gdb_path + @"\statistic_sd", @"分组字段", "SUM_" + area_field);
        // 加入行政代码和名称
        dict.Add("名称", ad_name);
        dict.Add("代码", ad_code);

        // 属性映射到Excel
        ToolManager.ExcelAttributeMapperCol(new_sheet_path, 2, start_row, dict);
        // 进入下一个行政单位
        start_row++;
    }
    // 删除空列
    ToolManager.DeleteNullColByList(new_sheet_path, row_list);
    // 删除行
    ToolManager.DeleteRows(new_sheet_path, new List<int>() { 6, 2 });
}

// 删除中间数据
Arcpy.Delect(gdb_path + @"\statistic_sd");
File.Delete(folder_path + @"\三调用地自转换.xlsx");
Directory.Delete(new_gdb, true);
foreach (var item in gdb_list)
{
    Directory.Delete(item, true);
}

三、工具文件分享

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

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

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

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

相关文章

若依vue前端 报错error:0308010C:digital envelope routines::unsupported

第一步: 直接打开package.json 第二步: 直接替换scripts的内容为下面的内容 "scripts": {"dev": "SET NODE_OPTIONS--openssl-legacy-provider && vue-cli-service serve","build:prod": "SET NODE_OPTIONS--openssl-leg…

【虹科案例】​使用虹科数字化仪测量遥远恒星的直径

加那利群岛拉帕尔马岛的 MAGIC 望远镜是为了观测发射高能伽马射线的宇宙物体&#xff08;即超新星或黑洞&#xff09;而建造的。天文学家使用双望远镜测量恒星的直径&#xff0c;以研究其整个生命周期的过程。对于地球上的望远镜来说&#xff0c;这是一项具有挑战性的任务&…

第二证券:5分钟k线图买卖技巧?

K线图是股票交易中最常用的技术剖析工具。而5分钟K线图则是其间的一种常见方式。那么如安在5分钟K线图上找到生意的时机呢&#xff1f;下面从几个视点剖析一下这个问题。 一、研讨商场趋势 在5分钟K线图上&#xff0c;商场走势的方向和力度非常重要。一般来说&#xff0c;假如…

尚硅谷大数据项目《在线教育之离线数仓》笔记008

视频地址&#xff1a;尚硅谷大数据项目《在线教育之离线数仓》_哔哩哔哩_bilibili 目录 P123 P124 P125 P126 P127 P128 P129 P123 Apache Superset是一个现代的数据探索和可视化平台。它功能强大且十分易用&#xff0c;可对接各种数据源&#xff0c;包括很多现代的大数…

网络安全实战对抗中的观察与思考

在本次攻防演练的过程中&#xff0c;绿盟科技M-SEC社区监测并确认了上百个漏洞在被积极利用&#xff0c;其中0day和1day漏洞的数量较往年有所提升&#xff0c;但nday漏洞依然是主力。 近日&#xff0c;一场行业瞩目的大型实战化网络安全攻防演练活动落下帷幕&#xff0c;在这场…

Hadoop之HDFS使用命令(常用)

本篇仅记载部分常用命令 若无所需命令可查看官方网站Apache Hadoop 3.3.6 – Overview 注&#xff1a;一切命令仅在启动HDFS集群后执行&#xff0c;否则会报错 注&#xff1a;仅在hadoop用户下操作 在Linux中超级用户是&#xff1a;root 但HDFS的超级用户是&#xff1a;启动n…

Gateway核心架构

1 Gateway核心架构 1.1 基本概念 路由(Route) 是 gateway 中最基本的组件之一&#xff0c;表示一个具体的路由信息载体。主要定义了下面的几个信息: id&#xff0c;路由标识符&#xff0c;区别于其他 Route。uri&#xff0c;路由指向的目的地 uri&#xff0c;即客户端请求最终…

EasyRecovery易恢复2023最新免费的电脑数据恢复软件

EasyRecovery是一款非常专业的硬盘数据恢复工具&#xff0c;EasyRecovery拥有磁盘诊断、数据恢复、文件修复、E-mail 修复等功能。有了EasyRecovery&#xff0c;你可以把误删&#xff0c;被破坏的文件&#xff0c;格式化的磁盘轻轻松松的找回来。小伙伴们可以使用EasyRecovery恢…

AWS EC2入门指南中创建和配置云虚拟机实例的基本步骤

文章目录 创建 AWS 账户登录 AWS 控制台导航到 EC2 控制台启动 EC2 实例选择 AMI&#xff08;Amazon Machine Image&#xff09;选择实例类型配置实例添加存储审查和启动实例创建密钥对 连接到 EC2 实例管理 EC2 实例了解定价和计费结论 &#x1f388;个人主页&#xff1a;程序…

预售33.8万元起:全新蔚来EC6开始接受预订,四驱标配 + 电动尾翼

蔚来汽车近日宣布&#xff0c;全新款EC6已经开始接受预订。从9月15日开始&#xff0c;广大消费者可以参与试驾活动&#xff0c;亲身体验这款定位为智能电动轿跑SUV的新车带来的魅力。据悉&#xff0c;这款车型将于9月16日开始交付&#xff0c;预售价格为33.8万元起&#xff0c;…

寻找联想集团的AI预期差

股票市场中最重要的因素是什么&#xff1f;不是技术分析&#xff0c;也不是基本面分析&#xff0c;而是预期差。 当下的市场&#xff0c;是复杂与困难的&#xff0c;想要在迷雾中看清方向&#xff0c;就要寻找更高的确定性&#xff0c;以及更大的预期差。 今天能大家分享一下联…

【Arduino29】74HC595控制LED灯

硬件准备 74HC595直插芯片&#xff1a;1 个 绿色LED灯&#xff1a;4 个 红色LED灯&#xff1a;4 个 220欧的电阻&#xff1a;8个 面包板&#xff1a;1个 杜邦线&#xff1a;若干 硬件连线 软件程序 #define DS_pin 11 //DS引脚 #define STCP_pin 8 //ST_CP引脚,输出…

海学会读《乡村振兴战略下传统村落文化旅游设计》2023年度许少辉八一新书

海学会读《乡村振兴战略下传统村落文化旅游设计》2023年度许少辉八一新书

Ubantu终端常用命令、快捷键和基本操作

目录 前言 一、常用命令 二、常用快捷键 三、快捷键自定义设置 总结 前言 Ubantu终端常用命令和快捷键用于进行系统管理、文件操作、软件安装等常见使用场景。使用它们可以提高工作效率&#xff0c;简化操作流程&#xff0c;并进行更多的自定义配置和控制。同时&#xff0c…

Docker的开源容器镜像仓库Harbor安装

概述 Docker Hub是Docker官方提供的在线Docker镜像注册中心&#xff0c;其支持Docker镜像的查询&#xff08;search&#xff09;、提交&#xff08;push&#xff09;以及获取&#xff08;pull&#xff09;。目前&#xff0c;在云原生领域中&#xff0c;CNCF提供Harbor开源版本…

影刀-验证码识别

打开慕课主界面为例子

自己编译静态ffmpeg freetype2 not found问题解决

整理好依赖的ffmpeg仓库地址&#xff1a; https://github.com/pyke369/sffmpeg 报错&#xff1a;ERROR: freetype2 not found using pkg-config 网上查询说是需要安装freetype-devel ​​​​​​​sudo apt install libfreetype6-dev 安装后还是报一样的错&#xff0c;实…

window 添加/删除系统右键菜单项

一、添加文件夹右键菜单项 1.打开Windows注册表编辑器。按下WinR组合键&#xff0c;输入regedit&#xff0c;点击确定。 2.在注册表中&#xff0c;找到以下路径&#xff1a; HKEY_CLASSES_ROOT\Directory\shell 3. 参考其他菜单项进行添加&#xff0c;例如添加WebStorm的菜…

VTK实现模型添加标注标记功能

VTK实现模型添加标注标记高级功能 功能演示 添加标记模型 变换标记模型&#xff08;朝向、位置、缩放&#xff09; 删除标记模型 功能介绍 支持在模型表面添加标记模型&#xff0c;标记模型可以切换为不同的模型&#xff08;演示里是圆柱体&#xff09;标记模型支持颜色…

linux配置本地yum源

在本地部署服务器时&#xff0c;因为无法联网导致没法使用外网yum源&#xff0c;会对安装服务有些影响。 不过可以通过本地光盘部署yum源赖解决问题。 1.查看一下虚拟机是否有sr0这个文件 ll /dev/sr0 2.创建一个文件做挂载 mkdir /media/cdrom/ mount /dev/sr0 /media/cdrom…