python - python kd/qtree实现

  显示原文与译文双语对照的内容

我有以下路径数据:


 id1 p1 p2


 0 1 7.935 5.103


 1 1 7.934 5.112


 2 1 7.936 5.102


 3 1 7.938 5.145


 4 2 7.930 5.191


 5 2 7.945 5.161


 6 2 7.954 5.127



上述数据帧中,( p1,p2 ) 形成坐标数据,所有属于同一个"id1"的点为一条路径;上面的df rows(0-3) 属于一条路径等等。

我正在尝试实现四叉树来分析这些轨迹。 为了实现四叉树,我尝试使用"pyqtree" https://github.com/karimbahgat/Pyqtree python 包。

在代码"len ( spindex )"是项总数,边界框中,"bbox"是格式( xmin,ymin,xmax,ymax ),"testitem"是交叉边界框,而 len(matches) 将给出交叉点数。

我正在尝试使用上面的df来实现四叉树。 请让我知道如何使用上面的df作为代码中的"项目"。 如何为这些轨迹提供不同的边界框。 另外,我如何知道或者查询树,以查找哪些轨迹位于四叉树的哪个区域中。

时间: 原作者:

所以你想查询每个轨迹的位置,这意味着你需要计算并插入每个轨迹的bbox 。 Ususally这种类型的数据对于每个轨迹都有一行,用描述xy坐标序列的几何字段。 但是,由于坐标向下,我们必须做一个解决所有的xy点,然后计算 bbox 。

下面是popoulate索引( 我的Pandas 很生锈,所以有些错误。)的未测试示例代码:


for group in df.groupby('voygid'):


 bbox = [ group['x'].min(), group['y'].min(), group['x'].max(), group['y'].max() ]


 spindex.insert(group['voygid'][0], bbox)



不确定你是如何计划的,这将是一个单独的问题。 quadtree的主要目的不是询问哪个条目位于哪个 quad,而是询问哪些项与 intersect任意任意的bbox区域 intersect 。

因这里,如果将坐标区域划分为独立的群集区域,则可以查询哪些voygid轨迹位于每个。


for clusterbbox in clusters:


 voygids = spindex.intersects(clusterbbox)



请注意,一个项可以跨越多个四个四个四元体,所以你可以能不需要额外的生成。

原作者:
...