8

我有两组带有多边形的 shapefile。一组 shapefile 只是我感兴趣的美国县,这因公司和年份而异。另一组 shapefile 是公司的业务领域,当然这因公司和年份而异。我需要每年为每个公司获取这两层的交集。到目前为止,函数 overlay(df1, df2, how = 'intersection') 实现了我的目标。但是每个公司年需要大约 300 秒。鉴于我有很长的公司名单和很多年,这需要我几天时间才能完成。有什么方法可以提高这个性能吗?

我注意到,如果我在 ArcGIS 中执行相同的操作,则 300 秒会缩短到几秒钟。但我是 ArcGIS 的新用户,对其中的 python 还不熟悉。

4

2 回答 2

5

如果您查看当前的 geopandas 覆盖源代码,他们实际上已经更新了覆盖功能以利用 Rtree 空间索引!我认为此时手动执行 Rtree 不会更快(实际上可能会更慢)。

在此处查看源代码:https ://github.com/geopandas/geopandas/blob/master/geopandas/tools/overlay.py

于 2020-01-29T21:45:15.133 回答
3

希望您现在已经弄清楚了,但解决方案是利用 Geopanda 的 R-tree 空间索引。通过适当地实施,您可以实现数量级的改进。

Goeff Boeing 编写了一个出色的教程

http://geoffboeing.com/2016/10/r-tree-spatial-index-python/

于 2017-06-14T17:34:55.160 回答