【工具分享】SHP 地理数据一键转换为界址点成果表 Excel 工具

140 阅读4分钟

【工具分享】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:准备工作

  1. 确保电脑安装.NET Framework 4.7.2 或更高版本
  2. 准备需要转换的 SHP 文件(包含点数据及必要属性字段)

步骤 2:操作流程

  1. 打开工具,点击【浏览...】选择 SHP 文件
  2. 选择 Excel 输出目录
  3. 在字段映射区配置 SHP 字段与成果表字段的对应关系
  4. 填写制表人、审核人信息
  5. 点击【开始处理】,工具自动完成转换
  6. 处理完成后自动打开输出目录,获取生成的 Excel 文件

界面展示

QQ_1757696609568.png

输出结果展示

506B7156A0CC92C90DDB3E2711A21647.png

界面主要分为以下区域:

  • SHP 文件选择区:指定输入的地理数据文件
  • 输出设置区:配置 Excel 保存路径
  • 字段映射区:关联 SHP 字段与成果表所需字段
  • 制表信息区:填写制表人、审核人等元数据
  • 日志信息区:显示实时处理状态

工具优势

  1. 高效自动化:告别手动录入,处理 500 宗地仅需 3 分钟
  2. 格式规范:严格遵循界址点成果表的行业标准格式
  3. 灵活适配:支持不同 SHP 文件结构,可自定义字段映射
  4. 稳定可靠:内置错误处理和文件冲突检测机制

应用与反馈

目前工具已开放使用,可联系作者获取授权。

  • 电话:18428359455
  • QQ: 1652885119
  • 功能定制:支持根据企业需求定制表格样式和数据处理规则

写在最后

这款工具源于实际工作中的痛点解决,希望能帮到更多同行。如果觉得有用,欢迎点赞收藏,也欢迎提出改进建议,后续会根据需求继续进行完善。