PR

Pythonで地図を描く|旅行計画に役立つfolium入門ガイド

本ページにはプロモーションが含まれます。

python-travel-map-guide プログラミング
スポンサーリンク

旅行の計画を立てているとき、 「行きたい場所が頭の中でごちゃごちゃしてきて、結局まとまらない…」 「距離感がよくわからなくて、1日で回れるのか不安」 そんなモヤモヤを感じたことはありませんか?

Python の folium(フォリウム) を使うと、 行きたいスポットを地図上に並べて見える化したり、 回りたい順番に線でルートを描いたり、 宿泊地を中心に“行動範囲”をざっくり把握したりと、 旅行の計画を 地図ベースで整理すること ができます。

この記事では、 「旅行を考えている人が、自分の旅のプランを地図で整理する」 ことをゴールに、Python と folium を使った 旅の計画に役立つ地図の作り方を、初心者向けに丁寧に紹介します。

foliumは旅行計画にどう役立つ?

旅行の計画を立てるとき、 「行きたい場所が増えてきて、頭の中だけでは整理しきれない」 「距離感がわからず、1日で回れるのか判断が難しい」 「モデルコースを作りたいけれど、地図を使ってまとめるのが面倒」 こうした悩みを感じる人は多いです。

Python の folium(フォリウム) は、そんな旅行計画の“見える化”に役立つツール。 地図上に行きたいスポットを並べたり、ルートを線で描いたり、 宿泊地を中心にした行動範囲を可視化したりと、 旅のイメージを整理するための地図を自分で作れるのが最大の魅力です。

folium を使うと、旅行計画が次のように変わります。

  • 行きたい場所が地図上で一覧化される
  • 距離感がひと目でわかる
  • 回る順番を考えやすくなる
  • モデルコースを自分で作れる
  • 家族や友人と共有しやすい
  • 旅行の不安が減り、計画が楽しくなる

つまり folium は、 「旅の計画を地図で整理したい人」にとって最適なPythonツールなのです。

この章では、まず folium が旅行計画にどう役立つのかを丁寧に紹介しました。 次の章からは、実際に folium を使って地図を描くステップに進んでいきます。

foliumのインストール方法

旅行の計画を地図で整理するために、まずは folium を使える環境を整えます。
といっても、準備はとてもシンプルで、Python が使える状態なら 1行のコマンドを実行するだけで完了します。

foliumをインストールする

Python のパッケージ管理ツール pip を使って、次のコマンドを実行します。

pip install folium

これで folium が使えるようになります。

インストールできたか確認する

インストール後、Python で次の1行を実行してみてください。

import folium

何もエラーが出なければ準備完了です。

行きたい場所を地図にプロットする

旅行の計画を立てるとき、 まずやっておきたいのが 「行きたい場所を地図に置くこと」 です。

頭の中だけで整理しようとすると、 距離感が曖昧になったり、 「この順番で回れるかな?」と迷ったりしがち。

folium を使えば、 行きたいスポットを地図上にひとつずつ置いていくだけで、 旅のイメージが一気にクリアになります。

まずは地図を表示する

地図の中心となる場所(例:東京駅)を指定して、
基本の地図を作ります。

import folium

m = folium.Map(
    location=[35.6812, 139.7671],
    zoom_start=12,
    tiles=None
)

folium.TileLayer(
    tiles="https://tile.opentopomap.org/{z}/{x}/{y}.png",
    attr="© OpenTopoMap (CC-BY-SA)",
    name="OpenTopoMap"
).add_to(m)

行きたい場所を1つ置いてみる(マーカー追加)

例えば「浅草寺に行きたい」と思ったら、
その場所を地図にプロットします。

folium.Marker(
    location=[35.7148, 139.7967],
    popup="浅草寺",
    icon=folium.Icon(color="red")
).add_to(m)
  • popup:クリックしたときに表示される名前
  • icon:色を変えると見やすくなる(赤=観光地など)

これだけで、 「行きたい場所が地図に置かれた状態」になります。

作った地図を保存する

folium で作った地図は、 HTMLファイルとして保存しておくと、いつでもブラウザで開けるようになります。

