跳转到主要内容

小型、便携的R树。

项目描述

Flatrtree - Python

Flatrtree是一个用于读取和写入R树的序列化格式和库集。它直接受到FlatbushFlatGeobuf的启发,旨在在新环境中使小型、便携的R树变得可用。

  • 将R树存储到磁盘或通过网络传输。
  • 在一种语言中构建R树,在另一种语言中查询。
  • 在读取它们索引的数据之前查询R树。

安装

$ pip install flatrtree

使用

Flatrtree将构建和查询行为分开。构建者不知道如何查询索引,索引也不知道它是如何构建的。这受到了FlatBuffers的启发。

import flatrtree

# Add items to a builder object
builder = flatrtree.HilbertBuilder() # or OMTBuilder or your own
for i, item in enumerate(items):
    # The first argument is an integer reference to the item being indexed
    builder.add(i, item.minx, item.miny, item.maxx, item.maxy)

degree = 10 # node capacity

# Create an R-tree object from the builder
rtree = builder.finish(degree)

# Search for items that intersect a bounding box
for i in rtree.search(minx, miny, maxx, maxy):
    item = items[i]
    # ...

# Supply a function for calculating the distance between bounding boxes
# Planar and geodetic functions are included in the library
box_dist = flatrtree.planar_box_dist

# Find the nearest neighbors with a custom halt condition
for i, dist in rtree.neighbors(x, y, box_dist):
    if dist > maxDist:
        break
    item = item[i]
    dist # units match the given box distance function

序列化

Flatrtree使用协议缓冲区进行序列化,利用varint编码减少字节数的输出大小。在序列化方面有很多权衡要考虑,这似乎是一个良好的起点。如果您有更好的需求,可以使用类似FlatBuffers的工具轻松地创建自己的格式。

# Specify the level of decimal precision you need.
# The output size will decrease as precision decreases.
precision = 7

# Serialize to bytes for storage and/or transport.
data = flatrtree.serialize(rtree, precision)

# Load the R-tree from bytes.
rtree = flatrtree.deserialize(data)

示例使用

此示例从一个换行符分隔的GeoJSON文件构建一个R树,并将其存储到磁盘。R树包含每个要素从文件开头开始的偏移量。

import json
import flatrtree
from shapely.geometry import shape

builder = flatrtree.HilbertBuilder()

with open("us-block-groups.json") as f:
    pos = f.tell()
    line = f.readline()

    while line:
        feature = json.loads(line)
        geom = shape(feature["geometry"])
        minx, miny, maxx, maxy = geom.bounds

        builder.add(pos, minx, miny, maxx, maxy)

        pos = f.tell()
        line = f.readline()


rtree = builder.finish(flatrtree.DEFAULT_DEGREE)

with open("us-block-groups.json.idx", "wb") as f:
    f.write(flatrtree.serialize(rtree, precision=6))

下一个示例从磁盘读取R树,并通过边界框进行搜索以找到相关要素。通过直接跳转到搜索返回的GeoJSON要素,我们只读取和解析所需的数据。

import json
import flatrtree

with open("us-block-groups.json.idx", "rb") as f:
    rtree = flatrtree.deserialize(f.read())

results = []
with open("tests/us-block-groups.json") as f:
    minx, miny, maxx, maxy = -96.985931, 32.630123, -96.571198, 32.914180
    for pos in rtree.search(minx, miny, maxx, maxy):
        f.seek(pos)
        feature = json.loads(f.readline())
        results.append(feature)

下一个示例找到与给定点的半径相交的所有相邻要素。

import json
import flatrtree

with open("us-block-groups.json.idx", "rb") as f:
    rtree = flatrtree.deserialize(f.read())

neighbors = []
with open("us-block-groups.json") as f:
    x, y = -96.985931, 32.630123
    for pos, meters in rtree.neighbors(x, y, flatrtree.geodetic_box_dist):
        if meters > 500:
            break
        f.seek(pos)
        feature = json.loads(f.readline())
        neighbors.append(feature)

项目详情


下载文件

下载适合您平台文件。如果您不确定选择哪个,请了解更多关于 安装包 的信息。

源分布

flatrtree-1.0.0rc2.tar.gz (121.7 kB 查看哈希值)

上传时间

构建分布

flatrtree-1.0.0rc2-pp39-pypy39_pp73-win_amd64.whl (182.0 kB 查看哈希值)

上传时间 PyPy Windows x86-64

flatrtree-1.0.0rc2-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (198.9 kB 查看哈希值)

上传时间 PyPy manylinux: glibc 2.17+ x86-64

flatrtree-1.0.0rc2-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (203.5 kB 查看哈希值)

