Start · Sprachen · JavaScript · Referenz · GeolocationCoordinates.accuracy

GeolocationCoordinates.accuracy

Eigenschaft

Schreibgeschützter, strikt positiver <code>double</code>-Wert: Radius in Metern, in dem die tatsächliche Position mit 95 % Wahrscheinlichkeit liegt.

seit JavaScript Baseline: alle Browser (nur in sicheren Kontexten/ Kategorie: webapi

Signatur

GeolocationCoordinates.accuracy

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

Typ
number
Beschreibung
Strikt positiver Gleitkommawert in Metern (95-%-Konfidenzradius um 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 }
);
Position: 52.52001, 13.40495 Genauigkeit: ±12 m

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);
Verworfen (±850 m) Verworfen (±65 m) Übernommen: 52.52003, 13.40491 um 14:03:21

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`);
Beste Genauigkeit: 8.4 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 nach accuracy.
  • enableHighAccuracy: true kann 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-Policy geolocation nötig.