Python地図の可視化:後悔のない旅行ルートを確認する(feat. folium package)
初めて行く場所への旅行を計画するとき、全体的なルートを確認したいと思いませんか?今日の記事ではPythonの地図の可視化技法を使って旅行ルートを可視化する方法を紹介します。 Pythonの強力な foliumライブラリを活用して、この旅程を段階的に視覚的に表示してみましょう。
家庭の状況は以下の通りです。 JFK空港に到着し、タクシーやウーバーを利用して ヒルトン ニューヨーク ミッドタウン ホテルに移動後、徒歩で マンハッタンセンター 会場に移動します。今回のチュートリアルで、 Pythonマップの可視化(Python Map Visualization) スキルを身につけ、旅行ルートを地図に表示する方法を学びましょう。
Pythonマップの可視化の概要を理解する
Python Map Visualization(Python Map Visualization)はGPS座標を使って地図上に様々なデータを視覚的に表現する強力なツールです。 特に、foliumライブラリはPythonでGoogleマップのような地図を生成することができます。
今回の例では、ニューヨークの3つの主要地点(JFK空港、Hilton New York Midtownホテル、Manhattan Center会場)にマーカーを追加し、各地点を結ぶルートを青い線で表示し、移動時間と距離情報を地図上に表示する方法を見てみましょう。
Pythonコードの段階的な説明
1.ライブラリのインストールと読み込み
Pythonで地図の可視化をするために フォリウム ライブラリをインストールしてインポートします。
# 必要なライブラリ import
import os # ファイルおよびディレクトリ操作のためのモジュール
import folium # 地図の生成と操作のためのライブラリ
# 結果を保存するディレクトリの作成
結果_dir = 'C:/result/'
# os.makedirs():ディレクトリの生成。exist_ok=Trueオプションで既に存在する場合、エラーを防止する。
os.makedirs(result_dir, exist_ok=True)2.主要な場所と距離、時間データを設定します。
各場所のGPS座標を定義し、2点間の距離と推定時間を設定します。
# 主な場所の座標設定(緯度、経度)を設定する
simplified_locations = { {} のように設定します。
"JFK Airport":[40.6413, -73.7781]、
"Hilton New York Midtown":[40.7625, -73.9780]、
"イベント会場(マンハッタンセンター)":[40.7527, -73.9932].
}
#の距離(km)及び時間(分)情報
simplified_distances_and_times = { {...
("JFK Airport", "Hilton New York Midtown"): (25.0, 35)、
( "Hilton New York Midtown", "Event Venue (Manhattan Center)"): (1.2, 15)
}
# ルートの順序設定
ordered_locations = [.
("JFK Airport", "Hilton New York Midtown")、
( "Hilton New York Midtown", "Event Venue (Manhattan Center)")
]を指定します。3.地図の作成と経路の可視化
ニューヨークを中心に地図を作成し、各ポイントに番号付きのマーカーを追加し、ルートを青い線でつなぎます。
#マップ生成
# folium.Map():基本地図の生成
# location: 地図の中心点の座標[緯度、経度]。
# zoom_start: 初期ズームレベル (高いほど拡大されます)
m = folium.Map(location=[40.7200, -73.9000], zoom_start=11)
# マーカーとパスを追加
# enumerate():リストの要素とインデックスを一緒に返す、start=1でインデックスを1から始める
for idx, location in enumerate(simplified_locations.items(), start=1):
loc_name, coords = location
# folium.Marker():地図にマーカーを追加
# popup: マーカーをクリックした時に表示されるテキスト
# icon: マーカーの形状を設定します。
folium.Marker(
coords、
popup=f"{idx}.{loc_name}"、
icon=folium.DivIcon(
html=f""""
<div style="text-align: center;">
<div style="font-size: 12pt; font-weight: bold; color: black; background-color: white; border-radius: 50%; width: 24px; height: 24px; display: flex; align-items: center; justify-content: center;">
{idx}
</div>
<div style="font-size: 10pt; font-weight: bold; color: navy; margin-top: 10px;">
{loc_name}
</div>
</div>"""
).add_to(m)
).add_to(m)
# 経路と距離/時間情報を追加します。
for (loc1, loc2) in ordered_locations:
# folium.PolyLine():二点間に線を引く
# color: ラインの色、weight: ラインの太さ、opacity: ラインの透明度
folium.PolyLine([simplified_locations[loc1], simplified_locations[loc2]], color="blue", weight=2.5, opacity=1).add_to(m)
#距離と時間情報を取得します。
distance_km, time_min = simplified_distances_and_times[(loc1, loc2)].
# 2つの地点の中間座標を計算する
mid_point = [(simplified_locations[loc1][0] + simplified_locations[loc2][0]) / 2、
(simplified_locations[loc1][1] + simplified_locations[loc2][1]) / 2], (simplified_locations[loc1][1] + simplified_locations[loc2][1]) / 2].
# 中間地点に距離と時間情報を含むマーカーを追加する
folium.Marker(
mid_point、
icon=folium.DivIcon(
html=f'<div style="font-size: 10pt; font-weight: bold; color: red;">{distance_km}km, {time_min}分</div>'、
).add_to(m)
).add_to(m)4.地図の保存
完成した地図をローカルコンピュータの C:\result フォルダに保存し、正常に完了したら保存された地図htmlファイルが保存されたパスを下記のように出力します。
# 地図をHTMLで保存
# os.path.join():オペレーティングシステムに合ったパス区切り文字を使用してファイルパスを生成します。
final_corrected_map_path = os.path.join(result_dir, 'ny_business_trip_final_corrected_map_with_distances.html')
m.save(final_corrected_map_path) # 生成された地図をHTMLファイルとして保存します。
print(f"Map saved to: {final_corrected_map_path}") # 保存されたファイルのパスを出力します。
このように完成した地図をブラウザで確認するには、下記のように該当フォルダのHTMLファイルをクリックするだけです。 すると、下の図のように私たちが要求したものを確認することができます。


