当前位置: 首页 > article >正文

ArcGIS Pro二次开发实战:手把手教你写一个勘测定界TXT解析工具(C#/.NET 6)

ArcGIS Pro二次开发实战勘测定界TXT解析工具全流程解析在GIS开发领域勘测定界数据的处理一直是土地管理、城乡规划等业务中的高频需求。传统的勘测定界数据常以特定格式的TXT文件交付包含地块坐标、属性等关键信息。本文将手把手带你开发一个内嵌于ArcGIS Pro的批量解析工具实现从TXT到空间数据库的自动化转换。1. 开发环境准备与项目初始化1.1 开发环境配置开发勘测定界解析工具需要以下基础环境ArcGIS Pro 3.0确保安装时勾选SDK组件Visual Studio 2022社区版即可需安装.NET 6工作负载ArcGIS Pro SDK for .NET通过NuGet包管理器安装最新版本# 通过NuGet安装必要包 Install-Package ArcGIS.Desktop.Framework -Version 200.0.0 Install-Package ArcGIS.Core -Version 200.0.01.2 创建Add-in项目在Visual Studio中新建项目时选择ArcGIS Pro Module Add-in模板项目结构关键部分说明TxtParserAddin/ ├── Config.daml # 界面元素定义文件 ├── TxtParserButton.cs # 按钮交互逻辑 ├── ParserTool.cs # 核心解析逻辑 └── EncodingHelper.cs # 编码处理工具类提示创建项目后需在Config.daml中注册自定义工具确保其出现在ArcGIS Pro的Ribbon界面指定位置。2. 用户界面设计与参数配置2.1 DAML界面定义在Config.daml中定义工具按钮和参数输入面板button idTxtParserAddin_ParserButton caption勘测定界解析 classNameParserButton loadOnClicktrue tooltip heading工具说明将勘测定界TXT批量转换为要素类/tooltip /button2.2 参数输入面板实现创建WPF用户控件用于接收以下参数输入文件夹通过FolderBrowserDialog选择包含TXT的目录输出GDB路径使用SaveFileDialog指定地理数据库位置要素类名称文本框验证输入合法性禁止特殊字符坐标系选择预置常用坐标系下拉框支持WKID直接输入// 坐标系选择器示例代码 private void SetupSpatialReferenceCombo() { cboSpatialRef.Items.Add(new SRItem(CGCS2000, 4490)); cboSpatialRef.Items.Add(new SRItem(WGS84, 4326)); cboSpatialRef.SelectedIndex 0; } class SRItem { public string Name { get; set; } public int WKID { get; set; } // 其他构造函数和ToString重写... }3. 核心解析逻辑实现3.1 文件遍历与编码检测实现递归遍历文件夹获取所有TXT文件public static IEnumerablestring FindTxtFiles(string rootPath) { var options new EnumerationOptions { RecurseSubdirectories true, MatchCasing MatchCasing.CaseInsensitive }; return Directory.EnumerateFiles(rootPath, *.txt, options); }处理混合编码文件GBK/UTF-8的智能检测public static Encoding DetectEncoding(string filePath) { using var stream new FileStream(filePath, FileMode.Open); var detector new Ude.CharsetDetector(); detector.Feed(stream); detector.DataEnd(); return detector.Charset switch { GB18030 Encoding.GetEncoding(GB18030), UTF-8 Encoding.UTF8, _ Encoding.Default }; }3.2 坐标解析与构面算法解析勘测定界特有的坐标格式如J121.123456,N31.123456private ListCoordinate2D ParseCoordinates(string content) { var points new ListCoordinate2D(); var lines content.Split(\n); foreach (var line in lines.Where(l l.Contains(,))) { var parts line.Split(,); if (parts.Length 4) continue; try { var lon double.Parse(parts[2].TrimStart(J)); var lat double.Parse(parts[3].TrimStart(N)); points.Add(new Coordinate2D(lon, lat)); } catch { // 记录解析错误日志 } } return points; }使用PolygonBuilderEx构建多边形要素var polygon new PolygonBuilderEx(points); if (!polygon.IsSimple) { polygon.Simplify(GeometrySimplifyOptions.ForceSimplify); } return polygon.ToGeometry();3.3 属性字段提取与写入从TXT中提取标准字段的优化方案字段名提取位置处理规则地块编号第二行第三列去除前后空格地块名称第二行第四列GBK编码转换功能分类第二行第七列标准化分类代码转换// 属性提取示例 var metaLine content.Split(\n)[1]; var fields metaLine.Split(,) .Select(f f.Trim().Trim()) .ToArray(); rowBuffer[地块编号] fields.Length 2 ? fields[2] : null; rowBuffer[地块名称] fields.Length 3 ? fields[3] : 未命名地块;4. 编辑操作与事务管理4.1 编辑操作最佳实践使用EditOperation确保数据完整性var editOp new EditOperation(); editOp.Name 添加勘测定界地块; editOp.Callback(context { using var rowBuffer featureClass.CreateRowBuffer(); // ...字段赋值和几何构造 using var feature featureClass.CreateRow(rowBuffer); context.Invalidate(feature); }, featureClass); if (!editOp.Execute()) { throw new Exception(编辑操作执行失败); }4.2 事务处理与异常恢复实现带重试机制的事务提交public static async Task SaveWithRetry(Geodatabase gdb, int maxRetries 3) { for (int i 0; i maxRetries; i) { try { await gdb.ApplyEditsAsync(); return; } catch (GeodatabaseException ex) when (i maxRetries - 1) { await Task.Delay(1000 * (i 1)); } } throw new Exception($无法在{maxRetries}次尝试后保存编辑); }5. 调试与部署实战5.1 常见问题排查指南开发过程中可能遇到的典型问题及解决方案编码识别错误现象中文显示为乱码解决使用Encoding.Provider注册扩展编码支持Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);坐标顺序颠倒现象生成的面要素位置错误解决检查Coordinate2D参数顺序经度,纬度事务未提交现象要素类中看不到新增数据解决显式调用Project.Current.SaveEditsAsync()5.2 打包与分发生成.esriAddinX安装包的注意事项在VS中右键项目选择发布配置发布选项为Release|Any CPU检查生成的addinx文件是否包含所有依赖项创建安装说明文档包含最低系统要求对于企业级部署建议将addinx文件放入网络共享目录通过组策略统一分发。实际项目中我们发现在Windows 11系统上安装时可能需要以管理员身份运行ArcGIS Pro才能成功注册插件。

相关文章:

ArcGIS Pro二次开发实战:手把手教你写一个勘测定界TXT解析工具(C#/.NET 6)

ArcGIS Pro二次开发实战:勘测定界TXT解析工具全流程解析 在GIS开发领域,勘测定界数据的处理一直是土地管理、城乡规划等业务中的高频需求。传统的勘测定界数据常以特定格式的TXT文件交付,包含地块坐标、属性等关键信息。本文将手把手带你开发…...

类型注解不再“形同虚设”,Python 3.15新增TypeVarTuple与Self类型实战,重构你的API层代码,现在不学明年就被淘汰?

更多请点击: https://intelliparadigm.com 第一章:Python 3.15 类型系统增强概览 Python 3.15 引入了多项类型系统关键演进,旨在提升静态类型检查的精度、表达力与开发者体验。核心变化聚焦于泛型协变/逆变控制、运行时可擦除类型的显式声明…...

WPF开发必看:ResourceDictionary的MergedDictionaries到底怎么用?一个例子讲清楚

WPF开发实战:ResourceDictionary的MergedDictionaries深度解析与工程实践 在WPF企业级应用开发中,资源管理往往成为项目规模扩大后的第一个痛点。当UI组件超过50个、样式定义突破200行时,如何避免XAML文件变成难以维护的"巨无霸"&a…...

TSN流量调度实战指南(C语言裸机/RTOS双环境适配)

更多请点击: https://intelliparadigm.com 第一章:TSN流量调度实战指南(C语言裸机/RTOS双环境适配) 时间敏感网络(TSN)在工业控制、车载以太网和实时音视频传输中要求微秒级确定性调度。本章聚焦于在资源受…...

Go 开发者学 Rust:枚举、操作符体验如何?运行时与监控有何不同?

当 Go 开发者遇上 Rust作者 Paul Hinze 用 Go 编程约十年,一直敬重 Rust 却缺乏深入学习动力。本周 Miren 参加首届 TokioConf,为准备演示,作者搭建了聊天服务器,让 Claude 帮忙编写代码并向其请教。代码放在示例应用仓库&#xf…...

如何用PyTorch实现物理知情神经网络:5分钟掌握PINN核心原理与实战应用

如何用PyTorch实现物理知情神经网络:5分钟掌握PINN核心原理与实战应用 【免费下载链接】PINN Simple PyTorch Implementation of Physics Informed Neural Network (PINN) 项目地址: https://gitcode.com/gh_mirrors/pin/PINN 物理知情神经网络(P…...

一天一个开源项目(第89篇):Warp - AI 驱动的现代化 Rust 终端

引言 “The terminal hasn’t fundamentally changed in 40 years. It’s time it did.” — The Warp Team 这是"一天一个开源项目"系列的第89篇文章。今天带你了解的项目是 Warp。 在开发者每天都要面对的工具链中,终端(Terminal&#xff0…...

35 年后!1991 年 Adobe PostScript 解释器在浏览器运行,还打破多项限制

在浏览器中运行 Adobe 1991 年的 PostScript 解释器2026 年 5 月 1 日,作者 [Michael Steil](https://www.pagetable.com/?author1 "查看 Michael Steil 的所有文章")[HP C2089A “PostScript Cartridge Plus”](https://www.pagetable.com/?p1673) 是 …...

SOCD Cleaner终极指南:内核级键盘输入仲裁技术深度解析

SOCD Cleaner终极指南:内核级键盘输入仲裁技术深度解析 【免费下载链接】socd Key remapper for epic gamers 项目地址: https://gitcode.com/gh_mirrors/so/socd SOCD Cleaner是一款专为竞技游戏玩家设计的开源键盘输入仲裁工具,通过创新的内核级…...

python transformers

# 聊聊Python transformers这个库 做了几年NLP相关的工作,接触过的框架和库少说也有十几个。但要说哪个库让我觉得“这个团队是真的在认真做工程”,那Hugging Face的transformers绝对排在前列。它不是那种学术原型代码,而是真正能直接扔到生产…...

【Python WASM 部署实战白皮书】:20年架构师亲授3大避坑指南、4步零错误上线法与Chrome 125+兼容性验证清单

更多请点击: https://intelliparadigm.com 第一章:Python WASM 部署测试的演进背景与核心挑战 WebAssembly(WASM)正从“前端高性能执行层”加速演变为通用跨平台运行时,而 Python 作为生态最丰富的科学计算与胶水语…...

全面战争MOD开发神器:RPFM实用指南提升500%工作效率

全面战争MOD开发神器:RPFM实用指南提升500%工作效率 【免费下载链接】rpfm Rusted PackFile Manager (RPFM) is a... reimplementation in Rust and Qt6 of PackFile Manager (PFM), one of the best modding tools for Total War Games. 项目地址: https://gitco…...

Figma中文插件深度解析:3步实现专业设计工具本土化

Figma中文插件深度解析:3步实现专业设计工具本土化 【免费下载链接】figmaCN 中文 Figma 插件,设计师人工翻译校验 项目地址: https://gitcode.com/gh_mirrors/fi/figmaCN 你是否曾因Figma的英文界面而感到创作障碍?面对"Auto La…...

华为设备Bootloader解锁终极指南:PotatoNV完整教程

华为设备Bootloader解锁终极指南:PotatoNV完整教程 【免费下载链接】PotatoNV Unlock bootloader of Huawei devices on Kirin 960/95x/65x/620 项目地址: https://gitcode.com/gh_mirrors/po/PotatoNV 还在为华为设备的系统限制而烦恼吗?想要完全…...

3分钟解锁B站缓存视频永久保存的终极方案

3分钟解锁B站缓存视频永久保存的终极方案 【免费下载链接】m4s-converter 一个跨平台小工具,将bilibili缓存的m4s格式音视频文件合并成mp4 项目地址: https://gitcode.com/gh_mirrors/m4/m4s-converter 你是否曾经遇到过这样的情况:收藏已久的B站…...

Linux服务器运维:手把手教你用parted命令从U盘创建、格式化到挂载全流程

Linux服务器运维实战:用parted命令完成U盘分区格式化与挂载全流程 当服务器需要临时扩容存储空间或进行数据迁移时,U盘往往是最便捷的解决方案。但直接将U盘插入服务器使用可能会遇到权限不足、文件系统不兼容等问题。本文将完整演示如何通过parted工具…...

从NetworkManager到systemd-resolved:一文搞懂Ubuntu 20.04网络服务如何“打架”并吃掉你的DNS设置

Ubuntu 20.04网络服务DNS配置冲突全解析与实战解决方案 当你发现每次重启Ubuntu服务器后,精心配置的DNS设置总是神秘消失,这背后其实是systemd-resolved和NetworkManager两大服务在暗中较劲。本文将带你深入理解现代Linux发行版中复杂的网络服务交互机制…...

VSCode AI调试器内测权限泄露事件(仅限前2000名认证开发者获取):深度解析2026版Context-Aware Error Healing核心算法

更多请点击: https://intelliparadigm.com 第一章:VSCode 2026 AI调试智能纠错的演进脉络与事件背景 VSCode 2026 版本标志着编辑器从“辅助开发工具”正式跃迁为“协同编程伙伴”。其核心突破在于将 LLM 推理能力深度嵌入调试器(Debugger E…...

stm32开发者如何通过curl快速接入大模型api提升产品智能化

STM32开发者如何通过cURL快速接入大模型API提升产品智能化 1. 嵌入式智能化的轻量级方案 在STM32等资源受限的嵌入式设备中实现智能对话功能,传统方案往往面临SDK体积过大、网络库适配复杂等问题。通过Taotoken平台提供的OpenAI兼容API,开发者可以直接…...

鸣潮工具箱WaveTools:为PC玩家量身打造的性能与数据管理解决方案

鸣潮工具箱WaveTools:为PC玩家量身打造的性能与数据管理解决方案 【免费下载链接】WaveTools 🧰鸣潮工具箱 项目地址: https://gitcode.com/gh_mirrors/wa/WaveTools 你是否曾为《鸣潮》PC版的帧率限制而烦恼?是否想要更好地管理多个游…...

如何构建专业的Android电池监控小部件:3步实现实时电量显示与数据可视化

如何构建专业的Android电池监控小部件:3步实现实时电量显示与数据可视化 【免费下载链接】Android-Battery-Widget Battery widget indicator for android 项目地址: https://gitcode.com/gh_mirrors/an/Android-Battery-Widget 在移动设备日益普及的今天&am…...

2026年南宁GEO优化公司类型与选择标准百科

一、测评主体与标准公示本次测评涵盖以下五家南宁地区GEO优化服务商:攸创GEO(广西攸创科技发展有限公司) 泓动数据 海星小象 南洲智联 艾奇GEO统一测评维度与动作测评维度动作环境与条件公司资质查询工商注册、ICP备案、公安备案、办公场所20…...

番茄小说下载器:3种界面让你轻松离线阅读小说

番茄小说下载器:3种界面让你轻松离线阅读小说 【免费下载链接】Tomato-Novel-Downloader 番茄小说下载器不精简版 项目地址: https://gitcode.com/gh_mirrors/to/Tomato-Novel-Downloader 还在为网络小说只能在特定平台阅读而烦恼吗?想要随时随地…...

Pseudogen:如何让AI帮你读懂任何代码?

Pseudogen:如何让AI帮你读懂任何代码? 【免费下载链接】pseudogen A tool to automatically generate pseudo-code from source code. 项目地址: https://gitcode.com/gh_mirrors/ps/pseudogen 你是否曾面对陌生的代码库感到无从下手?…...

新硬件装老系统?手把手解决Ubuntu18.04下Realtek 2.5G网卡没网络的尴尬

新硬件装老系统?手把手解决Ubuntu18.04下Realtek 2.5G网卡没网络的尴尬 最近给工作室配了台新主机,华硕主板搭配11代i7,想着性能应该杠杠的。结果装完Ubuntu18.04傻眼了——网卡死活识别不出来。作为一名常年和Linux打交道的开发者&#xff0…...

终极免费方案:5分钟实现专业级键鼠操作可视化

终极免费方案:5分钟实现专业级键鼠操作可视化 【免费下载链接】keyviz Keyviz is a free and open-source tool to visualize your keystrokes ⌨️ and 🖱️ mouse actions in real-time. 项目地址: https://gitcode.com/gh_mirrors/ke/keyviz 你…...

从汽车电子到通用嵌入式:MISRA-C 2012实战避坑指南(附代码审查清单)

从汽车电子到通用嵌入式:MISRA-C 2012实战避坑指南(附代码审查清单) 在嵌入式系统开发领域,代码质量与系统可靠性始终是工程师面临的核心挑战。随着物联网设备的普及和工业4.0的推进,原本主要应用于汽车电子等高安全要…...

实测Taotoken多模型API在创意生成任务中的响应速度与稳定性观感

实测Taotoken多模型API在创意生成任务中的响应速度与稳定性观感 1. 测试背景与场景 近期在筹备一个短片项目时,需要批量生成不同风格的场景描述文本。考虑到单一模型可能无法覆盖所有创意需求,我们决定通过Taotoken平台同时接入多个厂商的大模型API。这…...

终极指南:AI-Shoujo HF Patch 一站式游戏增强解决方案

终极指南:AI-Shoujo HF Patch 一站式游戏增强解决方案 【免费下载链接】AI-HF_Patch Automatically translate, uncensor and update AI-Shoujo! 项目地址: https://gitcode.com/gh_mirrors/ai/AI-HF_Patch AI-Shoujo HF Patch 是专为 AI-Shoujo 游戏设计的综…...

OrgChart.js 实战指南:5分钟构建专业级组织结构图

OrgChart.js 实战指南:5分钟构建专业级组织结构图 【免费下载链接】OrgChart.js Its a simple and direct organization chart plugin. Anytime you want a tree-like chart, you can turn to OrgChart. 项目地址: https://gitcode.com/gh_mirrors/or/OrgChart.js…...