如何将wkt形式的多边形列表转换为多面?

问题描述 投票:0回答:1

我有一个多边形列表,其中每个多边形是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))')"))

我做错了什么?

python polygon shapely
1个回答
2
投票

你的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)

此示例使用map,但您可以按照自己喜欢的方式应用wkt.loads()函数。

该行实际上做了什么:将wkt.loads()函数应用于list_string列表的每个元素,将生成的迭代器传递给MultiPolygon构造函数,该构造函数期望它表示应该表示形状外部的多边形集合(不是孔,是第二个集合)。

© www.soinside.com 2019 - 2024. All rights reserved.