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

Folium と Geojson を使って 神奈川l県の地域ごとに市町村の形を描画する

神奈川県の地域と市町村の一覧 の続きです。

前回 作った一覧を使って 神奈川l県の地域ごとに市町村の形を描画する

一覧を forループで処理する。 地域ごとに地図を作成する。 神奈川l県の形も描画する 政令指定都市は行政区の形も描画する

神奈川l県と市町村の GeoJsonは、下記を使用した。

都道府県別の県のポリゴンの GeoJson ファイル

日本の市区町村の GeoJson のカタログ

# 地域の一覧
for item1 in list_areas:
# Map
    map = folium.Map(location=[lat, lon], tiles="cartodbpositron", zoom_start= ZOOM )
# GeoJson   神奈川l県
    folium.GeoJson( URL_KANAGAWA, style_function=style_function_black2).add_to(map)
# 市町村の一覧
    for item2 in list_cities1:
# 中略
    map.save(file_html)

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

https://github.com/ohwada/World_Countries/tree/main/japan_municipaliy/folium/kanagawa/kanagawa_area_shape

神奈川県の地域と市町村の一覧

下記を参考に 神奈川県の地域と市町村の一覧の JSONファイルを作成する、

JSONファイルからHTMLの表形式を生成する。

PythonプログラムとJSONファイルは Github に公開した。

https://github.com/ohwada/World_Countries/tree/main/japan_municipaliy/kanagawa/kanagawa_area

神奈川県の市町村旗の一覧

下記に「神奈川県の市町村旗の一覧」がある。

wikipedia: 神奈川県の市町村旗一覧

市部と町村部で表が分かれている。

HTMLの表形式で記述されている。

ここから情報を抽出してJSON形式のファイルにする。 まずは「市部」から

JSONファイルからHTMLの表形式を生成する。

PythonプログラムとJSONファイルは Github に公開した。

https://github.com/ohwada/World_Countries/tree/main/japan_municipaliy/kanagawa/kanagawa_city_flag_list

町村部

PythonプログラムとJSONファイルはこちら。

https://github.com/ohwada/World_Countries/tree/main/japan_municipaliy/kanagawa/kanagawa_town_flag_list こちら

位置情報を追加する

PythonプログラムとJSONファイルはこちら。

https://github.com/ohwada/World_Countries/tree/main/japan_municipaliy/kanagawa/kanagawa_city_flag_coordinates_list

神奈川県の市町村旗を地図に表示する

Pythonプログラムはこちら。

https://github.com/ohwada/World_Countries/tree/main/japan_municipaliy/folium/kanagawa/kanagawa_city_flag

Folium と Topojson を使って 政令指定都市の形を描画する

政令指定都市の Topojson の一覧 の続きです。

前回 作った一覧を使って 政令指定都市の形を描画する

一覧を forループで処理する。 政令指定都市ごとに地図を作成する。 都道府県の形も描画する。 行政区の形も描画する。

都道府県と 行政区の GeoJsonは、下記を使用した。

都道府県別の県のポリゴンの GeoJson ファイル

日本の市区町村の GeoJson のカタログ

for item1 in list_designated_cities:
    pref_name = item1['N03_001']
    city_name = item1['N03_003']
    filepath = item1['filepath']
    name = item1['name']
    lat = item1['lat']
    lon = item1['lon']
    url_topojson = urllib.parse.urljoin(url_designated_base, filepath)
    is_match, url_pref_geojson = find_pref(pref_name)
    print(city_name)
    title_html = FORMAT_TITLE.format(pref=pref_name, city=city_name)
    file_html = FORMAT_FILE_HTML.format(dir=DIR, name=name)
# Map
    map = folium.Map(location=[lat, lon], tiles="cartodbpositron", zoom_start=ZOOM)
# GeoJson 都道府県
    gjson1 = folium.GeoJson( 
    url_pref_geojson, 
    style_function=style_function_blue).add_to(map)
# GeoJsonPopup
    folium.features.GeoJsonPopup( fields=['name'], labels=False ).add_to(gjson1)
# TopoJson 政令指定都市
    folium.TopoJson( 
    json.loads(requests.get( url_topojson).text), 
    object_path = OBJECT_PATH, style_function=style_function_red).add_to(map)
    map.save(file_html)
#

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

https://github.com/ohwada/World_Countries/tree/main/geojson/folium/japan_designated_city_shape

政令指定都市の Topojson の一覧

政令指定都市の一覧 の続きです。

下記に 日本の市区町村の GeoJsonファイルがある。

github: JapanCityGeoJson 2020

しかし、「政令指定都市」の GeoJsonファイルはない。

市内の行政区ごとの GeoJsonファイルはある。

政令指定都市」でない普通の市の GeoJsonファイルはある。

下記に 「政令指定都市」の Topojsonファイルがある。

標準地域コード 一覧 | 歴史的行政区域データセットβ版

利用しやすようにカタログを作成する

(1) 全ての 「政令指定都市」の Topojsonファイルをダウンロードする

(2) Topojsonファイルの属性を解析する。

下記のような属性を持つ。

"N03_001":"北海道","N03_002":"石狩振興局","N03_003":"札幌市","N03_007":"01100"

属性の意味

国土数値情報 行政区域データ を継承したもの

N03_001: 都道府県名

N03_002: 支庁・振興局名

N03_003: 郡・政令都市名

N03_004: 市区町村名

N03_007: 行政区域コード

(3) JSONファイルを作成する

JSONファイルからHTMLの表形式を生成する。

PythonプログラムとJSONファイルは Github に公開した。

https://github.com/ohwada/World_Countries/tree/main/geojson/japan_designated_city_topojson_list

政令指定都市の一覧

政令指定都市 は、

地方自治法 に基づき 政令 で指定された 地方公共団体 である。

下記に「政令指定都市」の一覧がある。

総務省: 指定都市一覧

wikipedia: 政令指定都市一覧

HTMLの表形式で記述されている。

ここから情報を抽出してJSON形式のファイルにする。

JSONファイルからHTMLの表形式を生成する。

PythonプログラムとJSONファイルは Github に公開した。

https://github.com/ohwada/World_Countries/tree/main/japan_municipaliy/japan_designated_city_list_wikipedia

政令指定都市の市旗を地図に表示する

Pythonプログラムはこちら。

https://github.com/ohwada/World_Countries/tree/main/japan_municipaliy/folium/japan_designated_city_flag