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