0 Votes

Photon

Modifié par john le 2026/09/23 19:56

Photon est un géocodeur libre basé sur les données OpenStreetMap. Ici, il sert au géocodage inverse de Dawarich : il transforme des coordonnées GPS en adresse et en nom de lieu, sans envoyer les positions à un service externe et sans limite de requêtes.

L'image utilisée est rtuszik/photon-docker, une image non officielle qui télécharge l'index, le met à jour et lance Photon. Documentation de référence : dépôt GitHub.

Stack

name: photon

networks:
 proxy:
   external: true

services:
 photon:
   image: rtuszik/photon-docker:latest
   container_name: photon
   environment:
     REGION: europe
     UPDATE_STRATEGY: SEQUENTIAL
     UPDATE_INTERVAL: 720h
     LOG_LEVEL: INFO
   volumes:
      - photon_data:/photon/data
   networks:
      - proxy
   ports:
      - "2322:2322"
   restart: unless-stopped

volumes:
 photon_data:
Information

Dawarich joint Photon par le réseau Docker proxy (photon:2322). Le port publié sur l'hôte n'est utile que pour interroger Photon depuis une autre machine du réseau local ; il expose une API sans authentification.

Choisir la région

La variable REGION détermine la zone couverte par l'index. Un point situé hors de la zone n'est pas géocodé : il reste sans adresse dans Dawarich. La région doit donc couvrir tous les endroits où l'on se déplace, voyages compris, et pas seulement le pays où l'on habite.

Warning

Sans variable REGION, l'image télécharge l'index du monde entier (planet).

L'image propose deux modes d'import, choisis avec IMPORT_MODE.

Mode db (par défaut, recommandé)

L'image télécharge un index déjà construit. Une seule région est possible, et seulement parmi celles qui ont un index prêt. C'est le mode utilisé ici.

NiveauValeurs de REGION
Mondeplanet
Continentsafrica, asia, australia-oceania, europe, north-america, south-america
Asieindia (in), japan (jp)
Europeandorra (ad), austria (at), denmark (dk), france-monacco (fr, france, monaco), germany (de), luxemburg (lu, luxembourg), netherlands (nl), russia (ru), slovakia (sk), spain (es)
Amérique du Nordcanada (ca), mexico (mx), usa (us)
Amérique du Sudargentina (ar)

Les valeurs entre parenthèses sont des alias acceptés. L'orthographe france-monacco est bien celle attendue par l'image.

Un pays absent de cette liste (Royaume-Uni, Italie, Belgique, Suisse, Portugal…) n'a pas d'index prêt : il faut prendre le continent qui le contient, ou passer en mode jsonl.

Mode jsonl (expérimental)

L'image construit elle-même l'index à partir des exports OpenStreetMap. Ce mode permet de combiner plusieurs pays et donne accès à des pays européens sans index prêt.

Pays disponibles uniquement en mode jsonl : albania (al), baltics (ee, lt, lv), belarus (by), belgium (be), bosnia-herzegovina (ba), british-islands (uk), bulgaria (bg), croatia (hr), cyprus (cy), czech-republic (cz), finland (fi), georgia (ge), greece (gr), hungary (hu), iceland-faroe (is), ireland (ie), italy (it), kosovo (xk), macedonia (mk), malta (mt), moldova (md), montenegro (me), norway (no), poland (pl), portugal (pt), romania (ro), serbia (rs), slovenia (si), sweden (se), switzerland-liechtenstein (ch), turkey (tr), ukraine (ua).

Toutes les régions du mode db sont aussi disponibles en jsonl.

Exemple pour la France, le Royaume-Uni et le Portugal :

    environment:
     IMPORT_MODE: jsonl
     REGION: fr,uk,pt
     LANGUAGES: fr,en
     REVERSE_ONLY: "TRUE"
  • REVERSE_ONLY construit un index limité au géocodage inverse, environ 60 % plus léger. C'est suffisant pour Dawarich, mais la recherche d'adresse (/api) ne fonctionne plus.
  • LANGUAGES limite les langues importées pour les noms de lieux.
  • Quand plusieurs pays sont demandés, l'image télécharge le plus petit export qui les contient tous (un continent, ou le monde), puis filtre.
  • Pas de mise à jour automatique : UPDATE_STRATEGY et UPDATE_INTERVAL sont ignorés. Pour reconstruire l'index, ajouter FORCE_UPDATE: "TRUE" ou supprimer le volume.
  • L'import est long : plusieurs heures pour un continent.

Quel choix faire

SituationRéglage conseillé
Un seul pays, avec index prêtMode db, le pays (REGION: fr)
Plusieurs pays d'un même continent, dont un sans index prêtMode db, le continent ; ou mode jsonl avec la liste des pays si l'espace disque manque
Déplacements sur plusieurs continentsMode db, planet
Pays sans index prêt, hors EuropeMode db, le continent

Ici : europe en mode db, pour couvrir la France, le Royaume-Uni et le Portugal, ces deux derniers n'ayant pas d'index prêt.

Espace disque et premier démarrage

Les tailles évoluent avec les données OpenStreetMap et celles annoncées par le dépôt sont approximatives. Ordres de grandeur : environ 61 Go compressés pour planet en mode db, 26 Go pour l'export jsonl du monde.

Mesure réelle ici pour europe en mode db : environ 29 Go téléchargés, 47 Go une fois extraits, et une heure avant la première réponse de l'API.

L'image vérifie l'espace disponible avant de télécharger. Pendant le premier téléchargement, le conteneur est marqué unhealthy, c'est normal.

Mises à jour de l'index

UPDATE_STRATEGYFonctionnementEspace nécessaire
SEQUENTIALArrête Photon, supprime l'index, télécharge le nouveau, redémarre. Géocodage indisponible pendant l'opération.1 index
PARALLELTélécharge le nouvel index en arrière-plan puis bascule. Coupure minimale.2 index
DISABLEDAucune mise à jour automatique.1 index

UPDATE_INTERVAL fixe l'âge minimal de l'index avant de chercher une nouvelle version (720h = 30 jours).

Ici : SEQUENTIAL, pour ne pas avoir à réserver la place de deux index. Si Dawarich demande un géocodage pendant la mise à jour, le point reste sans adresse et peut être regéocodé plus tard.

Changer de région

# Modifier REGION (et IMPORT_MODE si besoin) dans la stack.
# Arrêter la stack et supprimer le volume de l'ancien index :

docker volume ls | grep photon
docker volume rm <VOLUME_PHOTON>

# Redéployer la stack : le nouvel index est téléchargé.

Connexion à Dawarich

Sur les deux conteneurs dawarich_app et dawarich_sidekiq :

      PHOTON_API_HOST: photon:2322
     PHOTON_API_USE_HTTPS: "false"
  • Les deux conteneurs doivent être sur le même réseau Docker que Photon.
  • Indiquer seulement l'hôte et le port, sans /api à la fin.
  • PHOTON_API_USE_HTTPS ne passe à true que si Photon est servi en HTTPS.

Vérifier que Photon répond

Depuis le conteneur Dawarich, sans passer par le port publié :

docker exec dawarich_app wget -qO- "http://photon:2322/reverse?lat=48.8584&lon=2.2945"

La réponse est un JSON contenant une adresse. Une erreur de connexion signifie que Photon n'est pas démarré, pas encore prêt, ou pas sur le même réseau. Une réponse vide pour des coordonnées précises signifie que le point est hors de la région choisie.

Journaux de téléchargement et de démarrage :

docker logs -f photon

Sauvegarde

L'index n'est pas sauvegardé : il se retélécharge. Seule la stack compte, et elle est dans cette page.