BikeControl (SwiftControl)
使用 Zwift Click、Zwift Play、Shimano Di2 或任何藍牙控制器,搭配 MyWhoosh、Rouvy、Zwift 等。iOS、Android、Windows、macOS 均可免費試用。
AI 翻译
尚未检测到更新。GitHub 发布版本后会显示在这里。
个人 GitHub 账号下公开仓库的所有者可以登录并验证所有权,自行管理介绍,无需管理员批准。
登录并生成验证文件,在 30 分钟内将其提交到此仓库的默认分支。其他分支或分叉仓库中的文件无效。然后在下方检查文件,即可无需管理员批准直接管理项目。请保留文件以维持管理权限。
如需登录,将前往登录页面。登录后请回到此处,再次点击所选的验证按钮。
在项目文件夹中运行 /nomorevibe verify,即可验证所有权并自行管理介绍。
一分钟完成验证制作者的介绍仅有上面的一句话。 更多详情请阅读仓库 README。 仓库 README ↗
正在加载完整 README。
查看完整 README ↗Carte interactive recensant les terrains de pétanque accessibles au public en Belgique.
🔗 Site en ligne : mapetanque.be 📄 Licence : MIT
leisure=pitch + sport=boules/petanque sur la Belgique)scripts/update_terrains.pyterrains.geojson pour création d'un titre dynamiquedata/adresses_nominatim.json : un terrain qui n'a pas bougé (moins de 25 m) reprend son adresse au lieu d'être regéocodé ; seules les 60 adresses les plus anciennes sont redemandées à chaque passage (tout est revu en un mois environ), plus les terrains nouveaux ou déplacésfitBounds sur toute la zone)Terrain [nom de rue] si une rue proche a été trouvée, sinon Terrain de pétanqueaccess : « Accès public » (yes/public), « Accès toléré » (permissive), rien sinon (pas d'affirmation sans donnée ; voir la section « Fiabilité des informations » de l'À propos)?lat=...&lon=...&z=18. À l'ouverture de ce lien, le site retrouve automatiquement le terrain correspondant, centre la carte dessus et rouvre son popuplocalStorage (le visiteur retrouve sa langue lors d'une prochaine visite)translations.js — y compris les noms de provinces/régions et les textes d'interface des pages province/région, lus directement par le générateur Python (source unique, pas de duplication)/, /nl/, /de/ pour l'accueil ; même principe pour chaque page province/région (/province-<slug>.html, /nl/province-<slug>.html, /de/province-<slug>.html), avec balises hreflang réciproques<details>/<summary>, sans JS dédié)terrains.geojson, aucune configuration manuelle) — toujours le total Belgique, même sur une page province/régionterrains.geojson)position: fixed) ; en flux normal de page sur les pages province/région (position: static)province-<slug>.html) + 2 pages région (region-flandre.html, region-wallonie.html) — Bruxelles n'a pas de page région dédiée (pas de sous-provinces), sa tuile région renvoie directement vers sa page provincescripts/generate_provinces.py, qui lit data/provinces.json / data/regions.json, les templates templates/province_template.html / templates/region_template.html, translations.js et data/terrains.geojson (liste des communes écrite dans la page, lisible sans JavaScript), puis lance scripts/generer_referencement.py (voir Référencement)commune/<slug>.html, et nl/, de/, en/commune/) : 255 communes en octobre 2026commune des terrains, tiré de Nominatim, qui donne souvent un village ou une ancienne commune (il reste affiché comme localité) : scripts/communes_officielles.py rattache chaque terrain et chaque club à sa commune, sans réseau, d'après les limites communales d'OpenStreetMap de data/communes_belgique.json (téléchargées une fois par scripts/telecharger_communes.py, à relancer après une fusion de communes)data/groupes_terrains.json), regroupées par localité, avec photo, revêtement et pastilles calculées par criteres.js lui-même (via Node.js), clubs de la commune, communes voisines, tuiles province et région ; bannière de la provincecommune.js), avec un lien « Voir sur la carte » ; le terrain s'ajoute à l'adresse (#way-123) pour le bouton retour et le partage. Les notes des joueurs s'affichent sur les cartes des terrainsscripts/communes_officielles.py)scripts/generer_communes.py (squelette de comment-jouer.html, voir scripts/_squelette.py), chaque jour par le workflow OSM ; une commune passée sous deux lieux perd sa pagegenerer_communes.py écrit pour cela data/communes_liens.json (commune de chaque terrain et club, noms dans les quatre langues, existence de la page)data/recherche.json, écrit par generer_communes.py et téléchargé au premier caractère tapé : Nominatim interdit l'autocomplétion, il ne sert qu'à la touche Entrée (recherche d'adresse)index.html (+ nl/, de/), province-*.html × 3 langues, region-*.html × 3 languesstyle.css, script.js, translations.jsstyle.css) : style-accueil-provinces.css (page d'accueil), style-province.css (pages province et région)mapetanque.be, déploiement automatique à chaque git pushscripts/update_terrains.py, à exécuter manuellement ou via tâche planifiée (quelques minutes : seuls les terrains nouveaux, déplacés ou du lot de rafraîchissement passent par Nominatim, limité à 1 requête/seconde) — produit data/terrains.geojson et data/stats_geo.jsonscripts/generate_provinces.py, à relancer après toute modification de data/provinces.json, data/regions.json, templates/province_template.html, templates/region_template.html ou translations.jsmanifest.webmanifest : nom, couleurs et icônes de l'application (images/icone-192.png, images/icone-512.png, images/icone-masquable-512.png pour les icônes rondes d'Android), lié depuis le <head> de chaque pagesw.js (service worker, enregistré en tête de script.js) : « le réseau d'abord ». Tout est toujours redemandé au serveur, la copie en cache ne sert qu'hors connexion : l'application reste à jour sans rien faire à chaque publication. Sans connexion, les pages déjà consultées restent lisibles (la carte, elle, a besoin du réseau) ; une page jamais vue affiche « Pas de connexion internet » en 4 langues<meta name="description"> et <title> traduits dynamiquement selon la langue affichée (accueil), ou rédigés spécifiquement par page (provinces/régions)scripts/generer_referencement.py lit les pages publiques (canonical vers elles-mêmes, pas de noindex) et écrit :
sitemap.xml en entier : chaque page de chaque langue avec ses versions dans les autres langues et sa date de modification (data/sitemap_dates.json garde une empreinte de chaque page pour la dater)llms.txt : résumé du site pour les IA (convention llmstxt.org), avec les chiffres du jourgenerate_provinces.py (donc chaque jour par le workflow OSM), generer_la_petanque.py et generer_a_propos.py ; à relancer à la main après une modification de index.html, comment-jouer.html ou compteur.htmlrobots.txt à la racine, sitemap soumis à Google Search Consoleog:title, og:description, og:image, og:url) pour un aperçu soigné lors du partage du lien sur les réseaux sociaux/messageries| Outil | Rôle |
|---|---|
| Visual Studio Code | Créer et modifier les fichiers du site, organiser le projet |
| Leaflet | Afficher la carte interactive (déplacements, marqueurs, popups...) |
| OpenStreetMap | Source des données géographiques |
| Overpass Turbo | Extraction automatique des données OpenStreetMap via l'API Overpass |
| Python | Automatiser la récupération des données OpenStreetMap et la génération des pages province/région |
| GitHub | Stockage du projet, historique Git, automatisation, hébergement du site public |
| Live Server (extension VS Code) | Prévisualiser rapidement les changements de code en local |
├── index.html # Page d'accueil (français, à la racine)
├── nl/index.html # Accueil, version néerlandaise
├── de/index.html # Accueil, version allemande
├── province-<slug>.html # 11 pages province (français, à la racine)
├── nl/province-<slug>.html # Pages province traduites (selon disponibilité)
├── de/province-<slug>.html # Pages province traduites (selon disponibilité)
├── region-flandre.html # Page région Flandre
├── region-wallonie.html # Page région Wallonie
├── nl/region-*.html, de/region-*.html
├── commune/<slug>.html # Pages commune (générées), aussi dans nl/, de/, en/
├── commune.js # Fiche d'un terrain ouverte sur les pages commune
├── style-commune.css # Ajouts spécifiques aux pages commune
├── style.css # Mise en forme du site (base)
├── style-accueil-provinces.css # Ajouts spécifiques à la page d'accueil
├── style-province.css # Ajouts spécifiques aux pages province/région
├── script.js # Logique de la carte et des interactions
├── translations.js # Textes du site en FR / NL / DE (source unique)
├── sitemap.xml # Plan du site, toutes pages et langues (généré)
├── llms.txt # Résumé du site pour les IA (généré)
├── robots.txt # Référence le sitemap pour les robots d'indexation
├── manifest.webmanifest # Fiche de l'application installable (PWA)
├── sw.js # Service worker de l'application (doit rester à la racine)
├── images/
│ ├── mapetanque-logo.svg # Logo complet (boule + texte vectorisé), en-tête sur bannière photo
│ ├── mapetanque-logo-fonce.svg # Même logo, « etanque » foncé, en-tête sur fond clair
│ ├── mapetanque-boule.svg # Boule seule (en-tête mobile, favicon SVG, page admin)
│ ├── mapetanque-partage.png # Image de partage Open Graph (1200 × 630)
│ ├── banniere-accueil.webp # Bannière photo de l'accueil
│ └── provinces/ # Bannières et tuiles photo (provinces + régions)
├── scripts/
│ ├── update_terrains.py # Génération quotidienne des données terrains
│ ├── generate_provinces.py # Génération des pages province/région
│ ├── generer_communes.py # Génération des pages commune
│ ├── communes_officielles.py # Rattachement d'un point à sa commune officielle
│ ├── telecharger_communes.py # Limites des communes (data/communes_belgique.json)
│ └── generer_referencement.py # Données structurées, sitemap.xml, llms.txt
├── templates/
│ ├── province_template.html # Gabarit des pages province
│ └── region_template.html # Gabarit des pages région
├── data/
│ ├── terrains.geojson # Données des terrains (générées automatiquement)
│ ├── stats_geo.json # Agrégats région/province/commune
│ ├── communes_belgique.json # Limites des 565 communes officielles (OSM)
│ ├── communes_liens.json # Commune officielle de chaque terrain et club (fiches)
│ ├── recherche.json # Index des propositions de la recherche
│ ├── provinces.json # Contenu (textes, crédits photo) des pages province
│ └── regions.json # Contenu des pages région
├── LICENSE # Licence MIT
└── README.md # Ce fichier