日本地図に市町村の線を引きたい
Pythonのfoliumで、手軽に市町村の地図を描きます。
今回は東京都の八王子市のラインが必要だと仮定します。
必要なもの
- python(folium)
- curl
手順は2つです。
- 市町村のgeojsonデータをcurlで取得
- pythonで可視化
1. 市町村のgeojsonデータをcurlで取得
geoJsonがまとまっているすごいrepositoryを発見しました。
-
以下から必要な市町村を選択
-
curlでデータ取得してjson形式で保存
get_json.sh
$ curl https://raw.githubusercontent.com/niiyz/JapanCityGeoJson/master/geojson/13/13201.json > cityline.json
これで必要なデータが取得できるので、pythonで扱う際に都合の良い場所に置きます。
今回はdata/
フォルダに移動させます。
$ mv cityline.json data/cityline.json
2.python(folium)で可視化
- pythonで地図を描いて、cityline.jsonを表示させる
線がわかりやすいように、白地の地図をベースに指定しております。
map.py
# 地図のベースを指定
copyright_st = '© ' \
'Map tiles by <a href="http://stamen.com">Stamen Design</a>,' \
' under <a href="http://creativecommons.org/licenses/by/3.0">CC BY 3.0</a>.' \
'Data by <a href="http://openstreetmap.org">OpenStreetMap</a>,' \
'under <a href="http://www.openstreetmap.org/copyright">ODbL</a>.'
# ベースマップにlineを描く関数
def jap_map(base_map, geojson_path):
# geojson読み込み
base_map.choropleth(geo_data=geojson_path,
line_color="red",
line_weight=5,
fill_color='white',
fill_opacity=0.1,
line_opacity=0.5)
# ベースマップ定義
base_map = folium.Map(location=[35.655616, 139.338853],
attr=copyright_st,
tiles='https://stamen-tiles-{s}.a.ssl.fastly.net/toner-lite/{z}/{x}/{y}.png',
zoom_start=10.0)
# ベースマップに八王子駅のpopup追加
folium.Marker([35.655616, 139.338853],
popup='八王子駅',
icon=folium.Icon(color='red', icon='train', prefix='fa')).add_to(base_map)
# ベースマップに枠線追加
jap_map(base_map=base_map, geojson_path='data/cityline.json')
base_map
- 市町村のlineが入った地図が表示される
niiyx/JapanCityGeoJsonの偉業のおかげでとても低コストでいい感じの地図がかけました!