Een dating-app op basis van brieven, niet van gezichten!

main

Deze repository wordt als momentopname gepubliceerd: een clone bevat de volledige inhoud, maar geen commitgeschiedenis.

1.8 kB Ruw bestand
import { Geolocation } from "@capacitor/geolocation";
import { LOCATION_DECIMALS } from "../constants";
import { log } from "./log";

const OPTIES = { enableHighAccuracy: false, timeout: 8000, maximumAge: 60000 };

/*
 * Huidige positie als { lat, lon }, afgerond op LOCATION_DECIMALS (2 ≈ 1 km): meer hebben we
 * niet nodig voor afstanden, en zo komt een precieze locatie de telefoon niet eens uit
 * (de server rondt bovendien zelf ook af). Op Android/iOS regelt @capacitor/geolocation de
 * permissie-prompt; in de browser valt de plugin terug op navigator.geolocation. Gooit bij
 * weigering/time-out.
 *
 * Het meelezen gaat hier met de hand en niet met `gelogd` uit lib/log.js: dat zou het hele
 * antwoord van de plugin tonen, en daar staat de onafgeronde positie in. Wat er wél in het log
 * hoort is het afgeronde antwoord met de nauwkeurigheid van de fix — genoeg om te zien of het
 * gelukt is en hoe scherp — en bij een mislukking de `code`, want daar zet de plugin de reden in:
 * location-disabled, location-permission-denied, location-timeout, location-unavailable en zo
 * verder. Die code is het verschil tussen "kijken waarom" en "het doet het soms niet".
 */
export async function currentLocation() {
  log("→ Geolocation.getCurrentPosition", JSON.stringify(OPTIES));
  let pos;
  try {
    pos = await Geolocation.getCurrentPosition(OPTIES);
  } catch (e) {
    log("✗ Geolocation.getCurrentPosition", JSON.stringify({ code: e?.code ?? null, message: e?.message ?? String(e) }));
    throw e;
  }
  const uit = {
    lat: +pos.coords.latitude.toFixed(LOCATION_DECIMALS),
    lon: +pos.coords.longitude.toFixed(LOCATION_DECIMALS),
  };
  log("← Geolocation.getCurrentPosition", JSON.stringify({ ...uit, accuracy: pos.coords.accuracy, timestamp: pos.timestamp }));
  return uit;
}