使用geopandas在单个GeoJSON文件中标识交叉多边形

时间:2017-07-24 18:01:48

标签: python geojson shapely geopandas

我正在尝试开发一些工具来管理可能会出现的大型GeoJSON文件。一个这样的工具将识别GeoJSON文件中的相交特征。在尝试这样做时,我尝试在加载文件的两个geopandas帧之间进行空间连接,但列出了每个要素,因为它与自身相交。有没有办法找回只有与其他任何东西交叉的特征的列表?

2 个答案:

答案 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>

Example layer

答案 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。祝你好运

相关问题