上传时间 PyPy manylinux: glibc 2.17+ i686 manylinux: glibc 2.5+ i686

flatrtree-1.0.0rc2-pp39-pypy39_pp73-macosx_10_9_x86_64.whl (182.1 kB 查看哈希值)

上传时间 PyPy macOS 10.9+ x86-64

flatrtree-1.0.0rc2-pp38-pypy38_pp73-win_amd64.whl (182.9 kB 查看哈希值)

上传时间 PyPy Windows x86-64

flatrtree-1.0.0rc2-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (199.0 kB 查看哈希值)

上传时间 PyPy manylinux: glibc 2.17+ x86-64

flatrtree-1.0.0rc2-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (203.5 kB 查看哈希值)

上传时间 PyPy manylinux: glibc 2.17+ i686 manylinux: glibc 2.5+ i686

flatrtree-1.0.0rc2-pp38-pypy38_pp73-macosx_10_9_x86_64.whl (182.3 kB 查看哈希值)

上传时间 PyPy macOS 10.9+ x86-64

flatrtree-1.0.0rc2-pp37-pypy37_pp73-win_amd64.whl (182.9 kB 查看哈希值)

上传时间: PyPy Windows x86-64

flatrtree-1.0.0rc2-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (199.1 kB 查看哈希值)

上传时间: PyPy manylinux: glibc 2.17+ x86-64

flatrtree-1.0.0rc2-pp37-pypy37_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (203.7 kB 查看哈希值)

上传时间: PyPy manylinux: glibc 2.17+ i686 manylinux: glibc 2.5+ i686

flatrtree-1.0.0rc2-pp37-pypy37_pp73-macosx_10_9_x86_64.whl (182.3 kB 查看哈希值)

上传时间: PyPy macOS 10.9+ x86-64

flatrtree-1.0.0rc2-cp311-cp311-win_amd64.whl (232.7 kB 查看哈希值)

上传时间: CPython 3.11 Windows x86-64

flatrtree-1.0.0rc2-cp311-cp311-win32.whl (220.7 kB 查看哈希值)

上传时间: CPython 3.11 Windows x86

flatrtree-1.0.0rc2-cp311-cp311-musllinux_1_1_x86_64.whl (1.3 MB 查看哈希值)

上传时间: CPython 3.11 musllinux: musl 1.1+ x86-64

flatrtree-1.0.0rc2-cp311-cp311-musllinux_1_1_i686.whl (1.3 MB 查看哈希值)

上传时间: CPython 3.11 musllinux: musl 1.1+ i686

flatrtree-1.0.0rc2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (751.4 kB 查看哈希值)

上传时间: CPython 3.11 manylinux: glibc 2.17+ x86-64

flatrtree-1.0.0rc2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (733.3 kB 查看哈希值)

上传时间: CPython 3.11 manylinux: glibc 2.17+ i686 manylinux: glibc 2.5+ i686

flatrtree-1.0.0rc2-cp311-cp311-macosx_10_9_x86_64.whl (259.5 kB 查看哈希值)

上传时间 CPython 3.11 macOS 10.9+ x86-64

flatrtree-1.0.0rc2-cp311-cp311-macosx_10_9_universal2.whl (387.6 kB 查看哈希值)

上传时间 CPython 3.11 macOS 10.9+ universal2 (ARM64, x86-64)

flatrtree-1.0.0rc2-cp310-cp310-win_amd64.whl (234.9 kB 查看哈希值)

上传时间 CPython 3.10 Windows x86-64

flatrtree-1.0.0rc2-cp310-cp310-win32.whl (222.2 kB 查看哈希值)

上传时间 CPython 3.10 Windows x86

flatrtree-1.0.0rc2-cp310-cp310-musllinux_1_1_x86_64.whl (1.3 MB 查看哈希值)

上传时间 CPython 3.10 musllinux: musl 1.1+ x86-64

flatrtree-1.0.0rc2-cp310-cp310-musllinux_1_1_i686.whl (1.3 MB 查看哈希值)

上传时间 CPython 3.10 musllinux: musl 1.1+ i686

flatrtree-1.0.0rc2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (740.0 kB 查看哈希值)

上传时间 CPython 3.10 manylinux: glibc 2.17+ x86-64

flatrtree-1.0.0rc2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (731.9 kB 查看哈希值)

上传时间 CPython 3.10 manylinux: glibc 2.17+ i686 manylinux: glibc 2.5+ i686

flatrtree-1.0.0rc2-cp310-cp310-macosx_10_9_x86_64.whl (260.6 kB 查看哈希值)

上传时间 CPython 3.10 macOS 10.9+ x86-64

