【问题标题】:Using Geopandas, how do I select all points not within a polygon?使用 Geopandas,如何选择不在多边形内的所有点?
【发布时间】:2019-03-07 03:15:44
【问题描述】:

我有一个包含芝加哥地址的 DataFrame,我已将其地理编码为纬度和经度值,然后编码为 Point 对象(使 DataFrame 成为 GeoDataFrame)。一小部分在芝加哥以外的地方被错误地用 LatLong 值进行了地理编码。我有一个芝加哥边界的 shapefile (GeoDataFrame),我想选择所有点在芝加哥边界多边形之外的所有行。

选择多边形内的所有点很容易(通过 geopandas sjoin 函数),但我还没有找到一种选择不在多边形内的点的好方法。有吗?

【问题讨论】:

    标签: python pandas shapely geopandas


    【解决方案1】:

    如果您将芝加哥边界 GeoDataFrame 转换为单个多边形,例如:

    chicago = df_chicago.geometry.unary_union
    

    然后您可以使用带有within 运算符的布尔过滤来选择芝加哥内外的点:

    within_chicago = df[df.geometry.within(chicago)]
    outside_chicago = df[~df.geometry.within(chicago)]
    

    使用~ 反转布尔条件。

    或者,您可以使用disjoint 空间谓词:

    outside_chicago = df[df.geometry.disjoint(chicago)]
    

    【讨论】:

    • 我不知道为什么,但是做df[~df.geometry.within(chicago)] 给出了我所有的点都在我的多边形之外(这是一个单一的多边形 BTW),而df[df.geometry.disjoint(chicago)] 给了我预期的结果(在我的情况下,所有点都在多边形之外,所以我的outside_chicago 是空的)。
    猜你喜欢
    • 2018-06-14
    • 2016-11-17
    • 1970-01-01
    • 2020-06-07
    • 1970-01-01
    • 2020-04-04
    • 1970-01-01
    • 2021-08-27
    • 1970-01-01
    相关资源
    最近更新 更多