SuperMap iObjects .NET 11i 二次开发(十五)—— 类型转换之面转点 - 教程

news/2025/9/30 19:55:05/文章来源:https://www.cnblogs.com/wzzkaifa/p/19121706

前言

上一篇博文简单介绍了有关类型转换之线面互转的相关操作,这个部分主要认识下类型转换之面转点的相关操作。


一、有关常用类说明

可跳转以下博文进行查看:

SuperMap iObjects .NET 11i 二次开发(十三)—— 类型转换之点线互转https://blog.csdn.net/Adoudoudou_/article/details/151954603?spm=1001.2014.3001.5502

SuperMap iObjects .NET 11i 二次开发(十四)—— 类型转换之线面互转https://blog.csdn.net/Adoudoudou_/article/details/151964135?spm=1001.2014.3001.5502

二、有关常用属性说明

GeoRegion.InnerPoint

获取几何对象的内点。

三、界面设计

桌面端在进行类型转换中的面转点时,结果为面对象的内点,如果需要转换结果为面的节点,那么需要先将面转为线再将线转为点。在原有界面基础上,添加类型转换相关功能点,如下图所示:

四、功能实现

1、面转点

private void 面转点ToolStripMenuItem_Click(object sender, EventArgs e)
{try{WorkspaceTreeNodeBase treeNode = D_workspaceControl.WorkspaceTree.SelectedNode as WorkspaceTreeNodeBase;if (treeNode == null){MessageBox.Show("请先选择一个数据集节点");return;}string polygonname = treeNode.Text;// 1. 获取选中的数据集并检查是否为面数据集Dataset selectedDataset = D_workspace.Datasources[0].Datasets[polygonname];// 类型检查if (selectedDataset.Type != DatasetType.Region){MessageBox.Show($"请选择面数据集进行操作!\n当前选择的数据集 '{polygonname}' 的类型为: {selectedDataset.Type}");return;}// 验证是否为矢量数据集if (!(selectedDataset is DatasetVector)){MessageBox.Show("选中的数据集不是矢量数据集");return;}DatasetVector polygonDataset = (DatasetVector)selectedDataset;// 检查数据集是否为空if (polygonDataset.RecordCount == 0){MessageBox.Show("面数据集中没有记录,无法进行转换");return;}// 设置点数据集的结构信息DatasetVectorInfo pointDatasetInfo = new DatasetVectorInfo();pointDatasetInfo.Name = polygonDataset.Name + "_Points";pointDatasetInfo.Type = DatasetType.Point;// 创建点数据集DatasetVector pointDataset = this.D_workspace.Datasources[0].Datasets.Create(pointDatasetInfo);if (pointDataset == null){MessageBox.Show("点数据集创建失败");return;}// 2. 遍历面数据集中的每条记录并转换为点using (Recordset polygonRecordset = polygonDataset.GetRecordset(false, CursorType.Dynamic))using (Recordset pointRecordset = pointDataset.GetRecordset(false, CursorType.Dynamic)){int totalPoints = 0;polygonRecordset.MoveFirst();while (!polygonRecordset.IsEOF){// 获取面几何对象GeoRegion geoRegion = polygonRecordset.GetGeometry() as GeoRegion;if (geoRegion != null){// 将面转换为线GeoLine geoLine = geoRegion.ConvertToLine();if (geoLine != null){// 处理线的每个部分(支持多部分线)for (int partIndex = 0; partIndex < geoLine.PartCount; partIndex++){Point2Ds points = geoLine[partIndex];// 为每个顶点创建点对象foreach (Point2D point2D in points){// 创建点几何对象GeoPoint point = new GeoPoint(point2D);// 添加新记录pointRecordset.AddNew(point);pointRecordset.Update();totalPoints++;}}}}polygonRecordset.MoveNext();}MessageBox.Show($"转换完成!共生成 {totalPoints} 个点要素到点数据集 '{pointDataset.Name}'");}}catch (Exception ex){MessageBox.Show($"面转点过程中发生错误: {ex.Message}");}
}

2、面转内点(同桌面端)

private void 面转内点ToolStripMenuItem_Click(object sender, EventArgs e)
{try{WorkspaceTreeNodeBase treeNode = D_workspaceControl.WorkspaceTree.SelectedNode as WorkspaceTreeNodeBase;if (treeNode == null){MessageBox.Show("请先选择一个数据集节点");return;}string polygonname = treeNode.Text;// 1. 获取选中的数据集并检查是否为面数据集Dataset selectedDataset = D_workspace.Datasources[0].Datasets[polygonname];// 类型检查if (selectedDataset.Type != DatasetType.Region){MessageBox.Show($"请选择面数据集进行操作!\n当前选择的数据集 '{polygonname}' 的类型为: {selectedDataset.Type}");return;}if (!(selectedDataset is DatasetVector)){MessageBox.Show("选中的数据集不是矢量数据集");return;}DatasetVector polygonDataset = (DatasetVector)selectedDataset;// 检查数据集是否为空if (polygonDataset.RecordCount == 0){MessageBox.Show("面数据集中没有记录,无法进行转换");return;}// 设置点数据集的结构信息DatasetVectorInfo pointDatasetInfo = new DatasetVectorInfo();pointDatasetInfo.Name = polygonDataset.Name + "_InnerPoints";pointDatasetInfo.Type = DatasetType.Point;// 创建点数据集DatasetVector pointDataset = this.D_workspace.Datasources[0].Datasets.Create(pointDatasetInfo);if (pointDataset == null){MessageBox.Show("点数据集创建失败");return;}// 2. 遍历面数据集中的每条记录并获取内点using (Recordset polygonRecordset = polygonDataset.GetRecordset(false, CursorType.Dynamic))using (Recordset pointRecordset = pointDataset.GetRecordset(false, CursorType.Dynamic)){int processedCount = 0;int totalCount = polygonDataset.RecordCount;polygonRecordset.MoveFirst();while (!polygonRecordset.IsEOF){// 获取面几何对象GeoRegion geoRegion = polygonRecordset.GetGeometry() as GeoRegion;if (geoRegion != null){// 获取面的内点(质心点)Point2D innerPoint2D = geoRegion.InnerPoint;if (innerPoint2D != null){// 将Point2D转换为GeoPointGeoPoint geoPoint = new GeoPoint(innerPoint2D);// 添加新的点记录pointRecordset.AddNew(geoPoint);pointRecordset.Update();processedCount++;}}polygonRecordset.MoveNext();}MessageBox.Show($"转换完成!共生成 {processedCount} 个内点到点数据集 '{pointDataset.Name}'");}}catch (Exception ex){MessageBox.Show($"面转内点过程中发生错误: {ex.Message}");}
}

五、运行结果


总结

以上就是有关于 SuperMap iObjects 11i .NET 类型转换之面转点相关操作的一些过程记录,我们下篇博文再见!

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

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

相关文章

网站服务器空间价格网站开发顶岗周记

打开vs2010 在工具选项中选择扩展管理器——联机库 安装WCF REST Service Template 40(CS)模板 安装后新建wcf服务应用程序&#xff0c;删除默认建立的文件。 新建RestWcf4HelpPage.svc&#xff0c;代码如下 using System; using System.Collections.Generic; using System.Lin…

Controversial Rounds

题目大意 给定一个字符串,只包含 0,1,?,三种字符,其中 ? 可以为 \(0\) 和 \(1\) 种的任意一个数。 对于一个 \(x(1 \le x \le n)\),要求出最多有多少个没有交集的字串,使得每个字串里只有 \(0\) 或 \(1\),并…

Transformer实战(20)——微调Transformer语言模型进行问答任务 - 实践

Transformer实战(20)——微调Transformer语言模型进行问答任务 - 实践2025-09-30 19:43 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: au…

题解:B4410 [GESP202509 一级] 金字塔

题解:B4410 [GESP202509 一级] 金字塔 题目传送门 题意 给定正整数 \(n\),求从 \(1\) 到 \(n\) 的立方和(\(\sum \limits _{i=1} ^{n} i^2\)) 数据规模与约定 \(1 \le n \le 50\) 算法 tag 模拟(循环结构),数学…

9.30总结

1.今天完善了程序加上了倒计时功能 2.计时功能不能实时播报,明天继续完善

pytorch基本运算-torch.normal()函数输出多维材料时,如何绘制正态分布函数图

pytorch基本运算-torch.normal()函数输出多维材料时,如何绘制正态分布函数图pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-fam…

PyTorch 神经网络工具箱全解析:从核心组件到模型实战 - 详解

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

做商城网站的项目背景电子上网站开发

输入一个字符串&#xff0c;打印出该字符串中字符的所有排列。 你可以以任意顺序返回这个字符串数组&#xff0c;但里面不能有重复元素。 示例: 输入&#xff1a;s "abc" 输出&#xff1a;["abc","acb","bac","bca","…

音乐网站开发结语申泽seo

awk是行处理器: 相比较屏幕处理的优点&#xff0c;在处理庞大文件时不会出现内存溢出或是处理缓慢的问题&#xff0c;通常用来格式化文本信息 awk处理过程: 依次对每一行进行处理&#xff0c;然后输出 awk命令形式: awk [-F|-f|-v] ‘BEGIN{} //{command1; command2} END{}’…

AT_agc035_c [AGC035C] Skolem XOR Tree

感觉每次遇到这种神秘构造都会跪下。 首先如果 \(n\) 为 \(2\) 的正整数次幂,由于第 \(n\) 位为 \(1\) 的只有一个数,显然会跪下。 然后我们通过构造证明除了这种情况都是有解的,分奇数和偶数考虑。 你考虑到一个性…

做网站的的需求文档成都公司网站设计

当我们在使用电脑时&#xff0c;时常可能会遇到各类系统提示的错误信息。"找不到mfc100.dll" 就是这些错误之一&#xff0c;该错误提示会妨碍我们执行一些应用程序或特定代码。为了帮助读者克服这个技术障碍&#xff0c;本篇文章将详尽阐明导致该问题的根本原因&…

网站开发人员职业分析做网站买好域名怎么办

Java 提供了一个操作 Set 、List 和 Map 等集合的工具类 &#xff1a;Collections&#xff0c;该工具类里提供了大量方法对集合元素进行排序、查询和修改等操作 转载于:https://www.cnblogs.com/szj-ang/p/7383027.html

2025.9.30总结 - A

今天上午上的工程实训,学习了一些铁道基础常识,收获颇丰,还体验了驾驶动车,收益良多

Harbor磁盘空间清理指南:如何安全清理半年前的镜像 - 详解

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

详细介绍:第14章 AI Agent——构建自主智能助理

详细介绍:第14章 AI Agent——构建自主智能助理pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", …

网站建设宣传广告03340 网站建设与管理

响应式设计方法对开发者非常有用&#xff0c;因为它使我们的内容在各种设备上广为传播。不用保留几个独立版本的网站&#xff0c;也可以摒除诸如缩放和流式布局这些方法的弊端。 缩放、流式布局与响应式 这些术语容易造成混淆&#xff0c;设计师常常错误地交替互用。实际上&…

网站建设费用属于业务宣传费吗软件企业

写在前面的话&#xff1a; 总是在灾难发生后&#xff0c;才想起容灾的重要性&#xff1b; 总是在吃过亏后&#xff0c;才记得曾经有人提醒过。 核心军规 1、不在数据库做运算 cpu计算务必移至业务层 2、控制单表数据量 int型不超过1000w&#xff0c;含char则不超过500w&#xf…

Java入门级教程21——Java 缓存技术、RMI远程办法调用、多线程分割大档案

Java入门级教程21——Java 缓存技术、RMI远程办法调用、多线程分割大档案pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family:…

如何建设网站 知乎aoc24g2色域

随着信息技术的迅猛发展&#xff0c;计算机和网络已经成为了我们日常生活中不可或缺的工具&#xff0c;用于办公、通信和协作。尽管这些信息系统提高了工作效率&#xff0c;但也引发了一系列与信息安全相关的问题&#xff0c;例如如何有效地保护存储在这些系统中的关键数据&…