前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >兜姐,贝神喊你学技术了……

兜姐,贝神喊你学技术了……

作者头像
数据处理与分析
发布2022-06-09 15:54:11
5900
发布2022-06-09 15:54:11
举报
零、前言

前段时间,群友在群内咨询了一个FME的技术问题,需求是将CAD中的复合线中的线段和弧段分离出来,具体样例如图1所示,图中红圈部分是弧段,需要单独分离出来。

图1 需求样例

此类需求以前未遇到过,于是使用CAD编辑了两个测试要素,经过测试,使用FME解决了需求,使用的转换器也不常见,FME初学者的学习方式一般考虑不到此类思路,难以入手,特将相关思路整理归纳,希望对FME爱好者有所启发。

一、FME常见的几何要素

学习FME的同学都知晓,FME支持的几何要素非常多,经过查询帮助文件,FME常见的几何要素主要有点、线、面、曲线、表面、实体、栅格、点云以及多几何(聚合体)等。

图2 FME常见几何要素

二、FME常用几何要素拆分转换器

本次的需求是要将弧段分割出来,因此第一考虑是使用几何要素拆分的转换器,依据几何要素类型的不同,几何拆分的转换器也不尽相同。对于要素类型的不同,采用的转换器也不一致,其中分类几何类型的转换器为GeometryFilter,转换器功能如下:

GeometryFilter

根据几何类型输出要素。

进入转换器的每个要素都通过端口输出到相应的 fme type。每个输出要素都拥有完整的、未改变的源要素属性和几何类型。

对于聚合要素,需要将聚合类要素分离,需要使用Deaggregator转换器将多几何要素分离成独立要素,该转换器功能如下:

Deaggregator

分解聚合体要素成其组成部分。

每个输出要素的属性都完全复制于源要素的属性

三、需求及解决思路

本次需求是需要将线与弧段分开,一般的理解是认为该要素是线段和弧段的聚合要素,可以采用聚合打散转换器分离要素,但是提出问题的同学已经测试了不属于此类原因,如果采用节点拆分的方法也不可行,那么就需要进一步分析数据。

1. 数据分析

FME分析数据,一般的分析方法就是将数据输出至查看器界面查阅信息,能够查看到数据的结构、属性等详细信息。测试数据如图3所示:

图3 线段与弧段组合要素

图4 面状数据结构

图5 线状数据结构

1. 分析结果

对照图4和图5,我们能清晰发现,CAD中的复合线在FME中的数据结构如下:对于线状数据,复合线的Line、Arc等数据通过数据段组合方式存放在IFMEPATH中;对于由复合线条闭合形成的面状要素,表现为IFMEPATH闭合构成的IFMEPolygon。

通过分析,我们发现了IFMEPATH这个不太常见的数据类型,要解决要素拆分的问题,应从IFMEPATH入手。以下是FME帮助中对于PATH的描述

PATH(IFMEPATH)

路径是包含一个或多个线段(线条或 弧)的复合空间对象。路径的线段必须是连续的. 几何部分是连接点对点的线条或弧以形成连续行或区域。路径也可以被参照为链.

因为一条路径包含了线段,所以每个线段都有自己的名称, 特征,和其他的属性. 在一条路径的线段中,名称和特征不需要完全一致.

如果路径是3D的或者带有度量,那么所有线段可以有一个z和/或度量值. 线段必须都为2D或都为3D,且必须有同样的数字和命名的度量,但其中的值可以不同。

不是所有的格式支持路径几何图形。如果路径(或等同于路径的几何)被写入了不支持它的格式中,FME会把路径打断成连续的线型要素(必要时用带有顶点的弧段替代).

路径给几何的表现形式增加了灵活性. 同样,路径允许你将独立的几何成分的某些特性保留为特征或度量.

路径与聚合体不一样. 路径对于端点对端点的部分(即由拓扑关系)有着明确的结构,而聚合体中对几何的连接并没有要求.

可以处理路径几何对象的转换器有:

· PathBuilder

把输入的线(弧段和线)要素按照输入顺序连接起来,构成路径要素。

注意: 对于某些数据集,数据在进入这个转换器之前,需要使用Sorter ,对其进行正确的排序。

如果一个输入段的终点与以下段的起点不匹配,则将添加几何对象,用来按以下方式连接它们。如果第一段是一条线,那么会在它后面附加一个点,将其延伸到下一段的起点。如果第一段是一条弧,而下一段是一条线,那么一个点将添加到该线的起点,以将其延伸到第一段的终点。否则,如果两个段都是弧,则将在结果路径中的这些段之间插入两点线。

· PathSplitter

把路径 要素分解为其组成线段。

备注:为了让输入要素有效,其几何对象必须是路径,也就是说,边界是路径的面以及包含路径的聚合要素都是无效的。GeometryCoercer, DonutHoleExtractor 和 Deaggregator可用于对几何对象的准备,以便输入到这个转换器中。

每个输出要素包含源要素属性的一个副本。非路径要素直接输出不发生改变。

· GeometryRefiner

对要素的几何对象进行“细化”。:

§ 任何同类的 IFMEAggregate 会变成一个 multi(IFMEMultiCurve, IFMEMultiArea, IFMEMultiPoint, 或 IFMEMultiText)。

§ 只包含一个组成部分的任意 IFMEAggregate 或 multi 都会被其独立的部分所替代。

§ 不包含洞的 IFMEDonut 会变成IFMEPolygon 或 IFMEEllipse。

§ 只包含一条线段的 IFMEPath 会被那条线段所替代。

§ IFMEPath 中的连续的 IFMELine 线段会被合并。

由帮助文件可以发现,路径与聚合体不一样。路径对于端点对端点的部分(即由拓扑关系)有着明确的结构,而聚合体中对几何的连接并没有要求。对于处理路径几何对象的三个转换器,通过名称即可发现,一个是路径构建,一个是路径分割,一个是几何对象的细化。不难看出本次需求可以使用PathSplitter对CAD中复合线分割成Line和Arc,对于CAD中闭合的复合线,则需要先使用GeometryCoercer转换器将面状要素转换为线状要素(在FME中是以IFMEPATH体现),再使用PathSplitter进行分割。

1. 解决方案

经测试,最终解决方案如图6:

图6 FME解决步骤

四、经验总结

对于以前未能遇到的问题,采用FME Data Inspector对数据结构进行细致分析,通过分析数据结构,查找对应帮助,翻阅转换器说明,即可将数据流程理顺,找到解决问题的方法,通过解决问题,也学习到了新技能,对于FME的数据结构和转换器功能就有了更深的认识。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2022-04-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 数据处理与分析 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • GeometryFilter
  • Deaggregator
  • PATH(IFMEPATH)
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档