web-dev-qa-db-ja.com

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)))'

プロセスを逆にする方法を知っている人はいますか?つまり、マルチポリゴンが与えられた場合、それを別々のポリゴンに変換するにはどうすればよいですか?

9
Rahul

単にする

Polygons = list(Multi)

これにより、ポリゴンが抽出され、リストに配置されます。

18
Nbarjest

MultiPointMultiLineStringMultiPolygonなどのクラスを含むコレクションの documentation によると、それらのメンバーは "geomsプロパティを介して、またはinまたはlist() "を使用してイテレータプロトコルを介してアクセスします。

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)))
6
Georgy