4.よくある質問(FAQ)
Q1.Pythonの地図の可視化で フォリウムは何をするのですか?
A1. フォリウムはPythonを使って地図データを可視化するライブラリです。Googleマップと同じ方法でデータを視覚的に表現することができます。
Q2.座標はどうすればわかりますか?
A2.グーグルマップを使用して目的の場所を検索した後、その場所のマークアイコンの上で右マウスをクリックして座標(40.648275456129724, -73.78004682462297)を選択するとコピーすることができます。

Q3.より複雑な経路の可視化は可能ですか?
A3. はい、可能です。より多くの場所を追加したり、リアルタイムの交通情報などを表示するように拡張することができます。今回の投稿のソースコードを利用して、欲しい注文をAIに伝えてコーディングしてもらうと便利です。
Q4.Pythonマップの可視化結果を画像として保存できますか?
A4. フォリウムは基本的にHTMLファイルとして保存されますが、 セレンのようなツールを使って地図を画像でキャプチャすることができます。(この部分は別のポストで説明します。) プログラム的なものではなく ショートカット(win+shift+s)を利用してHTMLで表示する地図をキャプチャしてください。
整理する
今回の記事では、Pythonの地図の可視化を使ってニューヨークでの移動経路を視覚的に表現する方法を学びました。 この過程で、データを直感的に理解することができ、複雑な移動経路や物流の移動経路も簡単に可視化することができます。この記事を 人工知能活用プロンプトの内容を使用して別の移動経路を視覚化したり、より多くのデータを追加して拡張プロジェクトに挑戦してみましょう!
Pythonの地図の可視化を含めて予算、日程表など全体的な旅行計画を準備している方は、この記事(2024年秋夕に備えてChatGPTで旅行計画が組める?(feat.地図ルート))を確認すると、別の洞察を得ることができるでしょう。
#完全統合コード
下記のコードをコピーしてVS codeのような統合開発環境に貼り付けて実行します。 しかし、もしfoliumパッケージがインストールされてない場合、下記のような警告が発生します。ターミナルでモジュールインストールコマンド(pip install folium)で該当パッケージをインストールした後、下記の統合コードを実行してください。