旅行の計画では、

  • 行きたい場所をまとめた地図
  • ルートを描いた地図
  • 行動範囲を可視化した地図 などを保存しておくと、後から見返したり、家族や友人と共有したりするのにとても便利です。

ここでは、地図を保存する方法を丁寧に紹介します。

地図をHTMLとして保存する

folium の地図オブジェクト m を作ったら、 次の1行を追加するだけで保存できます。

m.save("travel_map.html")

保存される場所

Python を実行している 同じフォルダtravel_map.html が作成されます。

開き方

保存された HTML ファイルを ダブルクリックするだけでブラウザで開くことができます。

Chrome / Edge / Safari など、どれでもOK。

folium01

複数スポットをまとめて旅の候補地マップを作る

旅行の計画を立てるとき、
行きたい場所が複数あると 頭の中だけでは整理しきれないことが多いです。

  • どのスポットが近い?
  • どの順番で回ると効率的?
  • ホテルから遠すぎない?

こうした疑問は、地図にまとめて置くだけで一気に解消します。

folium を使えば、行きたいスポットをリスト化して、
それをまとめて地図にプロットすることができます。

まずは行きたいスポットをリスト化する

spots = [
    ["浅草寺", 35.7148, 139.7967],
    ["東京スカイツリー", 35.7100, 139.8107],
    ["上野公園", 35.7142, 139.7730],
    ["築地場外市場", 35.6655, 139.7708]
]

このように、
「行きたい場所をひとまとめにする」ことで、
地図に置く準備が整います。

複数スポットを地図に追加する

リスト化したスポットを地図に追加します。

import folium

# 地図の中心(東京駅)
m = folium.Map(
    location=[35.6812, 139.7671],
    zoom_start=12,
    tiles=None
)

# OpenTopoMap
folium.TileLayer(
    tiles="https://tile.opentopomap.org/{z}/{x}/{y}.png",
    attr="© OpenTopoMap (CC-BY-SA)",
    name="OpenTopoMap"
).add_to(m)

# スポット
spots = [
    ["浅草寺", 35.7148, 139.7967],
    ["東京スカイツリー", 35.7100, 139.8107],
    ["上野公園", 35.7142, 139.7730],
    ["築地場外市場", 35.6655, 139.7708]
]

# 複数スポットをまとめて追加
for name, lat, lon in spots:
    folium.Marker(
        location=[lat, lon],
        popup=name,
        icon=folium.Icon(color="blue")
    ).add_to(m)

m.save("tokyo_spots_map.html")
folium02

旅行ルートを線で描いて距離感をつかむ

複数スポットを地図に置けたら、 次は スポット同士を線でつないでルートを描くステップです。

旅行計画では、 「どの順番で回るか」「どれくらい距離があるか」を把握することがとても重要。

folium の PolyLine を使えば、 スポット間を線でつないで 旅の流れを視覚化できます。

ルートを描くと何が分かる?

  • 移動距離がひと目でわかる
  • 歩きか電車か、移動手段の判断がしやすい
  • 1日で回れるかどうかの判断がしやすい
  • 無駄な移動を減らせる
  • モデルコースが自然に決まる

旅行計画の質が一気に上がるので、 ルートの可視化は本当におすすめ。

例:浅草寺 → スカイツリー → 上野公園 → 築地場外市場 のルートを描く

まずはスポットをリスト化します。

spots = [
    ["浅草寺", 35.7148, 139.7967],
    ["東京スカイツリー", 35.7100, 139.8107],
    ["上野公園", 35.7142, 139.7730],
    ["築地場外市場", 35.6655, 139.7708]
]

次にルートを合わせて地図に描画します。

import folium

# 地図の中心(東京駅)
m = folium.Map(
    location=[35.6812, 139.7671],
    zoom_start=12,
    tiles=None
)

# OpenTopoMap
folium.TileLayer(
    tiles="https://tile.opentopomap.org/{z}/{x}/{y}.png",
    attr="© OpenTopoMap (CC-BY-SA)",
    name="OpenTopoMap"
).add_to(m)

