我从另一个软件中导出了一些citygml格式的建筑。格式不包含语义或属性,因此我希望继续使用FME中的文件。
当我在Data Inspector中查看该文件时,我可以看到三维的建筑物,我看到它是一个ifmebrepsolid。但是,当我尝试在工作台中使用该文件时(例如转换CityGML -> CityGML或尝试运行GeometryValidator)我得到消息“在这个视图中没有几何图形”。
还有可能出错的线索?我附上了一个三维建筑物的样本。我正在使用FME版本2016.1。谢谢您!
这更多的是记录我从多边形的文件地理数据库写到包含多边形的SDE实例时遇到的试验和问题。虽然有人会认为以一种ESRI格式存储的多边形在写入另一种格式时是可以的,而且不需要验证,事实并非如此。以下是我在切换到FME时遇到的问题,以查找和绕过一个坏特性,因为一个面积为1x10^-20的近乎共线的小三角形而导致数据负载中断。
首先,我尝试直接从GDB插入到SDE。这给了我一个错误:
试图使用游标将一行插入表'PARCEL_DATA'时发生错误。ArcObjects的错误号是:'-2147215968'。来自arcObjects的错误消息是:LineString或Poly Boundary是自相交的
然后我试着运行几何验证器,使用这些设置,将传递和修复的多边形发送到SDE。这给了我一个错误:不能编写一个非区域功能到一个区域功能类
进一步的调查显示,几何验证程序将一些多边形块修复为FME_线条对象,并将这些多边形块与FME_多边形对象一起作为FME_聚合发送。
GeometryValidator的一个很好的选项可能是允许修复后的部件只包含与原始部件具有相同几何类型的部件。
所以,我添加了一个测试过滤器,按@geometrytype()=fme_polygon拆分所有内容,fme_aggregate,FME线,把多边形送进sde,聚集成一个几何提取器只保留多边形,测试再次过滤它们以确保它们是FME多边形,然后把他们送到SDE。这在22000000个特性中起到了很好的作用,然后又被错误阻塞了:试图使用光标将行插入表“parcel\u data”时出错。arcObjects的错误号为:“-2147216041”。来自ArcObjects的错误消息是:{Shape integrity error}
令人惊讶的是,有一个很小的多边形从GeometryValidator中出来它的面积是1x10^ (-20)因为它实际上有4个共线点,把它变成一条直线,但根据FME,官方上还是一个多边形。然后,我将AreaCalculator+测试仪添加到几何验证器传递的两个几何图形中,以及几何体量角器修复的FME_多边形,确认没有面积小于0.0000000000001的多边形传入SDE,最后我的数据加载完成了。
希望最终能帮助别人,在文档中几乎没有看到geometryvalidator如何将结果作为聚合返回,而geometrypartextractor截屏可能对其他人有帮助。
为什么聚合特性是“OGC简单兼容的”?
第一个创建器生成一个方框多边形(0 0 10 10 10 10 8 10 10 0 0 0),第二个创建器生成一个三角形(0 10 5 13 8 10 10 0 10 10 0 0)。我想我误解了“ogc simple”的意思。(复杂功能的对立面?)“简单”似乎并不意味着“有效”。
工作空间:ogc-test.zip
提前谢谢。
我有一个包含几何验证器转换器的自定义转换器的工作区。变压器应检查FME U几何结构以进行基本几何结构检查。本地运行时,工作区在FME桌面中工作正常。当工作空间加载到FME服务器时,我在日志程序中得到上面的错误消息。在点击该变换器之前,在该变换器(几何验证器)之前,该特征的本机坐标从WKT(进入工作区的格式)转换而来,我还进行了其他检查,以防止在WKT为空或区域小于某个阈值时继续进行该过程,由于某些原因,当我用较小的区域或空字符串测试它时,就会调用转换器并产生上面的错误。同时,我试图禁用几何验证器转换器,但仍然收到错误,当数据甚至没有经过该转换器时。如果我从工作空间中删除转换器并将其上传到服务器,那么一切都会正常工作,但是我需要进行进一步的几何检查。我正在运行FME桌面2018.1和FME 2018.0.0.3服务器。有人能帮忙吗?谢谢
嗨,团队
我从实用程序图创建了复杂多边形(缓冲了线几何体并溶解了缓冲多边形)。我可以写oracle空间表。能够打开fme查看器。但是当我在arcmap中使用这个表格时,它给出了几何误差msg,表示“一个或多个图层绘制失败”。
而不是在arcmap中渲染。多边形看起来像附件中的图像。
请帮忙。arcmap.jpg
你好,
我有一个地图的质量有问题,我想使用几何验证器。由于事实上有明确的警告,这台变压器是为有经验的用户设计的,有什么我可以参考的指南吗?
我确实看到了帮助部分,但我正在看一些简单的如何开始…安装变压器的最佳方法是什么?如果你不知道自己在做什么等。真的没什么提示。
我已附上文件样本。
谢谢你
我想这可能是个虫子,或者我的理解有问题。
下图,为什么相同的功能类,通过完全相同的几何验证程序在读卡器之间产生不同的结果
一个线性网络应该由在一点相交的线组成,没有交叉。然而,情况并非总是如此。可能会出现各种各样的问题。
如果两条线要在一个已知点相交,则会出现错位点,但是有一条线不能正确连接:
当两条线要在一个已知点相交时,就会出现超调。但有一条线超出了交叉点:
当两条线在一个已知的点相交时,但是有一条线没有到达那个交叉点:
一个缺失的节点发生在两条线要在一个已知的点相遇的地方,但只有一条线包含交叉点:
在这种情况下,红色(水平)线有一个端点,但是绿色(垂直)线在同一位置没有节点或顶点。
一般来说,这些问题非常小,通常肉眼看不见,否则它们很容易被检测出来,而不需要特殊的数据验证技术。这些场景没有特定的转换器,但我们可以使用一般几何处理变压器的组合来完成这项工作。
尽管我们使用“网络”这个术语,这些问题也适用于任何旨在形成封闭结构的线性特征,例如,以下示例中使用的包边界线…
此示例的数据集,是一组线条特征(在MicroStation DGN数据集中),表示温哥华市的地产地块边界。
数据集在FME数据检查器中如下所示:
这里的场景是清理行特性,确保所有地块正确关闭。我们将通过使用AreaBuilder transformer将它们转换为多边形特性来证明这一点。
要评估线性几何的状态,最简单的方法是使用面积生成器变压器。如果几何图形可以转换为多边形特征,然后所有的连接都正确。
更复杂的方法是使用拓扑构建器变压器。这将使网络变成一系列节点和边。如果我们能找到只有一条边使用的节点,则表示一条未连接的线。如果线本身很短(或者节点和相邻线之间的距离很短),那么这表示超调,未达到目标,或点错位。
对于这个例子,我们将坚持使用更简单的AreaBuilder方法。
按照以下步骤学习如何识别超调,下冲,不重合的点,以及缺失的节点。
1.启动FME工作台,并从一个空画布开始。从菜单栏中选择Reader > Add Reader。
将数据格式设置为Bentley MicroStation Design (V8)。选择附加的DGN文件作为源数据集,然后单击“确定”添加读卡器。
2.放置一个变压器连接到包线数据。将每个输出端口连接到检测变压器。
三。为了清楚起见,向AreaBuilder添加一个feature urecolorsetter变压器:Area output port:
设置参数以使区域特征具有独特的颜色。运行工作区。不完整的特征(那些在某些方面是无效的)将出现在一个单独的图层和颜色:
通过放大接近其端点来检查功能。你会看到功能是否过度,下冲,不重合的点,或丢失节点。
在公路网中,一些功能将是亮点,但不要错了,例如,死胡同死胡同或死胡同因此,要么需要进行手动评估,或者可以用另一个FME变压器;例如,LineoRealOverlayer或SpatialFilter将显示线条是否与多边形重叠-如果重叠,则更可能是不正确的。
假设我们隔离的特性实际上是不正确的,然后使用统计计算器变压器来计算它们是很容易的。
按照以下步骤学习如何计算坏的线性几何图形。
4.在区域生成器转换器和检查器之间添加一个统计计算器。检查统计计算器变压器的参数。
为要分析参数的属性选择任意属性。如果没有可用的属性,则在源功能类型上公开一个属性,或者使用AttributeManager创建一个。价值观对我们来说并不重要。
将total count属性参数设置为numfeatures并接受更改。
5。重新运行翻译。输出现在会有一堆不正确的特性,虽然这是一个总数,不是每一种类型的错误。
注:如果您将StatisticsCalculator:Summary输出端口连接到检查器,每组只有一个输出特性。要获得所有输出特性,请使用完整的端口。
修复不好的线性几何可能是一个反复试验的过程。在心里有一个特定的容忍度值是很好的,还可以按给定的顺序使用变压器。当以不同的顺序使用时,结果可能会大不相同,可能会引入一些不需要的线。
所以,按照以下步骤学习如何修复错误的线性几何图形。
6。在翻译中添加一个Snapper转换器,在源数据和区域生成器之间。将捕捉器的捕捉输出和未触及输出连接到区域生成器:
检查捕捉器参数。对于大多数参数,默认值都可以,但是你必须设定一个捕捉公差。在本例中,将值设置为0.2
将一个检查器附加到snapper:snapped端口(这样我们可以看到发生了什么),然后重新运行工作区。结果是,有两个更少的无效特性。这两个都是错位的点,现在都被卡入位置。
有几个有趣的观点。首先,过冲和过冲也可以通过折断来修复,但在规定的公差范围内无明显差异。Snapper可以处理这些情况,但它的主要用途是处理不对齐的点。
其次,对于其中一个功能,未对齐的特征有特征捕捉到它,而不是被别人抢走。这就是为什么当只需要修复两个特性时,三个特性就会崩溃。这不是理想的,但是,公差参数确保这样的捕捉不会太极端。
7.在Snapper和AreaBuilder之间添加延长线变压器。确保LineExtender:拉伸输出端口已连接:
检查参数并将扩展设置为0.5。这将导致所有线路延长0.5m。它应该处理任何潜在问题。当然,它会把它们(和所有其他功能)变成超调,但我们可以很快解决这个问题。
8。现在在LineExtender和AreaBuilder之间添加一个扇区间转换器。intersector:intersected输出端口是我们要保留的数据:
不应该有需要设置的参数,虽然在FM2018或更新版本中,现在有一种公差模式,如果设置为自动,会产生更好的结果。
这个变压器会在它们的交点处切断过冲,并创建丢失的节点。
现在重新运行工作区。会有大量“不完整”的功能,但这些仅仅是被切断的过度增长。如果查询所有其他功能,您会注意到多边形是正确的,现在没有超调,下冲,不重合的点,或丢失节点。
9.如果数据仍需用作线路网络,然后,通过使用Intersector将数据转换回适当的节点线,可以重新创建线性特性。
在某些不完整的行仍然需要的情况下,例如,死胡同-然后一个长度计算器/测试仪的组合可以用来过滤掉这些行短于正常预期(即它们要么是超调要么是被应用的扩展,不是真正的功能):
这里使用的数据来源于温哥华市提供的公开数据,不列颠哥伦比亚省(data.vancouver.ca)。它包含在开放政府许可下的信息-温哥华。
重叠和间隙是使用无效多边形覆盖发生的问题。多边形覆盖应该是单个的,连续表面。然而,情况并非总是如此。
重叠发生在两个或多个多边形相交的地方,创建由多个多边形覆盖的区域。例如,这里红色的特征延伸到橙色的特征:
如果两个或多个多边形未能在边界处相交,则会出现间隙,在覆盖层上创建一个洞。例如,这里红色和绿色的特征不符合,在覆盖范围中创建一个空白:
一般来说,这些重叠和间隙非常小,而且很窄——否则不需要特殊的数据验证技术就可以很容易地检测到它们——而这种常见的形状和大小正是它们有时被称为a的原因条子。
可以使用小多边形方法,但这并不能同时找出差距,这两种方法都不能用同样的方法来修复。所以,为了处理裂片和间隙,FME有一个称为除鳞机。
在FME2018或更新版本中,除银器被一个叫做AreaGapAndOverlapCleaner的变压器所取代。一定要检查Fill gap参数,其违约在2018.0至2018.1期间发生变化。
注:sliverremover同时处理间隙和重叠。它不允许只修复一个或另一个。即。如果不同时修复重叠,则无法修复间隙,反之亦然。
本例中的数据集是一组表示温哥华城市规划区域的多边形特性(在MapInfo选项卡数据集中)。
数据集在FME数据检查器中如下所示:
从逻辑上讲,一块土地不能分成两个区域(即这些区域不应重叠),但同样,一块土地也不能被分割(即分区覆盖率不应存在任何差距)。
这里的场景是简单地定位,计数,并修复我们覆盖范围内的任何重叠或空白。
SliverRemover变压器,尽管设计用于处理间隙和重叠,但只能修复它们。它不会突出显示或定位它们,以固定在其他地方。为了简单地定位这些特性,我们将使用AreaOnAreaOverlayer转换器,与溶解器和DonutholeExtractor结合使用。
按照以下步骤学习如何识别重叠和空白。
1.启动FME工作台,并从一个空画布开始。
从菜单栏中选择Reader > Add Reader。
将数据格式设置为“地图信息”选项卡(MITAB)。选择附加的选项卡文件作为源数据集,然后单击“确定”添加读卡器。
2.为了定位间隙和重叠,我们的想法是创建一个覆盖感兴趣区域的单一曲面,然后将数据与AreaOnAreaOverlayer进行比较。
所以,将溶解变压器连接到区域数据。这将创建单个曲面特征。然而,它可以被创建为一个甜甜圈功能,这不是我们需要的。因此,用一个多纳油萃取器变压器跟随溶解变压器,连接到溶解器:区域输出端口:
默认参数对于当前练习是正确的。
三。现在放置一个AreaOnAreaOverlayer变压器。连接两个donutholeextractor:outershell端口,区域数据到其输入端口:
再一次,对于这个练习,任何参数都可以保持其默认状态。
请注意,在FME2018或更新版本中,AreaOnAreaOverlayer变压器有一个额外的剩余输出端口。
4.将检查变压器连接到AreaOnAreaOverlayer:Area output port。检查检查器的参数,并通过选择_overlaps属性设置组。
现在运行工作区。输出中的显示控制窗口如下:
当重叠的次数等于1时,我们知道这些是间隙(因为溶解器创建的表面不会被区域数据重叠)。
如果重叠数大于2,我们知道这些是重叠的(因为溶解器创建的表面在区域数据中至少重叠了另外两个多边形)。
只有当重叠数等于2时,数据才是正确的。
为了确认问题,添加原始源区域数据作为背景,并放大到其中一个问题功能:
这里的灰色线是两个多边形之间的间隙。它只有0.0022米(2毫米或1/12英寸),所以你必须放大近距离才能看到它。
现在我们已经分离出了非常小和非常窄的多边形它们代表了多边形覆盖范围内的间隙和重叠。
计算坏特性的数量非常容易,因为我们已经将它们过滤掉了。我们只需要使用统计计算器转换器创建它们的计数。
按照以下步骤学习如何计算重叠和间隙功能。
5。在RealOverlayer Transformer和Inspector之间添加一个统计计算器。检查统计计算器变压器的参数。
为Group By参数和要分析参数的属性选择_overlaps属性。
将total count属性参数设置为numfeatures并接受更改。
6。在inspector transformer中关闭group by并重新运行翻译。现在输出将包含每个重叠数的特性计数。这将告诉我们每个类别中有多少功能:
在这个例子中,我们有6个缺口,6个重叠,430个正确的特性。
注:如果您将StatisticsCalculator:Summary输出端口连接到检查器,每组只有一个输出特性。要获得所有输出特性,请使用完整的端口。
修复重叠和间隙是一个简单的任务使用滑块移除变压器,为了确认它已经工作,我们可以简单地重复上面的定位过程。
所以,按照以下步骤学习如何使用滑块移除器变压器修复重叠和间隙。
7.sliverremover的帮助信息指出它需要清洁,有效数据和自交或退化多边形将不会被修复。
所以,为了确保我们首先清理这些问题的数据,放置几何验证器变压器。将其连接到区域功能类型的新输出:
检查几何验证器参数,并在“退化或损坏几何”和“二维自相交”的测试中打勾。确保设置尝试修复设置为Yes。
8。放置一个除银变压器。将其连接到GeometryValidator变压器上通过和修复的端口:
检查sliverremover参数。唯一重要的是维修方法。有很多方法,变压器文档对此进行了更详细的解释。现在,将修复方法保留为“最长边界”。
9.将检查变压器连接到除银器:修复端口并运行翻译。
输出将是所有间隙和重叠修复的多边形,以创建单个,连续表面。然而,如果不仔细检查数据,就很难证明这一点。所以,让我们重新创建先前的数据检查,以确保没有遗留问题。
要做到这一点,选择现有的溶解器,DonutHoleExtractor,和AreaOnAreaOverlayer变压器。按Ctrl+D创建这些文件的副本。
现在将这些连接到与上述配置相同的sliverremover(即从除银器到溶解器有一个输出,到AreaOnAreaOverlayer有一个输出):
10。将Inspector Transformer连接到新区域的RealOverlayer并运行转换。这次你会发现没有重叠的特征,,没有缺口。
您还可以看到与以前相同数量的输出特性。根据在sliverremover中选择的方法,重叠和间隙已分布到其他特征。
同时,请注意,AreaOnAreaOverlayer会导致属性无效。所有输出都从一个特性中获取属性。因此,仅取修复后的除银器输出供以后使用;除验证多边形覆盖范围外,切勿使用AreaOnAreaOverlayer输出。
这里使用的数据来源于温哥华市提供的公开数据,不列颠哥伦比亚省(data.vancouver.ca)。它包含在开放政府许可下的信息-温哥华。
你好,
我正在尝试捕获几何验证程序失败的功能,以及关于原因的信息。我所需要的特定信息位是补充信息详情问题列表中的特征/元素
可能很简单,但我不知道怎么做。
我试过用列表爆炸器,但列表中的这一部分没有通过,和ListConcancenator一样。
干杯
杰基
数据集模式(数据模型)由多个部分组成。有些部分与属性有关,其他部分与空间数据有关。
模式的空间部分通常定义特征类型(层,桌子,等)存在于或允许存在于数据集中,以及几何类型(直线,点,多边形,在数据集中存在或允许存在的。
如果功能存在于允许的功能类型之外(例如,数据层与数据集规范具有不同的名称,并且作为允许的几何体类型(例如,多边形特征层上存在线条特征)。
这对于内部(公司)的一致性和完整性很重要,而且,当使用严格由允许的表名和几何类型定义的格式时,也要这样做。
FME可以自动处理格式限制,但用户必须定义数据是否符合公司数据标准。因为可以做各种各样的测试,FME中有各种变压器可用于测试它们。下面的示例和注释仅涵盖其中的一些内容。
本例的源数据集提供了有关可能影响温哥华市交通流量的建筑活动和项目的信息。以GML格式储存:
理论上,所有这些特性都应该由简单的多边形几何组成。每个项目所在的层应代表施工单位。允许的值是:
然而,我们不能确定是否使用了正确的图层,或者正确的几何形状,我们要测试一下。
按照以下步骤学习如何识别源数据集中存在的源要素类型(层)。
1.启动FME工作台,并从一个空画布开始。从菜单栏中选择Reader > Add Reader。
将数据格式设置为GML(地理标记语言),并选择附加的GML数据集作为源。将工作流选项设置亚搏在线为单个合并的特征类型(确保所有对象都作为单层读取),点击OK添加读取器:
保存工作空间。
2.放置一个与阅读器功能类型连接的复制文件转换器。检查参数,并将键属性设置为fme_feature_type:
fme_feature_type记录源数据层,因此,通过过滤每个示例,我们有效地在源数据集中创建了一组特性类型(层)。
三。从菜单栏中选择“编写器>添加编写器”。将数据格式设置为文本文件,并定义写入文本文件的位置。
将DuplicateFilter:Unique port连接到textfile writer的特性类型。将属性fme_feature_type映射到作者的text_line_data(通过绘制连接或使用AttributeManager转换器):
4.运行转换。打开输出文本文件。我们现在有一个源数据集中使用的所有层的列表,有效与无效:
例如,“private”有效,xyz是无效的,而“tellus”显然是一个拼写错误,应该是“telus”。
我们现在有一个特征类型列表,可以看出有些是无效的。但是要计算或过滤这些,我们需要知道哪些层是允许的,最好把它们存储在某个文件中。
有许多转换器可用于匹配此列表的功能类型—例如,AttributeFilter——但这里我们将使用DatabaseJoiner。
5。将DatabaseJoiner转换器放入工作区,连接到源数据集的第二个输出:
检查databasejoiner参数。设置如下:
使用此设置,从未连接端口出现的功能具有无效的功能类型。
6。将一个StatisticsCalculator连接到databaseJoiner:未连接的输出端口。检查参数并设置如下:
7.将检查器变压器连接到StatisticsCalculator:完成输出端口并运行工作区。数据检查器将显示所有具有不正确层的特性,将图层记录在属性fme_feature_type上,属性BadFeatures中记录的无效特征数量:
所以现在我们有了一些具有无效层的特性。我们无法修复层名称,因为我们不知道它们应该是什么,但是我们已经通过过滤掉这些无效的特性来清理了数据集。
按照以下步骤学习如何识别几何类型不正确的源特性。
8。从菜单栏中选择“编写器>添加编写器”。将数据格式设置为esri shapefile,并定义将数据集写入的位置。对于shapefile定义参数,选择从读卡器复制:
将新创建的编写器功能类型连接到databaseJoiner:Joined端口。
9.检查新写入器特性类型的参数。
对于shapefile名称,单击下拉箭头,然后选择属性值>fme_feature_type。这将确保数据写入到它来自的同一层。现在将几何体设置为shape_polygon:
运行工作区。检查翻译日志。注意有172条警告信息!
由于某些功能不是区域几何图形,因此将从输出中拒绝它们:
警告错误-需要聚合或区域几何图形。警告拒绝以下功能:通知几何图形类型:ifmemulticurve
其他功能被拒绝,因为它们的要点太少:
警告多边形功能必须至少有4个坐标…拒绝警告拒绝以下功能:
…大概是两点线特征。
其他一些功能没有被拒绝,但它们是一组聚合在一起的多边形,需要被分割:
警告删除esrishape编写器的异类聚合功能,由于功能类型允许几何限制警告几何类型:ifmeAggregate
日志中进一步的计数告诉我们每个文件有多少特性被拒绝:
警告|拒绝了3个输出特性|拒绝了11个输出特性|拒绝了1个输出特性|拒绝了2个输出特性
因此,FME修复了一些几何类型,它可以拒绝其他类型。我们还统计了有多少功能被拒绝。
此外(只要在步骤1中保存了工作区),所有被拒绝的功能都以空间日志的形式存储在FFS (FME功能存储)格式的数据集中:
因此,我将无效的特性分离成一个新的数据集,而不必设置它!
如果我确实希望在工作空间中这样做,在到达作者之前,我可以使用几何过滤器转换器来分离非多边形特征。
这里使用的数据来源于温哥华市提供的公开数据,不列颠哥伦比亚省(data.vancouver.ca)。它包含在开放政府许可下的信息-温哥华。
自交叉(也称为“循环”,“蝴蝶结”或“鱼尾”)是指其边界扭曲,使其与自身相交的特征。导致循环:
左侧示例显示多边形的端点与起点不相交的位置,使多边形以一个环闭合。
右边的特性是一个可能顺序不对的点的例子。它非常接近于一条直线,它可以直接反转回来,非常接近于一个尖峰,但这种布局实际上会形成一个循环。
在大多数情况下,自交并不像这些那么明显。左边的例子通常要小得多——小到看不见的程度——而右边的例子的角度往往非常尖锐,看起来像一条直线。
FME集成了使用几何验证程序变压器。
在这个例子中,我们将研究如何在包含建筑轮廓的数据集中标识和修复自交叉。
源数据是一个OpenStreetMap数据集,包含温哥华市的建筑:
地图的 雄蕊设计,请下 CC-BY3.0。数据通过 开放地图,请下 CC-BY-SA公司。
有很多建筑,所以(为了简单起见)我们会说一个用户报告了两个包含问题的建筑。他们的身份证号码是102521333和301873712,我们需要调查。
按照以下步骤学习如何使用几何验证器转换器定位自相交特征。
1.启动FME工作台,并从一个空画布开始。从菜单栏中选择Reader > Add Reader。
将数据格式设置为OpenStreetMap (OSM) XML并选择附带的OSM数据集作为源。将工作流选项设置亚搏在线为单个合并的功能部件类型(确保所有构建对象都作为单层读取),然后单击OK添加阅读器。
2.在画布上放置测试变压器。设置测试器,测试ID=102521333或ID=301873712的位置:
注:我们可以把所有的建筑都传递到GeometryValidator中,忽略传递的特性,但在本练习中,当可疑的特性已经被隔离时,运行起来更快,更容易发现错误。
三。将一个GeometryValidator转换器连接到测试器:传递端口。在二维问题中,打开参数并对自交打勾。在对话框底部,将“尝试修复”设置为“否”。
将Inspector Transformers连接到几何验证程序输出端口并运行工作区。failed和issuelocations输出如下所示:
地图的 雄蕊设计,请下 CC-BY3.0。数据通过 开放地图,请下 CC-BY-SA公司。
左边的建筑——如果是一个多边形——有明显的问题,与外周交叉在几个位置。事实上,查询该特征以证明它是具有单个周长的单个多边形。
右边那栋楼的问题不那么明显。你需要非常接近建筑物右上角(东北方向)才能看到问题:
顺便说一下,这个小偏移量是0.7毫米(约0.03英寸),所以你可以看到这样一个小错误是如何导致几何问题的。
所以,现在我们有了所有包含自交集的特性,带有一个点特征,表示自相交的位置。
使用统计计算器变压器计算自交点非常简单。唯一的决定是是否计算问题特性的数量,或者自相交的次数,这不一定是同一件事。
4.放置一个统计计算变压器。要计算无效的特性,请将其连接到GeometryValidator:输出端口失败。要计算自交叉,请将其连接到GeometryValidator:IssueLocations输出端口。
5。检查统计计算器变压器的参数。选择属性中的任何属性来分析参数(哪一个并不重要)。
现在将Total Count属性设置为一个新的属性名,如NumberBadFeatures或NumberSelfIntersections,以适当者为准。
6。将Inspector Transformer连接到统计计算器输出端口(如果选择摘要端口,将获得单个功能,如果选择完整的端口,则可以获得所有原始功能)。运行工作区。现在您应该有一个坏特性的数量(2)或自相交的数量(4)。
有许多方法可以固定自交。例如,在交点处可以打开一个缝隙,这样两条线就不会相交:
另一种解决方案是将特征实际划分为两个(或更多)多边形,在交点处把它们分开。事实上,这是FME采用的技术。
7.检查几何验证器变压器的参数,并将尝试修复参数设置为是。
8。[可选]要解决几何验证程序的故障(现在将删除失败功能的坐标系),请在几何验证程序:失败端口和连接的检测程序变压器之间放置一个坐标系统设置器变压器。检查参数,将坐标系参数设置为LL84。
9.重新运行工作区并检查输出,专注于修复的输出。请注意,FME已将原始的单个多边形特征拆分为多部分特征,由若干多边形/轮廓组成:
我们现在有一组数据,已经清除了自交。如果不希望进行自动清洁,则可以使用交叉点来确定可以手动解决问题的位置。
OpenStreetMap数据集:©OpenStreetMap贡献者。看到http://www.openstreetmap.org/版权所有
当一个特征中的一个顶点有一个X时,空间数据中会出现峰值(或异常值)。是的,或者是Z值,它是如此的不正确以至于导致了一个像尖峰一样的外观。
尖刺是一种相当特殊的缺陷,还有一个专门设计的故障模式与影响分析变压器来处理它们:除穗剂。
然而,峰值的可见性取决于查看数据的方向。例如,在传统X/Y视图中从上方查看数据时,特征的Z值峰值将不可见。因此协调员transformer在处理尖峰时也很有用。
在这个例子中,我们将研究在包含轮廓线的数据集中识别和修复峰值。
源数据是一个包含温哥华市英吉利湾水深数据的MicroStation DGN数据集:
地图的 雄蕊设计,请下 CC-BY3.0。数据通过 开放地图,请下 CC-BY-SA公司。
有一些点表示深度(我们可以忽略)和等高线。两者都是2.5D(即每个顶点都有Z值)深度为英寻(1英寻等于6英尺)。我们会调查轮廓上是否有尖峰,尤其是在Z值中,不能如此容易地进行目视检查。
按照以下步骤学习如何使用SpikeRemover变压器定位和修复spike特性。注意,除穗器变压器在没有固定钉子的情况下无法定位钉子,除了表示删除顶点的点特征之外。
1.启动FME工作台,并从一个空画布开始。从菜单栏中选择Reader > Add Reader。
将数据格式设置为Bentley MicroStation Design (V8)。选择附加的MicroStation数据集作为源,然后单击OK添加阅读器。
提示时,仅选择要添加到工作区的轮廓特征类型(级别)。
2.在FME数据检查器中检查源数据。有一个非常明显的尖峰(如本文开头的屏幕截图所示),但其他一些轮廓也可以算作尖峰:
三。在画布上放一个除钉变压器,连接到阅读器特性类型。
检查变压器参数。有一些参数可以让我们控制尖峰的最大角度和最大长度。当尖峰形成的角度小于或等于最大角度时,尖峰将被移除。当直线段长度不超过最大直线长度时。
设置角度参数为10,长度参数为250;即。最大角度为10度,最大长度为250米(坐标系为utm,单位为度/米)。
4.将检测变压器连接到除穗器变压器的输出端口,并运行工作区。
一个单一的钉应定位和删除:
请注意,从删除的输出端口出现一个点特征,以指示删除峰值顶点的位置。如果质量保证过程旨在识别用于在不同应用中修复的峰值,然后,可以保存删除的输出端口,作为进行编辑的标志。
如果要求FME解决问题,然后,更改后的端口输出删除了尖峰的行特性。
5。为了去除不那么极端的刺,让我们用SpikeRemover参数来做实验。将角度参数设置为45,然后再次运行平移。这一次,7个线路特征删除了9个尖峰:
不幸的是,这也移除了一些不是尖峰的点,像这样:
因此,用这些参数进行实验来获得峰值的最大修正显然是很重要的,不移除有效顶点。
6。要计算删除的顶点数,将统计计算器变压器添加到除穗器:已删除端口。在参数中,选择任何要分析的属性(_Spike_Angle is Simply),并将总计数属性参数设置为NumberSpikes。
这个转换器的输出现在包含一个属性,用于计算固定的峰值数量。
7.在FME数据检查员中,使用工具栏按钮将视图切换到3D模式:
旋转显示器(使用工具栏上的“动态观察”工具),您会注意到之前未注意到的Z值峰值:
SpikeRemover只在二维空间中工作,所以我们需要做些不同的事情来处理这个尖峰。
8。添加一个边界提取变压器,连接到除穗器的未更改和更改的输出端口,然后使用测试变压器:
boundsex拖拉机将返回x的最小值和最大值,是的,和z坐标。将测试仪设置为测试最小z坐标小于零(zmin<0)的特性。这将隔离故障中的特性。
9.现在添加一个连接到测试器的CoordinateSwapper转换器:Passed端口。
检查变压器参数。注意,它允许您交换特定轴上的坐标;例如交换x和y值。在本例中,将其设置为交换Y <-> Z轴。
添加Inspector Transformer并运行工作区。现在您将看到数据作为侧视图。我们需要修复的长钉。使用数据检查器中的测量工具,您会发现它的长度接近10,000米。
10。添加第二个除穗变压器,这个连接到CoordinateSwapper:Output端口。将最大角度设置为1,最大长度设置为10100。
11。添加另一个CoordinatesWapper变压器,这是第一个的副本,以便切换回Y轴和Z轴:
向第二个CoordinateSwapper转换器添加一个检查器并运行转换。你会注意到尖峰已经被移除。
也注意到线条在其他地方也被平滑了,由于数据在第一次坐标交换后被压缩在Y轴上。这就是为什么我们需要隔离坏特性,以最小化不需要的更改。
我们现在有了一组清除了峰值的数据。如果不需要自动清洁,则可以使用尖峰去除点来确定可以手动解决尖峰的位置。
此处使用的数据来源于公共域数据温哥华的城市,请不列颠哥伦比亚省。
重复的属性值是指多个功能共享同一属性的相同值的属性值。在许多情况下,这是自然的和预期的;例如,地址数据库的省(县/州)字段对于许多记录很可能是相同的。
然而,在某些情况下,重复的值是无效的和意外的;例如,一个应该是惟一ID的字段包含一个与另一个特性(1、2、3、4、4、5、6)相同的值。
重复的ID值,特别是,使用唯一索引键加载到数据库时可能导致完整性错误。
有时,重复的值是有效的,只要它们与另一个字段有特定的关系;例如:
第1列 | 第2列 |
一 | 一个 |
一 | b |
一 | C |
二 | 一个 |
二 | b |
二 | C |
二 | C |
或:……第一列有重复项,但是,第1列和第2列的组合是独特的(因此对于2a,2 b,2摄氏度,2摄氏度,请最后一个2摄氏度是无效的,因为它是与以前的组合匹配)
第1列 | 第2列 |
一 | 一个 |
一 | 一个 |
一 | 一个 |
二 | b |
二 | b |
二 | b |
二 | C |
…如果列1有重复项,但它有效,因为它与列2相匹配(因此对于2b,2 b,2 b,2摄氏度,这个2摄氏度值无效,因为它是不与以前的组合匹配)。
可以用其中之一标识重复的属性值DuplicateFilter变压器或匹配器变压器。匹配器转换器可以很好地找到关系,其中一个列有重复,它是无效的,因为另一个列不同(2b,2 b,2 b,2 c)
匹配变压器也更擅长提取全部的重复记录,因为DuplicateFilter允许重复记录的第一个实例通过。但同样的行为使复印机的内存效率更高,如果可能的话,这是首选。
识别和计算重复值非常简单,但修复可能需要人工干预,取决于字段要包含的内容类型。
本例的源数据集是一个Excel电子表格,其中包含温哥华市的营业执照信息。
数据集在FME数据检查器(表视图)中是这样的:
有多列,但特别是,我们对三个关键ID号感兴趣:
文档编号是整个数据集中唯一的ID号;即。每个记录应具有不同的值。
许可人数是可重用的ID号,因此可能不是惟一的。同时,同一许可证编号可能有多个记录;例如,在多个地址上运行的单个业务将在数据集中为每个地址(但具有相同的licenseNumber)保存一条记录。
利森塞尔森是每个许可证的唯一ID号;即。颁发的每个许可证都应具有唯一的许可证持有人N。当然,也可能有多个记录具有此值,因为它应该匹配多个许可证号码特性的每个记录。
这里的场景是检查重复的值。我们可以说,recordid必须是完全唯一的。同时,虽然每个许可人可能有多个记录,它应该只匹配一个licenseNumber。
按照以下步骤学习如何识别重复的属性值。
1.启动FME工作台,并从一个空画布开始。
从菜单栏中选择Reader > Add Reader。
将数据格式设置为Microsoft Excel。选择附加文件作为源数据集。单击Parameters按钮查看参数并检查源数据预览。默认参数值应该可以使用,因此单击OK关闭此对话框,然后再次单击OK添加阅读器。
2.要检查的第一个问题是重复RecordID值。我们将用一个复制滤光片变压器来做这件事。所以把一个复制变压器放在画布上,已连接到读卡器功能类型(表)。
在参数对话框中选择RecordID作为关键属性参数:
三。将Inspector Transformer连接到复制端口并运行转换。找到一个重复的recordid并输出到数据检查器。记录ID号是4854。
只显示重复记录;即。它是的副本的记录也不会被筛选。在许多情况下,这足以满足我们的需要。然而,如果我们想要查看这两个记录,我们必须打开完整的数据集:
“高级烟花集团”营业执照注销时,看起来“基拉尼咖啡厅”(下一个将要颁发的许可证)错误地给出了他们的记录ID号。
4.要进行的下一个检查是重复的licensersn值。重复值本身不是问题,除非重复值的licenseNumber值不同(即licensersn:licenseNumber应为1:1匹配)。为此,我们要用火柴变压器。
将匹配变压器连接到复制过滤器上的唯一输出端口:
检查匹配器参数并设置以下内容:
5。将检查变压器连接到匹配器:匹配输出端口并运行转换。将有四个记录标识为匹配:
对于“电子企业公司”,其许可证编号中似乎有一个拼写错误(由120079改为120097)。很难确定另一个副本的原因。
注意这个转换器已经给了我们两个重复记录的实例,不仅仅是其中一个;然而,这一好处也带来了性能成本,所以这并不总是最好的解决方案。
6。我们可以做的最后一个检查是用不同的许可证号码复制许可证号码。因为(如上所述)LicenseNumber值可以重用,所以可能有很多这样的值。然而,这种复制只会在两个许可证同时处于活动状态时导致问题。
所以,首先添加一个测试变压器连接到匹配器:不匹配输出端口:
设置参数以测试状态为“已颁发”的许可证。
7.将第二个匹配转换器添加到工作区,这个连接到测试人员:pass端口。像以前一样设置,除此之外,licenseNumber是所选属性,和许可证的属性必须不同:
8。将检查器变压器连接到此匹配器的匹配端口并运行工作区。将有10个功能,通过匹配的端口退出:
即。这些特性具有与相同的许可证编号不匹配的重复许可证编号。
计算重复的属性值非常简单,这只是一个决定重复值的每个实例是否算作一个问题的例子,或者对于所有匹配的值(例如,如果两个特性的许可号都是17-107142,这算不算一个问题,或两个?)
此外,有必要决定是将所有不同类型的副本单独计数还是作为一个副本计数。
9.要计算重复的特性,只需在任何检查变压器之前使用一个统计计数器。所以,在匹配器:匹配端口和检查器之间添加一个统计计算器,并设置它来分析任何属性。
在“计算属性”参数中,删除所有值。在totalCountAttribute下输入duplicateCount:
10。重复的RecordID特性被DuplicateFilter过滤,结果只有一个特性被标记为重复(其重复的记录不被计算)。
Matcher结果将为每个匹配提供两个功能。如果你只想把它算作一个问题,需要过滤掉重复的副本(!)。这是简单地通过切换连接从Matcher:Matched到Matcher:SingleMatched:
修复重复的属性值也很简单,假设您只想删除一个匹配的记录。在那种情况下,空间筛选器已删除副本的单个实例。对于matcher,它只要求保留单个匹配的特性;其他匹配项将被丢弃。
当然,有时需要确定应该过滤哪些记录。在这种情况下使用的转换程序将根据管理要保存的记录和要丢弃的记录的规则而有所不同。有时需要保留两个记录,但为其中一个指定一个新值。在这种情况下,计数器可以提供新的ID,统计计算器可以找到ID的当前最大值,以确定下一个可用值是哪个。
在没有人工干预的情况下,很难修复由简单的打字错误(由120079改为120097)引起的重复。
这里使用的数据来源于温哥华市提供的公开数据,不列颠哥伦比亚(数据.couver.ca)它包含在开放政府许可下的信息-温哥华。
当几何体在特征中有一个或多个顶点多次出现时,会出现重复顶点(重复点)。重复的顶点是那些具有相同X,Y,和z坐标值,到数据中存在的小数位数。
重复的顶点不仅是低质量数据的标志,它们也可能是数据格式问题。某些格式允许重复顶点(例如,微站DGN允许零长度的线),而其他格式禁止重复的顶点(例如Oracle Spatial)。
重复顶点可能在几何图形中顺序出现(例如,A,B,C,C,D,E)或者它可能发生顺序(A,B,C,D,C,E)。可能只复制一次(A、B、C、C、D)。或者可能重复多次(A、B、C、C、C、D、C、E、C)。
当然,有时重复顶点是有效的;例如,一个多边形的起点和终点应该是相同的,如果它要正确关闭(a,B,C,D,E, a),有时一个线性特征应该循环并重新连接中点(a,B,C,D,E,C);因此,仅在此基础上识别无效的特性并不总是容易的。
有各种FME变换器可用于识别重复顶点,但是一些变压器——或者变压器的组合——将比其他的更有效率。
一般来说,几何验证器的使用频率更高,因为连续的重复顶点是一个更明显的问题。
然而,坐标提取器更适合于检测出现顺序不一致的重复顶点,以便进行进一步的调查。
本例使用闭合曲线过滤器和坐标提取器的组合来识别未排序的重复点。第二个示例使用GeometryValidator转换器来标识顺序重复点。
源数据是一个微站设计文件,包含表示建筑轮廓的线特征:
我们希望在数据投入生产使用之前对其进行验证和清理。
定位非顺序重复顶点不像顺序重复那样简单;然而,这是可以做到的。按照以下步骤找到一种定位非顺序重复顶点的方法。
1.启动FME工作台,并从一个空画布开始。从菜单栏中选择读卡器>添加读卡器。将数据格式设置为Bentley MicroStation Design (V8)。选择附加的MicroStation数据集作为源。如果你点击参数按钮,你会发现有一个高级参数删除重复的点:
确保这个参数是关闭的,因为我们想要确定在哪里和有多少重复的顶点。所以只需单击OK添加读卡器。如果有提示,选择BuildingFootprints级别作为要读取的数据。
2.单击画布上的reader功能类型。在弹出的菜单上,选择Inspect选项以在数据检查器中查看数据。检查数据。数据一目了然,很难确定哪里可能有重复的顶点。
三。回到FME工作台,在读卡器功能类型之后添加一个closedcurvefilter变压器。将inspector transformers添加到其输出端口并运行转换,根据随机产生的颜色,您可能必须对closedefilter_open特性进行着色,以区分结果。它将识别一个开放的功能如下:
这是一个具有重复顶点的特征,但它不像多边形那样闭合。它可能,也可能不会被认为是一个问题特性,但既然这是一栋建筑,我们可能会认为它是错误的。
4.为了找到非连续重复点,我们将提取坐标列表并检查重复点。当然,重要的是不要混淆不同特征上的点,不包括多边形的起点/终点。
这里的数据并不是每个特性都有唯一的ID,所以我们应该通过添加一个计数器变压器来创建一个。这样不同功能上的相同点就不会混淆:
默认参数(将创建一个名为_count的属性)对于我们来说是可以的。
5。现在在计数器后面添加一个coordinatextractor转换器。参数应设置为将所有坐标提取到名为“索引”的列表中:
如果你愿意,连接Inspector Transformer并运行工作区。查询一个特征,你会发现它现在有一个包含顶点的列表。
6。好啊,我们要分析坐标表,但我们不能把它作为list对象。没有特定的列表转换器可以在多个值中找到重复的值(ListDuplicateRemover会找到重复的X值,或者重复Y值,但不是重复的X和Y的组合)。所以,我们将使用ListExploder转换器将列表分解为每个列表元素的一个功能:
如果你愿意,连接Inspector Transformer并运行工作区。现在每个顶点都有一个特征。每个顶点在列表中的位置都记录为_element_index:
上面显示55号楼有5个顶点,编号为0到4。第一个和最后一个顶点匹配,这意味着这是一条闭合的线(这很好)。
7.现在我们可以开始删除不重复(或不算重复)的顶点。
将测试变压器放在ListExplorer之后。设置要测试的参数,以确定元素索引=0(即这是直线的第一个坐标)。
这些是我们要删除的功能——因为否则闭合线的第一个和最后一个点将匹配并标记为错误——所以失败的端口是我们要保留的功能。
8。现在放置一个复制变压器,连接到测试者:失败端口:
设置变压器以过滤出重复的\计数值,X是的,和(可选)Z。即。在相同的特性上(计数匹配)用相同的x、y、z标记顶点。
将Inspector Transformer连接到DuplicateFilter:Duplicate端口并运行工作区。结果如下:
有一个未关闭的特性和六个标记了重复顶点的特性。事实上,建筑物的每个顶点都有一个重复的特征,所以如果一个建筑有两个重复的顶点,就会有两个特征来表示它。特征的x/y/z属性标识重复顶点的位置。
如果你(像我一样)对这个问题想得太多,你可能会想,省略第一点会不会产生什么影响。例如,如果我们有A、A、B、C、D、E或A、B、C、A、D、E——会不会有问题,因为第一个A功能被删除,因此与随后的任何A功能都不匹配?
好,不,由于各种原因:
计算问题顶点的数量非常简单,只需引入一个统计标量(如前面的示例所示)来计算特性。
修复问题顶点是另一回事。从技术上讲,我们可以使用coordinateermover删除其中一个坏顶点。但不能保证我们会去掉正确的那个。例如,在复制过滤器之后添加一个coordinateremover,设置为删除顶点“_element_index”(我们知道这是一个副本):
结果适用于某些功能,而不是其他人:
因此,建议使用这种方法来识别非连续的重复坐标。但不是为了解决它们。应该将问题特性传递给适当的编辑工具进行修复。
这里使用的数据来源于温哥华市提供的公开数据,不列颠哥伦比亚(数据.couver.ca)它包含在开放政府许可下的信息-温哥华。