【问题标题】:Pure Python Quadtree Implementation纯 Python 四叉树实现
【发布时间】:2011-05-19 14:32:24
【问题描述】:

全部,

有一些关于使用 Python 实现四叉树的示例,但我的问题是,有没有人知道用纯 Python 编写的类,就像我可以轻松包含在我的项目中的单个 .py 文件一样?这里列出了三个最流行的包Are any of these quad-tree libraries any good?,但由于运行它们所需的所有依赖项,我没有运气使用它们。我真的想要一些轻量级且使用起来相对简单的东西。我想通过传入整个地球的边界来调用脚本,然后从那里开始工作。 myMethod((-180,-90,180,90))

谢谢, 亚当

【问题讨论】:

标签: python quadtree


【解决方案1】:

PyQuadTree 是一个非常轻量级的模块(我基于别人的代码构建的)。它是用纯 Python 编写的,没有依赖项,根本不需要任何安装或编译。它是一个单独的 .py 文件,可以很容易地作为更大项目的一部分包含在内,这听起来就像这里被问到的内容。

它也有文档并且支持 Python 2x 和 3x。

【讨论】:

  • 我没有使用四叉树的经验,但我必须为一个轨迹分析项目实施它。请告诉我,如果您的模块可以帮助分析轨迹(由 x,y 坐标序列组成的轨迹数据)
  • 如果你的轨迹只是指代表运动的线条几何图形,那效果很好。但是库不关心几何类型,它只需要一个边界框(xmin,ymin,xmax,ymax)。所以可以在树中插入很多不同的轨迹bbox,然后查询树就可以快速查看一个区域有哪些轨迹。前往博文中链接的 github repo 阅读具体如何使用它。
  • 非常感谢您的回复。请看这里stackoverflow.com/questions/44147628/…我正在尝试在数据框上实现它,我也不确定如何查询树以了解哪些轨迹属于哪些象限。即使是一点点帮助也会非常有用。谢谢。
  • 感谢您的图书馆,我可以部分实现我想要的。但我希望您对一个特殊情况提出建议,其中有两条非常接近的轨迹,并且两者都是水平的。所以他们都有自己的bbox,它只是轨迹上的两条线。因此,如果我给出一个针对这两个轨迹之间区域的交叉框,尽管非常接近,但这两个轨迹不会匹配。对此的解决方案可能是在边界框周围创建一个缓冲区框来解决这种情况。请建议我该怎么办?
  • 如果交集 bbox 不包含两个轨迹 bbox,那么这是预期的行为。不知道为什么你提到它们是水平的,无论如何行为都是一样的。还是您的问题更多是关于如何获得缓冲区内附近的匹配项?如果是这样,我建议提出一个新问题,简短的回答是肯定的,您应该缓冲交集 bbox。 Pyqtree 到目前为止还没有让 x 最近的方法。
【解决方案2】:

看看Rect。你需要2个文件。您可以将它们合并为一个。

【讨论】:

  • code.google.com 上的 Rect 包的 wiki 页面(实际上是整个项目)似乎不见了。有人知道丢失信息的更新链接吗?
  • 这很不幸。 tar.gz 在 PyPi 上仍然可用。
猜你喜欢
  • 1970-01-01
  • 2011-10-05
  • 2011-02-08
  • 2020-12-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-25
相关资源
最近更新 更多