【工具分享】SHP 地理数据一键转换为界址点成果表 Excel 工具
作为测绘、土地管理领域的从业者,你是否经常需要将 GIS 中的 SHP 点数据手动整理成标准化的界址点成果表?重复的复制粘贴不仅耗时还容易出错。今天给大家分享一款自制工具 ——SHP 字段提取至界址点成果表工具,能帮你自动完成这一过程,大幅提升工作效率!
工具简介
这是一款基于 C# 开发的 Windows 桌面应用,专为解决 "SHP 地理数据→界址点成果表 Excel" 的转换需求设计。通过解析 SHP 文件中的空间坐标和属性信息,自动生成符合行业规范的 Excel 成果表,支持批量处理和自定义配置。
核心功能
- 一键读取 SHP 文件中的点坐标(X/Y)和属性字段(宗地号、权利人等)
- 自动按宗地分组,每个宗地生成独立的 Excel 文件
- 支持自定义表格样式,自动设置单元格合并、字体格式和对齐方式
- 内置日志系统,实时显示处理进度和错误信息
- 自动检测输出目录状态,避免文件占用导致的保存失败
适用场景
- 不动产登记中的界址点坐标整理
- 宗地测绘成果的标准化输出
- GIS 数据与办公文档的格式转换
- 批量处理多宗地数据并生成规范报表
技术实现亮点
1. 数据解析层
使用NetTopologySuite库解析 SHP 文件,高效提取点坐标和属性信息:
csharp
// 读取SHP点数据示例
using (var shapefileDataReader = new ShapefileDataReader(shpPath, new GeometryFactory()))
{
while (shapefileDataReader.Read())
{
var geometry = shapefileDataReader.Geometry;
if (geometry is Point point)
{
// 提取坐标并保留2位小数
var x = point.X.ToString("F2");
var y = point.Y.ToString("F2");
// ...属性字段处理
}
}
}
2. 数据处理层
通过 LINQ 实现数据分组与排序,确保成果表按权利人、宗地号有序排列:
csharp
// 按宗地分组并排序
var groupedData = landParcelInfoInfos
.GroupBy(info => new { info.RightHolder, info.ParcelNumber })
.Select(group => new {
GroupKey = group.Key,
SortedItems = group.OrderBy(info => int.Parse(info.SerialNumber))
})
.OrderBy(g => g.GroupKey.RightHolder)
.ThenBy(g => g.GroupKey.ParcelNumber);
// 为每个分组添加首行复制(形成点闭环)
var groupedWithDuplicate = groupedAndSorted.Select(g =>
{
var items = g.SortedItems.ToList();
if (items.Any())
{
var firstItem = items[0];
items.Add(new LandParcelInfo
{
SerialNumber = firstItem.SerialNumber,
ParcelInternalNumber = firstItem.ParcelInternalNumber,
XCoordinate = firstItem.XCoordinate,
YCoordinate = firstItem.YCoordinate,
ParcelNumber = firstItem.ParcelNumber,
RightHolder = firstItem.RightHolder,
ParcelArea = firstItem.ParcelArea
});
}
return new { g.GroupKey, SortedItems = items };
}).ToList();
3. Excel 生成层
基于ClosedXML库实现 Excel 文件的格式化生成,完美还原界址点成果表样式,包括单元格合并,字体字号,边框设置等:
csharp
// Excel表格格式化示例
worksheet.Range("A3:E3").Merge();
worksheet.Cell("A3").Value = $"宗地号:{parcelNumber}";
worksheet.Cell("A3").Style.Font.SetBold(true);
// 自动合并单元格、设置居中对齐
for (int row = 9; row <= 80; row += 2)
{
worksheet.Range($"A{row}:A{row + 1}").Merge();
worksheet.Range($"B{row}:B{row + 1}").Merge();
// ...其他列处理
}
使用教程
步骤 1:准备工作
- 确保电脑安装.NET Framework 4.7.2 或更高版本
- 准备需要转换的 SHP 文件(包含点数据及必要属性字段)
步骤 2:操作流程
- 打开工具,点击【浏览...】选择 SHP 文件
- 选择 Excel 输出目录
- 在字段映射区配置 SHP 字段与成果表字段的对应关系
- 填写制表人、审核人信息
- 点击【开始处理】,工具自动完成转换
- 处理完成后自动打开输出目录,获取生成的 Excel 文件
界面展示
输出结果展示
界面主要分为以下区域:
- SHP 文件选择区:指定输入的地理数据文件
- 输出设置区:配置 Excel 保存路径
- 字段映射区:关联 SHP 字段与成果表所需字段
- 制表信息区:填写制表人、审核人等元数据
- 日志信息区:显示实时处理状态
工具优势
- 高效自动化:告别手动录入,处理 500 宗地仅需 3 分钟
- 格式规范:严格遵循界址点成果表的行业标准格式
- 灵活适配:支持不同 SHP 文件结构,可自定义字段映射
- 稳定可靠:内置错误处理和文件冲突检测机制
应用与反馈
目前工具已开放使用,可联系作者获取授权。
- 电话:18428359455
- QQ: 1652885119
- 功能定制:支持根据企业需求定制表格样式和数据处理规则
写在最后
这款工具源于实际工作中的痛点解决,希望能帮到更多同行。如果觉得有用,欢迎点赞收藏,也欢迎提出改进建议,后续会根据需求继续进行完善。