導入
「せっかくの楽しい旅行、撮った写真を見返すだけでなく、その時のドキドキした道のりや、『あ、このカフェ見つけたのココだった!』なんて発見も一緒に思い出せたら最高じゃないですか?😊」
実は、いつも使っているGoogleマップ。設定で「ロケーション履歴」をオンにしていると、あなたの素敵な旅の軌跡が記録されているかもしれません。
今回は、そのGoogleマップのロケーション履歴データ(JSON形式という、ちょっと専門的なファイルです)を、地図アプリで使えるGPXファイルに変換して、デジカメで撮った写真と撮影場所を紐づけたり、思い出の場所をピンポイントで記録したりする、ちょっとマニアックだけど便利なテクニックをご紹介します!
「JSON?GPX?なんだか難しそう…」って思ったあなたも大丈夫!私も最初は「Qiitaの記事だけじゃ分からないよ~😭」って色々調べまくった一人なので(笑)、その経験を踏まえて、できるだけ分かりやすく手順を解説しますね。これを読めば、あなたの大切な旅行の思い出が、もっと鮮やかに、もっと深く残せるようになるはずです✨
本文
なんでGPXファイル?デジカメ写真との連携ってどういうこと?
まず、「GPXファイルって何?」ってところからですよね。簡単に言うと、GPSのログデータが入ったファイル形式のこと。これがあると、
- 旅行中に歩いたルートや立ち寄った場所を、地図アプリで視覚的に表示できる!
- デジカメで撮った写真(特にGPS機能がない機種の場合)とGPXログを組み合わせることで、「この写真はどこで撮ったんだろう?」が一目瞭然に!
- お気に入りのカフェ、絶景ポイント、秘密の小道など、「また行きたい!」と思った場所をピンポイントで記録・共有できる!
つまり、写真だけでは伝えきれない「旅のストーリー」を、より豊かにしてくれる魔法のアイテムなんです。
(キーワード: GPXファイル、位置情報活用、旅行記録、デジカメ写真、撮影場所特定、思い出の可視化)
今回の主役:Googleロケーション履歴の「JSONデータ」
「じゃあ、そのGPXファイルを作る元データはどこにあるの?」と思いますよね。
実は、Googleアカウントの設定で「ロケーション履歴」をオンにしていると、訪れた場所や移動経路が、最近のアップデートで、お使いのスマートフォンなどの端末自体に直接保存されるようになりました。(以前は主にGoogleのサーバーでしたが、プライバシーをより重視する流れで変わったんですね!)。そして、希望すればクラウドにバックアップすることも可能です。
この大切な記録は、「Googleデータエクスポート(Google Takeout)」というサービスを使うことで、JSON(ジェイソン)形式のファイルとしてパソコンにダウンロードできるんです。
JSONっていうのは、プログラムが扱いやすいように情報を整理したテキストファイルのこと。私たちシステムエンジニア…あ、元システムエンジニアの私にとっては馴染み深いんですが(笑)、普通に見ると「???」ってなっちゃうかもしれませんね。
こんな感じの、記号と文字の羅列です…!
私も最初は、このJSONファイルをどうやってGPXに変換するのか、Qiitaで見つけた記事(https://qiita.com/kumakumao/items/f82bdd9b28228ffc9b6e)を参考にしつつも、具体的な手順が分からなくて色々試行錯誤しました💦 なので、今回はその経験を元に、ステップバイステップで解説していきますね!
(キーワード: Googleロケーション履歴、JSONデータ、Google Takeout、データ形式、技術チャレンジ)
いざ、変換!魔法の呪文で思い出をGPXファイルに!
ここからは、実際にJSONファイルをGPXファイルに変換する手順です。
「プログラミングなんてやったことない…」という方も、大丈夫!今回は「Python(パイソン)」というプログラミング言語を使いますが、難しいことはありません。「魔法の呪文が書かれたレシピ(Pythonスクリプト)」をコピペして、いくつか準備をすればOKです👍
準備するものリスト
- パソコン (WindowsでもMacでもOK!)
- Pythonの実行環境 (「えっ!?」って思った方は後で簡単に説明します!)
- 変換用のPythonスクリプト (後でコードを載せますね!)
- あなたのGoogleロケーション履歴のJSONファイル (ファイル名は
タイムライン.json
にしておくとスムーズです)
簡単ステップでGPXファイルを作ろう!
(1) Pythonの準備(もしPCに入ってなかったら)
「Pythonって何?」って思いますよね。これはプログラミング言語の一つなんですが、今回は「呪文を唱えるための道具」くらいに思ってください。
まず、お使いのPCにPythonが入っているか確認してみましょう。
(コマンドプロンプト/ターミナルで python --version
または python3 --version
を実行する簡単な説明を挿入。もし入っていなければ、Python公式サイトからのインストールを促す。その際「Add Python to PATH」にチェックを入れると便利、という一言も添える)
(2) 魔法の呪文(Pythonスクリプト)を準備しよう!
これが、JSONファイルをGPXファイルに変換してくれる「魔法の呪文」です。下のコードをぜーんぶコピーして、テキストエディタ(メモ帳とかでOK!)に貼り付けてください。
import json
import os
from xml.etree.ElementTree import Element, SubElement, tostring
from xml.dom.minidom import parseString
# JSONファイルの読み込み
# 注意: ここで読み込むファイル名と文字コードが重要です。
json_file_path = "タイムライン.json"
try:
with open(json_file_path, "r", encoding="utf-8") as f:
data = json.load(f)
except FileNotFoundError:
print(f"エラー: 入力ファイル '{json_file_path}' が見つかりません。スクリプトと同じフォルダに配置してください。")
exit()
except json.JSONDecodeError:
print(f"エラー: 入力ファイル '{json_file_path}' のJSON形式が正しくありません。内容を確認してください。")
exit()
except Exception as e:
print(f"エラー: 入力ファイルの読み込み中に予期せぬ問題が発生しました: {e}")
exit()
# 出力フォルダ作成
output_folder = "gpx_output"
os.makedirs(output_folder, exist_ok=True)
# GPXのルート要素を作成
gpx = Element("gpx",
version="1.1",
creator="Python Script",
xmlns="http://www.topografix.com/GPX/1/1",
xmlns_xsi="http://www.w3.org/2001/XMLSchema-instance",
xsi_schemaLocation="http://www.topografix.com/GPX/1/1 http://www.topografix.com/GPX/1/1/gpx.xsd"
)
# トラックを作成
trk = SubElement(gpx, "trk")
name = SubElement(trk, "name")
name.text = "Timeline Track" # GPXトラック名(必要に応じて変更可)
trkseg = SubElement(trk, "trkseg")
# `semanticSegments` に移動データが含まれていると仮定
# 注意: 入力JSONの構造に合わせてキー名を変更する必要があるかもしれません。
if "semanticSegments" in data:
for segment in data["semanticSegments"]:
if "timelinePath" in segment:
for point_data in segment["timelinePath"]:
if "point" in point_data:
coords_str = point_data["point"].replace("°", "") # "°"記号を除去
time_str = point_data.get("time", "") # timeキーがない場合は空文字
# トラックポイントを作成
trkpt = SubElement(trkseg, "trkpt")
try:
lat, lon = coords_str.split(", ")
trkpt.set("lat", lat.strip())
trkpt.set("lon", lon.strip())
except ValueError:
print(f"警告: 座標データの形式が不正です: '{coords_str}' スキップします。")
continue # このポイントはスキップ
# 時間を設定 (存在する場合)
if time_str:
time_element = SubElement(trkpt, "time")
time_element.text = time_str
else:
print("警告: 'timelinePath' キーがセグメント内に見つかりません。")
else:
print("エラー: JSONデータ内に 'semanticSegments' キーが見つかりません。入力データの構造を確認してください。")
# データがない場合は空のGPXが出力されるか、ここで exit() しても良い
# GPXデータを文字列に変換し、整形
gpx_str_bytes = tostring(gpx, encoding="utf-8")
formatted_gpx = parseString(gpx_str_bytes).toprettyxml(indent=" ") #インデントをスペース2つに変更
# GPXファイルに保存
gpx_filename = os.path.join(output_folder, "timeline.gpx")
try:
with open(gpx_filename, "w", encoding="utf-8") as f:
f.write(formatted_gpx)
print(f"GPXファイルを出力しました: {gpx_filename}")
except Exception as e:
print(f"エラー: GPXファイルの保存中に問題が発生しました: {e}")
貼り付けたら、ファイルを保存します。
* ファイル名: convert_to_gpx.py
(この名前にしてくださいね!)
* 文字コード: これ、すっごく大事です!「UTF-8」を選んで保存してください。メモ帳なら「名前を付けて保存」の時に選べます。これ間違えると、後でエラーが出ちゃうんです…(経験者は語る😂)。
(メモ帳でUTF-8を選んで保存する画面のキャプチャなどあれば挿入)
(3) 元になるデータ(JSONファイル)を準備しよう!
Googleデータエクスポートからダウンロードしたロケーション履歴のJSONファイル。たくさんファイルがあるかもしれませんが、その中からタイムラインデータが含まれているファイル(多くの場合、Records.json
や Semantic Location History
フォルダ内のJSONファイルなど)を探し、ファイル名を タイムライン.json
に変更して、さっき保存した convert_to_gpx.py
と同じフォルダに置いてください。
そして、この タイムライン.json
も、文字コードが「UTF-8」になっているか確認してくださいね!
【ちょっと補足】 Googleロケーション履歴のJSONファイル構造は時々変わることがあるみたいです。もしスクリプトがうまく動かなかったら、JSONファイルの中身のキー名(semanticSegments
とか timelinePath
とか)がスクリプトと合っているか確認が必要になるかも…。ちょっと上級編ですが、頭の片隅にでも!
(4) 魔法を唱える場所(コマンドプロンプト/ターミナル)を開こう!
Windowsなら「コマンドプロンプト」、Macなら「ターミナル」を開きます。
そして、cd
というコマンドを使って、さっき convert_to_gpx.py
と タイムライン.json
を保存したフォルダに移動します。
(例: cd Desktop/旅行の思い出フォルダ
みたいな感じ!)
(5) いよいよ呪文を唱える!(スクリプト実行)
準備はOK?ドキドキしますね!コマンドプロンプト/ターミナルで、こう入力してEnterキーをドン!
python convert_to_gpx.py
(もし python3
で動く環境なら python3 convert_to_gpx.py
です)
(6) できたかな?GPXファイルの確認!
エラーメッセージが出ずに、GPXファイルを出力しました: gpx_output\timeline.gpx
みたいなメッセージが出たら、大成功!🎉
同じフォルダの中に gpx_output
という新しいフォルダができていて、その中に timeline.gpx
というファイルがあれば完璧です!
(生成されたGPXファイルを地図アプリで表示したイメージ画像などあれば挿入)
こんな感じで、旅の軌跡が地図に表示されるはず!
(キーワード: Python実行、スクリプト準備、コマンドプロンプト、エラー対処、UTF-8、Googleデータエクスポート、ファイル準備)
【体験談】私もハマった!よくあるエラーと解決策
「エラーが出ちゃった…どうしよう😭」ってなっても大丈夫!私も最初はエラーのオンパレードでした(笑)。いくつか、よくあるつまずきポイントと解決策をシェアしますね。
- 「SyntaxError: invalid syntax」って出たら?
- もしかして、
>>>
って表示されてるPythonの画面で python convert_to_gpx.py
って入力しちゃってませんか?それはPythonの「中」なので、一度 exit()
で外に出てから、普通のコマンドプロンプト/ターミナルで実行してみてくださいね!
- 「Non-UTF-8 code starting with...」ってエラーは?
- これは
convert_to_gpx.py
の文字コードがUTF-8じゃないよ!って怒られてます。ファイルをもう一度開いて、UTF-8で保存し直してみて!
- 「FileNotFoundError: ... 'タイムライン.json'」って言われたら?
タイムライン.json
が convert_to_gpx.py
と同じ場所にないか、ファイル名が微妙に違うかも。もう一度確認!
- 「JSONDecodeError...」が出たら?
タイムライン.json
の中身が正しくないか、文字コードがUTF-8じゃない可能性があります。Googleからダウンロードし直すか、文字コードを確認してみてください。
エラーメッセージをよーく読むと、ヒントが隠されてることが多いですよ😉 諦めずにトライしてみてくださいね!
(キーワード: トラブルシューティング、エラー解決、体験談、共感)
【コラム】なぜ私がこんなマニアックな挑戦を?
「カメラマンなのに、なんでこんなプログラミングみたいなことしてるの?」って思われるかもしれませんね(笑)。
実は私、カメラマンになる前はシステムエンジニアをしていたり、テレビ局で放送のお仕事をしていたり、さらには植木屋さんで自然と戯れていたりと、ちょっと変わった経歴の持ち主なんです。
だから、こういう技術的なパズルを解くみたいな作業、結構好きなんですよね。一見、写真とは関係なさそうに見えるけど、データを扱ったり、新しいツールを試したりする探求心って、実は写真の新しい表現方法を見つけたり、撮影の効率を上げたりするのに役立つことがあるんです。
例えば、今回のGPXだって、ただ「ルートが分かった」だけじゃなくて、「この場所で、こんな光の中で、こんな気持ちでシャッターを切ったんだな」って、写真に込められたストーリーをより深く思い出させてくれる。それって、すごく素敵なことだと思いませんか?😊
いろんな経験が、今の「写真を撮る」という仕事に、深みやユニークな視点を与えてくれていると信じています。だから、皆さんも「こんなことして何になるの?」って思うようなことでも、興味があったらぜひ挑戦してみてください!意外なところで、未来の自分に繋がるかもしれませんよ。
(キーワード: 自己紹介、多様な経験、技術的探求心、キャリア、写真への情熱、新しい視点)
まとめ (記事の要約、読者へのメッセージ)
今回は、Googleロケーション履歴のJSONデータをGPXファイルに変換して、旅行の思い出やデジカメ写真と連携させる、ちょっとマニアックだけど便利なテクニックをご紹介しました!
手順が多くて「うわっ!」って思ったかもしれませんが、一つ一つクリアしていけば、きっとあなただけの特別な「旅の軌跡マップ」が作れるはずです。お気に入りのカフェ、感動した景色、友達と大笑いしたあの道…そんな大切な思い出の場所をピンポイントで記録して、いつでも鮮やかに思い出せるようにしてみませんか?
もちろん、デジカメで撮った写真の撮影場所が分からなくて困っていた方にも、この方法はとっても役立つと思います。
もし「やってみたいけど、ここが分からない…」ということがあれば、気軽にコメントで聞いてくださいね。(分かる範囲でお答えします!)
今回はちょっと技術的なお話でしたが、普段はこのブログで、皆さんの心に残るような写真の魅力や、撮影の裏話、そして私のちょっと変わった日常(笑)などを発信しています。
「今日の記事、ちょっと面白かったかも?」と思ったら、ぜひまたブログに遊びに来てくださいね!そして、もしよろしければ、この記事をSNSでシェアしていただけると、とっても嬉しいです🥰
最後まで読んでいただき、ありがとうございました!
キーワード
- 記事全体: GPX、JSON、Googleロケーション履歴、データ変換、Python、位置情報、旅行記録、デジカメ写真、思い出、テクニック、DIY、地図連携
- SEO対策キーワード候補: Googleマップ 足跡 GPX, JSON GPX 変換, ロケーション履歴 GPX, 旅行記録 地図, デジカメ 写真 場所特定, Python GPX作成
いつも応援ありがとうございます!
クリックいただけると励みになります。