【问题标题】:How can I convert list of polygons in wkt form to a multipolygon?如何将 wkt 形式的多边形列表转换为多多边形?
【发布时间】:2019-04-23 00:22:45
【问题描述】:

我有一个多边形列表,其中每个多边形都是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】:

你的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 构造函数,该构造函数期望它表示应该表示您的外部的多边形集合形状(不是孔,那将是第二个集合)。

【讨论】:

    猜你喜欢
    • 2020-12-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-23
    • 2021-08-17
    • 1970-01-01
    • 2018-06-13
    • 2022-01-23
    相关资源
    最近更新 更多