# スポット
spots = [
    ["浅草寺", 35.7148, 139.7967],
    ["東京スカイツリー", 35.7100, 139.8107],
    ["上野公園", 35.7142, 139.7730],
    ["築地場外市場", 35.6655, 139.7708]
]

# スポットをマーカーとして追加
for name, lat, lon in spots:
    folium.Marker(
        location=[lat, lon],
        popup=name,
        icon=folium.Icon(color="blue")
    ).add_to(m)

# ルート用の座標リスト(lat, lon のみ)
route = [(lat, lon) for _, lat, lon in spots]

# スポット間を線でつなぐ
folium.PolyLine(
    locations=route,
    color="red",
    weight=4,
    opacity=0.8
).add_to(m)

m.save("tokyo_route_map.html")
folium03

少し拡大すると、下図のような地図が表示されています。

folium04

アイコンの色やルートの色・線の太さも以下のように自由に変更できます。

import folium

# 地図の中心(東京駅)
m = folium.Map(
    location=[35.6812, 139.7671],
    zoom_start=12,
    tiles=None
)

# OpenTopoMap
folium.TileLayer(
    tiles="https://tile.opentopomap.org/{z}/{x}/{y}.png",
    attr="© OpenTopoMap (CC-BY-SA)",
    name="OpenTopoMap"
).add_to(m)

# スポット
spots = [
    ["浅草寺", 35.7148, 139.7967],
    ["東京スカイツリー", 35.7100, 139.8107],
    ["上野公園", 35.7142, 139.7730],
    ["築地場外市場", 35.6655, 139.7708]
]

# スポットを色付きアイコンで追加
for name, lat, lon in spots:
    folium.Marker(
        location=[lat, lon],
        popup=name,
        icon=folium.Icon(color="green", icon="info-sign")  # ← 色とアイコン変更
    ).add_to(m)

# ルート用の座標リスト(lat, lon のみ)
route = [(lat, lon) for _, lat, lon in spots]

# スポット間を太い赤線でつなぐ
folium.PolyLine(
    locations=route,
    color="red",   # ← 線の色
    weight=6,      # ← 線の太さ(デフォルトは2)
    opacity=0.8
).add_to(m)

m.save("tokyo_route_map.html")
folium05

少し拡大すると、下図のような地図が表示されています。

folium06

カスタマイズのポイント

スポットの色を変える

icon=folium.Icon(color="green")

使える色一覧: red / blue / green / purple / orange / darkred / lightred / beige / darkblue / darkgreen / cadetblue / darkpurple / white / pink / lightblue / lightgreen / gray / black

アイコンを変える

icon=folium.Icon(icon="info-sign")

使えるアイコン例: info-sign / cloud / star / flag / home / ok / remove / heart / gift / leaf / globe

線の太さを変える

weight=6
  • 2:細い
  • 4:標準
  • 6:太め(おすすめ)
  • 10:強調したいとき

線の色を変える

color="red"

おすすめの配色例は以下のとおりです。

  • 歩き → red
  • 電車 → blue
  • バス → green
  • 観光ルート → purple

スポット間の距離と移動時間を自動計算する

複数スポットを地図に置いてルートを描けたら、 次は スポット間の距離と移動時間を自動計算するステップです。

旅行計画では、 「歩ける距離なのか?」「電車移動が必要なのか?」 「1日で回れるのか?」 こうした判断がとても重要。

Python を使えば、 スポット間の距離を自動で計算し、 さらに 徒歩・自転車・車などの移動時間まで算出できます。

距離と移動時間を計算すると何が分かる?

  • 歩ける距離かどうかが分かる
  • 移動時間の目安が分かる
  • 1日の行程が現実的か判断できる
  • 無駄な移動を減らせる
  • モデルコースの精度が上がる

旅行計画の「実用性」が一気に上がるステップになります。

スポット間の距離を計算する

距離計算には geopy が最も簡単で正確です。

pip install geopy

距離を計算するコード

from geopy.distance import geodesic

