可以对Rtree空间索引进行pickling吗?

6

将Rtree进行Pickling似乎并不直观,因为它是一个ctypes包装器。SO上的这个评论支持了这个假设。

但在(早得多的)@sgillies 帖子(该库的作者)中,在评论部分,他建议确实是可行的。

然而,当我在本地重新创建这些步骤时,结果表明不是这样的:

>>> idx = rtree.index.Index()
>>> idx.insert(10, (1,2,3,4))
>>> list(idx.intersection((0,0,5,5)))
# [10]
>>> f = open('foo.p', 'wb')
>>> pickle.dump(idx, f)
>>> a = pickle.load( open( "foo.p", "rb" ) )
>>> a.get_bounds()
# [1.7976931348623157e+308, 1.7976931348623157e+308, -1.7976931348623157e+308, -1.7976931348623157e+308]]
>>> list(a.intersection((0,0,5,5)))
# []

问题: 我是否没有正确执行某个操作以启用空间索引的取样?如果可能进行空间索引,应该采取什么正确的方法?
传闻中,我能够成功地通过pickling过程(由Dask.distributed执行的pickling)传递GeoPandas.GeoDataFrame.sindex。我知道它使用cloudpickle或pickle(依赖于情况),但从GeoPandas方面来看,sindex的类似乎只是rtree.index.Index的包装器。我还没有深入了解为什么会这样,但想先在这里检查一下是否有其他人有见解。
1个回答

0

我已经尝试过Dill,但无法序列化rtree索引对象的数据。 - carton.swing

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接