GeoPandas を使って 北海道のポリゴンを分割して 面積が一番大きいものを選択する の続きです。
前回は 北海道のポリゴンを分割して 島部のポリゴンを除いた 北海道本土のポリゴンを作成した。
今回は 47都道府県について 都道府県のポリゴンを分割して 島部のポリゴンを除いた 内陸部のポリゴンを作成する。
都道府県の ポリゴンの GeoJson は下記を使用した。
(1) 都道府県のgeojsonをダウンロードする。
[都道府県別の県のGeoJsonの一覧を for ループで処理する。
for item in list_prefectures: name_ja = item['name_ja'] filename = item['filename'] print(name_ja) url_geojson = urllib.parse.urljoin(url_raw_base, filename) save_path = os.path.join(DIR, filename) data = requests.get(url_geojson).content with open(save_path ,mode='wb') as f2: f2.write(data)
(2) 島部のポリゴンを除いた内陸部のポリゴンを作成する。
都道府県のポリゴンを分割して 面積が一番大きいものを選択する。
[都道府県別の県のGeoJsonの一覧を for ループで処理する。
for item in files: filepath1 = os.path.join(DIR_DOWN, item) # geojson ファイルを読み込む gdf = gpd.read_file(filepath1) pref_code = gdf['pref'] pref_name = gdf['name'] # 面積が一番大きいポリゴンを選択する largest_poly = largest_polygon(gdf) df = gpd.GeoDataFrame() df['geometry'] = None df.loc[0, 'geometry'] = largest_poly df['pref'] = pref_code df['name'] = pref_name # geojson ファイルを書き出す filepath2 = os.path.join(DIR_LARGEST, item) df.to_file(filepath2, driver='GeoJSON')
(3) ポリゴンを地図に描画する
面積が一番大きいポリゴンの一覧をを for ループで処理する。
for item in files: filepath1 = os.path.join(DIR_LARGEST, item) basename_without_ext = os.path.splitext(os.path.basename(filepath1))[0] print(basename_without_ext) filename = FORMAT_FILENAME_HTML.format(name=basename_without_ext) filepath2 = os.path.join(DIR_HTML, filename) # 都道府県名と位置座標を取得する is_match, name_pref, lat, lon = find_pref(basename_without_ext) # Map map = folium.Map(location=[lat, lon], tiles="cartodbpositron", zoom_start=ZOOM) # GeoJson gjson = folium.GeoJson(filepath1, style_function=style_function).add_to(map) folium.features.GeoJsonPopup( fields=['name'], labels=False ).add_to(gjson) title_html = FORMAT_TITLE.format(name_pref) map.get_root().html.add_child(folium.Element(title_html)) # html ファイルに保存する map.save(filepath2)
https://github.com/ohwada/World_Countries/tree/main/geoPandas/polygon_largest/japan_prefectures