如何在熊猫中找到两个地理数据框的交集?

时间:2018-02-04 02:27:53

标签: r python-3.x geospatial arcgis geopandas

我工作的一些信息:

  1. 我有一个形状文件,其中包含从ARC GIS导出的县土壤ssurgo数据。它被读入GeoDataFrame(Gdf1)。

  2. 我有一个形状文件,其中包含从SMS AgLeader导出的服务器场的各个字段的边界。它已被读作DataFrame并转换为GeoDataFrame(Gdf2)。

  3. 当我执行子图时:

    aa = Gdf1.plot()
    Gdf2.plot(ax=aa)
    

    我可以看到Gdf2属于Gdf1。

    这是我被困的地方:

    我正在尝试复制"作物"来自R.的函数Python似乎有" overlay"应该工作的函数,但我的代码永远不会完成运行。在这种情况下,叠加要么是过度的,要么就是不起作用(混淆,而不是声明,而不是我的挫折)。

    R代码示例(有效):

    result <- crop(Gdf1, Gdf2)
    

    永远不会执行的Python代码示例:

    result = overlay(Gdf1, Gdf2, how='intersection')
    

    我不确定的其他尝试:

    * 1。 result = Gdf1.geometry.intersects(Gdf2.geometry)#result.plot()生成一条带水平线的图。

    * 2。 result = Gdf1 [Gdf1.within(Gdf2)]#result.plot()给出错误:&#34;无法从重复的轴重新索引&#34;。

    * 3。 result = Gdf1 [&#39; geometry&#39;]&amp; Gdf2 [&#39; geometry&#39;]#result.plot()生成一个空白图。

1 个答案:

答案 0 :(得分:0)

正如Joris在评论中所说,叠加的糟糕表现是众所周知的问题。 然而,这对于“相交”操作来说尤其糟糕。

如果您可以使用'内'或'包含',我会尝试一下。它们在当前实现中要快得多。

内部/包含和交叉之间的主要区别在于它们处理边界的方式。来自文档:

  

相交
  如果每个对象的边界和内部以任何方式与另一个对象的边界和内部相交,则返回True。

     


内   如果每个对象的边界和内部仅与另一个对象的内部(不是其边界或外部)相交,则返回True。 (反向包含())

除此之外,你可以通过以下方式解决你的第二次尝试:

result = Gdf1.loc[Gdf1.within(Gdf2)]