# 必要なライブラリ import
import os # ファイルシステム操作のためのモジュール (ディレクトリ作成、ファイルパス操作など)
import folium # インタラクティブな地図を作成するためのライブラリ
# 結果を保存するディレクトリの生成
結果_dir = 'C:/result/'
# os.makedirs():ディレクトリの生成。exist_ok=Trueオプションで既に存在する場合、エラーを防止する。
os.makedirs(result_dir, exist_ok=True)
# 主な場所の座標設定 (緯度、経度)
simplified_locations = { {} を指定します。
"JFK Airport":[40.6413, -73.7781]、
"Hilton New York Midtown":[40.7625, -73.9780]、
"イベント会場(マンハッタンセンター)":[40.7527, -73.9932].
}
#距離(km)と時間(分)情報
simplified_distances_and_times = { {...
("JFK Airport", "Hilton New York Midtown"): (25.0, 35)、
("Hilton New York Midtown", "Event Venue (Manhattan Center)"): (1.2, 15)
}
# ルートの順序設定
ordered_locations = [.
("JFK Airport", "Hilton New York Midtown")、
("Hilton New York Midtown", "Event Venue (Manhattan Center)")
]を指定します。
# 地図生成
# folium.Map():基本的な地図を生成
# location: 地図の中心点の座標[緯度、経度]。
# zoom_start: 初期ズームレベル (高いほど拡大されます)
m = folium.Map(location=[40.7200, -73.9000], zoom_start=11)
# マーカーとパスを追加
# enumerate():リストの要素とインデックスを一緒に返す、start=1でインデックスを1から始める
for idx, location in enumerate(simplified_locations.items(), start=1):
loc_name, coords = location
# folium.Marker():地図にマーカーを追加
# popup: マーカーをクリックしたときに表示されるテキスト
# icon: マーカーの形状を設定します。
folium.Marker(
coords、
popup=f"{idx}.{loc_name}"、
icon=folium.DivIcon(
html=f""""
<div style="text-align: center;">
<div style="font-size: 12pt; font-weight: bold; color: black; background-color: white; border-radius: 50%; width: 24px; height: 24px; display: flex; align-items: center; justify-content: center;">
{idx}
</div>
<div style="font-size: 10pt; font-weight: bold; color: navy; margin-top: 10px;">
{loc_name}
</div>
</div>"""
).add_to(m)
).add_to(m)
# 経路と距離/時間情報を追加します。
for (loc1, loc2) in ordered_locations:
# folium.PolyLine():二点間に線を引く
# color: ラインの色、weight: ラインの太さ、opacity: ラインの透明度
folium.PolyLine([simplified_locations[loc1], simplified_locations[loc2]], color="blue", weight=2.5, opacity=1).add_to(m)
#距離と時間情報を取得します。
distance_km, time_min = simplified_distances_and_times[(loc1, loc2)].
# 2つの地点の中間座標を計算する
mid_point = [(simplified_locations[loc1][0] + simplified_locations[loc2][0]) / 2、
(simplified_locations[loc1][1] + simplified_locations[loc2][1]) / 2], (simplified_locations[loc1][1] + simplified_locations[loc2][1]) / 2].
# 中間地点に距離と時間情報を含むマーカーを追加する
folium.Marker(
mid_point、
icon=folium.DivIcon(
html=f'<div style="font-size: 10pt; font-weight: bold; color: red;">{distance_km}km, {time_min}分</div>'、
).add_to(m)
).add_to(m)
#地図をHTMLで保存
# os.path.join():オペレーティングシステムに合ったパス区切り文字を使用してファイルパスを生成します。
final_corrected_map_path = os.path.join(result_dir, 'ny_business_trip_final_corrected_map_with_distances.html')
m.save(final_corrected_map_path) # 生成された地図をHTMLファイルとして保存します。
print(f"Map saved to: {final_corrected_map_path}") # 保存されたファイルのパスを出力します。





