Menggabungkan fitur yang tumpang tindih menggunakan Geopandas?


8

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:


10

GeoDataFrame

import geopandas as gpd
g1 = gpd.GeoDataFrame.from_file("poly_intersect.shp")
g1.shape
(4, 3)

masukkan deskripsi gambar di sini

masukkan deskripsi gambar di sini

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

masukkan deskripsi gambar di sini

masukkan deskripsi gambar di sini

Persatuan

union_iter = intersection_iter.unary_union

b) Jika Anda ingin menggabungkan perubahan poligon berpotongan intersectiondengan union(semua poligon tumpang tindih dalam contoh saya)

masukkan deskripsi gambar di sini

2) Anda dapat menggunakan GeoPandas Overlay

Sebuah)

auto_inter = gpd.overlay(g1, g1, how='intersection')
auto_inter.shape
(7,4)

GeoDataframe yang dihasilkan

masukkan deskripsi gambar di sini

GeoPandas menambahkan geometri persimpangan ke geometri yang ada, oleh karena itu

intersection = auto_inter[4:7]
intersection.to_file("intersection.shp") 

masukkan deskripsi gambar di sini

Persatuan

union = intersection.unary_union

b) gunakan gpd.overlay(g1, g1, how='union')


1

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)

Ini mungkin seharusnya merupakan suntingan untuk jawaban pertama dan bukan jawaban di dalamnya sendiri
nmtoken

Terima kasih atas tipnya, tetapi akhirnya saya akan mengerjakan ulang jawaban gen, dan itu tidak sepadan dengan usaha. Saya tidak bisa menambahkan komentar karena perwakilan saya di bawah 50.
Pawel Kranzberg
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.