ジオセンス社のM5F9Pファームを使って記録すると、GPSポイントで、ログファイルを自動生成してくれます。
このログファイルはそのまま次のサンプルコードにパスを入れると、PythonライブラリのFoliumを使って綺麗に描画可能。
Foliumの使い方はこちらの記事を参考にしてください。
Python × FoliumでGPSデータを地図上に表示する方法|リアルタイム可視化は?
import folium
# ---- ファイルパスを指定 ----
file_path = "/あなたのログファイルパス.log"
# ---- NMEAから座標を抽出する関数 ----
def parse_nmea_latlon(nmea_sentence):
parts = nmea_sentence.strip().split(",")
if parts[0] not in ["$GPRMC", "$GPGGA"]:
return None
try:
# GPRMCの場合
if parts[0] == "$GPRMC":
lat_raw, lat_dir = parts[3], parts[4]
lon_raw, lon_dir = parts[5], parts[6]
# GPGGAの場合
else:
lat_raw, lat_dir = parts[2], parts[3]
lon_raw, lon_dir = parts[4], parts[5]
if not lat_raw or not lon_raw:
return None
# 緯度 (ddmm.mmmm → dd.ddddd)
lat = float(lat_raw[:2]) + float(lat_raw[2:]) / 60.0
if lat_dir == "S":
lat = -lat
# 経度 (dddmm.mmmm → dd.ddddd)
lon = float(lon_raw[:3]) + float(lon_raw[3:]) / 60.0
if lon_dir == "W":
lon = -lon
return (lat, lon)
except:
return None
# ---- ファイルを読み込み座標抽出 ----
points = []
with open(file_path, "r") as f:
for line in f:
pos = parse_nmea_latlon(line)
if pos:
points.append(pos)
if not points:
raise ValueError("NMEAログから座標が抽出できませんでした。")
# ---- 地図を生成 ----
center = [sum(p[0] for p in points)/len(points),
sum(p[1] for p in points)/len(points)]
m = folium.Map(location=center, zoom_start=18)
# 青い点で描写
for lat, lon in points:
folium.CircleMarker(location=(lat, lon),
radius=3,
color="blue",
fill=True,
fill_color="blue").add_to(m)
# 軌跡を線で結ぶ(オプション)
folium.PolyLine(points, color="blue", weight=2.5, opacity=0.8).add_to(m)
# ---- Jupyterで表示(または保存) ----
m.save("gps_track_map.html")
m
軌跡を描画
PolyLine を追加すれば軌跡として点を結ぶことができます。
Folium における PolyLine とは
PolyLine は「複数の緯度・経度を順につなげて線分を描画する」オブジェクトです。
点のリスト [(lat1, lon1), (lat2, lon2), ...]
を渡すと、その順序で直線をつないで描写されます。
線の色 (color
)、太さ (weight
)、透明度 (opacity
) などを指定できます。
実は前回のコードにもオプションで PolyLine
を入れていましたが、今回は明示的に「点(青いサークル)」と「軌跡(線)」を両方描く例を整理しました。
import folium
# ---- ファイルパスを指定 ----
file_path = "あなたのパス.log"
# ---- NMEAから座標を抽出する関数 ----
def parse_nmea_latlon(nmea_sentence):
parts = nmea_sentence.strip().split(",")
if parts[0] not in ["$GPRMC", "$GPGGA"]:
return None
try:
# GPRMCの場合
if parts[0] == "$GPRMC":
lat_raw, lat_dir = parts[3], parts[4]
lon_raw, lon_dir = parts[5], parts[6]
# GPGGAの場合
else:
lat_raw, lat_dir = parts[2], parts[3]
lon_raw, lon_dir = parts[4], parts[5]
if not lat_raw or not lon_raw:
return None
# 緯度 (ddmm.mmmm → dd.ddddd)
lat = float(lat_raw[:2]) + float(lat_raw[2:]) / 60.0
if lat_dir == "S":
lat = -lat
# 経度 (dddmm.mmmm → dd.ddddd)
lon = float(lon_raw[:3]) + float(lon_raw[3:]) / 60.0
if lon_dir == "W":
lon = -lon
return (lat, lon)
except:
return None
# ---- ファイルを読み込み座標抽出 ----
points = []
with open(file_path, "r") as f:
for line in f:
pos = parse_nmea_latlon(line)
if pos:
points.append(pos)
if not points:
raise ValueError("NMEAログから座標が抽出できませんでした。")
# ---- 地図を生成 ----
center = [sum(p[0] for p in points)/len(points),
sum(p[1] for p in points)/len(points)]
m = folium.Map(location=center, zoom_start=18)
# ---- 青い点で描写 ----
for lat, lon in points:
folium.CircleMarker(location=(lat, lon),
radius=3,
color="blue",
fill=True,
fill_color="blue").add_to(m)
# ---- 軌跡を線で結ぶ ----
folium.PolyLine(points, color="blue", weight=2.5, opacity=0.8).add_to(m)
# ---- Jupyterで表示(または保存) ----
m.save("gps_track_map.html")
m
Foliumの他の機能リスト
機能 | クラス / プラグイン名 | 概要 | 主な引数 |
---|---|---|---|
基本折れ線 | folium.PolyLine |
複数の座標点を結ぶ直線や曲線を描画 | locations, color, weight, opacity, popup, tooltip |
値に応じた折れ線 | folium.plugins.ColorLine |
値の系列に基づいて線をグラデーション表示 | positions, colors, colormap, weight |
アニメーション線 | folium.plugins.AntPath |
破線が動くようなアニメーションを表示 | locations, color, weight, delay, dash_array |
多角形 | folium.Polygon |
閉じた多角形領域を描画 | locations, color, weight, fill_color, fill_opacity |
矩形 | folium.Rectangle |
二点の座標で矩形を描画 | bounds, color, fill, popup, tooltip |
円 | folium.Circle |
指定中心と半径で円を描画 | location, radius, color, fill_color, popup |
円マーカー | folium.CircleMarker |
半径をピクセル指定する円マーカー | location, radius, color, fill_color |
GeoJSON描画 | folium.GeoJson |
GeoJSONの線・面データを表示 | data, style_function, popup, tooltip |
TopoJSON描画 | folium.TopoJson |
TopoJSON形式の線・面を表示 | data, object_path, style_function |
コロプレス図 | folium.Choropleth |
値に応じて領域を塗り分け | geo_data, data, key_on, fill_color, legend_name |
時系列GeoJSON | folium.plugins.TimestampedGeoJson |
時間情報を持つGeoJSONをアニメーション表示 | data, transition_time, loop, auto_play |
描画ツール | folium.plugins.Draw |
地図上で線や多角形をインタラクティブに描画 | export, position, draw_options |
距離計測 | folium.plugins.MeasureControl |
地図上で距離や面積を計測 | primary_length_unit, primary_area_unit |
マウス位置表示 | folium.plugins.MousePosition |
カーソル位置の座標を表示 | position, separator, prefix |
GPSログ活用アイディア 5選
移動経路の速度・加速度分析
- 各時刻の座標から速度や加速度を計算。
- ヒートマップとして「どの場所で速度が遅かったか」を可視化可能。
- 例:車や徒歩の移動ログで、渋滞区間や休憩ポイントが一目でわかる。
標高変化プロファイル(登山やサイクリング向け)
- GGAセンテンスから高度を抽出し、時間・距離に対して標高グラフを作成。
- 上り下りの傾斜を解析して「どこがきつい登りか」を定量化。
軌跡クラスタリング(行動パターン抽出)
- 複数日のログをまとめ、機械学習クラスタリングで行動パターンを可視化。
- 「よく行く場所」や「滞在時間の長いエリア」が地図上に浮かび上がる。
- 例:日常の生活動線の把握、営業ルートの最適化。
滞在地点(Stay Point)の自動検出
- 移動速度がしきい値以下で、一定時間以上滞在している場所を抽出。
- 例:カフェやレストランで休憩した場所をGPSだけで特定できる。
- 観光や行動記録のまとめに役立つ。
3D可視化(Google Earth / matplotlib 3Dプロット)
- 緯度・経度・高度を3Dで描画し、Google EarthにKMLでエクスポート。
- 例:飛行ログやドローンの飛行経路を3Dで追体験。

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