背景
前一段参加安图举办的用户大会,其中讲了一个案例:连接断开的线。今天将这个整理下分享给大家。魔板整体截图
创建要素
使用Creator转换器创建两个线要素,要素与要素之间留点缝隙。如下图所示:
临近查找,并创建创建缝隙间的线
使用转换器查找临近要素,获取base与相邻要素坐标,并将其连接起来。
NeighborFinder转换器设置
参数解读:
input:经过我们这样的设置,所有输入的要素将会去查找除自身外的其他要素,这也是想要的效果;
查找数量:在这里,设置为1,因为只创建了两条线;
查找距离:在这里,设置为2;
创建线段转换器:
注意两个Creator的参数设置,第一个VertexCreator转换器,使用的模式是替换,会直接将几何替换为点;第一个VertexCreator转换器,使用的是添加点的模式,经过这样的设置,就在两条线不相连的地方产生了连接线(注意,在这里会产生两条线,然而,貌似并没有什么影响)。细线预览:
有小伙伴提出这块需要增加点内容来讲解下连接线是怎么产生的,特别感谢下FME中国技术交流群的朋友BAT提出的意见。
NeighborFinder转换器计算后的数据,在连接线的时候我们用到了四个参数,分别是:_closest_base_x、_closest_base_y、_closest_candidate_x、_closest_candidate_y,现对结合下图对这几个参数进行讲述
在要素A进行临近查找时,具体如下:
_closest_base_x、_closest_base_y:要素A在进行临近查找时距离要素B最近的点,这个坐标是在要素A上的,在这里,是要素A的端点;
_closest_candidate_x、_closest_candidate_y:要素A在进行临近查找时距离要素A最近的点,这个坐标是在要素B自身上的,在这里,是要素B的端点;
要素B在进行临近查找的时候,也是类似的,所以在这里会产生两条线段,除了方向不一致,在几何上没有什么不同。
将所有线连接起来:
使用LineCombiner转换器将所有的线连接起来,在这里可以看到上一步骤产生的重复线段对结果不会有什么影响,估计会对速度有影响。我们可以看一下结果,如下图所示:
总结
在实际工作中,常常会遇到连接线的时候因为微小距离的问题导致连线连不上。本文旨在提供一种解决问题的思路,不足之处,还望不吝赐教。