機能が重複しているシェープファイルがあります。それらをgeopandasとマージする簡単な方法はありますか?
格好良い方法を見つけましたが、ジオパンダと直接やりたいです。
機能が重複しているシェープファイルがあります。それらをgeopandasとマージする簡単な方法はありますか?
格好良い方法を見つけましたが、ジオパンダと直接やりたいです。
回答:
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')
単一のマルチポリゴンだけでなく、別個のマージされたオーバーラップポリゴンのレイヤーを出力する場合は、次を使用します。
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)