簡體   English   中英

如何從 Shapely 中的多多邊形中提取多邊形?

[英]How to extract Polygons from Multipolygons in Shapely?

我正在嘗試從 Shapely 中的多面體中提取多邊形。 我可以使用 Shapely 中的MultiPolygon將多邊形列表轉換為多面體。

>>> Multi = MultiPolygon([shape(pol['geometry']) for pol in fiona.open('data.shp')]) 

和,

>>> Multi.wkt
'MULTIPOLYGON (((249744.2315302934148349 142798.1643468967231456, 250113.7910872535139788 142132.9571443685272243, 250062.6213024436729029 141973.7622582934272941, 249607.7787708004761953 141757.7120557629095856, 249367.7742475979903247 142304.6840291862317827, 249367.7742475979903247 142304.6840291862317827, 249744.2315302934148349 142798.1643468967231456)), 
               ((249175.7899173096520826 142292.5352640640921891, 249367.7742475979903247 142304.6840291862317827, 249607.7787708004761953 141757.7120557629095856, 249014.4539607730694115 141876.1348429077770561, 249175.7899173096520826 142292.5352640640921891)))'

有誰知道我怎樣才能扭轉這個過程,即給定一個多面體,我怎樣才能將它轉換為單獨的多邊形?

簡單地做

Polygons = list(Multi)

這將提取多邊形並將它們放入列表中。

根據集合的文檔 ,其中包括MultiPointMultiLineStringMultiPolygon等類,它們的成員可以“ 通過geoms屬性或通過使用inlist()的迭代器協議訪問

from shapely.geometry import MultiPolygon, Polygon

multipolygon = MultiPolygon([Polygon([(0, 0), (1, 1), (1, 0)]),
                             Polygon([(0, 0), (1, 1), (0, 1)])])

polygons = list(multipolygon)
print(*polygons)
# POLYGON ((0 0, 1 1, 1 0, 0 0)) POLYGON ((0 0, 1 1, 0 1, 0 0))

polygons = list(multipolygon.geoms)
print(*polygons)
# POLYGON ((0 0, 1 1, 1 0, 0 0)) POLYGON ((0 0, 1 1, 0 1, 0 0))

for polygon in multipolygon:  # same for multipolygon.geoms
    print(polygon)
# POLYGON ((0 0, 1 1, 1 0, 0 0))
# POLYGON ((0 0, 1 1, 0 1, 0 0))

您還可以通過索引提取單個幾何:

print(multipolygon[0])
POLYGON ((0 0, 1 1, 1 0, 0 0))

切片它們會給你一個集合:

print(multipolygon[:1])
MULTIPOLYGON (((0 0, 1 1, 1 0, 0 0)))

為了避免在使用這個非常好的答案時出現棄用警告,請執行以下操作:

Polygons = list(Multipolygon.geoms)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM