【问题标题】:Shapely "is_valid" returns True to invalid overlap polygonsShapely "is_valid" 对无效的重叠多边形返回 True
【发布时间】:2023-04-06 15:22:01
【问题描述】:

我有 5 个多边形的 shapefile,我用 geopandas 加载。我想检查这些多边形是否相互重叠。

我想识别所有重叠的多边形。我在 shapely 手册中读到 is_valid 工具可以检测到:

object.is_valid 如果特征在某种意义上是“有效的”,则返回 True 1.

注意

有效性测试仅对多边形和多多边形有意义。 对于其他类型的几何图形,始终返回 True。

有效的多边形不得具有任何重叠的外部或内部 戒指。有效的 MultiPolygon 可能不会收集任何重叠的多边形。 对无效特征的操作可能会失败。

所以我已经在我的多边形上尝试过:

imprt geopandas as gpd
import shapely as sh

shapes = gpd.read_file(r'test.shp')

shapes.head()

>>>
    id  geometry
0   1   POLYGON ((15.49457 7.61388, 15.71412 7.59753, ...
1   3   POLYGON ((15.60721 7.70417, 15.91074 7.71807, ...
2   2   POLYGON ((15.86208 7.28826, 16.07873 7.31838, ...
3   5   POLYGON ((15.34075 7.85246, 15.46587 7.85362, ...
4   4   POLYGON ((15.84123 7.48057, 16.03354 7.48405, ...

shapes['validation']=shapes['geometry'].is_valid

shapes.head()

>>>id   geometry                                           validation
0   1   POLYGON ((15.49457 7.61388, 15.71412 7.59753, ...   True
1   3   POLYGON ((15.60721 7.70417, 15.91074 7.71807, ...   True
2   2   POLYGON ((15.86208 7.28826, 16.07873 7.31838, ...   True
3   5   POLYGON ((15.34075 7.85246, 15.46587 7.85362, ...   True
4   4   POLYGON ((15.84123 7.48057, 16.03354 7.48405, ...   True

正如你所见,即使 1,3,4 重叠,所有多边形都为 True。为什么会这样?正如我从手册中了解到的那样,如果多边形来自同一层,它也应该显示?

我的最终目标:将重叠多边形分类为假/重叠

【问题讨论】:

    标签: python geometry overlap geopandas shapely


    【解决方案1】:

    Shapely 的is_valid 在单个多边形上工作,并检查该多边形的外环和内环之间的重叠。它不检查与其他人的重叠。你所有的多边形都是完全有效的。

    如果您想检查多边形是否与其他多边形重叠,您应该使用 geopandas 空间索引功能进行检查。

    input_indices, result_indices = shapes.sindex.query_bulk(shapes.geometry, predicate='overlaps')
    overlapping = numpy.unique(result_indices)  # integer indeces of overlapping
    

    如果你想从中得到一个布尔数组:

    import numpy
    
    results = numpy.ones(len(shapes), dtype=bool)
    results[overlapping] = False
    
    shapes['validation'] = results
    

    请注意,这需要 geopandas 0.8+

    【讨论】:

    • @martinflies 谢谢你的回答,你能和我分享一下链接在手册的哪里吗?没找到
    • 此文档正在编写中,对此感到抱歉。将于年底发布。它仍然是新功能。
    • 它暴露了 pygoes STRtree API,所以你可以查看他们的文档pygeos.readthedocs.io/en/latest/strtree.html
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-11
    相关资源
    最近更新 更多