第8页
斯潘4
当几何体中有一个或多个顶点在特征中多次出现时,会出现重复顶点(复制点)。重复顶点是那些具有相同X、Y和Z坐标值的顶点,其小数位数与数据中存在的相同。
重复的顶点不仅是数据质量较低的标志,还可能是数据格式问题。某些格式允许重复顶点(例如,MicroStation 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,因为连续重复顶点是一个更明显的问题。
然而,协调抽取器更适合于检测无序出现的重复顶点,以便进行进一步的研究。
此示例使用ClosedSurveFilter和CoordinateExtractor的组合来标识未排序的重复点。第二个示例使用GeometryValidator转换器来识别连续的重复点。
源数据是MicroStation设计文件,其中包含表示建筑轮廓的线要素:
我们希望在数据投入生产使用之前对其进行验证和清理。
定位非连续的重复顶点不像连续的重复顶点那么简单;但是,这是可以做到的。按照以下步骤找到一种定位非连续重复顶点的方法。
1启动FME Workbench,从一个空画布开始。从菜单栏中选择Reader>Add Reader。将数据格式设置为Bentley MicroStation Design(V8)。选择附加的MicroStation数据集作为源。如果单击“参数”按钮,您将发现有一个高级参数可用于删除重复点:
确保此参数已禁用,因为我们要标识重复顶点的位置和数量。因此,只需单击“确定”即可添加读取器。如果出现提示,请选择BuildingFootprints级别作为要读取的数据。
2.单击画布上的读取器功能类型。在弹出弹出的菜单上,选择Inspect选项以查看数据检查器中的数据。检查数据。数据一目了然看起来正确,很难识别可能重复顶点的位置。
3.回到FME工作台后,在读卡器功能类型后添加闭式滤波器变压器。将Inspector变压器添加到其输出端口并运行翻译,具体取决于随机颜色的生成,您可能必须彩色闭合滤镜Filter_open功能以区分结果。它将标识这样的打开功能:
这是一个具有重复顶点的特征,但它不像多边形那样闭合。它可能会,也可能不会,被认为是一个问题的特点,但由于这是一个建设,我们可能会认为这是不正确的。
4.要查找非连续重复点,我们将提取一个坐标列表并检查复制。当然,重要的是不要对不同特征混淆点并不包括多边形的开始/结束点。
这里的数据没有每个特性的唯一ID,因此我们应该通过添加计数器转换器来创建一个。这样就不会混淆不同特征上的相同点:
默认参数-将创建一个名为\u count的属性-对于我们的目的来说很好。
5现在在计数器后面添加一个坐标抽取变压器。参数应设置为将所有坐标提取到名为\索引的列表中:
如果愿意,可以连接一个检查器转换器并运行工作区。查询一个特征,您会发现它现在有一个包含其顶点的列表。
6好的,我们想分析坐标列表,但不能作为列表对象。没有特定的列表转换器可以在多个值中查找重复值(ListDuplicateRemover将查找重复的X值或重复的Y值,但不会查找重复的X和Y的组合)。因此,我们将使用ListExploder transformer将列表分解为每个列表元素的一个特征:
如果愿意,可以附加一个检查器转换器并运行工作区。现在每个顶点有一个特征。每个顶点在列表中的位置都记录为\u元素\u索引:
以上显示建筑物55有5个顶点,编号为0到4.第一个和最后一个顶点匹配,意味着它是闭合线(哪个很好)。
7.现在我们可以开始删除不是(或不计数为)重复的顶点。
在ListExploder后面放置一个测试变压器。设置参数以测试_element_index=0(即,这是线的第一个坐标)。
这些是我们想要删除的特性-因为否则闭合线的第一个和最后一个点将匹配并标记为错误-所以失败的端口是我们想要保留的特性。
8现在放置一个滤波器变压器,连接到测试仪:端口故障:
设置转换器以过滤掉重复的值\u count、x、y和(可选)z。即,在同一特征上(count matches)标记具有相同x、y、z的顶点。
将检查变压器连接到DuplicateFilter:重复端口然后运行工作区。结果如下:
有一个未闭合的特征和六个用重复顶点标记的特征。事实上,建筑物的每个顶点都有一个特征是重复的,因此,如果一个建筑物有两个重复的顶点,将有两个特征来表示它。特征的x/y/z属性标识重复顶点所在的位置。
如果你对这个问题想得太多了(就像我一样),你可能会想,去掉第一点是否会有什么影响。例如,如果我们有A,A,B,C,D,E或A,B,C,A,D,E-是否会出现问题,因为第一个A特性被删除,因此与任何后续的A不匹配?
嗯,不,因为各种原因:
计算问题顶点的数量非常简单,只需引入一个统计计算器(如前一个示例中所示)来计算特征。
解决问题是另一回事。从技术上讲,我们可以使用CoordinaterRemover删除一个不好的顶点。但不能保证我们会删除正确的一个。例如,在DuplicateFilter之后添加一个CoordinateRemover,设置为删除顶点“\u element\u index”(我们知道它是重复的):
结果适用于某些功能,但不是其他功能:
因此,建议用这种方法来识别非连续的重复坐标,而不是固定它们。问题特征应传递给适当的编辑工具进行修复。
这里使用的数据来源于不列颠哥伦比亚省温哥华市提供的公开数据(data.温哥华.ca). 它包含根据开放政府许可证-温哥华许可的信息。
©2019安全亚搏在线软件公司|法律