算法:将源折线移动到参考折线(完全或部分移动)


10

在我们的系统中,存在一些需求,我们希望将某些源线(精度较低)移动到参考线(精度较高)。以下图片给出了正常的使用案例。红色的是源极线,蓝色的是参考线。

红色的是源极线,蓝色的是参考线

对于这种情况,源行将被部分移动,结果将如绿线所示:

移动结果1

在某些情况下,源代码行需要完全移动。

例子2

结果:

移动结果2

当前,我们的解决方案是将源线的起点/终点投影到参考线,反之亦然,然后在源线和参考线上找到投影点。通过这些投影点,我们可以提取源线和参考线的所需部分,然后将它们组合成新的部分。

这在大多数情况下都有效,但是在某些情况下,此方法无效。具体地说,当任何一条线具有“ C”形或起始点非常接近终点时。接下来的两张图片给出了场景。

C字形线

应用我的算法,我们得到的结果是:

结果

从某种意义上讲,这是可以理解的,因为当前算法只是找到投影点并提取线。

我们期望的是这样的:

预期成绩

因此,我需要更强大的算法来执行此操作,以便它也可以处理像前一种情况一样的特殊情况。我试图将一条线中的每个点投影到另一个点上,并找到最接近投影线的头端/终点的两个投影点,但是没有运气。我仍然可以找到给出意外结果的案例。

有人遇到过类似的问题吗?如果有一个软件或库可以完成类似的工作,那也很好。任何答案将不胜感激。


1
当您查看ArcGIS中的拓扑如何检查对象是否重合时,它可能会对您有所帮助:help.arcgis.com/en/arcgisdesktop/10.0/help/index.html#//…段落“集群处理”。
詹斯

谢谢您的回答,@ Jens。但是,恐怕不是我想要的。
mfdev

这些行代表网络吗?它们之间是否存在拓扑关系?
julien

它不一定是网络,也可能没有拓扑关系。
mfdev

Answers:


4

我的估计是,最终案例通常是机器无法编程的例外。我曾遇到过类似的问题,他们总是需要一定数量的手动编辑。您需要调整的是案例产生的异常,并将其在工作管理系统中提供给最终用户。


可以在此处看到一个与此类似的示例: 生动的解决方案.com / jcs JCS在自动进行几何合并方面走了很长的路要走,但是它还为无法完全合并的几何提供了手动质量检查。 fantasticsolutions.com/… 是从中构建的,可以进行质量检查,并为困难的几何图形添加了问题跟踪。
DPierce 2013年

1
所有拓扑解决方案都无法通过编程实现自动化,并且在大型企业中,此类解决方案的开发与示例类似,因为合并失败的结果可能很大且具有周期性,并且复杂的运输几何具有较高的变化率。
刘易斯2013年

2

您将需要此算法的捕捉公差和转弯公差(我假设您已经具有捕捉公差)。

将起点从源线投影到参考线。在此投影点处断开参考线。

从头点到第一个顶点遍历源线以获取沿源线的行进方向。从投影的源点遍历两条参考线中的每条参考线到下一个顶点。如果行进方向在源线上从起点开始的行进方向的转弯公差之内,则可以正常应用算法,但只能使用参考线的该部分。如果算法到达源代码行的末尾,则说明您已完成。如果不是,请中断已变形的零件和未变形的零件(将包括终点)之间的源线。

现在,将未变形的部分投影到原始参考线上。执行与之前相同的步骤...从端点到第一个顶点遍历源以找到行进方向。在项目终点处断开参考线,并遍历每个参考线,以查找从投影终点开始的行进方向是否在转弯公差范围内。如果是这样,请使用那条参考线正常应用算法。

请记住,此时您仅使用未变形的片段,因此不会与起点转换重叠。

最后,如有必要,合并两个所得的线段:从投影的起始点到未转换的折断点的头转换段,然后在从未转换的断点到投影的终点的转换点的端点上。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.