FME教程:批量提取面要素图形的拐点坐标到Excel,其他类型图形的坐标提取、输出可参考本文方法

目录

一、提取成果

二、实现过程

1.读取数据

2.分离内外边界

3.提取坐标

4.获取边界序号

5.坐标处理

6.数据输出

三、总结


今天给大家介绍使用FME提取几何图形拐点坐标,并输出到Excel中的案例。这里以shapefile格式,且内部存在环洞的面要素为例进行提取坐标演示。

一、提取成果

下面的图1、图2分别为源数据和成果数据,可以看到源数据中有两个普通面以及一个带环洞的面,并且属性表中有一个“BH”字段。而图2的成果数据中可以看到输出的Excel文件以“BH”字段值进行了命名,而在Excel中对于面要素的内外边界坐标分别放在多个工作表,便于使用区分。关注薇信工众号:“GIS工具乐园”,回复“FME”,获取模板及示例数据下载链接。

图1 源数据

图2 输出成果

二、实现过程

1.读取数据

这里使用shapefile数据进行示例,用shapefile读模块读取数据,如下图所示,如果源数据为其他格式,比如dwg文件,则使用相应的CAD读模块即可。

图3 读取数据

2.分离内外边界

因为这里使用的是面数据,而面数据存在内部有环的情况,所以要将环进行分离,便于输出Excel时,将内外边界分别输出到相应的工作表。提取结果如下图所示。

图4 分离内外边界

3.提取坐标

使用CoordinateExtractor转换器,将图形的坐标提取暴露到列表中,如下图所示。

图5 提取坐标

4.获取边界序号

因为面图形可能存在多个内外边界。为了便于区分输出,因此要对边界进行编号,如下图所示。

图6 获取边界序号

5.坐标处理

对各个图形边界的坐标计算序号,并进行四舍五入到指定位数,如下图所示。

图7 坐标处理

6.数据输出

使用Excel写模块对数据扇出数据集,每个图斑对应输出一个Excel文件,并用“BH”字段进行命名。输出成果如下图所示。

图8 输出成果


☛ FME系列视频教程推荐 ☚



频讲解及模板下载☛ 【视频教程】4.批量提取面要素的拐点坐标到Excel


三、总结

在本案例中以shapefile格式数据,且带环洞的复杂面进行了示范,那么其他的格式的数据也可以替换读模块,然后参照本案例进行提取。本FME模板的运行选项如下图,只要输入选择源shp、小数位数、输出目录,即可一键批量提取几何图形的坐标到Excel。关注微行公众号:“GIS工具乐园”,持续更新FME开发技巧分享哦。

图9 运行选项


☟ 往期推荐 ☟


