モチベーション
以下でおすすめされているマッピング!にGoogleタイムラインのデータをインポートしたかった
https://b.hatena.ne.jp/entry/4766225990155446401/comment/Fushihara
参考としたコード
Googleタイムラインのjsonをkmlに変換する方法 :
https://anond.hatelabo.jp/20250214150133
しかしながら、マッピング!でkmlが正常にインポートされなかった。。。gpxで試したらいけました。
手順
まず、Googleタイムラインをエクスポートする
Androidの場合の方法
https://qiita.com/kumakumao/items/f3e8b7b0aa2a1f99c465
以下のスクリプトでgpxファイルに変換する
import json
import os
from xml.etree.ElementTree import Element, SubElement, tostring
from xml.dom.minidom import parseString
# JSONファイルの読み込み
with open("タイムライン.json", "r", encoding="utf-8") as f:
data = json.load(f)
# 出力フォルダ作成
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"
trkseg = SubElement(trk, "trkseg")
# `semanticSegments` に移動データが含まれている
if "semanticSegments" in data:
for segment in data["semanticSegments"]:
if "timelinePath" in segment:
for point in segment["timelinePath"]:
coords = point["point"].replace("°", "")
time = point.get("time", "Unknown Time")
# トラックポイントを作成
trkpt = SubElement(trkseg, "trkpt")
lat, lon = coords.split(", ")
trkpt.set("lat", lat)
trkpt.set("lon", lon)
# 時間を設定
time_element = SubElement(trkpt, "time")
time_element.text = time
# GPXデータをフォーマット
gpx_str = tostring(gpx, encoding="utf-8")
formatted_gpx = parseString(gpx_str).toprettyxml(indent=" ")
# GPXファイルに保存
gpx_filename = os.path.join(output_folder, "timeline.gpx")
with open(gpx_filename, "w", encoding="utf-8") as f:
f.write(formatted_gpx)
print(f"GPXファイルを出力しました: {gpx_filename}")
おわり
マッピング!でのインポート方法

しばし待つと、、、
