Signatur
Beschreibung
Die Methode toJSON() der Schnittstelle GeolocationCoordinates ist ein Serializer. Sie liefert ein gewöhnliches JavaScript-Objekt mit den Eigenschaften latitude, longitude, altitude, accuracy, altitudeAccuracy, heading und speed. Die Werte werden aus dem aktuellen Koordinaten-Objekt übernommen.
Ein Serializer ist nötig, weil diese Eigenschaften als Getter am Prototyp definiert sind und nicht als eigene Eigenschaften der Instanz. Ohne toJSON() hätte JSON.stringify(position.coords) in älteren Browsern nur "{}" ergeben. Diese Methode ruft man selten direkt auf: JSON.stringify() erkennt sie und verwendet sie automatisch.
Typische Anwendungsfälle sind das Senden eines Standorts per fetch() an einen Server, das Speichern in localStorage oder IndexedDB und das Protokollieren beim Debuggen. Werte, die das Gerät nicht liefern kann (z. B. altitude, heading, speed), stehen im Ergebnis als null.
Rückgabewert
accuracy, latitude, longitude, altitude, altitudeAccuracy, heading und speed. Die Werte haben den Typ number oder null.Beispiele
Koordinaten direkt als Objekt ausgeben
navigator.geolocation.getCurrentPosition(
(position) => {
const coords = position.coords.toJSON();
console.log(coords);
},
(error) => console.error(`Fehler ${error.code}: ${error.message}`)
);
Automatische Nutzung durch JSON.stringify()
navigator.geolocation.getCurrentPosition((position) => {
// JSON.stringify ruft toJSON() automatisch auf
const json = JSON.stringify(position.coords);
console.log(json);
});
Standort an einen Server senden
const getPosition = (options) =>
new Promise((resolve, reject) =>
navigator.geolocation.getCurrentPosition(resolve, reject, options)
);
const sendLocation = async () => {
try {
const { coords, timestamp } = await getPosition({ enableHighAccuracy: true, timeout: 10000 });
const response = await fetch('/api/standort', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ coords, timestamp })
});
console.log('Gesendet:', response.status);
} catch (err) {
console.error('Standort konnte nicht ermittelt werden:', err.message);
}
};
sendLocation();
Letzten Standort in localStorage speichern
navigator.geolocation.getCurrentPosition(({ coords }) => {
localStorage.setItem('letzterStandort', JSON.stringify(coords));
const gespeichert = JSON.parse(localStorage.getItem('letzterStandort'));
console.log(`Breite: ${gespeichert.latitude}, Länge: ${gespeichert.longitude}`);
});
// Wichtig · Fallstricke
- Browser-Kompatibilität:
toJSON()ist relativ neu (Chrome/Edge 116, Firefox 120, Safari 17.4). In älteren Browsern liefertJSON.stringify(coords)nur"{}". Als Fallback kannst du die Werte von Hand kopieren, z. B.const { latitude, longitude, accuracy } = coords;. - Spread und
Object.keys()funktionieren nicht:{ ...coords }oderObject.keys(coords)ergeben ein leeres Ergebnis, weil die Eigenschaften Getter am Prototyp sind. Verwende stattdessencoords.toJSON(). null-Werte:altitude,altitudeAccuracy,headingundspeedsind oftnull, vor allem auf Desktop-Geräten.headingist außerdemNaN, wennspeed0 ist.JSON.stringify()wandeltNaNinnullum.- Kein Zeitstempel: Das Ergebnis enthält keinen
timestamp. Den bekommst du überGeolocationPosition.toJSON()bzw.JSON.stringify(position). - Datenschutz und Sicherheit: Die Geolocation-API gibt es nur in sicheren Kontexten (HTTPS), und der Nutzer muss zustimmen. Standortdaten sind personenbezogen. Übertrage und speichere sie nur mit Einwilligung, gemäß DSGVO und möglichst sparsam (z. B. gerundet).