如何对Google地图多边形中的点进行排序,以便线条不会交叉?

时间:2010-03-03 20:32:01

标签: google-maps sorting polygon convex-hull

我正在尝试创建一个地图,用户可以在其中勾勒出他们想要的任何形状。但我遇到的问题是,用户可以选择使多边形线交叉的点,并排除我想要包含的区域。

要查看我正在谈论的内容,请转到this page并执行以下步骤:

  1. 点击4个点来制作4个角 一个盒子
  2. 点击每个4之间 你刚才提出的要点 定义框的周边
  3. 点击完成
  4. 你应该看到这样的事情:

    alt text

    有没有一种简单的方法可以解决这个问题,或者我基本上是在处理“旅行推销员”类型的情况?所有的逻辑都是用javascript完成的,所以如果你想知道我是怎么做的,请随意“查看源代码”。

3 个答案:

答案 0 :(得分:2)

它不是凸包。

想象一下,如果你在“Linfield Oaks”停靠这两条线的交叉处。凸壳将跳过这个并在“国际”和“82”之间划出一条直线

您要做的是确定每个新点是否位于由现有点形成的多边形内部 - 如果是,则需要断开最近的多边形边并在该边中插入新点。 有关多边形测试中的点,请参阅http://softsurfer.com/Archive/algorithm_0103/algorithm_0103.htm

答案 1 :(得分:1)

凸包可能包含用户希望排除的区域。这是另一种方法,可以提供更令人满意的结果。检查每一行以查看哪些交叉(有很多方法可以做到这一点)。然后反转出现在这两行之间的点的子序列。

例如,假设您给出了点A-B-C-D-E-F-A,其中B-C和E-F交叉。您可以通过反转子序列C..E来删除它们,从而产生A-B-E-D-C-F-A。

无论如何都要尝试。

答案 2 :(得分:1)

我在过去解决了类似的问题,并遇到了Jeffrey提到的关于不确切知道用​​户期望的形状的问题。我最终通过要求用户选择他们想要新点之间的两个点来解决该问题。它需要更多点击(3对1),但用户完全可以控制他们想要的形状。如果你感兴趣的话,我可能仍然会在某处(谷歌地图)使用我的代码。