flatrtree-1.0.0rc2-cp310-cp310-macosx_10_9_universal2.whl (389.6 kB 查看哈希值)

上传时间 CPython 3.10 macOS 10.9+ universal2 (ARM64, x86-64)

flatrtree-1.0.0rc2-cp39-cp39-win_amd64.whl (238.0 kB 查看哈希值)

上传于 CPython 3.9 Windows x86-64

flatrtree-1.0.0rc2-cp39-cp39-win32.whl (224.6 kB 查看哈希值)

上传于 CPython 3.9 Windows x86

flatrtree-1.0.0rc2-cp39-cp39-musllinux_1_1_x86_64.whl (1.3 MB 查看哈希值)

上传于 CPython 3.9 musllinux: musl 1.1+ x86-64

flatrtree-1.0.0rc2-cp39-cp39-musllinux_1_1_i686.whl (1.3 MB 查看哈希值)

上传于 CPython 3.9 musllinux: musl 1.1+ i686

flatrtree-1.0.0rc2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (750.9 kB 查看哈希值)

上传于 CPython 3.9 manylinux: glibc 2.17+ x86-64

flatrtree-1.0.0rc2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (744.0 kB 查看哈希值)

上传于 CPython 3.9 manylinux: glibc 2.17+ i686 manylinux: glibc 2.5+ i686

flatrtree-1.0.0rc2-cp39-cp39-macosx_10_9_x86_64.whl (263.5 kB 查看哈希值)

上传于 CPython 3.9 macOS 10.9+ x86-64

flatrtree-1.0.0rc2-cp39-cp39-macosx_10_9_universal2.whl (395.4 kB 查看哈希值)

上传于 CPython 3.9 macOS 10.9+ universal2 (ARM64, x86-64)

flatrtree-1.0.0rc2-cp38-cp38-win_amd64.whl (237.2 kB 查看哈希值)

上传于 CPython 3.8 Windows x86-64

flatrtree-1.0.0rc2-cp38-cp38-win32.whl (224.4 kB 查看哈希值)

上传于 CPython 3.8 Windows x86

flatrtree-1.0.0rc2-cp38-cp38-musllinux_1_1_x86_64.whl (1.3 MB 查看哈希值)

上传于 CPython 3.8 musllinux: musl 1.1+ x86-64

flatrtree-1.0.0rc2-cp38-cp38-musllinux_1_1_i686.whl (1.4 MB 查看哈希值)

上传时间 CPython 3.8 musllinux: musl 1.1+ i686

flatrtree-1.0.0rc2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (750.9 kB 查看哈希值)

上传时间 CPython 3.8 manylinux: glibc 2.17+ x86-64

flatrtree-1.0.0rc2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (743.7 kB 查看哈希值)

上传时间 CPython 3.8 manylinux: glibc 2.17+ i686 manylinux: glibc 2.5+ i686

flatrtree-1.0.0rc2-cp38-cp38-macosx_10_9_x86_64.whl (261.6 kB 查看哈希值)

上传时间 CPython 3.8 macOS 10.9+ x86-64

flatrtree-1.0.0rc2-cp38-cp38-macosx_10_9_universal2.whl (392.2 kB 查看哈希值)

上传时间 CPython 3.8 macOS 10.9+ universal2 (ARM64, x86-64)

flatrtree-1.0.0rc2-cp37-cp37m-win_amd64.whl (235.9 kB 查看哈希值)

上传时间 CPython 3.7m Windows x86-64

flatrtree-1.0.0rc2-cp37-cp37m-win32.whl (223.1 kB 查看哈希值)

上传时间 CPython 3.7m Windows x86

flatrtree-1.0.0rc2-cp37-cp37m-musllinux_1_1_x86_64.whl (1.3 MB 查看哈希值)

上传时间 CPython 3.7m musllinux: musl 1.1+ x86-64

flatrtree-1.0.0rc2-cp37-cp37m-musllinux_1_1_i686.whl (1.3 MB 查看哈希值)

上传时间 CPython 3.7m musllinux: musl 1.1+ i686

flatrtree-1.0.0rc2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (707.0 kB 查看哈希值)

上传于 CPython 3.7m manylinux: glibc 2.17+ x86-64

flatrtree-1.0.0rc2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (696.6 kB 查看哈希值)

上传于 CPython 3.7m manylinux: glibc 2.17+ i686 manylinux: glibc 2.5+ i686

flatrtree-1.0.0rc2-cp37-cp37m-macosx_10_9_x86_64.whl (259.3 kB 查看哈希值)

上传于 CPython 3.7m macOS 10.9+ x86-64

由以下支持