はじめに
pythonで西鉄大牟田線(福岡のローカル線)をgeopandasとfoliumを使って地図上に線で表示するサンプルプログラム。Docker上のJupyterでの実行は楽だったが、Windows環境でコマンドライン実行しようとしたら意外と面倒だったので、両者のpip実行の違いにも少しふれつつ記事をまとめています。
また、路線については国土交通省のオープンデータを使用。
環境
-
コマンドライン実行
- Windows10(64bit)
- python 3.9.13
-
Docker on Jupyter
- Windows10(64bit)
- Docker Desktop
- python 3.9.13
- Jupyter NoteBook 6.4.11
pip実行
コマンドライン実行
geopandasがそのままpipでインストールできないため、GDALとFionaをファイルからpipする
- GDAL のインストール
https://www.lfd.uci.edu/~gohlke/pythonlibs/#gdal
から、GDAL‑3.4.3‑cp39‑cp39‑win_amd64.whl
をダウンロードして、ファイルに対して以下のようにpipを行う
python -m pip install GDAL-3.4.3-cp39-cp39-win_amd64.whl
# ファイルがあるところに cd を忘れずに
- Fiona のインストール
https://www.lfd.uci.edu/~gohlke/pythonlibs/#fiona
から、Fiona-1.8.21-cp39-cp39-win_amd64.whl
をダウンロードして、ファイルに対して以下のようにpipを行う
python -m pip install Fiona-1.8.21-cp39-cp39-win_amd64.whl
# ファイルがあるところに cd を忘れずに
上記2つをpip実行したあとに以下のpipを実行
python -m pip install geopandas
python -m pip install folium
Docker on Jupyter
Jupyter上で以下のpipを実行
pip install geopandas
pip install folium
データについて
以下の国土交通省さんのページから、令和2年分をダウンロード
https://nlftp.mlit.go.jp/ksj/gml/datalist/KsjTmplt-N02-v2_3.html
zipを解凍して、N02-20_RailroadSection.geojson
を拝借
プログラム
※実行するpyファイルと、上記のgeojsonを同じフォルダ上に配置
import geopandas as gpd
import folium
# 鉄道路線データファイル読み込み
geo_data = gpd.read_file("./N02-20_RailroadSection.geojson", encoding="shift-jis")
# 路線が"西日本鉄道データ" かつ "天神大牟田線 を条件指定して取得
nishi_geo_data = geo_data[
(geo_data["N02_003"] == "天神大牟田線") & (geo_data["N02_004"] == "西日本鉄道")
]
# 天神を中心に地図を設定
map = folium.Map(
location=[33.590381344432345, 130.39914160329164],
zoom_start=10,
tiles="OpenStreetMap",
)
# 路線の座標をプロット
for _, line in nishi_geo_data.iterrows():
sim_geo = gpd.GeoSeries(line["geometry"])
geo_j = sim_geo.to_json()
geo_j = folium.GeoJson(data=geo_j)
geo_j.add_to(map)
# Jupyter は、変数名だけで地図表示できる
map
# コマンド実行の場合は、HTML出力しないと、内容が確認できない
# map.save("map.html")
こんな感じ(出力したHTMLのスクリーンキャプチャ)
さいごに
Windowsが面倒なのか、Docker(Linux)環境が楽なのか、Jupyterが楽なのかは詳細には調べていませんが前者2つかなと予想しています。
参考