Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何减少点集?_Python_Algorithm_Data Structures_Douglas Peucker - Fatal编程技术网

Python 如何减少点集?

Python 如何减少点集?,python,algorithm,data-structures,douglas-peucker,Python,Algorithm,Data Structures,Douglas Peucker,我在一条路线上有一个有序的点列表(lat,long)。我有一个有序的站点列表(lat,long)。假设我有1000分和20站。我想将1000点减少到100点左右,这取决于哪些点与路线更相关。例如,像引起转弯的点 我认为我能做到这一点的一种方法是聚集在站点周围,随机选择点。但在我看来,它仍然不起作用。我已经在用道格拉斯·佩克算法了。除了这些,还有什么想法吗?您可以利用该算法简化多段线 给定一条初始复杂多段线,该算法将获得一条新的多段线,该多段线近似于原始多段线,并具有指定的误差容差e。定义新多段线

我在一条路线上有一个有序的点列表(lat,long)。我有一个有序的站点列表(lat,long)。假设我有1000分和20站。我想将1000点减少到100点左右,这取决于哪些点与路线更相关。例如,像引起转弯的点

我认为我能做到这一点的一种方法是聚集在站点周围,随机选择点。但在我看来,它仍然不起作用。我已经在用道格拉斯·佩克算法了。除了这些,还有什么想法吗?

您可以利用该算法简化多段线

给定一条初始复杂多段线,该算法将获得一条新的多段线,该多段线近似于原始多段线,并具有指定的误差容差
e
。定义新多段线的点是原始多段线的子集

该算法是增量的,从多段线的端点开始,在每次迭代时添加距离当前近似值最远的点。当所有剩余点位于当前近似值的垂直距离
e
内时,该算法收敛

该算法基于“分而治之”类型的方法,因此预期复杂度为
O(n*log(n))
(尽管最坏的情况是
O(n^2)


由于其“最差优先”行为,生成的多段线包括定义锐角的“重要”点,同时排除公差
e
范围内沿平截面的伪冗余点

这是我目前的解决方案之一,你有其他选择吗?@gizgok:RDP的
RDP
方法有什么问题?也许你可以在你的问题中列出它们。@gizgok:你不能只选择一个更大的公差?如果您在问题中包含一个示例多段线图像,则可以看到发生了什么,并可能提出更多建议…skimage中有一个实现: