【ArcGIS Pro二次开发】(56):界址点导出Excel

您所在的位置:网站首页 cad界址点坐标导出excel 【ArcGIS Pro二次开发】(56):界址点导出Excel

【ArcGIS Pro二次开发】(56):界址点导出Excel

2024-07-14 12:30| 来源: 网络整理| 查看: 265

界址点成果表是地籍测绘中的一种表格,用于记录地块的界址点坐标和相关属性信息。

这个工具的目的就是为了将地块要素导出为界址点成果表。

一、要实现的功能

如上图所示,在【数据处理】组—【Excel相关】面板下,点击【界址点导出Excel】工具。

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

1、输入地块要素图层。

2、输入名称字段。这里的字段值是为了区分地块,以名称字段值作为标识,1个要素生成1个Excel表格。

3、导出Excel表格所在的文件夹。将导出的多个Excel表格放在文件夹里。

生成结果如下:

Excel内容如下:

目前工具只考虑到简单的面要素,多部件、带空洞的要素还不支持,后续工具继续更新在共享链接里。

二、实现流程

核心代码直接放上。

流程虽然不短,但都是一些基础操作,注释里已经说明,没有什么特别麻烦的地方,就不一一细说了。

其中一些对Excel表格的插入行,合并格等操作是基于Excel模板文件的必要操作,没有什么特别的意思。Excel模板文件也会一块放在共享链接里。

// 遍历面要素类中的所有要素 using (var cursor = featurelayer.Search()) { while (cursor.MoveNext()) { using (var feature = cursor.Current as Feature) { int rowIndex = 9; // 起始行 int pointIndex = 1; // 起始点序号 // 获取ID和名称 string oid = feature["OBJECTID"].ToString(); string feature_name = feature[in_field].ToString(); // 复制界址点Excel表 string excel_path = excel_folder + @$"\{oid} - {feature_name}界址点表.xlsx"; ToolManager.CopyResourceFile(@"CCTool.Data.Excel.【模板】界址点表.xlsx", excel_path); // 建立 Excel 应用程序对象 Application excelApp = new Application(); // 打开 Excel 文件 Workbook workbook = excelApp.Workbooks.Open(excel_path); // 获取工作表 Worksheet worksheet = workbook.Worksheets["Sheet1"]; worksheet.Application.DisplayAlerts = false; // 禁用警告提示 // 获取要素的几何 var geometry = feature.GetShape() as ArcGIS.Core.Geometry.Polygon; if (geometry != null) { // 计算多边形的面积,并写入 double polygonArea = Math.Round(Math.Abs(geometry.Area)/10000, 3); string areaStr = worksheet.Cells[5, 1].value.ToString(); worksheet.Cells[5, 1] = areaStr.Replace("ZDMJ", polygonArea.ToString()); // 获取面要素的所有折点(顶点) var vertices = geometry.Points; // 输出折点的XY值和距离到Excel表 double prevX = double.NaN; double prevY = double.NaN; foreach (var vertex in vertices) { // 插入新行 if (rowIndex > 13) { Range copyRange = worksheet.Range["A13:E14"]; // 选择要复制的单元格范围 copyRange.Copy(); // 复制单元格范围到剪贴板 Range pasteRange = worksheet.Range[$"A{rowIndex}"]; // 选择要粘贴的单元格 // 将剪贴板中的内容粘贴到指定单元格 pasteRange.PasteSpecial(XlPasteType.xlPasteAll, XlPasteSpecialOperation.xlPasteSpecialOperationNone, false, false); } // 写入序号和点号 worksheet.Cells[rowIndex, 1] = pointIndex.ToString(); worksheet.Cells[rowIndex, 2] = $"J{pointIndex}"; double x = vertex.X; double y = vertex.Y; // 写入折点的XY值 worksheet.Cells[rowIndex, 3] = x; worksheet.Cells[rowIndex, 4] = y; // 计算当前点与上一个点的距离 if (!double.IsNaN(prevX) && !double.IsNaN(prevY)) { double distance = Math.Sqrt(Math.Pow(x - prevX, 2) + Math.Pow(y - prevY, 2)); worksheet.Cells[rowIndex - 1, 5] = distance; } // 合并距离单元格 if (rowIndex > 9) { Range mergeRange = worksheet.Range[$"E{rowIndex - 1}:E{rowIndex}"]; // 获取要合并的单元格范围 mergeRange.Merge(); // 合并单元格 // 设置文字居中 mergeRange.HorizontalAlignment = Microsoft.Office.Interop.Excel.XlHAlign.xlHAlignCenter; mergeRange.VerticalAlignment = Microsoft.Office.Interop.Excel.XlVAlign.xlVAlignCenter; } prevX = x; prevY = y; rowIndex += 2; pointIndex++; } } // 整理表格 for (int row = 9; row


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3