【问题标题】:Sorting Geographical non-contiguous line segments along an implied curve沿隐含曲线对地理非连续线段进行排序
【发布时间】:2013-03-27 06:05:45
【问题描述】:

鉴于:

一个集合(为了便于讨论,我们称之为S),它是一个无序线段集合。每条线段定义为两个经纬度端点。虽然所有线段都遵循一条隐含的曲线,但每个线段之间存在各种大小的“间隙”。我们将这条曲线称为“隐含”,因为它没有在任何地方明确定义。我们唯一可用的信息是S 中包含的线段。

期望的结果:

一个序列(为了便于讨论,我们将其称为R),它是一个有序的线段集合。每条线段的定义与以前一样,遵循与以前相同的隐含曲线,但现在按其沿隐含曲线的位置排序

上下文(即“我到底为什么需要这个?”):

基本上我有不完整的地理数据需要规范化并通过一些非常简单的插值来“完成”以形成一个完整的曲线,没有间隙。您可能会问“为什么不将曲线拟合到所有线段端点并完成它?” ——嗯,这不是我所追求的。线段正是它们应该位于的位置,不需要最终的曲线是“平滑的”。事实上,我打算用一条直线连接每个线段(可以想象的最粗略的插值形式)。但是,连接这些部分很容易;困难的部分是对它们进行分类。

总结一下:从SR 的高效算法是什么?

【问题讨论】:

  • 曲线是什么?也许您可以发布一张S 的图片?
  • 想象一条远足径:你基本上就拥有了。非常紧的弯曲不太可能是曲线的一部分,并假设根本不存在尖角。
  • 您是否考虑过简单地获取从一条线段上的点到另一条线段上的点的最短距离?到原点距离最短的线段将是 R 中的下一段。这可能是 n^2。太慢了?
  • 希望我能比O(n^2)做得更好
  • @RyanDelucchi:从侧面还是从顶部远足?如果是side,那么一切都可以按x轴排序,但我认为你的问题一定更难,对吧?您正试图找出曲线等段的组合最不疯狂,对吧?

标签: algorithm language-agnostic geometry line graph-theory


【解决方案1】:

您可以使用k-d treecover tree 快速查找附近的点。

如果您需要一条连续曲线,我建议将给定边缘合并的短 traveling salesman 路径将是合理的重建。您可以像Bentley described 那样使用2-opt 和k-d 树(付费墙,抱歉;我认为this chapter on TSP local search by Johnson and McGeoch 中也有描述)。需要进行的一项修改是确保初始路径包含给定的边,并且 2-opt 移动不会删除这些边。

【讨论】:

  • k-d 树听起来是个不错的方法。至于连接各个部分,老实说,我认为仅仅做一个直接的边缘实际上可能就足以满足我的情况(因为数据中的差距是一个非常重要的指标,表明准确性不太重要)。事实证明,我已经使用恒定时间分桶方案细分了我的表面区域,因此我可以选择将 k-trees 限制在单个桶(或桶的跨度)中。这将为这些 k-d 树的大小创建一个上限。我会调查并稍后报告。
【解决方案2】:

我猜隐含曲线有两个属性。一是它是连续的,这意味着没有分段。其次,它的一阶导数是连续的,这意味着没有角。

从第二个性质我们可以说,如果两条线之间的夹角越接近,它们就越相关。但我想这还不够。您可以定义一个成本函数,它取决于线之间的角度和线的距离。

C = A*angle + B*distance(应测试和调整 A、B)

通过此函数,您可以找到每一行与另一行的相关程度。比你可以简单地连接具有最强关系的线。虽然我猜贪心算法并不意味着你总能得到最优解。

【讨论】:

  • 这实际上与我之前的一个想法非常相似,但实际上存在两个问题:1.)您仍然面临计算每对线段之间距离的问题 2.)线段之间的角度与线段是否应连接无关
  • 我不同意你关于角度的看法。他们给出了一个提示,但随着距离的增加,他们的意义很快就消失了。所以找到正确的成本函数是个问题,它可能不像我说的那样是线性的。关于复杂性一般规则:如果 n 不高,大多数时候不高,不要在意 :) 但如果 n 高,你应该检查空间分区算法,我最喜欢的是 en.wikipedia.org/wiki/Bin_%28computational_geometry%29 O(1) 在最好的情况下。
  • 我实际上正在处理一组非常庞大的数据,所以 n 非常高(想想 OpenStreetMap 数据 ;-))。但是,您在短距离内更有意义的角度提出了一个很好的观点。由于我还通过恒定时间分桶方案使用分割空间,因此您合并角度的想法实际上可能在这些桶中非常有用。看起来 kd-tree 是解决这个问题的有力候选者。
  • 我实际上不得不把这个项目搁置一旁(正在研究其他东西),但现在我再次研究它,我更倾向于“Bin”算法,我毕竟,甚至可能会考虑角度和距离...更多内容:-)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-03-12
  • 1970-01-01
  • 1970-01-01
  • 2018-05-21
  • 1970-01-01
  • 1970-01-01
  • 2018-06-07
相关资源
最近更新 更多