以前はGoogleマップを開けばタイムラインを表示させることができて、旅行のメモとかにいい感じの地図を書くことができていた。
でも、プライバシーの問題?でサーバーでデーターを保管できなくなったとかで、あの地図をPCでみられなくなった。
プライバシーは大切。うかつなことをやってアカウントをとられたら丸見えだもんね。
でも、不便。
Android端末に保管されたタイムラインは、こちらで教えてくれた方法で、エクスポートできた。
Qiita / [2025年2月時点] Google タイムラインのデータエクスポート方法 [Android]
ChatGPTにやり方を聞いてみたところ、エクスポートしたデーター(JSON)をKMLに変換できるよ、と。
ではやってみましょう。
マイマップに位置情報を残すことになるので、実行時は注意。
使い終わったら、マイマップを消すとかの対応がより安全かなと思う。
環境
Ubuntu 24.04 LTS desktop。
現在他の作業で使っているものをそのまま使う。
手順
データーのエクスポートは、上述のリンク先で教えてもらった方法で実施。
私の場合で、2016年からのデーターが保管されていた。
このデーターを以下の通り処理していく。
Pythonの環境を構築
Python3をインストールして、simplekmlをインストール。
なお、simplekmlは --break-system-packages ナシだとエラーになるので、無理矢理インストールするためのオプションを入れている。
常用する環境の場合には、もっと別の方法でインストールするのが良いのだろうけれど、この環境は仮に壊れても大丈夫なので、まぁいいかと。
$ sudo apt install python3-pip
$ pip install simplekml --break-system-packages
変換プログラムを作成
変換プログラムはChatGPTと相談して、こんなところで落ち着いた。
プログラム内の「設定」と書かれているところを変更する。
FROM_DATEとTO_DATEは必ず触る感じになるかと。
tl2kml.py
from datetime import datetime, timezone, timedelta
import simplekml, json
# ===== 設定 =====
INPUT_JSON = "timeline.json"
OUTPUT_KML = "timeline.kml"
FROM_DATE = "2025-08-13T00:00:00+09:00" # JST
TO_DATE = "2025-08-13T23:59:59+09:00" # JST
# ===============
JST = timezone(timedelta(hours=9))
from_ts = datetime.fromisoformat(FROM_DATE).astimezone(timezone.utc)
to_ts = datetime.fromisoformat(TO_DATE).astimezone(timezone.utc)
with open(INPUT_JSON, "r", encoding="utf-8") as f:
data = json.load(f)
kml = simplekml.Kml()
points = [] # 線用の座標リスト
point_count = 0
for segment in data.get("semanticSegments", []):
for point in segment.get("timelinePath", []):
ts_utc = datetime.fromisoformat(point["time"]).astimezone(timezone.utc)
if from_ts <= ts_utc <= to_ts:
lat_str, lon_str = point["point"].replace("°", "").split(",")
lat, lon = float(lat_str), float(lon_str)
ts_jst = ts_utc.astimezone(JST)
# ピン
p = kml.newpoint(
name=ts_jst.isoformat(),
coords=[(lon, lat)]
)
# p.style.iconstyle.icon.href = "https://www.gstatic.com/mapspro/images/stock/503-wht-blank_maps.png"
# p.style.iconstyle.color = simplekml.Color.red
# p.style.iconstyle.scale = 0.8 # 少し小さめにする例
# 線用に追加
points.append((lon, lat))
point_count += 1
# 線を追加(青色)
if points:
linestring = kml.newlinestring(name="移動経路", coords=points)
linestring.style.linestyle.color = simplekml.Color.blue # 青い線
linestring.style.linestyle.width = 4
kml.save(OUTPUT_KML)
print(f"書き出し完了: {OUTPUT_KML}, {point_count}ポイント(線=青)")
ピンのアイコンや色を設定したいけれど、やり方がよく分からない(マニュアルを全く見ていない…)。
未指定にすることで、それっぽいアイコンが表示される。
変換作業
同じディレクトリに、timeline.jsonを置いて、このプログラムを実行する。
$ python3 tl2kml.py
これで、timeline.kmlが生成される。
Googleマップで見る
以下の手順でマイマップを作成した。
- GoogleマップをPCで開き、左サイドバーにある「保存済み」をクリックする。
- サイドバーが拡張され、タブが4つ(リスト、ラベル付き、訪れた場所、マイマップ)が表示される。
マイマップを選択する。 - 「マイマップを開きます」というリンクが表示されるのでクリックすると、マイマップが開く。
- マイマップで「新しい地図を作成」をクリックする。
- Creating a MyMaps map always uploads title, thumbnail, and associated metadata to Drive というウィンドウが表示される。
「CREATE」をクリックする。 - 無題のレイヤーの下に表示される「インポート」というリンクをクリックする。
- インポートするファイルの選択、というダイアログが表示されるので、生成したtimeline.kmlファイルをアップロードする。
これでタイムラインがみられる。
さいごに
セキュリティと不便はトレードオフの関係、と過去先輩に教わった。
Googleもこんな面倒なことにしたのには、理由があるわけですよね。
そう考えると、この手順を実施すること自体それに逆らっているのだから、セキュリティ的に危険ですよ、ということですね。
ということで、実行時には十分注意のこと。
コメントはこちらから お気軽にどうぞ ~ 投稿に関するご意見・感想・他