Как я могу преобразовать список полигонов в форме wkt в мультиполигон? - PullRequest
0 голосов
/ 23 апреля 2019

У меня есть список полигонов, где каждый полигон представляет собой wkt форму следующим образом:

list_polygons =  ['POLYGON ((-88.131229288 41.900200029,-88.12973798 41.900104202,-88.129785999 41.894907769,-88.131352409 41.895051521,-88.131229288 41.900200029))', 
                  'POLYGON ((-88.121359263 41.887694051,-88.12027565 41.887654116,-88.120264921 41.884451192,-88.11968556399999 41.884483142,-88.11962119099999 41.882669946,-88.121251974 41.882637995,-88.121359263 41.887694051))']

Я хочу преобразовать в многоугольник wkt как:

'MULTIPOLYGON (((-88.131229288 41.900200029, -88.12973798 41.900104202, -88.12978599900001 41.894907769, -88.131352409 41.895051521, -88.131229288 41.900200029)), ((-88.121359263 41.887694051, -88.12027565 41.887654116, -88.120264921 41.884451192, -88.11968556399999 41.884483142, -88.11962119099999 41.882669946, -88.121251974 41.882637995, -88.121359263 41.887694051)))'

Я попробовал следующее, но дает мне AssertionError:

from shapely.geometry.multipolygon import MultiPolygon
Multipolygon(list_polygons)

Я тоже пытался так отлаживать

p = wkt.loads('POLYGON ((-88.131229288 41.900200029,-88.12973798 41.900104202,-88.129785999 41.894907769,-88.131352409 41.895051521,-88.131229288 41.900200
029))')
*** SyntaxError: SyntaxError('invalid syntax', ('<string>', 1, 1, "= wkt.loads('POLYGON ((-88.131229288 41.900200029,-88.12973798 41.900104202,-88.129785999 41.894907769,-88.131352409 41.895051521,-88.131229288 41.900200029))')"))

Что я делаю не так?

1 Ответ

2 голосов
/ 23 апреля 2019

Ваш list_polygons на самом деле представляет собой список строк, вам нужно превратить их в полигоны, а затем использовать конструктор MultiPolygon, чтобы создать то, что вам нужно:

import shapely.wkt as wkt
from shapely.geometry import MultiPolygon

list_string = [
    'POLYGON ((-88.131229288 41.900200029,-88.12973798 41.900104202,-88.129785999 41.894907769,-88.131352409 41.895051521,-88.131229288 41.900200029))',
    'POLYGON ((-88.121359263 41.887694051,-88.12027565 41.887654116,-88.120264921 41.884451192,-88.11968556399999 41.884483142,-88.11962119099999 41.882669946,-88.121251974 41.882637995,-88.121359263 41.887694051))'
]

c = MultiPolygon(map(wkt.loads, list_string))

print(c)

В этом примере используется карта, но вы, конечно, можете применять функцию wkt.loads() любым удобным для вас способом.

Что на самом деле делает строка: применяет функцию wkt.loads() к каждому элементу списка list_string, передавая полученный итератор конструктору MultiPolygon, который ожидает, что он будет представлять коллекцию полигонов, которые должны представлять внешние области вашего формы (не отверстия, это будет вторая коллекция).

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