spots = [
    ["浅草寺", 35.7148, 139.7967],
    ["東京スカイツリー", 35.7100, 139.8107],
    ["上野公園", 35.7142, 139.7730],
    ["築地場外市場", 35.6655, 139.7708]
]

# 距離を計算
distances = []
for i in range(len(spots) - 1):
    start = spots[i]
    end = spots[i + 1]
    distance_km = geodesic((start[1], start[2]), (end[1], end[2])).km
    distances.append([start[0], end[0], distance_km])

# 結果を表示
for start, end, d in distances:
    print(f"{start} → {end}: {d:.2f} km")

出力例

浅草寺 → 東京スカイツリー: 1.50 km
東京スカイツリー → 上野公園: 3.80 km
上野公園 → 築地場外市場: 6.20 km

移動時間を自動計算する(徒歩・自転車・車)

距離が分かったら、 次は 移動時間の目安を計算します。

  • 徒歩:4 km/h
  • 自転車:15 km/h
  • 車:40 km/h(都内の平均)

移動時間を計算するコード

def calc_time(distance_km, speed_kmh):
    return distance_km / speed_kmh * 60  # 分に変換

for start, end, d in distances:
    walk = calc_time(d, 4)
    bike = calc_time(d, 15)
    car = calc_time(d, 40)

    print(f"{start} → {end}")
    print(f"  徒歩: {walk:.0f} 分")
    print(f"  自転車: {bike:.0f} 分")
    print(f"  車: {car:.0f} 分\n")

出力例

浅草寺 → 東京スカイツリー
  徒歩: 23 分
  自転車: 6 分
  車: 2 分

東京スカイツリー → 上野公園
  徒歩: 57 分
  自転車: 15 分
  車: 6 分

距離と移動時間を地図に表示する(ポップアップに追加)

地図上のマーカーに「距離・移動時間」を表示することもできます。

import folium
from geopy.distance import geodesic

# 地図の中心(東京駅)
m = folium.Map(
    location=[35.6812, 139.7671],
    zoom_start=12,
    tiles=None
)

# OpenTopoMap
folium.TileLayer(
    tiles="https://tile.opentopomap.org/{z}/{x}/{y}.png",
    attr="© OpenTopoMap (CC-BY-SA)",
    name="OpenTopoMap"
).add_to(m)

# スポット
spots = [
    ["浅草寺", 35.7148, 139.7967],
    ["東京スカイツリー", 35.7100, 139.8107],
    ["上野公園", 35.7142, 139.7730],
    ["築地場外市場", 35.6655, 139.7708]
]

# 距離を計算
distances = []
for i in range(len(spots) - 1):
    start = spots[i]
    end = spots[i + 1]
    distance_km = geodesic((start[1], start[2]), (end[1], end[2])).km
    distances.append([start[0], end[0], distance_km])

def calc_time(distance_km, speed_kmh):
    return distance_km / speed_kmh * 60  # 分に変換

for i in range(len(spots) - 1):
    start = spots[i]
    end = spots[i + 1]

    distance_km = geodesic((start[1], start[2]), (end[1], end[2])).km
    walk = calc_time(distance_km, 4)

    popup_text = (
        "<div style='width:250px;'>"
        f"<b>{start[0]} → {end[0]}</b><br>"
        f"距離: {distance_km:.2f} km<br>"
        f"徒歩: {walk:.0f} 分"
    )

    folium.Marker(
        location=[start[1], start[2]],
        popup=popup_text,
        icon=folium.Icon(color="purple")
    ).add_to(m)

m.save("tokyo_distance_map.html")

各スポットをクリックすると、下図のようにポップアップが表示されます。

folium07_

まとめ

今回の記事では、Python の地図ライブラリ folium を使って、 旅行計画をより分かりやすく、より楽しくするための方法を紹介しました。

旅行の計画は、 「行きたい場所を調べる → 距離を調べる → 回る順番を考える」 という作業の繰り返しですが、 folium を使うことで すべてを地図上で視覚化できるようになります。

AIをうまく使いながら、 自分だけの旅をデザインしてみてください。

スポンサーリンク
タイトルとURLをコピーしました