Saya memiliki Shapefile dengan fitur yang tumpang tindih. Apakah ada cara mudah untuk menggabungkannya dengan geopanda?
Saya menemukan cara dengan rupawan, tetapi saya ingin melakukannya dengan geopanda secara langsung.
Saya memiliki Shapefile dengan fitur yang tumpang tindih. Apakah ada cara mudah untuk menggabungkannya dengan geopanda?
Saya menemukan cara dengan rupawan, tetapi saya ingin melakukannya dengan geopanda secara langsung.
Jawaban:
GeoDataFrame
import geopandas as gpd
g1 = gpd.GeoDataFrame.from_file("poly_intersect.shp")
g1.shape
(4, 3)
1) Anda dapat menggunakan modul itertools
a) Jika Anda ingin menggabungkan persimpangan poligon yang tumpang tindih
import itertools
geoms = g1['geometry'].tolist()
intersection_iter = gpd.GeoDataFrame(gpd.GeoSeries([poly[0].intersection(poly[1]) for poly in itertools.combinations(geoms, 2) if poly[0].intersects(poly[1])]), columns=['geometry'])
intersection_iter.to_file("intersection_iter.shp")
Persatuan
union_iter = intersection_iter.unary_union
b) Jika Anda ingin menggabungkan perubahan poligon berpotongan intersection
dengan union
(semua poligon tumpang tindih dalam contoh saya)
2) Anda dapat menggunakan GeoPandas Overlay
Sebuah)
auto_inter = gpd.overlay(g1, g1, how='intersection')
auto_inter.shape
(7,4)
GeoDataframe yang dihasilkan
GeoPandas menambahkan geometri persimpangan ke geometri yang ada, oleh karena itu
intersection = auto_inter[4:7]
intersection.to_file("intersection.shp")
Persatuan
union = intersection.unary_union
b) gunakan gpd.overlay(g1, g1, how='union')
Jika Anda ingin menampilkan lapisan poligon tumpang tindih yang berbeda dan bukan hanya satu multi-poligon, maka setelah menggunakan:
union = intersection.unary_union
Anda bisa mengonversi multi-poli yang dihasilkan menjadi GeoSeries:
shapes_series = gpd.GeoSeries([polygon for polygon in union])
atau ke GeoDataFrame:
shapes_df = gpd.GeoDataFrame([polygon for polygon in union]).set_geometry(0)