我在路线上有一个有序的点列表(纬度,长度)。我有一个有序的停靠列表(lat,long)。假设我有1000分和20分。我想将1000点减少到100点,具体取决于哪些点与路线更相关。就像引起转弯的点一样。
我认为我可以做到这一点的一种方法是围绕停留集群并随意选择点。但它对我来说似乎仍然没有效果。我已经在使用Douglas Peucker算法了。除了这些想法吗?
答案 0 :(得分:4)
您可以使用Ramer–Douglas–Peucker算法来简化折线。
给定初始复数折线,此算法会获得一条新的折线,该折线近似于具有指定误差容差e
的原始折线。定义新折线的点是原始折线的一部分。
算法是增量式的,从折线的端点开始,并在每次迭代时添加离当前近似值最远的点。当所有剩余点都在当前近似的垂直距离e
内时,算法收敛。
该算法基于“分而治之”类型方法,因此预期复杂度为O(n*log(n))
(尽管最坏情况为O(n^2)
)。
由于它是“最差的第一”行为,所得到的折线包括定义尖角的“重要”点,同时在公差e
内沿平坦部分排除伪冗余点。