Start · Sprachen · JavaScript · Referenz · GeolocationCoordinates.speed

GeolocationCoordinates.speed

Eigenschaft

Schreibgeschützte Eigenschaft, die die aktuelle Geschwindigkeit des Geräts in Metern pro Sekunde liefert, oder <code>null</code>, wenn sie nicht ermittelt werden kann.

seit JavaScript Baseline: alle modernen Browser (nur in sicheren K Kategorie: webapi

Signatur

GeolocationCoordinates.speed

Beschreibung

Die Eigenschaft speed des Interfaces GeolocationCoordinates gibt die Bodengeschwindigkeit des Geräts in Metern pro Sekunde (m/s) als double zurück. Ein Objekt dieses Typs bekommt man über position.coords im Erfolgs-Callback von navigator.geolocation.getCurrentPosition() oder watchPosition().

Nützlich ist der Wert für Navigations-, Fitness- und Tracking-Anwendungen, etwa um die Geschwindigkeit beim Laufen, Radfahren oder Autofahren anzuzeigen. Zur Umrechnung in km/h multipliziert man mit 3.6.

Liefert das Gerät keine Geschwindigkeit, etwa weil die Position per WLAN oder IP-Adresse statt per GPS bestimmt wurde, ist der Wert null. Nur die horizontale Geschwindigkeit ist gemeint. Die Bewegungsrichtung steht separat in heading.

Rückgabewert

Typ
number | null
Beschreibung
Geschwindigkeit in Metern pro Sekunde (≥ 0) oder null, wenn das Gerät sie nicht ermitteln kann.

Beispiele

Aktuelle Geschwindigkeit einmalig abfragen

navigator.geolocation.getCurrentPosition(
  ({ coords }) => {
    if (coords.speed === null) {
      console.log('Geschwindigkeit nicht verfügbar');
    } else {
      console.log(`Geschwindigkeit: ${coords.speed.toFixed(1)} m/s`);
    }
  },
  (err) => console.error(`Fehler ${err.code}: ${err.message}`),
  { enableHighAccuracy: true }
);
Geschwindigkeit: 4.2 m/s

Live-Tacho in km/h mit watchPosition

const anzeige = document.querySelector('#tacho');

const watchId = navigator.geolocation.watchPosition(
  ({ coords }) => {
    const kmh = coords.speed != null ? coords.speed * 3.6 : null;
    anzeige.textContent = kmh != null ? `${Math.round(kmh)} km/h` : '– km/h';
  },
  (err) => console.warn(err.message),
  { enableHighAccuracy: true, maximumAge: 0, timeout: 10000 }
);

// Nach 5 Minuten wieder beenden
setTimeout(() => navigator.geolocation.clearWatch(watchId), 5 * 60 * 1000);
Anzeige z. B.: 27 km/h

Ersatzwert aus zwei Positionen berechnen, wenn speed null ist

const haversine = (a, b) => {
  const R = 6371000;
  const rad = (d) => (d * Math.PI) / 180;
  const dLat = rad(b.latitude - a.latitude);
  const dLon = rad(b.longitude - a.longitude);
  const h = Math.sin(dLat / 2) ** 2 +
    Math.cos(rad(a.latitude)) * Math.cos(rad(b.latitude)) * Math.sin(dLon / 2) ** 2;
  return 2 * R * Math.asin(Math.sqrt(h));
};

let letzte = null;
navigator.geolocation.watchPosition((pos) => {
  let speed = pos.coords.speed;
  if (speed === null && letzte) {
    const sek = (pos.timestamp - letzte.timestamp) / 1000;
    speed = sek > 0 ? haversine(letzte.coords, pos.coords) / sek : 0;
  }
  letzte = pos;
  console.log(`≈ ${(speed ?? 0).toFixed(2)} m/s`);
});
≈ 1.35 m/s

// Wichtig · Fallstricke

  • Häufig null: Auf Desktop-Rechnern und bei Ortung per WLAN oder IP ist speed meist null. Prüfe deshalb immer mit === null bzw. ?? und nicht mit einer Wahrheitswert-Prüfung, denn 0 (Stillstand) ist ein gültiger Wert.
  • Die Einheit ist m/s, nicht km/h. Umrechnung: * 3.6 für km/h, * 2.23694 für mph.
  • Mit enableHighAccuracy: true wird eher GPS genutzt und damit eher eine Geschwindigkeit geliefert, allerdings bei höherem Akkuverbrauch.
  • Die Geolocation-API funktioniert nur in sicheren Kontexten (HTTPS) und erst, wenn der Nutzer zugestimmt hat. Die Berechtigungsabfrage kann über die Permissions-Policy (geolocation) eingeschränkt sein, z. B. in iframes.
  • Die Werte können bei schlechtem GPS-Empfang schwanken. Für eine ruhige Anzeige glättet man sie, z. B. mit einem gleitenden Mittelwert.
  • Standortdaten sind personenbezogene Daten. Beachte den Datenschutz (DSGVO), bevor du sie speicherst oder überträgst.