François Castets

Journal

15 October 202615 October 2026 3 min de lecturemin read Cartographie et géolocalisationMapping and geolocation

Du GPS du navigateur au tri par distance : les pièges du trajetFrom the browser’s GPS to distance sorting: the traps along the way

Demander la position, gérer le refus, arrondir, convertir en kilomètres : le parcours complet d'une géolocalisation web, et les erreurs classiques.Asking for a position, handling a refusal, rounding, converting to kilometres: the full path of a web geolocation, and the classic mistakes.

Entre le moment où un visiteur clique sur « autour de moi » et celui où il voit une liste triée, il se passe cinq choses qui peuvent chacune mal tourner. Aucune n’est difficile ; toutes sont régulièrement oubliées.Between the moment a visitor taps “near me” and the moment they see a sorted list, five things happen, and each of them can go wrong. None is hard; all are regularly forgotten.

Un : ne jamais demander la position au chargementOne: never ask for a position on load

Un site qui réclame la géolocalisation dès l’arrivée obtient deux choses : un refus, et un visiteur méfiant. Pire, le refus est mémorisé par le navigateur — on ne pourra plus redemander, même au bon moment. La demande doit partir d’un geste explicite, sur un bouton qui dit ce qu’il va faire.A site that demands geolocation the moment you arrive gets two things: a refusal, and a suspicious visitor. Worse, the refusal is remembered by the browser — you will not get to ask again, even at the right moment. The request must come from an explicit gesture, on a button that says what it is about to do.

Deux : le refus est un cas normal, pas une erreurTwo: refusal is a normal case, not an error

Entre un tiers et la moitié des visiteurs refusent, ou utilisent un navigateur qui bloque la demande. Ce n’est pas un incident à journaliser, c’est un parcours à prévoir : on retombe sur une saisie de ville, avec une liste des départements les mieux pourvus. Le visiteur obtient un résultat dans tous les cas.A third to a half of visitors refuse, or use a browser that blocks the request outright. That is not an incident to log, it is a path to design for: fall back to typing a town, with a list of the best-served areas. The visitor gets a result either way.

  • Position accordée : tri par distance réelle.Position granted: sort by actual distance.
  • Position refusée : champ « votre ville », avec autocomplétion sur les communes.Position refused: a “your town” field, with autocompletion over municipalities.
  • Position indisponible ou expirée : même repli, sans message d’erreur alarmant.Position unavailable or timed out: the same fallback, with no alarming error message.

Trois : fixer un délai, sinon on attend indéfinimentThree: set a timeout, or you wait forever

L’interface de géolocalisation du navigateur peut mettre très longtemps à répondre, notamment à l’intérieur d’un bâtiment. Sans délai maximal, le bouton tourne pendant trente secondes et le visiteur part. Huit secondes suffisent : au-delà, on bascule sur la saisie de ville en expliquant pourquoi.The browser geolocation interface can take a very long time to answer, particularly indoors. With no timeout, the button spins for thirty seconds and the visitor leaves. Eight seconds is enough: past that, fall back to typing a town, and say why.

Quatre : arrondir avant d'envoyerFour: round before you send

Le navigateur renvoie une position à plusieurs décimales, soit une précision de l’ordre du mètre. C’est à la fois inutile pour trier des escape games et intrusif à transmettre. Deux décimales, c’est environ un kilomètre : largement assez pour le classement, et cela rend la donnée inexploitable pour identifier quelqu’un.The browser returns a position with several decimal places, meaning metre-level precision. That is both useless for ranking escape rooms and intrusive to transmit. Two decimal places is roughly a kilometre: plenty for ranking, and it makes the data useless for identifying anyone.

Arrondir une coordonnée avant de l’envoyer coûte une ligne de code. C’est la mesure de protection de la vie privée la moins chère qui existe, et elle améliore au passage le taux de réutilisation du cache.Rounding a coordinate before sending it costs one line of code. It is the cheapest privacy measure in existence, and it improves the cache hit rate into the bargain.

Cinq : la distance à vol d'oiseau, et le direFive: straight-line distance, and say so

La formule de Haversine donne une distance à vol d’oiseau. En ville, le trajet réel est souvent 30 % plus long. Afficher « 4 km » quand le trajet en fait 6 crée une déception évitable : on affiche « à 4 km environ, à vol d’oiseau », ou on laisse l’ordre de grandeur sans fausse précision.The Haversine formula gives a straight-line distance. In a city, the real journey is often 30% longer. Showing “4 km” when the trip is 6 creates avoidable disappointment: show “about 4 km as the crow flies”, or give the order of magnitude without false precision.

Calculer un vrai temps de trajet demanderait un service de routage externe, facturé à la requête. Pour classer des salles par proximité, le gain ne justifie pas la dépense ni la dépendance.Computing a real travel time would require an external routing service, billed per request. For ranking rooms by proximity, the gain justifies neither the cost nor the dependency.

Le projet derrière cette noteThe project behind this note

Tout est parti de Escape Gamer, nouvelle version. La fiche détaille le contexte, ce qui a été construit et ce que le client en a tiré.It all started with Escape Gamer, nouvelle version. The project page covers the context, what was built and what the client got out of it.

À lire ensuiteRead next