Rimuovi i poligoni all'interno di altri poligoni in un dataframe
Aug 23 2020
Dato un dataframe, è possibile trovare poligoni che si trovano all'interno di un altro poligono nello stesso dataframe e rimuoverli in base a una condizione?
Ad esempio, considera il seguente dataframe
geometry category
0 POLYGON ((332294.432 2794730.319, 332294.032 2... A
1 POLYGON ((332193.232 2794730.719, 332192.832 2... B
2 POLYGON ((332271.632 2794731.519, 332271.232 2... C
3 POLYGON ((332271.632 2794731.519, 332271.232 2... C
Supponiamo che il poligono 3 si trovi all'interno del poligono 2. Poiché sono entrambi di categoria C , vorrei rimuovere il poligono 3. Se fossero di categorie diverse, non farei una rimozione.
C'è un modo per farlo all'interno di geopandas?
Risposte
2 BERA Aug 23 2020 at 00:43

import geopandas as gpd
from itertools import permutations
df = gpd.read_file(r'/home/bera/Desktop/within.shp')
category_field = 'cat'
indices = df.index.to_list()
to_delete = []
for p1, p2 in permutations(indices,2): #https://stackoverflow.com/questions/104420/how-to-generate-all-permutations-of-a-list
#print(p1, p2)
if df.iloc[p1][category_field] == df.iloc[p2][category_field] and df.iloc[p1].geometry.within(df.iloc[p2].geometry):
to_delete.append(p1)
#>>to_delete
#>>Out[18]: [1]
if len(to_delete)>0:
df = df.drop(df.index[to_delete])