<think>好的,我现在需要帮用户解决关于点云处理中提取交线的技术方法或实现方式的问题。首先,我得理解用户的具体需求。他们可能是在处理三维点云数据时,想要找到不同平之间的交线,比如建筑结构中的墙交界线或者机械部件中的交线。这类应用在逆向工程、三维建模等领域很常见。 接下来,我得回忆一下相关的点云处理算法。根据用户提供的引用内容,点云处理中的分割、配准、特征提取方法可能与此相关。特别是引用[2]提到了点云分割方法,包括区域提取、线提取等,这可能直接涉及到交线的提取。另外,引用[4]中提到的点云配准和特征提取算法也可能有参考价值。 首先,交线提取的大致流程应该包括几个步骤:平分割、计算交线、优化结果。平分割常用的算法有RANSAC、区域增长等,这些在引用[2]中都有提到。比如RANSAC可以用于从点云中提取多个平区域,这是第一步的关键。然后,对于分割出的不同平,需要计算它们之间的交线。这一步可能需要几何计算,比如求解平方程的交线方程。最后,可能需要后处理步骤,比如使用ICP算法优化交线的精确度,或者进行滤波处理,这在引用[2]的ICP和引用[4]的配准方法中有涉及。 接下来要考虑具体的技术方法。例如,使用RANSAC分割平后,如何高效地找到相邻平的交线?可能需要先对分割后的平进行邻近性分析,然后对每个相邻平对计算交线。此外,点云密度和噪声可能会影响交线的准确性,所以可能需要滤波或优化算法,比如引用[3]提到的FCGF特征提取可能帮助提高精度,或者引用[2]中的NDT算法可能用于优化交线的对齐。 然后是实现方式。用户可能需要代码示例,比如使用PCL库中的RANSAC进行平分割,再结合自定义的交线计算。例如,Python的Open3D库或者C++的PCL库都有相关函数。代码部分需要展示如何分割平,计算交线,并可视化结果。同时,需要注意代码的正确性和可读性,确保用户能够理解每一步的操作。 另外,用户提供的引用[1]中提到点云格网法,虽然主要用于地提取,但或许在划分网格后,可以辅助平分割,比如在网格单元内进行平检测,这可能提高处理效率。不过这可能属于优化步骤,需要进一步考虑。 可能的问题包括:如何处理多个平之间的复杂交线?如何确保交线的连续性和准确性?如何优化计算效率,特别是处理大规模点云时?这些都需要在方法中考虑到,比如使用层次分割、并行计算,或者引用[4]中的最新配准方法提高效率。 最后,生成相关问题时要围绕用户的需求展开,可能涉及算法优化、不同场景的应用、与其他技术的结合等。例如,询问不同平分割算法对交线提取的影响,或者如何处理动态环境中的交线提取等。</think>### 点云提取交线的技术方法与实现 #### 1. 算法原理 交线提取的核心是通过点云分割识别多个平区域,并计算其几何交线。主要步骤包括: 1. **平分割**:使用算法(如RANSAC、区域生长)分离点云中的平区域[^2]。 2. **平参数计算**:对每个平拟合数学方程(如$ax + by + cz + d = 0$)。 3. **交线求解**:对任意两个平,通过其方程计算交线参数。例如,平$P_1: a_1x + b_1y + c_1z + d_1 = 0$和$P_2: a_2x + b_2y + c_2z + d_2 = 0$的交线可表示为方向向量$\vec{v} = \vec{n}_1 \times \vec{n}_2$,并通过联立方程求解具体点[^2]。 4. **交线优化**:利用ICP算法或滤波(如高斯滤波)提升精度[^4]。 #### 2. 技术实现(以Python+Open3D为例) ```python import open3d as o3d import numpy as np # 读取点云 pcd = o3d.io.read_point_cloud("input.pcd") # 平分割(RANSAC) plane_model, inliers = pcd.segment_plane(distance_threshold=0.02, ransac_n=3, num_iterations=1000) plane1 = pcd.select_by_index(inliers) plane1.paint_uniform_color([1,0,0]) # 红色平 # 提取第二个平(需排除已分割的点) remaining = pcd.select_by_index(inliers, invert=True) plane_model2, inliers2 = remaining.segment_plane(distance_threshold=0.02, ransac_n=3, num_iterations=1000) plane2 = remaining.select_by_index(inliers2) plane2.paint_uniform_color([0,1,0]) # 绿色平 # 计算两平交线 n1 = np.array(plane_model[:3]) n2 = np.array(plane_model2[:3]) direction = np.cross(n1, n2) # 方向向量 point_on_line = np.linalg.solve(np.array([n1, n2, [0,0,1]]), np.array([-plane_model[3], -plane_model2[3], 0])) # 假设z=0的点 # 生成交线点云 line_points = [point_on_line + t*direction for t in np.linspace(-1, 1, 50)] line_pcd = o3d.geometry.PointCloud() line_pcd.points = o3d.utility.Vector3dVector(line_points) # 可视化 o3d.visualization.draw_geometries([plane1, plane2, line_pcd]) ``` #### 3. 关键优化方法 - **多平处理**:使用层次聚类或DBSCAN处理多个平交线 - **抗噪设计**:在分割阶段添加统计滤波,或使用MLESAC改进RANSAC - **交线拟合**:对交线附近点云应用PCA分析提升方向向量精度[^3] #### 4. 应用场景 - 建筑BIM建模中的墙交界提取 - 工业零件装配间隙检测 - 地质勘测中的岩层断裂线分析[^1]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

GIS工具开发

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值