【问题标题】:IllegalArgumentException: Invalid number of points in LinearRing found 3 - must be 0 or >= 4 - PythonIllegalArgumentException:LinearRing 中发现的点数无效 3 - 必须为 0 或 >= 4 - Python
【发布时间】:2020-02-05 21:00:20
【问题描述】:

我在尝试使用 python 中的 shapely 库创建多边形时遇到问题。

[testPolygon(polygonShape) for polygonShape in fileAppender]

而testPolygon函数定义为:

def testPolygon(polygonShape): 
    if shapely.wkt.loads(polygonShape).is_valid:
        print("great")

但我遇到了这个错误:

IllegalArgumentException: Invalid number of points in LinearRing found 3 - must be 0 or >= 4

在解析字符串对象(polygonShape)之前,是否有任何方法检查它是否是有效的多边形?或者更好的是,如果可以纠正这个损坏的多边形?

【问题讨论】:

    标签: python shapefile shapely wkt


    【解决方案1】:

    您的 LineString wkt 可能包含不是有效多边形的几何图形。例如:

    >>> from shapely.geometry import Polygon
    >>> from shapely.wkt import loads
    
    >>> wkt = 'LINESTRING (0 0, 1 1, 0 0)'
    >>> poly = Polygon(loads(wkt).coords)
    

    如您所见,LineString 确实在同一个顶点开始和结束,并且有多个边,但它不会使其成为多边形,因为您只有 3 个点,即“在 LinearRing 中找到的点数无效 3”:

    IllegalArgumentException: Invalid number of points in LinearRing found 3 - must be 0 or >= 4
    Shell is not a LinearRing
    

    poly 仍然是 Polygon 类型的对象

    >>> type(poly)
    <class 'shapely.geometry.polygon.Polygon'>
    

    所以你可以通过以下方式检查它是否是一个有效的多边形:

    >>> poly.is_empty
    True
    

    为什么要以这种方式检查它是否是有效的多边形?因为IllegalArgumentException 不是一个实际的异常,因为你无法用try/except 捕获它。我不知道为什么。我希望cmets中的人知道。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-12
      • 1970-01-01
      • 2018-10-25
      • 1970-01-01
      • 2015-12-31
      相关资源
      最近更新 更多