read_file() 上的 Geopandas 警告

Geopandas warning on read_file()

我在使用 geopanda 的 read_file():

读取 geojson 时收到以下警告
...geodataframe.py:422: RuntimeWarning: Sequential read of iterator was interrupted. Resetting iterator. This can negatively impact the performance.
  for feature in features_lst:

这是我使用的代码示例:

crime_gdf = gpd.read_file('datasets/crimes.geojson', bbox=bbox)

crimes.geojson是一个包含大量点的文件,每个点都有一个'Crime type'

bbox定义边界

代码按预期运行,但我不理解该警告。

编辑

我将 geojson 转换为 feather,我得到了同样的警告。

我发现这个 fiona PR 引用了警告:https://github.com/Toblerity/Fiona/pull/965

在最近打开的 Collection 上调用 list(src) 时,我可以使用 fiona 1.8.18 重现该问题,但不能使用 1.8.17。所以我认为这是在 2020-11-17 发布的 fiona 1.8.18 中引入的回归。

在 Fiona 的问题跟踪器中查看我的评论:https://github.com/Toblerity/Fiona/issues/986

GDAL(Fiona 用来访问地理数据的库)在当前读取的要素上维护一个迭代器。对于某些驱动程序,有一些操作会影响此迭代器。因此,在这样的操作之后,我们必须确保将迭代器设置到正确的位置,以确保连续读取数据。此类操作包括统计数据集中的所有特征,分别计算其范围。

GDAL 中有不同类型的驱动程序。有些驱动程序支持随机访问,有些则不支持。对于不支持随机访问的驱动程序,迭代器的重置涉及再次读取所有功能直到迭代器位置。由于这是一项可能代价高昂的操作,因此会发出此 RuntimeWarning,以便用户了解此行为。

虽然在某些情况下忽略警告可能会导致问题,但我发现在我的代码输出中重复出现这个特别烦人。

我发现使用

可以忽略警告
import warnings
# filter out RuntimeWarnings, due to geopandas/fiona read file spam
# 
warnings.filterwarnings("ignore",category=RuntimeWarning)

我在评论中添加了引用这个 post 来解释为什么我要过滤掉这些警告。当此警告在未来的 geopandas / fiona 版本中被禁止时,则可能应该删除此代码片段,因为它也可能禁止有意义的警告,并且在某些情况下可能会出现问题。