两个 geopandas GeoSeries 的交集给出警告 "The indices of the two GeoSeries are different." 并且很少匹配

intersection of two geopandas GeoSeries gives warning "The indices of the two GeoSeries are different." and few matches

我正在使用 geopandas 寻找点和多边形之间的交点。 当我使用以下内容时:

intersection_mb = buffers_df.intersection(rest_VIC)

我得到的输出带有一条警告,基本上是说没有交叉点:

0         None
112780    None
112781    None
112782    None
112784    None
      ... 
201314    None
201323    None
201403    None
201404    None
201444    None
Length: 3960, dtype: geometry

警告信息:

 C:\Users\Name\Anaconda3\lib\site-packages\geopandas\base.py:31: UserWarning: The indices of the two GeoSeries are different.
 warn("The indices of the two GeoSeries are different.")

我寻找任何建议,发现我可以通过为要执行交集的两个地理系列设置 crs 来解决,但它没有用。

rest_VIC = rest_VIC.set_crs(epsg=4326, allow_override=True)
buffers_df = buffers_df.set_crs(epsg=4326, allow_override=True)

任何建议都会有所帮助。谢谢。

geopandas.GeoSeries.intersection 是一个 element-wise 操作。来自交叉点文档:

The operation works on a 1-to-1 row-wise manner

有一个可选的align参数,它决定了在根据索引(如果为True,则默认)对齐之后,是否应该首先比较系列,或者是否应该执行交集操作row-wise 基于位置。

所以您收到的警告和生成的 NaN 是因为您正在对具有不匹配索引的数据执行元素比较。 pandas 尝试合并具有 un-aligned 索引的 DataFrames 列时,也会出现同样的问题。

如果您试图在两个数据帧的所有行组合中找到从点到多边形的映射,您正在寻找空间连接,这可以通过 geopandas.sjoin:

intersection_mb = geopandas.sjoin(
    buffers_df,
    rest_VIC,
    how='outer',
    predicate='intersects',
)

有关详细信息,请参阅 merging data 的地理pandas 指南。