我正在尝试开发一些工具来管理可能会出现的大型GeoJSON文件。一个这样的工具将识别GeoJSON文件中的相交特征。在尝试这样做时,我尝试在加载文件的两个geopandas帧之间进行空间连接,但列出了每个要素,因为它与自身相交。有没有办法找回只有与其他任何东西交叉的特征的列表?
答案 0 :(得分:0)
您可以使用(例如)apply
方法和列表理解(针对图层的所有功能测试每个要素)并验证来获取每个要素的相交要素的ID测试的功能不一样(以下代码段中为if x != gdf.geometry[i]
),但这并不是特别有效...
例如,如果我想创建一个包含相交特征id的字段'id_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>
答案 1 :(得分:0)
您可以使用GeoDataFrame(形状)中的唯一ID,必要时可以制作一个ID,然后找到与ID不匹配的ID。
together = geopandas.sjoin(shapes, shapes.set_index("UNIQUE_ID"))
together.loc[together.UNIQUE_ID != together.index_right]
这将返回一个所有彼此相交的多边形的GeoDataFrame。祝你好运