Как создать многоугольник с учетом его точек вершины?
Я хочу создать многоугольник из красивых точек.
from shapely import geometry
p1 = geometry.Point(0,0)
p2 = geometry.Point(1,0)
p3 = geometry.Point(1,1)
p4 = geometry.Point(0,1)
pointList = [p1, p2, p3, p4, p1]
poly = geometry.Polygon(pointList)
дает ошибку типа TypeError: object of type 'Point' has no len()
Как создать Polygon
из стройных объектов Point
?
Ответы
Ответ 1
Если вы специально хотите построить свой Polygon из точек правильной геометрии, тогда вызовите их свойства x, y в понимании списка. Другими словами:
from shapely import geometry
poly = geometry.Polygon([[p.x, p.y] for p in pointList])
print(poly.wkt) # prints: 'POLYGON ((0 0, 1 0, 1 1, 0 1, 0 0))'
Обратите внимание, что фигура достаточно умна, чтобы закрыть многоугольник от вашего имени, т.е. вам необязательно снова передавать первую точку в конце.
Ответ 2
Для объекта Polygon
требуется вложенный список чисел, а не список объектов Point
.
polygon = Polygon([[0, 0], [1, 0], [1, 1], [0, 1]])
Ответ 3
Конструктор Polygon
не ожидает список объектов Point
а список координат точек.
См. Https://shapely.readthedocs.io/en/latest/manual.html#polygons.
Ответ 4
В версии 1.7a2
они исправили это.
Рассматриваемый код будет просто работать.
Ссылка на CHANGES.txt