chore: checkpoint initial — Zektyc dataset, avant humanisation
- site vitrine + fingerprint test + zmap + z-panel - remplacement duckdns -> riricdev.tail5ea5cd.ts.net (canonical/og/alternates/docs) - suppression du token DuckDNS (plus utilisé)
This commit is contained in:
commit
8e7ec41f18
104 changed files with 19256 additions and 0 deletions
212
public/zmap/vitesses-par-route/index.html
Normal file
212
public/zmap/vitesses-par-route/index.html
Normal file
|
|
@ -0,0 +1,212 @@
|
|||
<!doctype html>
|
||||
<html lang="fr">
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||
<meta name="description" content="La base de données des vitesses par route de ZMap : 90,5 millions de points, 3,6 millions de km de routes cartographiées avec leur limite de vitesse (OpenStreetMap), sur toute l'Europe." />
|
||||
<meta name="robots" content="index, follow" />
|
||||
<title>Vitesses par route · ZMap · Zektyc</title>
|
||||
<link rel="canonical" href="https://riricdev.tail5ea5cd.ts.net/zmap/vitesses-par-route/" />
|
||||
<meta name="theme-color" content="#070a0f" />
|
||||
<meta property="og:type" content="website" />
|
||||
<meta property="og:site_name" content="Zektyc" />
|
||||
<meta property="og:title" content="Vitesses par route · ZMap" />
|
||||
<meta property="og:description" content="ZMap connaît la limite de vitesse de chaque route d'Europe : 90,5 millions de points, 3,6 millions de km, à partir des données OpenStreetMap." />
|
||||
<meta property="og:url" content="https://riricdev.tail5ea5cd.ts.net/zmap/vitesses-par-route/" />
|
||||
<meta property="og:locale" content="fr_FR" />
|
||||
<meta property="og:locale:alternate" content="en_US" />
|
||||
<link rel="icon" type="image/svg+xml" href="/favicon.svg" />
|
||||
<link rel="shortcut icon" href="/favicon.ico" />
|
||||
<link rel="stylesheet" href="/css/style.css?v=7" />
|
||||
<style>
|
||||
.stats-grid {
|
||||
display: grid;
|
||||
grid-template-columns: repeat(auto-fit, minmax(180px, 1fr));
|
||||
gap: 12px;
|
||||
margin: 24px 0;
|
||||
}
|
||||
.stat {
|
||||
background: rgba(255, 255, 255, 0.04);
|
||||
border: 1px solid rgba(255, 255, 255, 0.08);
|
||||
border-radius: 10px;
|
||||
padding: 16px;
|
||||
text-align: center;
|
||||
}
|
||||
.stat b {
|
||||
display: block;
|
||||
font-size: 1.7em;
|
||||
line-height: 1.2;
|
||||
color: var(--accent, #4dd6a8);
|
||||
}
|
||||
.stat span {
|
||||
font-size: 0.85em;
|
||||
opacity: 0.7;
|
||||
}
|
||||
table.speeds {
|
||||
width: 100%;
|
||||
border-collapse: collapse;
|
||||
margin: 16px 0;
|
||||
}
|
||||
table.speeds th,
|
||||
table.speeds td {
|
||||
text-align: right;
|
||||
padding: 6px 10px;
|
||||
border-bottom: 1px solid rgba(255, 255, 255, 0.08);
|
||||
}
|
||||
table.speeds th:first-child,
|
||||
table.speeds td:first-child {
|
||||
text-align: left;
|
||||
}
|
||||
.bar {
|
||||
display: inline-block;
|
||||
height: 10px;
|
||||
border-radius: 3px;
|
||||
background: var(--accent, #4dd6a8);
|
||||
vertical-align: middle;
|
||||
}
|
||||
code {
|
||||
background: rgba(255, 255, 255, 0.06);
|
||||
padding: 1px 6px;
|
||||
border-radius: 4px;
|
||||
font-size: 0.9em;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<header id="h"></header>
|
||||
|
||||
<main class="legal" id="main">
|
||||
<p class="legal-note"><a href="/zmap/">← Retour à ZMap</a></p>
|
||||
<h1>Vitesses par route</h1>
|
||||
<p class="legal-meta">
|
||||
La base de données interne de ZMap · comment elle est construite et
|
||||
ce qu'elle contient
|
||||
</p>
|
||||
|
||||
<div class="dev-banner">
|
||||
🧭 <strong>Fonctionnalité de navigation.</strong> ZMap rattache chaque
|
||||
point de votre itinéraire à sa route réelle et lit sa limite de vitesse
|
||||
dans une base de données locale de toute l'Europe — puis la garde en
|
||||
cache sur votre téléphone pour la conduite hors-ligne.
|
||||
</div>
|
||||
|
||||
<section class="projects-page">
|
||||
<article class="card">
|
||||
<h3>Le principe</h3>
|
||||
<p>
|
||||
La plupart des applications de navigation ont besoin d'une connexion
|
||||
pour connaître la vitesse autorisée. ZMap fait différemment : une base
|
||||
de données des limites de vitesse est construite <em>par route</em> à
|
||||
partir des données OpenStreetMap, puis embarquée côté serveur. Quand
|
||||
un itinéraire est calculé, chaque point du trajet est rattaché à la
|
||||
route la plus proche et reçoit sa vitesse. L'itinéraire complet — y
|
||||
compris ses vitesses — est ensuite mis en cache sur le téléphone :
|
||||
pendant la conduite, plus aucune requête réseau n'est nécessaire.
|
||||
</p>
|
||||
</article>
|
||||
</section>
|
||||
|
||||
<div class="stats-grid">
|
||||
<div class="stat"><b>90,5 M</b><span>points échantillonnés</span></div>
|
||||
<div class="stat"><b>3,6 M km</b><span>de routes avec vitesse connue</span></div>
|
||||
<div class="stat"><b>5 104</b><span>cellules de 0,5° × 0,5°</span></div>
|
||||
<div class="stat"><b>370 Mo</b><span>grille compressée (gzip)</span></div>
|
||||
<div class="stat"><b>40 m</b><span>échantillonnage le long des routes</span></div>
|
||||
<div class="stat"><b>5 o</b><span>par point (lon, lat, vitesse)</span></div>
|
||||
</div>
|
||||
|
||||
<section class="projects-page">
|
||||
<article class="card">
|
||||
<h3>Comment c'est construit</h3>
|
||||
<ol>
|
||||
<li>
|
||||
<strong>Source :</strong> l'extrait Europe d'OpenStreetMap
|
||||
(Geofabrik, 34,8 Go) contient 98,2 millions de routes
|
||||
(<code>highway</code>).
|
||||
</li>
|
||||
<li>
|
||||
<strong>Filtrage :</strong> <code>osmium tags-filter</code> ne garde
|
||||
que les routes (8,5 Go), puis seules celles portant une vitesse
|
||||
(<code>maxspeed</code>) sont conservées — environ 13 millions.
|
||||
</li>
|
||||
<li>
|
||||
<strong>Échantillonnage :</strong> un point est posé tous les
|
||||
40 mètres le long de chaque route, avec sa vitesse en km/h.
|
||||
</li>
|
||||
<li>
|
||||
<strong>Indexation :</strong> l'Europe est découpée en cellules de
|
||||
0,5° de côté (≈ 55 km), elles-mêmes subdivisées en 32 × 32. Chaque
|
||||
point est quantifié sur ~0,76 m et stocké sur 5 octets, puis la
|
||||
cellule est compressée en gzip : 90,5 millions de points en 370 Mo
|
||||
au total.
|
||||
</li>
|
||||
</ol>
|
||||
<p>
|
||||
Le tout est reproductible : le script de construction
|
||||
(<code>build_maxspeed.py</code>) tourne de bout en bout sur un petit
|
||||
serveur.
|
||||
</p>
|
||||
</article>
|
||||
|
||||
<article class="card">
|
||||
<h3>Ce qu'il y a dedans</h3>
|
||||
<p>
|
||||
Répartition des points par limite de vitesse (extrait des valeurs les
|
||||
plus courantes) :
|
||||
</p>
|
||||
<table class="speeds">
|
||||
<tr><th>Limite</th><th>Part des points</th><th></th></tr>
|
||||
<tr><td>50 km/h</td><td>26,2 %</td><td><span class="bar" style="width:100%"></span></td></tr>
|
||||
<tr><td>30 km/h (zones 30)</td><td>18,5 %</td><td><span class="bar" style="width:71%"></span></td></tr>
|
||||
<tr><td>90 km/h</td><td>9,5 %</td><td><span class="bar" style="width:36%"></span></td></tr>
|
||||
<tr><td>80 km/h</td><td>9,2 %</td><td><span class="bar" style="width:35%"></span></td></tr>
|
||||
<tr><td>70 km/h</td><td>6,0 %</td><td><span class="bar" style="width:23%"></span></td></tr>
|
||||
<tr><td>60 km/h</td><td>5,7 %</td><td><span class="bar" style="width:22%"></span></td></tr>
|
||||
<tr><td>100 km/h</td><td>4,6 %</td><td><span class="bar" style="width:18%"></span></td></tr>
|
||||
<tr><td>40 km/h</td><td>3,3 %</td><td><span class="bar" style="width:13%"></span></td></tr>
|
||||
<tr><td>48 km/h (30 mph, RU)</td><td>2,8 %</td><td><span class="bar" style="width:11%"></span></td></tr>
|
||||
<tr><td>97 km/h (60 mph, RU)</td><td>2,4 %</td><td><span class="bar" style="width:9%"></span></td></tr>
|
||||
<tr><td>32 km/h (20 mph, RU)</td><td>2,1 %</td><td><span class="bar" style="width:8%"></span></td></tr>
|
||||
<tr><td>20 km/h (zones piétonnes)</td><td>2,1 %</td><td><span class="bar" style="width:8%"></span></td></tr>
|
||||
<tr><td>120 km/h</td><td>1,8 %</td><td><span class="bar" style="width:7%"></span></td></tr>
|
||||
<tr><td>130 km/h (autoroutes)</td><td>1,7 %</td><td><span class="bar" style="width:6%"></span></td></tr>
|
||||
<tr><td>110 km/h</td><td>1,4 %</td><td><span class="bar" style="width:5%"></span></td></tr>
|
||||
</table>
|
||||
<p class="legal-note">
|
||||
Valeurs <em>numériques</em> présentes dans OpenStreetMap. Les vitesses
|
||||
réelles peuvent différer (travaux, panneaux temporaires, conditions
|
||||
météo). Les autoroutes sans limite (ex. certaines portions allemandes)
|
||||
n'ont pas de <code>maxspeed</code> : ZMap n'affiche alors aucune
|
||||
vitesse.
|
||||
</p>
|
||||
</article>
|
||||
|
||||
<article class="card">
|
||||
<h3>Côté application</h3>
|
||||
<p>
|
||||
Le serveur renvoie, avec chaque itinéraire, un tableau de vitesses
|
||||
aligné sur les points du tracé (une valeur par point). Le téléphone
|
||||
enregistre tout dans son cache local : pendant la conduite, la limite
|
||||
du tronçon courant est lue sans réseau, et le mode hors-ligne garde
|
||||
tout le trajet. Le rattachement d'un trajet de 4 500 points prend
|
||||
environ 170 ms sur le serveur.
|
||||
</p>
|
||||
</article>
|
||||
|
||||
<article class="card">
|
||||
<h3>Précision et couverture</h3>
|
||||
<ul>
|
||||
<li>Couverture : Europe entière, longitude −12° à 46°, latitude 27° à 72°.</li>
|
||||
<li>Rattachement : la route la plus proche à moins de 40 m du point.</li>
|
||||
<li>Localisation d'un point : précision ≈ 0,76 m.</li>
|
||||
<li>Données : OpenStreetMap, libre de droits (licence ODbL).</li>
|
||||
</ul>
|
||||
</article>
|
||||
</section>
|
||||
</main>
|
||||
|
||||
<footer id="f"></footer>
|
||||
<script src="/js/theme.js" defer></script>
|
||||
<script src="/js/components.js?v=6" defer></script>
|
||||
</body>
|
||||
</html>
|
||||
Loading…
Reference in a new issue