我有一个多边形列表,其中每个多边形是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))')"))
我做错了什么?
你的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构造函数,该构造函数期望它表示应该表示形状外部的多边形集合(不是孔,是第二个集合)。