span8
span4
当几何形状具有该特征内发生多次的一个或多个顶点出现重复顶点(一式两份点)。重复顶点是那些具有相同的X,Y,和作为存在于数据Z坐标值,以尽可能多的小数位。
重复顶点不仅低质量数据的符号,它们也可以是数据格式问题。一些格式允许重复顶点(例如,MicroStation的DGN允许零长度线),而其他格式禁止重复的顶点(例如Oracle空间)。
重复的顶点可能在几何发生顺序(例如,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更常用。
然而,CoordinateExtractor了一种用于检测出现无序重复顶点越好,这样进一步调查才能进行。
本例使用ClosedCurveFilter和CoordinateExtractor的组合来标识未测序重复点。第二个例子使用GeometryValidator变压器,以确定连续重复点。
源数据是包含线的功能,表示建筑物轮廓一个MicroStation的设计文件:
这种情况的出现,我们希望验证之前它被投入生产使用清洁的数据。
定位非顺序重复的顶点是没有顺序重复一样简单;然而,这是可以做到。请按照以下步骤找到一个方法来定位非连续重复的顶点。
1。启动FME Workbench和一个空的画布开始。选择阅读器>从菜单栏中添加读卡器。将数据格式设置宾利设计的MicroStation(V8)。选择附加MicroStation的数据集作为源。如果您单击参数按钮,你会发现有一个先进的参数删除重复点:
确保此参数截止时,我们要查明多少重复的顶点也有。因此只需单击OK添加读者。如果/当出现提示时,选择BuildingFootprints水平要读取的数据。
2。点击画布上的阅读器功能类型。在弹出的菜单中选择检查选项,在数据检查,以查看数据。检查数据。数据看起来是正确的一目了然,这是难以判断出可能有重复的顶点。
3。早在FME工作台读者特征类型后添加ClosedCurveFilter变压器。添加检查变压器的输出端口和运行转换,这取决于颜色随机产生,你可能需要上色ClosedCurveFilter_Open功能分化的结果。它将确定一个打开的功能是这样的:
这是一个重复的顶点的特征,但它并不像关闭一个将多边形。它可能会,也可能不会,被认为是有问题的功能,但由于这是意味着是一个建筑,我们或许可以认为这是不正确。
4。为了找到不连续重复点,我们将抽取坐标列表和重复检查。当然,它不是在不同的功能混淆点是很重要的,并且不包括多边形的开始/结束点。
这里的数据不具有各功能的唯一的ID,所以我们应该通过增加一个计数器变压器创建一个。这样,在不同功能的相同点不会被迷惑:
默认的参数 - 这将创建一个属性,叫做_count - 很适合我们的目的。
5。现在柜台后添加CoordinateExtractor变压器。该参数应设置为提取所有的坐标到一个列表称为_indices:
如果你愿意,连接督察变压器和运行工作区。查询功能,你会发现,它现在已经包含了顶点的列表。
6。OK,我们要分析的坐标列表中,但我们不能做到这一点作为一个列表对象。有没有具体的名单变压器,将发现重复值的多个值中(该ListDuplicateRemover会发现重复的X值,或重复的Y值,但不重复的X和Y的组合)。因此,我们将爆炸列表为每使用ListExploder变压器列表元素一个特点:
如果你愿意,附加督察变压器和运行工作区。你会看到现在有每个顶点的一个特征。每个顶点有其记录为_element_index列表中的位置:
以上示出了建筑55具有5个顶点,编号为0至4。第一个和最后一个顶点匹配,这意味着它是一个封闭线(这是罚款)。
7。现在我们可以开始删除不属于(或不作为计)重复顶点。
放置ListExploder后测试变压器。设置参数,以测试_element_index = 0(即这是该行的第一坐标)。
这些都是我们要删除的功能 - 因为否则封闭线的第一个和最后一个点会匹配并标记为错误 - 这样的故障端口是我们要保留的功能。
8。现在放置一个DuplicateFilter变压器,连接到测试仪:故障端口:
设置变压器滤除_count,X,Y,和(任选地)z的重复值。即在相同的特征(匹配计数)标志了顶点具有相同的x,y和z。
督察变压器连接到DuplicateFilter:复制端口和运行工作区。其结果将是这样的:
有一个未关闭的功能,并具有重复顶点标记六个特征。事实上,将是一个建筑,是一个重复的每个顶点的特征,因此如果大楼有两个重复的顶点会出现两个特征来代表它。该功能的X / Y / Z属性标识,其中重复的顶点所在。
如果你将得太多问题(因为我),你可能会想知道是否有通过降低第一点引入的任何影响。例如,我们有A,A,B,C,d,E或A,B,C,A,d,E - 会不会有问题,因为第一个特征是下降,所以不会有任何匹配 subsequent A's?
哦,不,因各种原因:
计数问题的顶点的数量是作为引入StatisticsCalculator(如在现有的例子)进行计数的功能一样简单。
解决这个问题的顶点则是另一回事。从技术上讲,我们可以使用CoordinateRemover砸坏的一个顶点。但也不能保证,我们将删除正确的。例如,添加CoordinateRemover后DuplicateFilter,集去除顶点“_element_index”(我们知道是重复):
结果适用于某些功能,而不是其他人:
因此,建议使用这种技术来识别非连续的重复坐标,而不是修复它们。应该将问题特性传递给适当的编辑工具进行修复。
这里使用的数据来源于不列颠哥伦比亚省温哥华市(data.vancouver.ca)。它包含在开放政府许可下的信息-温哥华。
©2019安全亚搏在线软件公司|法律