--- title: docker-staticmaps created: 2026-06-07 updated: 2026-06-07 type: app tags: [catalogue, development, cartography, static-maps, docker, geo] confidence: high contested: false sources: [https://selfh.st/apps/?tag=Development, https://github.com/StephanGeorg/docker-staticmaps] --- # đŸ’» docker-staticmaps > **GĂ©nĂ©rateur de cartes statiques dans Docker** — crĂ©ez des images PNG/JPG de cartes (OpenStreetMap, tiles personnalisĂ©es) Ă  partir de coordonnĂ©es GPS, polylines, polygones et marqueurs, sans serveur de tuiles dynamique. ## 📋 Informations GĂ©nĂ©rales | Champ | Valeur | | :--- | :--- | | **Site web** | [github.com/StephanGeorg/docker-staticmaps](https://github.com/StephanGeorg/docker-staticmaps) | | **GitHub** | [StephanGeorg/docker-staticmaps](https://github.com/StephanGeorg/docker-staticmaps) | | **License** | MIT | | **Langage** | Go (basĂ© sur [staticmaps](https://github.com/StephanGeorg/staticmaps)) | | **Étoiles GitHub** | 125 ⭐ | | **CatĂ©gorie** | Development, Cartographie / Geo | | **RĂ©fĂ©rence** | [selfh.st Development](https://selfh.st/apps/?tag=Development) | ## 📝 Description **docker-staticmaps** est un **wrapper Docker autour de la lib Go `staticmaps` de Stephan Georg** : il permet de **gĂ©nĂ©rer des images statiques de cartes** (PNG/JPG) Ă  partir de coordonnĂ©es GPS, en assemblant des **tuiles OpenStreetMap (ou autres serveurs de tuiles)** et en y superposant des **polylines, polygones, cercles, marqueurs, textes**. Le besoin typique : on veut afficher une carte dans un email, un PDF gĂ©nĂ©rĂ© cĂŽtĂ© serveur, un rapport, une notification push, une vignette de partage social — partout oĂč un **Leaflet/Mapbox interactif ne passe pas**. Les services comme **Mapbox Static API** ou **Google Static Maps API** facturent au 1000 requĂȘtes et imposent leurs serveurs. `docker-staticmaps` assemble les tuiles **chez vous** en utilisant un tile server OSM (TileServer GL, OpenStreetMap public, ou votre propre instance). L'outil est **exposĂ© comme une API HTTP minimaliste** : on envoie une requĂȘte `GET /map?lat=48.85&lon=2.35&zoom=12&width=600&height=400&markers=...` et on rĂ©cupĂšre un PNG. Il peut ĂȘtre **appelĂ© depuis n8n, Node-RED, un cron, un script Python** ou n'importe quel gĂ©nĂ©rateur de PDF. La lib Go sous-jacente gĂšre le **cache de tuiles** localement (LRU), la **projection Web Mercator**, le **rendu antialiasĂ©** et les **formats vectoriels GPX/KML/GeoJSON**. **Cas d'usage** : gĂ©nĂ©rer une carte de la derniĂšre position d'une flotte de vĂ©hicules dans un email, intĂ©grer une carte dans un rapport PDF, crĂ©er des vignettes OG/Twitter Cards avec position, dashboards Grafana avec carte statique, gĂ©nĂ©ration batch de cartes pour un atlas. ## 🚀 Installation ### Via Docker (recommandĂ©) ```yaml # docker-compose.yml version: '3.8' services: staticmaps: image: ghcr.io/stephanhgeorg/docker-staticmaps:latest container_name: staticmaps restart: unless-stopped ports: - "8080:8080" environment: TILE_URL: "https://tile.openstreetmap.org/{z}/{x}/{y}.png" TILE_CACHE_DIR: "/cache/tiles" DEFAULT_ZOOM: "12" DEFAULT_WIDTH: "800" DEFAULT_HEIGHT: "600" USER_AGENT: "selfh-staticmaps/1.0 (contact@example.com)" CACHE_TTL: "168h" # 1 semaine volumes: - sm_cache:/cache/tiles labels: - "traefik.enable=true" - "traefik.http.routers.sm.rule=Host(`maps.example.com`)" - "traefik.http.routers.sm.entrypoints=websecure" - "traefik.http.routers.sm.tls.certresolver=letsencrypt" volumes: sm_cache: ``` ### Utilisation via curl (une fois dĂ©marrĂ©) ```bash # Carte simple centrĂ©e sur Paris curl -o paris.png "https://maps.example.com/map?lat=48.85&lon=2.35&zoom=12" # Avec marqueur, polyline et taille custom curl -o track.png "https://maps.example.com/map?\ bbox=-0.5,48.8,0.2,49.0&\ markers=48.85,2.35,red&\ polyline=48.85,2.35|48.86,2.36|48.87,2.37|color:blue,width:3&\ width=1200&height=800" # Trace GPX curl -o ride.png "https://maps.example.com/map?gpx=https://example.com/ride.gpx" ``` ### Installation manuelle ```bash git clone https://github.com/StephanGeorg/docker-staticmaps.git cd docker-staticmaps go build -o staticmaps ./cmd ./staticmaps --config config.yaml ``` ## ⚙ Configuration 1. **`TILE_URL`** : URL du serveur de tuiles. Par dĂ©faut OSM public (attention Ă  la **politique d'usage** : pas plus de quelques req/s, User-Agent obligatoire). 2. **Tile server privĂ©** : pour de la prod, monter un [[app-tileserver-gl]] ou un proxy cached devant OSM pour respecter la tile usage policy. 3. **User-Agent** : **obligatoire** pour OSM public (sinon ban IP) — un contact email valide dans le User-Agent. 4. **Cache** : `sm_cache` volume montĂ© sur `/cache/tiles` — taille Ă  surveiller (peut monter Ă  plusieurs Go). 5. **Rate limiting** : activer un rate-limit Traefik sur `/map` pour Ă©viter l'abus et le ban OSM. ## 🔗 Alternatives - **Mapbox Static API** — Excellente qualitĂ©, mais cloud only, facturĂ© au 1000 requĂȘtes. - **Google Static Maps API** — Simple, mais trĂšs cher, RGPD-hostile, et dĂ©prĂ©ciĂ© en 2025. - **StaticMap (npm)** — Lib Node.js Ă©quivalente, Ă  intĂ©grer dans une API perso (plus de code). - **Mapy.cz Static API** — Alternative tchĂšque, plan gratuit gĂ©nĂ©reux. - **TileServer GL + screenshot** — Plus complet (rendu vectoriel) mais lourd (Node + GL native deps). ## 🔒 SĂ©curitĂ© - 🔐 **HTTPS obligatoire** via [[app-traefik]] : les coordonnĂ©es GPS dans les URLs sont sensibles (gĂ©olocalisation d'utilisateurs). - đŸ›Ąïž **Rate limiting strict** : OSM public bannit les IPs qui abusent (politique : 1 worker par site, pas plus de 2 req/s). - đŸ›Ąïž **Tile server interne** : pour un usage sĂ©rieux, monter un tile server (TileServer GL) en interne et le pointer via `TILE_URL=http://internal-tiles/...`. - đŸ›Ąïž **Validation des inputs** : limiter `zoom` (1-19) et `width/height` (max 2000x2000) pour Ă©viter l'abus (DoS via gĂ©nĂ©ration de cartes Ă©normes). - đŸ›Ąïž **Pas d'auth intĂ©grĂ©e** : placer derriĂšre un [[app-traefik]] avec BasicAuth si l'API doit ĂȘtre restreinte. - đŸ›Ąïž **Logs** : attention Ă  ne pas logger les URLs complĂštes si elles contiennent des positions sensibles (gĂ©ofencing privĂ©). ## 📚 Ressources - [GitHub StephanGeorg/docker-staticmaps](https://github.com/StephanGeorg/docker-staticmaps) - [Lib Go staticmaps](https://github.com/StephanGeorg/staticmaps) - [Selfh.st — Development](https://selfh.st/apps/?tag=Development) - [OpenStreetMap Tile Usage Policy](https://operations.osmfoundation.org/policies/tiles/) - [Mapbox Static API (rĂ©fĂ©rence)](https://docs.mapbox.com/api/maps/static-images/) ## 🔗 Pages LiĂ©es - [[cat-development]] — CatĂ©gorie Development - [[app-traefik]] — Reverse proxy HTTPS - [[securisation-home-lab]] — Bonnes pratiques de sĂ©curitĂ© - [[recettes-docker-compose]] — Templates Docker Compose