Skip to content

pe1hvh/TimeLine2MariaDB

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Google Timeline naar MariaDB

Waarom dit project?

Sinds eind 2023 heeft Google de Timeline functie ingrijpend gewijzigd. Je locatiegeschiedenis wordt nu alleen lokaal op je telefoon opgeslagen en niet meer in de cloud. Dit betekent:

  • Google Takeout op je desktop werkt niet meer voor Timeline data
  • De oude export-methodes en online handleidingen zijn verouderd
  • Je data is moeilijker te exporteren en te back-uppen

Dit project helpt je om je geëxporteerde Timeline data om te zetten naar een MariaDB database, zodat je:

  • Je locatiegeschiedenis veilig kunt bewaren
  • Krachtige queries kunt uitvoeren (per jaar, maand, week, dag)
  • Reizen en gebeurtenissen kunt labelen ("2021 Vakantie Zweden")
  • Je data kunt delen of visualiseren

Dit is de eerste iteratie, in de tweede iteratie zal een gui met kaart worden toegevoegd.


Timeline Data Exporteren op Android

Export via Android Instellingen

  1. Open Instellingen op je Android telefoon
  2. Ga naar Locatie
  3. Tik op Locatieservices
  4. Kies Tijdslijn
  5. Tik op Tijdslijn gegevens exporteren
  6. De export wordt opgeslagen op je Android apparaat

Let op: Na de export moet je het bestand zelf verplaatsen naar je computer (via USB, cloud opslag, of bestandsdeling) om het te kunnen importeren in de database.


Wat dit systeem doet

Systeem om Google Timeline JSON data te importeren in een MariaDB database met uitgebreide query mogelijkheden.

Bestanden

Bestand Beschrijving
schema.sql Database schema met alle tabellen, indexen en views
import_timeline.py Python script voor het importeren van JSON data
queries.sql Voorbeeldqueries voor periode selecties en event tags

Installatie

1. Database aanmaken

mysql -u root -p < schema.sql

Of in MySQL/MariaDB:

SOURCE /pad/naar/schema.sql;

2. Python dependencies

pip install mysql-connector-python

3. Data importeren

python import_timeline.py \
    --file timeline.json \
    --host localhost \
    --user root \
    --password jouw_wachtwoord \
    --database timeline_db

Meerdere bestanden:

python import_timeline.py -f file1.json file2.json file3.json -u root -p wachtwoord

Database Structuur

Hoofdtabellen

┌─────────────────────┐
│      visits         │  ← Bezoeken aan locaties
├─────────────────────┤
│ id                  │
│ start_time          │
│ end_time            │
│ year, month, week   │  ← Generated columns voor snelle queries
│ date, day_of_week   │
│ duration_minutes    │
│ location_id → ──────┼──┐
│ place_id            │  │
│ semantic_type       │  │
└─────────────────────┘  │
                         │
┌─────────────────────┐  │
│     locations       │ ←┘
├─────────────────────┤
│ id                  │
│ place_id            │
│ latitude, longitude │
│ name                │  ← Handmatige naam
│ semantic_type       │  ← HOME, WORK, etc.
│ city, country       │
└─────────────────────┘

┌─────────────────────┐
│    activities       │  ← Verplaatsingen
├─────────────────────┤
│ id                  │
│ start_time          │
│ end_time            │
│ year, month, week   │
│ start_lat/lng       │
│ end_lat/lng         │
│ activity_type       │  ← WALKING, IN_VEHICLE, etc.
│ distance_meters     │
└─────────────────────┘

┌─────────────────────┐
│    event_tags       │  ← Labels voor periodes
├─────────────────────┤
│ id                  │
│ name                │  ← "2021 Vakantie Zweden"
│ description         │
│ start_date          │
│ end_date            │
│ color               │
└─────────────────────┘

Query Voorbeelden

Periode Selecties

-- Per jaar
SELECT * FROM visits WHERE year = 2021;

-- Per maand
SELECT * FROM visits WHERE year = 2021 AND month = 7;

-- Per week (ISO week nummer)
SELECT * FROM visits WHERE year = 2021 AND week = 28;

-- Per dag
SELECT * FROM visits WHERE date = '2021-07-15';

-- Datum bereik
SELECT * FROM visits 
WHERE date BETWEEN '2021-07-10' AND '2021-07-28';

Event Tags Maken

-- Nieuwe tag aanmaken
INSERT INTO event_tags (name, description, start_date, end_date, color) 
VALUES ('2021 Vakantie Zweden', 'Camper trip door Zweden', '2021-07-10', '2021-07-28', '#4CAF50');

-- Visits automatisch koppelen aan tag
INSERT INTO visit_tags (visit_id, tag_id)
SELECT v.id, t.id
FROM visits v
CROSS JOIN event_tags t
WHERE t.name = '2021 Vakantie Zweden'
  AND v.date BETWEEN t.start_date AND t.end_date;

-- Of gebruik de stored procedure:
CALL tag_period('2021 Vakantie Zweden', 'Camper trip', '2021-07-10', '2021-07-28', '#4CAF50');

Locaties Namen Geven

-- Specifieke locatie een naam geven
UPDATE locations 
SET name = 'Thuis', city = 'Zwolle', country = 'Nederland'
WHERE place_id = 'ChIJdapJY0Tfx0cRelHsZwUUmG4';

-- Alle HOME locaties labelen
UPDATE locations 
SET name = 'Thuis'
WHERE semantic_type = 'HOME' AND name IS NULL;

-- Meest bezochte locaties vinden (voor naamgeving)
SELECT 
    l.place_id,
    l.latitude,
    l.longitude,
    COUNT(v.id) as bezoeken
FROM locations l
JOIN visits v ON l.id = v.location_id
WHERE l.name IS NULL
GROUP BY l.id
ORDER BY bezoeken DESC
LIMIT 20;

Rapporten

-- Maandelijkse samenvatting
SELECT * FROM monthly_summary WHERE year = 2021;

-- Dagelijkse samenvatting
SELECT * FROM daily_summary WHERE year = 2021 AND month = 7;

-- Periode rapport via procedure
CALL period_report('2021-07-01', '2021-07-31');

Views

View Beschrijving
daily_summary Dagelijkse statistieken
monthly_summary Maandelijkse statistieken
visits_with_locations Visits met locatienamen
activities_detailed Activities met type namen

Event Tags Systeem

Het event tag systeem maakt het mogelijk om periodes te labelen:

  1. Tag aanmaken met naam, beschrijving, begin/einddatum
  2. Automatisch koppelen van visits en activities op basis van datum
  3. Queries per tag om alle data voor een gebeurtenis op te halen

Voorbeelden van tags:

  • "2021 Vakantie Zweden"
  • "2019 Voorjaar Motor rit"
  • "2022 Kerst Familie"
  • "2020 Lockdown"

Locatie Namen

Locaties kunnen op twee manieren een naam krijgen:

  1. Handmatig - Via UPDATE queries
  2. Reverse Geocoding - Via externe API ( komt in 2e iteratie)

Voor reverse geocoding kun je de Nominatim API gebruiken:

https://nominatim.openstreetmap.org/reverse?lat=52.5319&lon=6.1045&format=json

Tips

  1. Performance: De generated columns (year, month, week, date) zijn geïndexeerd voor snelle queries
  2. Grote bestanden: Gebruik --batch-size parameter voor geheugen beheer
  3. Backup: Maak regelmatig backups: mysqldump -u root -p timeline_db > backup.sql
  4. Import controle: Check na import met SELECT COUNT(*) FROM visits;

About

Tijdlijn van Google Android telefoon omzetten naar MariaDB

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages