GPSで記録した移動ルートの「総距離」を自動的に算出したいと思ったことはありませんか?
たとえば旅のログ、物流車両の走行距離、あるいは災害時の避難経路など。
Pythonには、そのニーズにぴったりのライブラリがあります。
それが今回紹介する geopy(ジオパイ) です。
本記事では、geopy
を使って「緯度・経度から2地点間の距離を自動計算する方法」と、それを応用して 移動ログから合計距離を算出する方法 をわかりやすく解説します。
pip install geopy
geopyとは?
geopy
は、地球上の2地点間の距離を正確に計算するためのPythonライブラリです。
緯度・経度の座標データから、地球の球体形状(楕円体)を考慮して、現実に近い直線距離(測地線距離)を求めることができます。
✅ 地図上の「まっすぐな距離」を求めるのに最適なライブラリ
geopyでできること
- 緯度・経度から直線距離を算出(km/mi単位)
- 距離の計算方法を選択可能(Vincenty法・Great-circle法など)
- 経路全体の合計距離(ルート上の全ステップを加算)
- 複数地点間の距離行列(物流の最適ルート探索に応用)
🧭 緯度・経度から移動距離を自動計算する方法(geopy × pandas)
本章では、GPSログ(CSV形式)から「移動距離の合計」を計算するPythonスクリプトを紹介します。
pandasは計算系のライブラリで、ファイナンスにもよく使われますし、科学系にも頻繁に使われますので、すべての仮想環境に入れておいてもいいくらいですね。
pip install pandas geopy
たとえば以下のようなCSVファイルを想定します
time,lat,lon
2025-07-30 09:00:00,43.2431,143.5642
2025-07-30 09:01:00,43.2438,143.5655
2025-07-30 09:02:00,43.2450,143.5662
GPSログから合計移動距離を計算するサンプルコードです。
"""
CSV形式のGPSログを読み込み、geopyで2点間距離を順に計算し、合計移動距離を求めるスクリプト。
使用ライブラリ:
- pandas:CSVデータ処理
- geopy:緯度経度から直線距離を測定
ファイル形式:
CSV(列: time, lat, lon)
"""
import pandas as pd
from geopy.distance import geodesic
def calculate_total_distance(csv_path: str) -> float:
# GPSログの読み込み
df = pd.read_csv(csv_path)
# 緯度・経度列の存在確認
if not {'lat', 'lon'}.issubset(df.columns):
raise ValueError("CSVファイルに 'lat' および 'lon' 列が含まれていません。")
# 距離合計用の変数(キロメートル単位)
total_distance_km = 0.0
# 行を順にペアで比較し、距離を足し合わせる
for i in range(1, len(df)):
prev = (df.loc[i - 1, 'lat'], df.loc[i - 1, 'lon'])
curr = (df.loc[i, 'lat'], df.loc[i, 'lon'])
total_distance_km += geodesic(prev, curr).km
return total_distance_km
# 実行例
if __name__ == "__main__":
distance = calculate_total_distance("gps_log.csv")
print(f"移動合計距離: {distance:.2f} km")
- CSVファイルを
pandas
で読み込み - 1行ずつ隣り合う緯度経度ペアを取り出す
geodesic()
で距離を計算して合計- 最終的な移動距離(km)を出力
2地点間の直線距離を計測するサンプル
"""
geopyライブラリを使って、指定した2地点の緯度・経度から直線距離(地球の曲率を考慮した測地線距離)を求めるサンプルコード。
- 地点1: 北海道足寄町
- 地点2: 兵庫県神戸市垂水区
"""
from geopy.distance import geodesic
# 地点の緯度・経度(例:足寄町、神戸市垂水区)
location1 = (43.2431, 143.5642) # 北海道足寄町
location2 = (34.6409, 135.0585) # 兵庫県神戸市垂水区
# 測地線距離を計算(キロメートル単位)
distance_km = geodesic(location1, location2).km
# 結果表示
print(f"足寄町から垂水区までの直線距離: {distance_km:.2f} km")
すると、足寄町から垂水区までの直線距離: 1120.64 kmと表示されると思います。
✅ 直線距離を計測できることのメリットと応用例
🧭 そもそも「直線距離」とは?
直線距離(geodesic distance)は、地球の曲率を考慮して2地点間を最短で結んだ距離のことです。
これはGoogleマップなどで「まっすぐ結んだ線」としてよく使われており、実際の移動距離(道路距離)とは異なります。
✅ なぜ直線距離の計算が重要なのか?
利点 | 説明 |
---|---|
🎯 最短経路の見積もり | ルートが未確定でも、おおよその距離を瞬時に把握できる |
📊 距離ベースで分析できる | 「近さ」に基づいた相関分析やクラスタリングが可能 |
🔄 反復処理が速い | 地図APIと違い、外部リクエスト不要でローカル処理が高速 |
💰 経費や時間の概算に最適 | 燃料費・移動時間・人件費などの粗い試算に役立つ |
🗺️ 地理的ヒートマップやマップ可視化と連携可能 | Folium等と組み合わせて直感的な可視化が可能 |
✅ 活用分野ごとの応用例
🚚 1. 物流・配車・宅配
- 倉庫から顧客住所までの最短距離で「配達優先度」や「費用感」を算出
- 各営業所間の距離マトリクスを生成して配車効率化
- ドローン配送や無人搬送車(AGV)の動作領域制御
🧳 2. 旅行・登山・アウトドア
- GPSロガーで記録した出発点〜目的地間の移動距離を「旅の記録」として可視化
- 複数地点間の旅程を直線でつないで旅ルートの全体感を確認
- 「次の目的地まであと〇km」という位置感覚の提供
⛑️ 3. 災害対応・避難支援
- 最寄り避難所までの最短ルート評価
- 災害直後に「最短距離で助けが届く範囲」の算出
- 災害ドローンの飛行範囲シミュレーション
🎹 4. 音楽家・イベント運営者
- 機材輸送距離から搬入経路や運搬コストの見積もり
- イベント拠点間の距離を事前に把握し、スケジュールや搬送効率化
- 「前の現場から今回の現場まで〇km」という舞台裏エピソードにも使える
🌍 5. 研究・教育分野
- 学生フィールドワークでの「距離感」をデータとして持たせる
- 地理情報処理・空間分析(GIS)の入門教材
- 生物の行動圏(動物が移動した範囲)の可視化や定量化
🛒 6. 店舗・サービス分析
- 顧客と店舗の直線距離から「来店確率」や「商圏の推定」
- 競合店との距離分析で市場の被り・空白地帯の把握
- SNSの位置情報ポストとリアル店舗の距離関連分析
✅ 直線距離 × 他ライブラリの連携で広がる可能性
組み合わせ | 応用 |
---|---|
pandas | CSVの緯度経度データを一括処理 |
folium | 地図上に距離をビジュアル化 |
streamlit | 距離をリアルタイムでダッシュボード表示 |
matplotlib | 距離のヒストグラム・散布図などを作成 |
scikit-learn | 距離を特徴量としてクラスタリングや回帰分析 |
✅ まとめ
直線距離の自動計算は、旅や業務、研究まで幅広く応用できる基本中の基本。geopy
を使えば、Pythonコード数行でこの距離を正確に取得できます。
「場所の関係性を数値で語れる」 というのは、空間データ処理における大きな武器です。
foliumとの連携も可能!
先日紹介した folium
で可視化したGPSログと、geopy
を組み合わせれば:
- 地図上にルートを表示(folium)
- 同時にルートの総距離を表示(geopy)
という風に、視覚+数値の両面からの分析が可能になります。
Python × FoliumでGPSデータを地図上に表示する方法|リアルタイム可視化は?

音楽家:朝比奈幸太郎
神戸生まれ。2025 年、40 年近く住んだ神戸を離れ北海道・十勝へ移住。
録音エンジニア五島昭彦氏より金田式バランス電流伝送 DC 録音技術を承継し、
ヴィンテージ機材で高品位録音を実践。
ヒーリング音響ブランド「Curanz Sounds」でソルフェジオ周波数音源を配信。
“音の文化を未来へ”届ける活動を展開中。