Hapus poligon di dalam poligon lain dalam bingkai data

Aug 23 2020

Dengan adanya kerangka data, apakah mungkin menemukan poligon yang berada di dalam poligon lain dalam kerangka data yang sama dan menghapusnya berdasarkan suatu kondisi?

Misalnya, perhatikan kerangka data berikut

                                            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          

Misalkan poligon 3 berada di dalam poligon 2. Karena keduanya merupakan kategori C , saya ingin menghapus poligon 3. Jika keduanya memiliki kategori yang berbeda, saya tidak akan melakukan penghapusan.

Adakah cara untuk melakukan ini dalam geopanda?

Jawaban

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