Python 使用geopandas识别单个GeoJSON文件中的相交多边形

Python 使用geopandas识别单个GeoJSON文件中的相交多边形,python,geojson,shapely,geopandas,Python,Geojson,Shapely,Geopandas,我正在尝试开发一些工具来管理一个大的GeoJSON文件。其中一个工具将识别GeoJSON文件中的交叉特征。在尝试这样做时,我尝试在加载文件的两个geopandas帧之间进行空间连接,但列出了每个特征,因为它与自身相交。是否有办法仅获取与自身以外的任何东西相交的特征的列表?您可以通过使用例如apply方法和列表理解(根据图层的所有特征测试每个特征)来获取每个特征的相交特征的id并验证测试的功能是否不相同(if x!=gdf.geometry[i]在下面的代码段中),但这不是特别有效的… 例如,如果

我正在尝试开发一些工具来管理一个大的GeoJSON文件。其中一个工具将识别GeoJSON文件中的交叉特征。在尝试这样做时,我尝试在加载文件的两个geopandas帧之间进行空间连接,但列出了每个特征,因为它与自身相交。是否有办法仅获取与自身以外的任何东西相交的特征的列表?

您可以通过使用例如
apply
方法和列表理解(根据图层的所有特征测试每个特征)来获取每个特征的相交特征的id并验证测试的功能是否不相同(
if x!=gdf.geometry[i]
在下面的代码段中),但这不是特别有效的…
例如,如果我想创建一个包含相交特征id的字段
'id\u intersect'
,我可能会:

In [5]: geoms = gdf.geometry

In [6]: gdf['id_intersect'] = geoms.apply(
   ...:         lambda x: [i for i in range(len(geoms))
   ...:                    if x != geoms[i] and x.intersects(geoms[i])])

In [7]: print(gdf['id_intersect'])
0     []
1    [2]
2    [1]
Name: id_intersect, dtype: object

In [8]: gdf.plot()
Out[8]: <matplotlib.axes._subplots.AxesSubplot at 0x9f189d0c>
[5]中的
geoms=gdf.geometry
在[6]中:gdf['id\u intersect']=geoms.apply(
…:λx:[i代表范围内的i(len(geoms))
…:如果x!=geoms[i]和x.相交(geoms[i]))
在[7]中:打印(gdf['id\u intersect'])
0     []
1    [2]
2    [1]
名称:id_intersect,数据类型:object
在[8]:gdf.plot()中
出[8]:

您可以使用GeoDataFrame(形状)中的唯一ID,如果需要,您可以制作一个,然后找到与ID不匹配的ID

 together = geopandas.sjoin(shapes, shapes.set_index("UNIQUE_ID"))
 together.loc[together.UNIQUE_ID != together.index_right]
这将返回所有多边形相互相交的GeoDataFrame。祝你好运