斯潘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变换器可用于识别重复顶点,但是一些变压器——或者变压器的组合——将比其他变压器更有效。
一般来说,几何验证器的使用频率更高,因为连续的重复顶点是一个更明显的问题。
然而,coordinatextractor更适合于检测出现顺序错误的重复顶点,以便进行进一步的调查。
此示例使用closedcurvefilter和coordinatextractor的组合来标识未排序的重复点。第二个示例使用geometryvalidator transformer来标识连续的重复点。
源数据是一个MicroStation设计文件,其中包含表示建筑轮廓的线条特征:
这种情况下,我们希望在数据投入生产使用之前对其进行验证和清理。
定位非顺序重复顶点不像顺序重复那样简单;然而,这是可以做到的。按照以下步骤找到一种定位非顺序重复顶点的方法。
1。启动FME工作台,从一个空画布开始。从菜单栏中选择读卡器>添加读卡器。将数据格式设置为Bentley MicroStation Design(V8)。选择附加的MicroStation数据集作为源。如果单击“参数”按钮,您会发现有一个高级参数可以删除重复点:
确保关闭此参数,因为我们要确定重复顶点的位置和数量。所以只需单击OK添加读卡器。如果有提示,选择BuildingFootprints级别作为要读取的数据。
2。单击画布上的读卡器功能类型。在弹出的菜单上,选择Inspect选项以在数据检查器中查看数据。检查数据。数据一目了然看起来是正确的,很难确定哪里可能有重复的顶点。
三。回到FME工作台,在读卡器功能类型之后添加一个closedcurvefilter变压器。将inspector transformers添加到其输出端口并运行转换,根据随机颜色生成,您可能需要对关闭的曲线过滤器打开功能进行着色以区分结果。它将识别如下打开的功能:
这是一个具有重复顶点的特征,但它不像多边形那样闭合。它可能,或者不可以,被视为问题特征,但既然这是一栋建筑,我们可能会认为它是错误的。
4。为了找到非连续的重复点,我们将提取坐标列表并检查是否重复。当然,重要的是不要混淆不同功能上的点,不包括多边形的起点/终点。
这里的数据没有每个功能的唯一ID,所以我们应该通过添加一个计数器转换器来创建一个。这样不同功能上的相同点就不会混淆:
默认参数(将创建一个名为_count的属性)对于我们来说是可以的。
5。现在在计数器后面添加一个coordinatextractor转换器。参数应设置为将所有坐标提取到名为“索引”的列表中:
如果你愿意,连接Inspector Transformer并运行工作区。查询一个特征,你会发现它现在有一个包含顶点的列表。
6。好啊,我们要分析坐标表,但我们不能把它作为列表对象。没有特定的列表转换器可以在多个值中找到重复的值(ListDuplicateRemover将找到重复的X值,或复制Y值,但不是重复X和Y的组合)。所以,我们将使用ListExploder转换器将列表分解为每个列表元素的一个功能:
如果你愿意,连接Inspector Transformer并运行工作区。现在每个顶点都有一个特征。每个顶点在列表中的位置记录为“元素”索引:
上面显示55号楼有5个顶点,编号为0到4。第一个和最后一个顶点匹配,这意味着这是一条封闭的线(很好)。
7。现在我们可以开始删除不重复(或不算重复)的顶点。
在列表爆炸器后放置测试变压器。设置要测试的参数,以确定元素索引=0(即这是直线的第一个坐标)。
这些是我们要删除的功能——因为否则闭合线的第一个和最后一个点将匹配并标记为错误——所以失败的端口是我们要保留的功能。
8。现在放置一个复制变压器,已连接到检测仪:失败端口:
设置变压器以过滤出重复的\计数值,XY和(可选)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,设置为删除顶点“元素索引”(我们知道它是一个副本):
结果适用于某些功能,但不是其他:
因此,建议使用这种方法来识别非连续的重复坐标。但不是为了修复它们。应将问题功能传递给适当的编辑工具进行修复。
这里使用的数据来源于温哥华市提供的开放数据,不列颠哥伦比亚(数据.couver.ca)它包含根据开放政府许可证(温哥华)获得许可的信息。
?2019安全亚搏在线软件公司|合法的