Geopandasを使用して重複する機能をマージしますか?


8

機能が重複しているシェープファイルがあります。それらをgeopandasとマージする簡単な方法はありますか?

格好良い方法を見つけましたが、ジオパンダと直接やりたいです。

回答:


10

GeoDataFrame

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

ここに画像の説明を入力してください

ここに画像の説明を入力してください

1)itertoolsモジュールを使用できます

a)重なり合うポリゴンの交点をマージしたい場合

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

ここに画像の説明を入力してください

ここに画像の説明を入力してください

連合

union_iter = intersection_iter.unary_union

B)あなたが交差するポリゴンの変更マージする場合intersectionによってはunion(すべてのポリゴンは、私の例ではオーバーラップ)

ここに画像の説明を入力してください

2)GeoPandasオーバーレイを使用できます

a)

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

結果のGeoDataframe

ここに画像の説明を入力してください

GeoPandasは交差ジオメトリを既存のジオメトリに追加するため、

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

ここに画像の説明を入力してください

連合

union = intersection.unary_union

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


1

単一のマルチポリゴンだけでなく、別個のマージされたオーバーラップポリゴンのレイヤーを出力する場合は、次を使用します。

union = intersection.unary_union

結果のマルチポリゴンをGeoSeriesに変換できます:

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

またはGeoDataFrameへ:

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

これは、おそらくそれ自体の答えではなく、最初の答えの編集であるべきです
nmtoken

ヒントをありがとう、しかし私は遺伝子の答えを作り直すことになり、それは努力する価値はありません。私の担当者が50を下回っていると私はどちらかのコメントを追加することができませんでした
パヴェルKranzbergの
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.