IllegalArgumentException: недопустимое количество точек в LinearRing найдено 3 - должно быть 0 или> = 4 - Python - PullRequest
0 голосов
/ 06 февраля 2020

У меня возникают проблемы при попытке создать многоугольник с использованием библиотеки shapely в python.

[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) допустимым многоугольником, перед его анализом? Или еще лучше, если можно исправить этот поврежденный многоугольник?

1 Ответ

0 голосов
/ 02 апреля 2020

Ваш 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. Я не знаю почему. Я надеюсь, что кто-то в комментариях знает.

...