Signatur
Beschreibung
Die schreibgeschützte Eigenschaft accuracy des Interfaces GeolocationCoordinates gibt an, wie genau die gemeldeten Werte latitude und longitude sind. Der Wert ist ein strikt positiver double in Metern und beschreibt den Radius eines Kreises um die gemeldete Position, in dem die tatsächliche Position mit einem Konfidenzniveau von 95 % liegt.
Sie erhalten das Objekt über position.coords in den Callbacks von navigator.geolocation.getCurrentPosition() und navigator.geolocation.watchPosition(). Je kleiner der Wert, desto präziser ist die Ortung: GPS liefert oft 3–20 m, WLAN-basierte Ortung 20–100 m, IP-basierte Ortung mitunter mehrere Kilometer.
Typische Einsatzzwecke sind:
- einen Genauigkeitskreis auf einer Karte zeichnen,
- ungenaue Positionen verwerfen, bis ein brauchbarer Wert vorliegt (z. B. beim Tracking),
- den Nutzer darüber informieren, dass die Ortung nur ungefähr ist.
Die Genauigkeit der Höhe wird separat über altitudeAccuracy gemeldet; accuracy bezieht sich ausschließlich auf die horizontale Position.
Rückgabewert
latitude/longitude).Beispiele
Genauigkeit der aktuellen Position ausgeben
navigator.geolocation.getCurrentPosition(
(position) => {
const { latitude, longitude, accuracy } = position.coords;
console.log(`Position: ${latitude.toFixed(5)}, ${longitude.toFixed(5)}`);
console.log(`Genauigkeit: ±${Math.round(accuracy)} m`);
},
(error) => console.error(`Fehler ${error.code}: ${error.message}`),
{ enableHighAccuracy: true, timeout: 10000 }
);
Beim Tracking nur ausreichend genaue Positionen übernehmen
const MAX_ACCURACY = 30; // Meter
const watchId = navigator.geolocation.watchPosition(
({ coords, timestamp }) => {
if (coords.accuracy > MAX_ACCURACY) {
console.log(`Verworfen (±${Math.round(coords.accuracy)} m)`);
return;
}
console.log(`Übernommen: ${coords.latitude}, ${coords.longitude} um ${new Date(timestamp).toLocaleTimeString()}`);
},
(error) => console.error(error.message),
{ enableHighAccuracy: true, maximumAge: 0 }
);
// Tracking nach 2 Minuten beenden
setTimeout(() => navigator.geolocation.clearWatch(watchId), 120_000);
Promise-Wrapper: auf genaue Position warten
const getAccuratePosition = (targetAccuracy = 50, timeoutMs = 15000) =>
new Promise((resolve, reject) => {
let best = null;
const id = navigator.geolocation.watchPosition(
(pos) => {
if (!best || pos.coords.accuracy < best.coords.accuracy) best = pos;
if (pos.coords.accuracy <= targetAccuracy) {
navigator.geolocation.clearWatch(id);
resolve(pos);
}
},
(err) => { navigator.geolocation.clearWatch(id); reject(err); },
{ enableHighAccuracy: true }
);
// Nach Ablauf die beste bisherige Position liefern
setTimeout(() => {
navigator.geolocation.clearWatch(id);
best ? resolve(best) : reject(new Error('Keine Position ermittelt'));
}, timeoutMs);
});
const pos = await getAccuratePosition(25);
console.log(`Beste Genauigkeit: ${pos.coords.accuracy.toFixed(1)} m`);
// Wichtig · Fallstricke
- Einheit Meter, kein Prozentwert: Ein größerer Wert bedeutet schlechtere Genauigkeit.
- 95-%-Konfidenz: Die tatsächliche Position kann trotzdem außerhalb des Radius liegen. Für sicherheitskritische Anwendungen (Geofencing, Zutrittskontrolle) nicht allein darauf verlassen.
- Erste Werte sind oft ungenau: Gerade mit
watchPosition()kommt zuerst eine grobe Netzwerk-Position, danach GPS-Werte. Filtern Sie nachaccuracy. enableHighAccuracy: truekann bessere Werte liefern, kostet aber mehr Akku und Zeit; auf Desktop-Rechnern ohne GPS ändert es oft nichts.- Browser können die Genauigkeit aus Datenschutzgründen absichtlich verschlechtern (z. B. „ungefährer Standort“ unter iOS/Android), dann liegen die Werte im Kilometerbereich.
- Kompatibilität: In allen modernen Browsern verfügbar, aber nur in sicheren Kontexten (HTTPS,
localhost) und nach Zustimmung des Nutzers. In iframes ist zusätzlich die Permissions-Policygeolocationnötig.