【问题标题】:How to use computational geometry techniques to deal with inaccurate map coordinates如何使用计算几何技术来处理不准确的地图坐标
【发布时间】:2018-07-23 00:10:26
【问题描述】:

我正在尝试构建路线优化软件,并且我正在使用 openstreetmaps 作为界面。我在后端有一个节省算法的实现,它有助于确定进行一系列交付的最佳路线。

我遇到的问题是在地图上点击的地方返回的一些坐标是错误的。假设我必须在 2 个不同的地方送货。这两个地方的坐标加上我开始和完成后返回的位置应该形成一个三角形。有时返回的坐标可能非常错误,以至于违反了三角不等式定理。

我一直在阅读 Skiena 的算法设计手册,并且想知道,给定一对错误的坐标,是否可以使用所讨论的任何技术(凸壳、Voronoi 图、Delaunay 三角剖分等)来确定最可能的正确坐标,例如不违反三角不等式定理?

谢谢

【问题讨论】:

  • 我看不出三角不等式在欧几里得平面上怎么可能是错误的。请更准确。
  • 谢谢 S. Huber。比较。 Geo对我来说是陌生的,所以请耐心等待。该定理指出,任何 2 条边之和应大于第 3 条边。有时,当我在地图上选择 3 个点并将它们提供给谷歌距离矩阵 api 时,我会对它们执行计算,从其他两个点的总和中减去一个距离。我有时会得到一个不应该的结果。这似乎源于返回的一些坐标是错误的。我正在处理肯尼亚的 openstreetmaps 数据,我可以清楚地看到其中一些是错误的。
  • 一些更偏东的点的经度小于一些在其西边的点。这显然是错误的。我认为这就是导致违反三角不等式定理的原因。我得到的结果表明要么是一个不完整的三角形,要么是一个三角形,其边长得像桅杆上的三角形旗帜。
  • 我仍然无法关注,因为我缺少详细信息。你能举一个违反三角不等式的具体例子吗?
  • 你不是穿越格林威治子午线吗?

标签: computational-geometry convex-hull voronoi delaunay


【解决方案1】:

总的来说,(据我所知)有4种方法可以解决这个问题:

  1. 受控扰动
  2. 四舍五入
  3. 精确几何计算
  4. (EGC) 临时

前 2 个已部分尝试,但作为解决问题的自动方法远非实用。例如,有几篇关于 2D 中的四舍五入方法的出版物,但不是 3D 中的。应用快速舍入可能很容易,但您必须能够理解生成的拓扑结构,最重要的是,软件必须变得强大。

接受近似相等的浮点值属于 Ad-hoc 类别。由此产生的软件几乎总是不完全健壮——一个破坏健壮性的输入案例等待被输入。此外,对代码稍作改动可能会进一步破坏它,需要不断调整这些容差条件。

CGAL 遵循 EGC 范式。像任何软件一样,CGAL 也不是没有错误的,但是健壮性问题被消除了。您可以在 CGAL 网站或例如“CGAL 安排及其应用”一书中了解更多信息。虽然这本书专门介绍 CGAL 的特定包,但它确实涉及 EGC 主题。请参阅第 1.3.2 节。

【讨论】:

  • 非常感谢 Efi。我很快就加入了 CGAL 讨论组,b4 发布了这个,我注意到你在那里的活动。我将研究这些主题,并尝试看看我能用它们做什么。请问CGAL有python替代品吗?我不知道 C/C++ 但愿意学习这是否是唯一的方法。干杯!!!
  • 如果计算的数值不准确是一个问题,那么 CGAL(嗯,或者核心或 LEDA)会有所帮助。但是原始问题的主张是算法的输入已经存在问题。那么 EGC 范式在这方面有何帮助?
  • 在急于使用大锤之前,OP应该了解他的问题。
  • 如果输入,例如,由 4 个不共面的点组成,那么算法。要求它们共面,然后算法。可能会失败(与 EGC 无关)。在这种情况下,您需要确保输入正确或更改算法。配合此类案件。但是,如果输入由 3 个点组成,则它们定义了一个平面。虽然它可能不是您想到的飞机,但它是有效的飞机。
  • 您可以获取 CGAL 的 Python 绑定。
猜你喜欢
  • 2021-11-26
  • 2011-11-27
  • 2011-05-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-20
  • 1970-01-01
相关资源
最近更新 更多