2017-09-21 5 views

Répondre

1

Configuration

import geopandas as gpd, pandas as pd 
from urbansim.maps import dframe_explorer 
from shapely.geometry import Point 
%matplotlib inline 

c1 = Point(1, 0).buffer(1) 
c2 = Point(.5, 0).buffer(1) 

gdf = gpd.GeoDataFrame(dict(A=[1, 2], B=[3, 4]), geometry=[c1, c2]) 

gdf.plot() 

enter image description here

Solution
En utilisant reduce de functools

from functools import reduce 

intersection = reduce(Point.intersection, gdf.geometry) 

summed = gpd.GeoDataFrame(
    gdf.sum().to_frame().T, 
    geometry=[intersection] 
) 

gdf.set_geometry(
    gdf.difference(intersection) 
).append(summed, ignore_index=True).plot() 

enter image description here

+0

merci. ceci est une partie utile de la réponse, mais alors le gdf aura les polygones d'origine et leurs intersections. Je veux les séparer. Je veux donc l'intersection puis les parties qui ne se croisent pas. En ce qui concerne les parcelles ci-dessus, je veux le croissant face à la droite, l'intersection, et le croissant de gauche. Pardonnez toute ambiguïté dans ma question initiale –

+0

J'ai mis à jour ma réponse. – piRSquared

+0

cela semble génial. Je vous remercie! –