【问题标题】:Indexing in python quadtreepython四叉树中的索引
【发布时间】:2017-07-26 09:37:41
【问题描述】:

我有一组点及其坐标(纬度、经度),还有一个区域(一个框)。所有的点都在框内。 现在我想考虑点的密度将点分配到小单元(矩形)中。基本上,一个包含许多点的单元格应该被细分为更小的单元格,同时保留具有少量点的较大单元格。

我检查了this question,这与我几乎相同的问题,但我找不到一个好的答案。我认为我应该使用四叉树,但我发现的所有实现都没有提供。

例如,this 库允许制作与框关联的树,然后我们可以插入框如下:

spindex = Index(bbox=(0, 0, 100, 100))
for item in items:
    spindex.insert(item, item.bbox)

但它不允许插入点。此外,我需要获取单元格的 ID(或名称),并检查一个点是否属于给定的单元格。

Here 是我找到的另一个库。它确实允许插入点,但它没有给我单元格的 ID(或名称),所以我无法检查一个点是否属于某个单元格。请注意,树应该自动进行分解。

您能建议我一个解决方案吗? 谢谢。

【问题讨论】:

  • 在不理解的情况下投了反对票:-|
  • 就像您链接的答案所暗示的那样,使用 postgis 之类的东西通常更容易。但是,您可能知道,在 SO 上寻求图书馆建议是题外话。

标签: python python-2.7 python-3.x quadtree


【解决方案1】:

最后,我最终使用了带有 Python 包装器的 Google 的 s2-geometry-library。事实上,这个库创建的每个单元格都不是一个矩形(它是一个投影),但它满足了我的需要。 lib 已经将地球表面划分为不同级别的单元格(四叉树)。给定一个点 (lat,lng),我可以很容易地在叶级获得相应的单元格。从这些叶节点中,我根据需要(单元格中的点数)向上合并单元格。 This 教程详细讲解。

这是我的结果:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-08
    • 2017-08-09
    相关资源
    最近更新 更多