Как преобразовать GEOS MultiLineString в Полигон?

Я разрабатываю приложение GeoDjango, где пользователи могут загрузить файлы карты и сделать некоторые основные операции отображения как запросы функций в полигонах.

Я распознал, что пользователи, оказывается, загружают "MultiLineString" s вместо "Полигона" s иногда. Это вызывает запросы, ожидающие, что замкнутая геометрия перестанет работать.

Что лучший способ состоит в том, чтобы преобразовать объект MultiLineString в Полигон в Python?

5
задан Georgy 4 December 2019 в 09:18
поделиться

1 ответ

Хехе, сначала я написал это:

def close_geometry(self, geometry):
   if geometry.empty or geometry[0].empty:
       return geometry # empty

   if(geometry[-1][-1] == geometry[0][0]):
       return geometry  # already closed

   result = None
   for linestring in geom:
      if result is None:
          resultstring = linestring.clone()
      else:
          resultstring.extend(linestring.coords)

   geom = Polygon(resultstring)

   return geom

, но потом я обнаружил, что есть изящный маленький метод под названием convx_hull , который автоматически выполняет преобразование многоугольника.

>>> s1 = LineString((0, 0), (1, 1), (1, 2), (0, 1))
>>> s1.convex_hull
<Polygon object at ...>
>>> s1.convex_hull.coords
(((0.0, 0.0), (0.0, 1.0), (1.0, 2.0), (1.0, 1.0), (0.0, 0.0)),)

>>> m1=MultiLineString(s1)
>>> m1.convex_hull
<Polygon object at...>
>>> m1.convex_hull.coords
(((0.0, 0.0), (0.0, 1.0), (1.0, 2.0), (1.0, 1.0), (0.0, 0.0)),)
5
ответ дан 14 December 2019 в 19:01
поделиться
Другие вопросы по тегам:

Похожие вопросы: