Ubuntu

Googleマップでタイムラインを見る

以前は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もこんな面倒なことにしたのには、理由があるわけですよね。
そう考えると、この手順を実施すること自体それに逆らっているのだから、セキュリティ的に危険ですよ、ということですね。

ということで、実行時には十分注意のこと。

ここから広告
広告
広告ここまで

コメントはこちらから お気軽にどうぞ ~ 投稿に関するご意見・感想・他