Hợp nhất các tính năng chồng chéo bằng Geopandas?


8

Tôi có một Shapefile với các tính năng chồng chéo. Có một cách dễ dàng để hợp nhất chúng với geopandas?

Tôi đã tìm thấy một cách với hình dạng, nhưng tôi muốn làm điều đó với geopandas trực tiếp.

Câu trả lời:


10

GeoDataFrame

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

nhập mô tả hình ảnh ở đây

nhập mô tả hình ảnh ở đây

1) Bạn có thể sử dụng mô-đun itertools

a) Nếu bạn muốn hợp nhất các giao điểm của đa giác chồng chéo

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

nhập mô tả hình ảnh ở đây

nhập mô tả hình ảnh ở đây

liên hiệp

union_iter = intersection_iter.unary_union

b) Nếu bạn muốn hợp nhất các đa giác giao nhau thay đổi intersectiontheo union(tất cả các đa giác trùng nhau trong ví dụ của tôi)

nhập mô tả hình ảnh ở đây

2) Bạn có thể sử dụng Lớp phủ GeoPandas

a)

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

Kết quả GeoDataframe

nhập mô tả hình ảnh ở đây

GeoPandas thêm hình học giao nhau vào hình học hiện có, do đó

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

nhập mô tả hình ảnh ở đây

liên hiệp

union = intersection.unary_union

b) sử dụng gpd.overlay(g1, g1, how='union')


1

Nếu bạn muốn xuất một lớp đa giác chồng chéo riêng biệt và không chỉ là một đa giác đơn lẻ, thì sau khi sử dụng:

union = intersection.unary_union

bạn có thể chuyển đổi đa kết quả thành GeoSeries:

shapes_series = gpd.GeoSeries([polygon for polygon in union])

hoặc đến GeoDataFrame:

shapes_df = gpd.GeoDataFrame([polygon for polygon in union]).set_geometry(0)

Đây có lẽ nên là một chỉnh sửa cho câu trả lời đầu tiên chứ không phải là một câu trả lời theo đúng nghĩa của nó
nmtoken

Cảm ơn vì tiền boa, nhưng cuối cùng tôi cũng đang làm lại câu trả lời của gen và nó không đáng để bỏ công sức. Tôi không thể thêm nhận xét vì đại diện của tôi dưới 50.
Pawel Kranzberg
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.