LoginSignup
1
1

More than 1 year has passed since last update.

pythonでgeopandasとfoliumをつかって、地図上に地元のローカル線を表示する方法

Last updated at Posted at 2022-05-27

はじめに

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する

python -m pip install GDAL-3.4.3-cp39-cp39-win_amd64.whl
# ファイルがあるところに cd を忘れずに
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のスクリーンキャプチャ)

_C__Users_naoyuki_app_python_map.html(iPad Air).png

さいごに

Windowsが面倒なのか、Docker(Linux)環境が楽なのか、Jupyterが楽なのかは詳細には調べていませんが前者2つかなと予想しています。

参考

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1