Schritt-für-Schritt-Anleitung (Pfad A): GPS-Tracking einbauen

Sie erweitern die App so, dass echte Fahrten per GPS aufgezeichnet werden. Die Dummy-Funktion wird entfernt, neue Zustände ergänzt und die Logik in eine eigene Datei ausgelagert.


1. Dummy-Funktion entfernen

In App.js entfernen Sie den Aufruf von addDummyFahrt() innerhalb von handleStartStop.

// vorher
const handleStartStop = () => {
  addDummyFahrt(fahrten, setFahrten);
};

// künftig getrennte Funktionen:
const handleStart = () => { ... };
const handleStop = () => { ... };

2. Datei tracking.js anlegen

Erstellen Sie im Ordner logic/ die Datei tracking.js und ergänzen Sie folgende Funktionen:

Standorterlaubnis:

import * as Location from 'expo-location';
import { berechneDistanzMeter } from './geo';

export async function frageStandortErlaubnis() {
  const { status } = await Location.requestForegroundPermissionsAsync();
  if (status !== 'granted') {
    alert('Standortzugriff verweigert');
    return false;
  }
  return true;
}

Tracking starten:

export async function starteTracking(setPositionen, setTrackingObjekt, setDistanz) {
  const erlaubt = await frageStandortErlaubnis();
  if (!erlaubt) return;

  const tracking = await Location.watchPositionAsync(
    {
      accuracy: Location.Accuracy.High,
      timeInterval: 1000,
      distanceInterval: 1
    },
    (pos) => {
      setPositionen((prev) => {
        const neue = [...prev, pos.coords];
        if (neue.length >= 2) {
          const letzte = neue[neue.length - 2];
          const aktuelle = neue[neue.length - 1];
          const zusatz = berechneDistanzMeter(letzte, aktuelle);
          setDistanz((d) => d + zusatz);
        }
        return neue;
      });
    }
  );

  setTrackingObjekt(tracking);
}

Tracking stoppen:

export function stoppeTracking(trackingObjekt) {
  trackingObjekt?.remove();
}

3. App.js anpassen

Importe ergänzen:

import { starteTracking, stoppeTracking } from './logic/tracking';

Neue Zustände einfügen:


const [positionen, setPositionen] = useState([]);
const [trackingObjekt, setTrackingObjekt] = useState(null);
const [startzeit, setStartzeit] = useState(null);
const [dauer, setDauer] = useState(0);
const [distanz, setDistanz] = useState(0);
const [timerId, setTimerId] = useState(null);
const [aufzeichnungLäuft, setAufzeichnungLäuft] = useState(false);

Starten:


const handleStart = () => {
  setStartzeit(Date.now());
  setDistanz(0);
  setDauer(0);
  setPositionen([]);
  setAufzeichnungLäuft(true);

  const id = setInterval(() => {
    setDauer((prev) => prev + 1);
  }, 1000);
  setTimerId(id);

  starteTracking(setPositionen, setTrackingObjekt, setDistanz);
};

Stoppen:


const handleStop = () => {
  stoppeTracking(trackingObjekt);
  clearInterval(timerId);
  setTimerId(null);
  setAufzeichnungLäuft(false);

  const jetzt = new Date();
  const fahrt = {
    id: Date.now().toString(),
    typ: 'GPS',
    datum: jetzt.toLocaleDateString('de-DE'),
    startzeit: new Date(startzeit).toLocaleTimeString('de-DE', { hour: '2-digit', minute: '2-digit' }),
    endzeit: jetzt.toLocaleTimeString('de-DE', { hour: '2-digit', minute: '2-digit' }),
    dauer,
    entfernung: (distanz / 1000).toFixed(2),
  };

  setFahrten([...fahrten, fahrt]);
};

Live-Werte anzeigen:


{aufzeichnungLäuft && (
  <>
    Dauer: {dauer} Sekunden
    Distanz: {distanz.toFixed(1)} Meter
  
)}

4. StartStopButton anpassen

export default function StartStopButton({ onStart, onStop, läuft }) {
  return (
    

Einbindung in App.js:




Ergebnis

Die App zeichnet nun echte GPS-Routen auf. Dauer und Distanz werden während der Aufzeichnung aktualisiert, beim Stoppen entsteht ein vollständiges Fahrtobjekt, das in der Liste angezeigt wird.

Zuletzt geändert: Freitag, 5. Dezember 2025, 15:18
Herausgeber: Land Baden-Württemberg, vertreten durch das Zentrum für Schulqualität und Lehrerbildung (ZSL), Heilbronner Straße 314, 70469 Stuttgart, Telefon 0711/21859-0, poststelle@zsl.kv.bwl.de
Verantwortlich im Sinne des Presserechts: ZSL, Irmgard Mühlhuber, Ref. 24 "Digitalisierung, Medienbildung", Heilbronner Straße 314, 70469 Stuttgart, Telefon 0711/21859-240, digitalebildung@zsl.kv.bwl.de
Kontakt zum/r behördlichen Datenschutzbeauftragte/n: datenschutz@zsl.kv.bwl.de