GeoPandas を使って GeoJson のポリゴンを統合する

GeoPandas は、 Pandas に 地理データのサポートを追加するオープン ソース プロジェクトです。

この記事では GeoPandas を使って GeoJson のポリゴンを統合する。

下記を参考にした。

GeoJSON上の複数区域のgeometryデータを一つにまとめる

上記の記事と同じく

富山県の「舟橋村」「上市町」「立山町」のGeoJson のポリゴンを統合して

富山県中新川郡 のポリゴンを作成する。

GeoJson は下記を使用した。

github: 市区町村・選挙区 地形データ

(1) 下記をダウンロードする。

富山県の市区町村のGeoJson

(2) GeoPandas を使って ポリゴンを統合する

# GeoPandas を使って GeoJson を読み込む
DATA_FILE_NAME = "N03-21_16_210101.json"
gdf = gpd.read_file(DATA_FILE_NAME)

# わかりやすさのために、カラムをリネームする
renamed_gdf = gdf.rename(
    columns={
        "N03_001": "prefecture",
        "N03_002": "bureau",
        "N03_003": "parent_city",
        "N03_004": "child_city",
        "N03_007": "city_id"
    }
)

# 統合対象であるparent_cityを持つレコードを抽出する
has_parent_gdf = renamed_gdf.dropna(subset=["parent_city"])
has_parent_gdf

# ポリゴンを統合する
grouped_gdf = renamed_gdf.dissolve(by=["prefecture", "parent_city"], as_index=False)

# 不要となったカラムを削除しカラム名を変更する
parent_city_gdf = grouped_gdf[["parent_city", "prefecture", "geometry"]].rename(
    columns={"parent_city": "city"}
)

# 中新川郡を抽出する
nakaniikawa_gdf = parent_city_gdf[parent_city_gdf["city"]=="中新川郡"]


# GeoJson に書き出す。
nakaniikawa_gdf.to_file('nakaniikawa.geojson', driver='GeoJSON')

(3) ポリゴンを描画する

nakaniikawa_gdf.plot()
plt.show()

統合前

統合後

Pythonプログラムは Github に公開した

https://github.com/ohwada/World_Countries/tree/main/geoPandas/polygon_disolve/toyama_nakaniikawa