Python - Проверить, является ли Shapely Polygon прямоугольником - PullRequest
0 голосов
/ 19 июня 2020

После таких операций, как разделение на Polygon, я хотел бы убедиться, что это прямоугольник.
Я попробовал simplify, а затем подсчитал, если число coords равно 5 ...

>>> from shapely.geometry import Polygon
>>> from shapely.ops import split
>>> 
>>> poly1 = Polygon([(0, 0), (0, 1), (0, 3), (2, 3), (2, 2), (2, 0), (0, 0)])
>>> 
>>> poly_check=poly1.simplify(0)
>>> if len(poly_check.exterior.coords)==5:
>>>     print 'Yes, it is a rectangle...'
>>> else:
>>>     print 'No, it is not a rectangle...'
>>> 
Yes, it is a rectangle...

Но это не работает, если начальная точка находится в середине края.

>>> #poly2 is actually a rectangle
>>> poly2 = Polygon([(0, 1), (0, 3), (2, 3), (2, 2), (2, 0), (0, 0), (0, 1)])
>>> 
>>> poly_check=poly2.simplify(0)
>>> if len(poly_check.exterior.coords)==5:
>>>     print 'Yes, it is a rectangle...'
>>> else:
>>>     print 'No, it is not a rectangle...'
>>> 
No, it is not a rectangle...

Как это проверить?

Спасибо

1 Ответ

1 голос
/ 19 июня 2020

Многоугольник является прямоугольником, если его площадь совпадает с площадью его минимального ограниченного прямоугольника. Это известный показатель формы, который называется прямоугольностью.

if poly.area == poly.minimum_rotated_rectangle.area:
    return True

РЕДАКТИРОВАТЬ: Принимая во внимание комментарий об ошибке с плавающей запятой ниже, вы можете либо непосредственно измерить прямоугольность и рассматривать все, что> 0,99 как прямоугольник, либо произвести приблизительное сравнение (например, округление).

if (poly.area / poly.minimum_rotated_rectangle.area) > .99:
    return True
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...