Signatur
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
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 }
);
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);
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`);
});
// Wichtig · Fallstricke
- Häufig
null: Auf Desktop-Rechnern und bei Ortung per WLAN oder IP istspeedmeistnull. Prüfe deshalb immer mit=== nullbzw.??und nicht mit einer Wahrheitswert-Prüfung, denn0(Stillstand) ist ein gültiger Wert. - Die Einheit ist m/s, nicht km/h. Umrechnung:
* 3.6für km/h,* 2.23694für mph. - Mit
enableHighAccuracy: truewird 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.