Ajoute OSM
This commit is contained in:
@@ -0,0 +1,567 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="fr">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>Accéder aux données d'OpenStreetMap, formation Donut</title>
|
||||
<meta name="description" content="Formation citoyenne : extraire, interroger et réutiliser les données d'OpenStreetMap (Overpass, Nominatim, Geofabrik, uMap) dans le respect de la licence ODbL.">
|
||||
<link rel="preconnect" href="https://fonts.googleapis.com">
|
||||
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
||||
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700;800&family=JetBrains+Mono:wght@400;500;700&display=swap" rel="stylesheet">
|
||||
<style>
|
||||
:root{
|
||||
--navy:#1a2332;
|
||||
--navy-2:#22304a;
|
||||
--gold:#e8b04d;
|
||||
--gold-ink:#996713;
|
||||
--cream:#fbf8f2;
|
||||
--paper:#ffffff;
|
||||
--ink:#1f2733;
|
||||
--ink-soft:#475063;
|
||||
--line:#e6e0d4;
|
||||
--code-bg:#161d2b;
|
||||
--info:#2b6cb0;
|
||||
--info-bg:#eef4fb;
|
||||
--warn:#b7791f;
|
||||
--warn-bg:#fdf6e7;
|
||||
--good:#2f7a4d;
|
||||
--good-bg:#edf6f0;
|
||||
--max:880px;
|
||||
}
|
||||
*{box-sizing:border-box;}
|
||||
html{scroll-behavior:smooth;}
|
||||
body{
|
||||
margin:0;
|
||||
font-family:'Inter',system-ui,-apple-system,sans-serif;
|
||||
color:var(--ink);
|
||||
background:var(--cream);
|
||||
line-height:1.65;
|
||||
font-size:17px;
|
||||
-webkit-font-smoothing:antialiased;
|
||||
}
|
||||
.progress{
|
||||
position:fixed;top:0;left:0;height:3px;width:0%;
|
||||
background:var(--gold);z-index:1000;transition:width .08s linear;
|
||||
}
|
||||
|
||||
/* En-tête */
|
||||
header.banner{
|
||||
background:var(--navy);
|
||||
color:#f4f1ea;
|
||||
border-bottom:4px solid var(--gold);
|
||||
padding:48px 22px 40px;
|
||||
}
|
||||
.banner .wrap{max-width:var(--max);margin:0 auto;}
|
||||
.crumb{
|
||||
font-size:13px;letter-spacing:.04em;text-transform:uppercase;
|
||||
color:var(--gold);font-weight:600;margin-bottom:18px;
|
||||
}
|
||||
.crumb a{color:var(--gold);text-decoration:none;}
|
||||
.crumb a:hover{text-decoration:underline;}
|
||||
.banner h1{
|
||||
font-size:clamp(28px,5vw,42px);line-height:1.15;margin:0 0 14px;
|
||||
font-weight:800;letter-spacing:-.01em;color:#fff;
|
||||
}
|
||||
.banner .sub{font-size:clamp(16px,2.5vw,19px);color:#cdd5e2;max-width:680px;margin:0;}
|
||||
.meta{
|
||||
display:flex;flex-wrap:wrap;gap:10px;margin-top:26px;
|
||||
}
|
||||
.meta span{
|
||||
background:rgba(232,176,77,.12);border:1px solid rgba(232,176,77,.4);
|
||||
color:var(--gold);border-radius:999px;padding:5px 14px;font-size:13px;font-weight:600;
|
||||
}
|
||||
|
||||
/* Corps */
|
||||
main{max-width:var(--max);margin:0 auto;padding:0 22px 60px;}
|
||||
section{padding:34px 0;border-bottom:1px solid var(--line);}
|
||||
section:last-of-type{border-bottom:none;}
|
||||
h2{
|
||||
font-size:clamp(22px,3.4vw,28px);font-weight:800;color:var(--navy);
|
||||
margin:0 0 6px;letter-spacing:-.01em;
|
||||
display:flex;align-items:baseline;gap:12px;
|
||||
}
|
||||
h2 .num{
|
||||
font-family:'JetBrains Mono',monospace;font-size:16px;font-weight:700;
|
||||
color:var(--gold-ink);background:#f6edda;border:1px solid #ecd9ab;
|
||||
border-radius:8px;padding:2px 9px;flex:none;
|
||||
}
|
||||
h3{font-size:18px;font-weight:700;color:var(--navy-2);margin:28px 0 8px;}
|
||||
p{margin:12px 0;}
|
||||
a{color:var(--gold-ink);}
|
||||
ul,ol{margin:12px 0;padding-left:24px;}
|
||||
li{margin:6px 0;}
|
||||
strong{font-weight:700;color:var(--navy);}
|
||||
|
||||
/* Chapô / sommaire */
|
||||
.lede{
|
||||
background:var(--paper);border:1px solid var(--line);border-left:4px solid var(--gold);
|
||||
border-radius:10px;padding:20px 22px;margin:30px 0 0;font-size:18px;color:var(--ink-soft);
|
||||
}
|
||||
.toc{
|
||||
background:var(--paper);border:1px solid var(--line);border-radius:12px;
|
||||
padding:22px 24px;margin:26px 0 0;
|
||||
}
|
||||
.toc h4{margin:0 0 12px;font-size:13px;letter-spacing:.05em;text-transform:uppercase;color:var(--gold-ink);}
|
||||
.toc ol{margin:0;padding-left:0;list-style:none;counter-reset:toc;}
|
||||
.toc li{counter-increment:toc;margin:7px 0;padding-left:34px;position:relative;}
|
||||
.toc li::before{
|
||||
content:counter(toc,decimal-leading-zero);
|
||||
position:absolute;left:0;top:0;
|
||||
font-family:'JetBrains Mono',monospace;font-size:13px;font-weight:700;color:var(--gold-ink);
|
||||
}
|
||||
.toc a{color:var(--navy);text-decoration:none;font-weight:500;}
|
||||
.toc a:hover{color:var(--gold-ink);text-decoration:underline;}
|
||||
|
||||
/* Encadrés */
|
||||
.box{border-radius:10px;padding:16px 20px;margin:20px 0;border:1px solid;font-size:15.5px;}
|
||||
.box .tag{font-weight:700;display:block;margin-bottom:4px;font-size:13px;letter-spacing:.03em;text-transform:uppercase;}
|
||||
.box.info{background:var(--info-bg);border-color:#cfe0f2;color:#1c3d5e;}
|
||||
.box.info .tag{color:var(--info);}
|
||||
.box.warn{background:var(--warn-bg);border-color:#f0dca9;color:#6b4e12;}
|
||||
.box.warn .tag{color:var(--warn);}
|
||||
.box.good{background:var(--good-bg);border-color:#c4e2cf;color:#1f4d33;}
|
||||
.box.good .tag{color:var(--good);}
|
||||
|
||||
/* Code */
|
||||
pre{
|
||||
background:var(--code-bg);color:#e6edf3;border-radius:10px;
|
||||
padding:16px 18px;overflow-x:auto;margin:16px 0;
|
||||
font-family:'JetBrains Mono',monospace;font-size:13.5px;line-height:1.55;
|
||||
border:1px solid #2a3550;
|
||||
}
|
||||
pre .c{color:#7d8aa3;}
|
||||
pre .k{color:var(--gold);}
|
||||
pre .s{color:#9ece6a;}
|
||||
code{
|
||||
font-family:'JetBrains Mono',monospace;font-size:.9em;
|
||||
background:#f0ece1;padding:1px 6px;border-radius:5px;color:#5a4a1f;
|
||||
}
|
||||
pre code{background:none;padding:0;color:inherit;}
|
||||
a code{color:var(--gold-ink);}
|
||||
|
||||
/* Tableau */
|
||||
.tbl{width:100%;border-collapse:collapse;margin:18px 0;font-size:14.5px;}
|
||||
.tbl th,.tbl td{border:1px solid var(--line);padding:9px 12px;text-align:left;vertical-align:top;}
|
||||
.tbl th{background:var(--navy);color:#fff;font-weight:600;}
|
||||
.tbl tr:nth-child(even) td{background:#f7f3ea;}
|
||||
.tbl code{background:#eee7d6;}
|
||||
|
||||
/* Étapes */
|
||||
.steps{counter-reset:step;margin:18px 0;padding:0;list-style:none;}
|
||||
.steps>li{
|
||||
counter-increment:step;position:relative;padding:4px 0 18px 48px;margin:0;
|
||||
border-left:2px solid var(--line);
|
||||
}
|
||||
.steps>li:last-child{border-left:2px solid transparent;}
|
||||
.steps>li::before{
|
||||
content:counter(step);position:absolute;left:-15px;top:0;
|
||||
width:28px;height:28px;border-radius:50%;background:var(--gold);color:var(--navy);
|
||||
font-weight:800;font-size:14px;display:flex;align-items:center;justify-content:center;
|
||||
font-family:'JetBrains Mono',monospace;
|
||||
}
|
||||
.steps>li strong{display:block;}
|
||||
|
||||
/* Acronymes */
|
||||
.acr{
|
||||
border-bottom:1.5px dotted var(--gold-ink);cursor:help;
|
||||
font-weight:600;color:var(--navy-2);
|
||||
}
|
||||
.acr:focus{outline:2px solid var(--gold);outline-offset:2px;border-radius:2px;}
|
||||
#tip{
|
||||
position:fixed;z-index:1200;max-width:280px;
|
||||
background:var(--navy);color:#f4f1ea;border:1px solid var(--gold);
|
||||
border-radius:8px;padding:10px 13px;font-size:13.5px;line-height:1.45;
|
||||
box-shadow:0 8px 24px rgba(15,20,30,.35);
|
||||
opacity:0;visibility:hidden;transition:opacity .12s;pointer-events:none;
|
||||
}
|
||||
#tip.on{opacity:1;visibility:visible;}
|
||||
#tip b{color:var(--gold);display:block;margin-bottom:3px;font-size:13px;}
|
||||
|
||||
/* Lexique */
|
||||
.lex-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(250px,1fr));gap:12px;margin-top:18px;}
|
||||
.lex-item{background:var(--paper);border:1px solid var(--line);border-radius:9px;padding:12px 14px;}
|
||||
.lex-sigle{font-family:'JetBrains Mono',monospace;font-weight:700;color:var(--gold-ink);font-size:14px;}
|
||||
.lex-def{font-size:14px;color:var(--ink-soft);margin-top:3px;}
|
||||
|
||||
/* Liens ressources */
|
||||
.links{display:grid;gap:10px;margin-top:16px;}
|
||||
.links a{
|
||||
display:block;background:var(--paper);border:1px solid var(--line);border-left:3px solid var(--gold);
|
||||
border-radius:8px;padding:13px 16px;text-decoration:none;color:var(--navy);
|
||||
}
|
||||
.links a:hover{border-left-color:var(--gold-ink);background:#fffdf8;}
|
||||
.links a span{display:block;font-size:13px;color:var(--ink-soft);font-weight:400;margin-top:2px;}
|
||||
.links a b{font-weight:600;}
|
||||
|
||||
/* Footer */
|
||||
footer{background:var(--navy);color:#aeb8c8;padding:34px 22px;border-top:4px solid var(--gold);}
|
||||
footer .wrap{max-width:var(--max);margin:0 auto;font-size:14px;}
|
||||
footer strong{color:#fff;}
|
||||
footer a{color:var(--gold);}
|
||||
.attrib{background:rgba(232,176,77,.08);border:1px solid rgba(232,176,77,.3);border-radius:8px;padding:14px 16px;margin-top:18px;font-size:13.5px;color:#cdd5e2;}
|
||||
|
||||
@media(max-width:600px){
|
||||
body{font-size:16px;}
|
||||
.steps>li{padding-left:42px;}
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<div class="progress" id="progress"></div>
|
||||
|
||||
<header class="banner">
|
||||
<div class="wrap">
|
||||
<div class="crumb"><a href="/">Formations Donut</a> › Données ouvertes</div>
|
||||
<h1>Accéder aux données d'OpenStreetMap</h1>
|
||||
<p class="sub">Extraire, interroger et réutiliser le commun cartographique libre, pour la transparence citoyenne et l'analyse du territoire.</p>
|
||||
<div class="meta">
|
||||
<span>Niveau : débutant à intermédiaire</span>
|
||||
<span>Durée : 35 min</span>
|
||||
<span>Sans inscription</span>
|
||||
<span>Données libres (ODbL)</span>
|
||||
</div>
|
||||
</div>
|
||||
</header>
|
||||
|
||||
<main>
|
||||
|
||||
<p class="lede">
|
||||
<span class="acr" tabindex="0" data-full="OpenStreetMap" data-tip="Base de données géographique mondiale, libre et collaborative, alimentée par des contributeurs bénévoles, des collectivités et des associations.">OSM</span>
|
||||
n'est pas seulement une carte que l'on regarde : c'est une base de données géographique que l'on peut télécharger, interroger et réutiliser librement. Pour un collectif citoyen, cela veut dire produire ses propres cartes (écoles, équipements publics, accessibilité, points d'eau) sans dépendre d'un fournisseur commercial. Cette formation montre, du plus simple au plus avancé, comment accéder à ces informations et les réutiliser dans le respect de la licence.
|
||||
</p>
|
||||
|
||||
<nav class="toc" aria-label="Sommaire">
|
||||
<h4>Au programme</h4>
|
||||
<ol>
|
||||
<li><a href="#commun">Un commun cartographique, pas seulement une carte</a></li>
|
||||
<li><a href="#modele">Comprendre le modèle de données</a></li>
|
||||
<li><a href="#consulter">Consulter directement sur openstreetmap.org</a></li>
|
||||
<li><a href="#overpass">Interroger finement avec Overpass</a></li>
|
||||
<li><a href="#nominatim">Géocoder une adresse avec Nominatim</a></li>
|
||||
<li><a href="#extraits">Télécharger des extraits du territoire</a></li>
|
||||
<li><a href="#visualiser">Visualiser et analyser (uMap, QGIS)</a></li>
|
||||
<li><a href="#licence">Respecter la licence ODbL</a></li>
|
||||
<li><a href="#pratique">Cas pratique : recenser un équipement à Marseille</a></li>
|
||||
<li><a href="#lexique">Lexique</a></li>
|
||||
<li><a href="#plus">Pour aller plus loin</a></li>
|
||||
</ol>
|
||||
</nav>
|
||||
|
||||
<section id="commun">
|
||||
<h2><span class="num">01</span>Un commun cartographique</h2>
|
||||
<p>
|
||||
OpenStreetMap est une base de données géographique du monde entier, construite depuis 2004 par des centaines de milliers de contributeurs. On y trouve les routes, les chemins, les bâtiments, mais aussi les commerces, les écoles, les fontaines, les arrêts de transport, les horaires d'ouverture, et bien davantage. La règle de fond : tout ce qui est observable sur le terrain peut y figurer (le panneau d'une rue, l'enseigne d'un restaurant), à l'exclusion des données personnelles.
|
||||
</p>
|
||||
<p>
|
||||
La différence avec une carte commerciale est double. D'abord, la donnée brute est <strong>téléchargeable</strong> : vous n'êtes pas limité à regarder, vous pouvez extraire. Ensuite, elle est <strong>sous licence libre</strong> (voir la section 8), ce qui autorise la réutilisation, y compris pour publier vos propres analyses. C'est ce qui en fait un outil de choix pour un InfoLab citoyen.
|
||||
</p>
|
||||
<div class="box info">
|
||||
<span class="tag">À retenir</span>
|
||||
Trois manières d'accéder à la donnée, par ordre de complexité : <strong>consulter</strong> objet par objet sur le site, <strong>interroger</strong> par critères avec Overpass, <strong>télécharger</strong> un extrait complet d'une région. On les voit chacune ci-dessous.
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section id="modele">
|
||||
<h2><span class="num">02</span>Comprendre le modèle de données</h2>
|
||||
<p>
|
||||
Avant d'extraire, il faut comprendre comment OSM représente le monde. Tout repose sur trois types d'objets et un système d'étiquettes.
|
||||
</p>
|
||||
<table class="tbl">
|
||||
<tr><th>Objet</th><th>Rôle</th><th>Exemple</th></tr>
|
||||
<tr><td><strong>Nœud</strong> (node)</td><td>Un point, défini par une latitude et une longitude.</td><td>Une fontaine, un arbre, un défibrillateur.</td></tr>
|
||||
<tr><td><strong>Chemin</strong> (way)</td><td>Une suite de nœuds. Ouvert (une rue) ou fermé (un contour de bâtiment, une cour d'école).</td><td>Une route, le pourtour d'une parcelle.</td></tr>
|
||||
<tr><td><strong>Relation</strong></td><td>Un regroupement logique de nœuds et de chemins.</td><td>Une ligne de bus, une limite administrative, un grand bâtiment à trous.</td></tr>
|
||||
</table>
|
||||
<p>
|
||||
Chaque objet porte des <strong>tags</strong> (étiquettes), sous la forme <code>clé=valeur</code>. C'est là que se trouve l'information utile. Une école se décrit par <code>amenity=school</code>, une fontaine d'eau potable par <code>amenity=drinking_water</code>, l'accessibilité en fauteuil par <code>wheelchair=yes</code>. Un même objet cumule plusieurs tags : nom, adresse, horaires, opérateur.
|
||||
</p>
|
||||
<div class="box good">
|
||||
<span class="tag">Outil clé</span>
|
||||
Pour savoir quel tag décrit quoi, deux références : le <strong>wiki OSM</strong> (chaque clé y est documentée) et <strong>taginfo</strong> (<a href="https://taginfo.openstreetmap.org/" target="_blank" rel="noopener">taginfo.openstreetmap.org</a>), qui montre quels tags existent réellement et à quelle fréquence ils sont utilisés. C'est le dictionnaire de la base.
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section id="consulter">
|
||||
<h2><span class="num">03</span>Consulter sur openstreetmap.org</h2>
|
||||
<p>
|
||||
Le point d'entrée le plus simple reste le site officiel, <strong><a href="https://www.openstreetmap.org/" target="_blank" rel="noopener">openstreetmap.org</a></strong>. Au delà de l'affichage de la carte, deux fonctions sont précieuses.
|
||||
</p>
|
||||
<h3>Interroger les objets</h3>
|
||||
<p>
|
||||
L'icône en forme de point d'interrogation (à droite de la carte) active le mode <em>Interroger les fonctionnalités</em>. En cliquant sur un point, vous obtenez la liste des objets présents à cet endroit, avec <strong>tous leurs tags</strong>. C'est la façon la plus rapide de découvrir comment un équipement est étiqueté avant d'écrire une requête.
|
||||
</p>
|
||||
<h3>Historique et traçabilité</h3>
|
||||
<p>
|
||||
Chaque objet possède une page dédiée (un identifiant, un historique des modifications, l'auteur de chaque version, le groupe de modifications ou <em>changeset</em>). Pour un travail de transparence, cette traçabilité compte : on sait quand et par qui une information a été ajoutée. La barre de recherche, enfin, s'appuie sur Nominatim (section 5) pour retrouver une adresse ou un lieu.
|
||||
</p>
|
||||
</section>
|
||||
|
||||
<section id="overpass">
|
||||
<h2><span class="num">04</span>Interroger finement avec Overpass</h2>
|
||||
<p>
|
||||
Cliquer objet par objet ne convient pas pour recenser, par exemple, toutes les écoles d'une ville. Pour cela, on utilise l'<strong>API Overpass</strong>, un moteur de requêtes spécialisé qui interroge la base OSM par critères : type d'objet, valeur de tag, zone géographique, proximité.
|
||||
</p>
|
||||
<p>
|
||||
Le plus simple est de passer par <strong>Overpass Turbo</strong> (<a href="https://overpass-turbo.eu/" target="_blank" rel="noopener">overpass-turbo.eu</a>), une interface web qui exécute les requêtes et affiche le résultat sur une carte. Elle embarque un <em>assistant</em> qui traduit une phrase simple en requête. Tapez par exemple <code>amenity=drinking_water in Marseille</code> et l'assistant rédige le code pour vous.
|
||||
</p>
|
||||
<h3>La syntaxe de base</h3>
|
||||
<p>
|
||||
Le langage s'appelle <span class="acr" tabindex="0" data-full="Overpass Query Language" data-tip="Langage de requête de l'API Overpass, conçu pour filtrer les données OpenStreetMap.">Overpass QL</span>. Voici une requête minimale : tous les points d'eau potable visibles dans le cadre actuel de la carte.
|
||||
</p>
|
||||
<pre><code><span class="k">[out:json][timeout:25]</span>;
|
||||
<span class="c">// nwr = nodes + ways + relations ; {{bbox}} = la zone affichée</span>
|
||||
nwr[<span class="s">"amenity"</span>=<span class="s">"drinking_water"</span>]({{bbox}});
|
||||
out geom;</code></pre>
|
||||
<p>
|
||||
Trois éléments structurent presque toutes les requêtes : l'<strong>en-tête</strong> (format de sortie, délai maximal), le <strong>filtre</strong> (le tag recherché), et la <strong>zone</strong>. Le mot-clé <code>nwr</code> cherche à la fois les nœuds, les chemins et les relations. Le raccourci <code>{{bbox}}</code> (boîte englobante, ou <span class="acr" tabindex="0" data-full="bounding box" data-tip="Rectangle géographique défini par ses coins. Sert à limiter une requête à une zone, ce qui évite d'interroger la planète entière.">bbox</span>) limite la recherche à la vue courante. Toujours borner une requête à une zone, sinon vous interrogez la planète.
|
||||
</p>
|
||||
<h3>Cibler une commune précise</h3>
|
||||
<p>
|
||||
Pour viser une commune entière plutôt qu'un rectangle, on s'appuie sur sa limite administrative. En France, une commune a le niveau <code>admin_level=8</code>.
|
||||
</p>
|
||||
<pre><code><span class="k">[out:json][timeout:60]</span>;
|
||||
<span class="c">// on définit la zone "Marseille" puis on cherche dedans</span>
|
||||
area[<span class="s">"name"</span>=<span class="s">"Marseille"</span>][<span class="s">"admin_level"</span>=<span class="s">"8"</span>]->.zone;
|
||||
nwr[<span class="s">"amenity"</span>=<span class="s">"school"</span>](area.zone);
|
||||
out center;</code></pre>
|
||||
<p>
|
||||
<code>out center</code> renvoie, pour chaque chemin ou relation (une cour d'école est un chemin fermé), un point central facile à cartographier. <code>out geom</code> renvoie au contraire la géométrie complète.
|
||||
</p>
|
||||
<h3>Exporter le résultat</h3>
|
||||
<p>
|
||||
Une fois la requête exécutée, le bouton <em>Exporter</em> propose plusieurs formats selon l'usage visé.
|
||||
</p>
|
||||
<table class="tbl">
|
||||
<tr><th>Format</th><th>Pour quoi faire</th></tr>
|
||||
<tr><td><span class="acr" tabindex="0" data-full="Geographic JSON" data-tip="Format ouvert décrivant des entités géographiques en JSON. Lu par la plupart des outils cartographiques et SIG.">GeoJSON</span></td><td>Réutiliser dans uMap, QGIS, une page web Leaflet.</td></tr>
|
||||
<tr><td><span class="acr" tabindex="0" data-full="Comma-Separated Values" data-tip="Tableau texte, une ligne par objet, colonnes séparées. S'ouvre dans un tableur.">CSV</span></td><td>Faire un tableau, compter, trier dans un tableur.</td></tr>
|
||||
<tr><td><span class="acr" tabindex="0" data-full="GPS Exchange Format" data-tip="Format d'échange de points et de traces GPS.">GPX</span></td><td>Charger les points sur un GPS ou un téléphone de terrain.</td></tr>
|
||||
<tr><td><span class="acr" tabindex="0" data-full="OSM XML" data-tip="Format texte natif d'OpenStreetMap, balisé. Lu notamment par uMap et JOSM.">XML</span> / OSM</td><td>Conserver la donnée brute, l'importer dans uMap ou JOSM.</td></tr>
|
||||
</table>
|
||||
<div class="box warn">
|
||||
<span class="tag">Bon usage</span>
|
||||
Les serveurs Overpass publics sont gratuits et partagés. Bornez toujours vos requêtes (zone, <code>timeout</code>), évitez de relancer en boucle, et préférez un téléchargement d'extrait (section 6) si vous voulez des données à l'échelle d'une région entière.
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section id="nominatim">
|
||||
<h2><span class="num">05</span>Géocoder avec Nominatim</h2>
|
||||
<p>
|
||||
Nominatim est le moteur de géocodage d'OSM. Il répond à deux questions complémentaires : transformer une <strong>adresse en coordonnées</strong> (géocodage), et transformer des <strong>coordonnées en adresse</strong> (géocodage inverse). C'est ce qui alimente la barre de recherche d'<a href="https://www.openstreetmap.org/" target="_blank" rel="noopener">openstreetmap.org</a>.
|
||||
</p>
|
||||
<p>
|
||||
Pour un usage ponctuel, l'interface web <a href="https://nominatim.openstreetmap.org/" target="_blank" rel="noopener">nominatim.openstreetmap.org</a> suffit. Pour automatiser, l'API renvoie du JSON. Mais attention au cadre d'usage : l'instance publique applique une politique stricte (une requête par seconde au maximum, pas de traitement de masse, en-tête d'identification recommandé). Pour géocoder un gros fichier d'adresses, il vaut mieux installer sa propre instance ou utiliser un service dédié.
|
||||
</p>
|
||||
<div class="box info">
|
||||
<span class="tag">Astuce locale</span>
|
||||
Pour des adresses françaises, la Base Adresse Nationale (<a href="https://adresse.data.gouv.fr/" target="_blank" rel="noopener">adresse.data.gouv.fr</a>) offre un géocodeur public pensé pour le traitement par lot, complémentaire de Nominatim.
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section id="extraits">
|
||||
<h2><span class="num">06</span>Télécharger des extraits du territoire</h2>
|
||||
<p>
|
||||
Quand on veut <strong>toute</strong> la donnée d'une zone (pas une sélection), on télécharge un extrait pré-découpé plutôt que de saturer Overpass. La référence est <strong>Geofabrik</strong> (<a href="https://download.geofabrik.de/" target="_blank" rel="noopener">download.geofabrik.de</a>), qui publie des fichiers par continent, pays et région, mis à jour chaque jour.
|
||||
</p>
|
||||
<p>
|
||||
Pour notre territoire, l'extrait de la région se trouve à <a href="https://download.geofabrik.de/europe/france/provence-alpes-cote-d-azur.html" target="_blank" rel="noopener"><code>europe/france/provence-alpes-cote-d-azur</code></a>. Plusieurs formats y cohabitent : le <span class="acr" tabindex="0" data-full="Protocolbuffer Binary Format" data-tip="Format binaire compact d'OpenStreetMap, devenu le standard pour les données brutes. Léger et rapide à traiter.">PBF</span> (compact, à privilégier), le format OSM XML, des fichiers <em>shapefile</em> et GeoPackage directement exploitables en <span class="acr" tabindex="0" data-full="Système d'Information Géographique" data-tip="Logiciel d'analyse et de cartographie de données géographiques, par exemple QGIS.">SIG</span>.
|
||||
</p>
|
||||
<div class="box warn">
|
||||
<span class="tag">Protection des données</span>
|
||||
Les extraits publics Geofabrik <strong>ne contiennent pas</strong> les noms d'utilisateur, identifiants et numéros de <em>changeset</em> des contributeurs : ces champs sont retirés au titre du <span class="acr" tabindex="0" data-full="Règlement Général sur la Protection des Données" data-tip="Cadre européen de protection des données personnelles. Justifie ici le retrait des identifiants de contributeurs des extraits publics.">RGPD</span>. Les données complètes sont réservées aux contributeurs identifiés, sur un serveur séparé.
|
||||
</div>
|
||||
<p>
|
||||
Besoin d'une zone sur mesure, plus fine qu'une région (juste Marseille et ses environs) ? Le service <strong>BBBike</strong> (<a href="https://extract.bbbike.org/" target="_blank" rel="noopener">extract.bbbike.org</a>) permet de découper un rectangle ou un polygone à la demande, dans une longue liste de formats. Côté communauté française, <strong>OpenStreetMap France</strong> (<a href="https://www.openstreetmap.fr/" target="_blank" rel="noopener">openstreetmap.fr</a>) recense ces ressources et propose des conseils d'usage.
|
||||
</p>
|
||||
<table class="tbl">
|
||||
<tr><th>Outil pour exploiter l'extrait</th><th>Usage</th></tr>
|
||||
<tr><td>QGIS</td><td>Ouvrir, filtrer, croiser avec d'autres couches, cartographier.</td></tr>
|
||||
<tr><td>Osmium / osmosis</td><td>Découper, filtrer, convertir un gros fichier PBF en ligne de commande.</td></tr>
|
||||
<tr><td><span class="acr" tabindex="0" data-full="Java OpenStreetMap editor" data-tip="Éditeur OSM avancé, hors navigateur. Sert aussi à inspecter finement un fichier de données.">JOSM</span></td><td>Inspecter en détail et, le cas échéant, contribuer en retour.</td></tr>
|
||||
</table>
|
||||
</section>
|
||||
|
||||
<section id="visualiser">
|
||||
<h2><span class="num">07</span>Visualiser et analyser</h2>
|
||||
<p>
|
||||
Extraire la donnée n'est qu'une étape : il faut ensuite la donner à voir. Deux outils libres couvrent l'essentiel des besoins citoyens.
|
||||
</p>
|
||||
<h3>uMap, la carte partageable</h3>
|
||||
<p>
|
||||
<strong>uMap</strong> (<a href="https://umap.openstreetmap.fr/" target="_blank" rel="noopener">umap.openstreetmap.fr</a>, porté par OSM France) permet de créer une carte personnalisée en quelques minutes, d'y importer un fichier GeoJSON ou OSM issu d'Overpass, de styliser les points, puis de partager ou d'intégrer la carte dans un site. Fonction avancée utile : une <strong>requête Overpass dynamique</strong> peut alimenter un calque qui se met à jour selon la zone affichée, ce qui garde la carte synchronisée avec OSM sans recopier les données.
|
||||
</p>
|
||||
<h3>QGIS, l'analyse approfondie</h3>
|
||||
<p>
|
||||
Pour croiser des couches (par exemple : écoles OSM et découpage par secteur, ou densité d'équipements par quartier), <strong>QGIS</strong> est l'outil de référence. Il lit directement les extraits Geofabrik et le GeoJSON exporté d'Overpass, et permet des analyses spatiales qu'aucune carte web ne fait.
|
||||
</p>
|
||||
<div class="box info">
|
||||
<span class="tag">Chaîne type</span>
|
||||
Une chaîne de travail courante : <strong>Overpass Turbo</strong> pour cibler et exporter en GeoJSON, puis <strong>uMap</strong> pour publier une carte lisible par tous, ou <strong>QGIS</strong> pour une analyse plus poussée.
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section id="licence">
|
||||
<h2><span class="num">08</span>Respecter la licence ODbL</h2>
|
||||
<p>
|
||||
Les données OSM sont publiées sous la licence <span class="acr" tabindex="0" data-full="Open Database License" data-tip="Licence libre dédiée aux bases de données : attribution obligatoire et partage à l'identique des bases dérivées.">ODbL</span> 1.0 (depuis le 12 septembre 2012, en remplacement de l'ancienne <span class="acr" tabindex="0" data-full="Creative Commons Attribution Share-Alike" data-tip="Ancienne licence d'OpenStreetMap, utilisée avant le passage à l'ODbL.">CC-BY-SA</span>). Vous pouvez utiliser ces données pour n'importe quel usage, y compris commercial, gratuitement. En échange, deux obligations.
|
||||
</p>
|
||||
<h3>1. Attribuer</h3>
|
||||
<p>
|
||||
Toute production publiée à partir de données OSM doit créditer la source. La mention attendue est <strong>« © les contributeurs d'OpenStreetMap »</strong>, idéalement avec un lien vers <a href="https://www.openstreetmap.org/copyright" target="_blank" rel="noopener"><code>openstreetmap.org/copyright</code></a>, et l'indication que les données sont disponibles sous ODbL. Sur une carte interactive, ce crédit figure traditionnellement dans un coin.
|
||||
</p>
|
||||
<h3>2. Partager à l'identique (pour les bases dérivées)</h3>
|
||||
<p>
|
||||
Si vous créez une <strong>base de données dérivée</strong> (vous filtrez, enrichissez ou recombinez la donnée OSM), et que vous la diffusez publiquement, cette base dérivée doit elle aussi être disponible sous ODbL. En revanche, une simple <em>oeuvre produite</em> (une carte, une image, un article illustré) n'impose que l'attribution, pas le partage des données.
|
||||
</p>
|
||||
<div class="box good">
|
||||
<span class="tag">Usage interne</span>
|
||||
L'ODbL ne s'applique qu'à l'usage <strong>public</strong>. Un travail d'analyse purement interne au collectif (non diffusé) n'impose aucune obligation. Le texte complet de la licence est sur <a href="https://opendatacommons.org/licenses/odbl/1.0/" target="_blank" rel="noopener">opendatacommons.org/licenses/odbl/1.0</a>.
|
||||
</div>
|
||||
<div class="box warn">
|
||||
<span class="tag">Sens inverse</span>
|
||||
Attention à ne pas alimenter OSM à partir de sources fermées (cartes ou photos aériennes sous droits) : seules des sources libres ou compatibles peuvent servir de référence à une contribution. La transparence vaut dans les deux sens.
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section id="pratique">
|
||||
<h2><span class="num">09</span>Cas pratique : recenser un équipement à Marseille</h2>
|
||||
<p>
|
||||
Objectif : produire la liste et la carte des écoles d'une commune, depuis zéro, en réutilisable. Le tag pour décrire les écoles est <code>amenity=school</code> (qui couvre la maternelle au secondaire).
|
||||
</p>
|
||||
<ol class="steps">
|
||||
<li>
|
||||
<strong>Vérifier le tag.</strong>
|
||||
Sur <a href="https://www.openstreetmap.org/" target="_blank" rel="noopener">openstreetmap.org</a>, activer <em>Interroger les fonctionnalités</em>, cliquer sur une école connue, confirmer qu'elle porte bien <code>amenity=school</code> (et noter au passage les tags utiles : <code>name</code>, <code>operator</code>, <code>addr:street</code>).
|
||||
</li>
|
||||
<li>
|
||||
<strong>Écrire la requête.</strong>
|
||||
Ouvrir <a href="https://overpass-turbo.eu/" target="_blank" rel="noopener">overpass-turbo.eu</a> et coller la requête ci-dessous, qui cible la commune entière par sa limite administrative.
|
||||
<pre><code><span class="k">[out:json][timeout:60]</span>;
|
||||
area[<span class="s">"name"</span>=<span class="s">"Marseille"</span>][<span class="s">"admin_level"</span>=<span class="s">"8"</span>]->.zone;
|
||||
nwr[<span class="s">"amenity"</span>=<span class="s">"school"</span>](area.zone);
|
||||
out center;</code></pre>
|
||||
</li>
|
||||
<li>
|
||||
<strong>Exécuter et inspecter.</strong>
|
||||
Lancer (bouton <em>Exécuter</em>). Les écoles s'affichent sur la carte. Vérifier la cohérence visuelle (densité, absences évidentes) avant de réutiliser : la base est collaborative, donc perfectible, et c'est aussi une invitation à compléter ce qui manque.
|
||||
</li>
|
||||
<li>
|
||||
<strong>Exporter en GeoJSON.</strong>
|
||||
Menu <em>Exporter</em>, format GeoJSON. Vous obtenez un fichier réutilisable. Pour un tableau dénombrable, exporter aussi en CSV.
|
||||
</li>
|
||||
<li>
|
||||
<strong>Publier une carte.</strong>
|
||||
Dans uMap, créer une carte, importer le GeoJSON, styliser les points, ajouter un titre et la mention de licence, puis partager le lien ou intégrer la carte dans une page.
|
||||
</li>
|
||||
<li>
|
||||
<strong>Créditer la source.</strong>
|
||||
Sur la carte et dans l'article, afficher <strong>« © les contributeurs d'OpenStreetMap, ODbL »</strong> avec le lien vers la page de copyright. Obligation remplie, réutilisation propre.
|
||||
</li>
|
||||
</ol>
|
||||
<div class="box info">
|
||||
<span class="tag">Variantes utiles</span>
|
||||
Remplacez <code>amenity=school</code> par <code>amenity=drinking_water</code> (points d'eau), <code>emergency=defibrillator</code> (défibrillateurs), ou <code>amenity=bench</code> avec <code>wheelchair=yes</code> (accessibilité) pour décliner la même méthode sur d'autres équipements publics.
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section id="lexique">
|
||||
<h2><span class="num">10</span>Lexique</h2>
|
||||
<div class="lex-grid">
|
||||
<div class="lex-item"><div class="lex-sigle">OSM</div><div class="lex-def">OpenStreetMap. Base de données géographique mondiale, libre et collaborative.</div></div>
|
||||
<div class="lex-item"><div class="lex-sigle">ODbL</div><div class="lex-def">Open Database License. Licence libre des données OSM : attribution et partage à l'identique des bases dérivées.</div></div>
|
||||
<div class="lex-item"><div class="lex-sigle">CC-BY-SA</div><div class="lex-def">Creative Commons Attribution Share-Alike. Ancienne licence d'OSM, avant l'ODbL.</div></div>
|
||||
<div class="lex-item"><div class="lex-sigle">Overpass QL</div><div class="lex-def">Langage de requête de l'API Overpass, pour filtrer les données par critères.</div></div>
|
||||
<div class="lex-item"><div class="lex-sigle">bbox</div><div class="lex-def">Bounding box. Rectangle géographique qui borne une requête à une zone.</div></div>
|
||||
<div class="lex-item"><div class="lex-sigle">GeoJSON</div><div class="lex-def">Format ouvert décrivant des entités géographiques en JSON, lu par la plupart des outils.</div></div>
|
||||
<div class="lex-item"><div class="lex-sigle">CSV</div><div class="lex-def">Comma-Separated Values. Tableau texte qui s'ouvre dans un tableur.</div></div>
|
||||
<div class="lex-item"><div class="lex-sigle">GPX</div><div class="lex-def">GPS Exchange Format. Échange de points et de traces GPS.</div></div>
|
||||
<div class="lex-item"><div class="lex-sigle">XML / OSM</div><div class="lex-def">Format texte natif d'OpenStreetMap, balisé. Lu par uMap et JOSM.</div></div>
|
||||
<div class="lex-item"><div class="lex-sigle">PBF</div><div class="lex-def">Protocolbuffer Binary Format. Format binaire compact, standard pour les données brutes.</div></div>
|
||||
<div class="lex-item"><div class="lex-sigle">SIG</div><div class="lex-def">Système d'Information Géographique. Logiciel d'analyse et de cartographie, par exemple QGIS.</div></div>
|
||||
<div class="lex-item"><div class="lex-sigle">JOSM</div><div class="lex-def">Java OpenStreetMap editor. Éditeur OSM avancé, hors navigateur.</div></div>
|
||||
<div class="lex-item"><div class="lex-sigle">RGPD</div><div class="lex-def">Règlement Général sur la Protection des Données. Justifie le retrait des identifiants de contributeurs des extraits publics.</div></div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section id="plus">
|
||||
<h2><span class="num">11</span>Pour aller plus loin</h2>
|
||||
<div class="links">
|
||||
<a href="https://www.openstreetmap.org/copyright" target="_blank" rel="noopener"><b>openstreetmap.org/copyright</b><span>La page de référence sur la licence et l'attribution.</span></a>
|
||||
<a href="https://overpass-turbo.eu/" target="_blank" rel="noopener"><b>overpass-turbo.eu</b><span>Interface web pour écrire et tester des requêtes Overpass.</span></a>
|
||||
<a href="https://wiki.openstreetmap.org/wiki/FR:Overpass_API/Language_Guide" target="_blank" rel="noopener"><b>Guide du langage Overpass QL (wiki OSM)</b><span>Documentation complète de la syntaxe, en français.</span></a>
|
||||
<a href="https://taginfo.openstreetmap.org/" target="_blank" rel="noopener"><b>taginfo.openstreetmap.org</b><span>Le dictionnaire des tags réellement utilisés dans la base.</span></a>
|
||||
<a href="https://download.geofabrik.de/europe/france/provence-alpes-cote-d-azur.html" target="_blank" rel="noopener"><b>Geofabrik, extrait PACA</b><span>Téléchargement quotidien de la donnée régionale.</span></a>
|
||||
<a href="https://umap.openstreetmap.fr/" target="_blank" rel="noopener"><b>umap.openstreetmap.fr</b><span>Créer et partager une carte personnalisée (OSM France).</span></a>
|
||||
<a href="https://www.openstreetmap.fr/donnees/" target="_blank" rel="noopener"><b>OpenStreetMap France, page Données</b><span>Ressources et conseils de la communauté francophone.</span></a>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
</main>
|
||||
|
||||
<footer>
|
||||
<div class="wrap">
|
||||
<p><strong>Formations Donut</strong>, une production de l'association Le Donut Marseille, InfoLab citoyen pour la littératie des données ouvertes et la transparence de l'action publique locale.</p>
|
||||
<p>Formation pédagogique et autonome. Les outils, adresses et seuils mentionnés sont valables à la date de rédaction ; vérifiez les sources officielles avant une réutilisation engageante.</p>
|
||||
<div class="attrib">
|
||||
Cette formation traite de données issues d'OpenStreetMap. Toute réutilisation de ces données doit mentionner <strong>© les contributeurs d'OpenStreetMap</strong>, sous licence ODbL (<a href="https://www.openstreetmap.org/copyright" target="_blank" rel="noopener">openstreetmap.org/copyright</a>).
|
||||
</div>
|
||||
</div>
|
||||
</footer>
|
||||
|
||||
<div id="tip" role="tooltip"></div>
|
||||
|
||||
<script>
|
||||
(function(){
|
||||
// Barre de progression
|
||||
var bar = document.getElementById('progress');
|
||||
function onScroll(){
|
||||
var h = document.documentElement;
|
||||
var scrolled = h.scrollTop / (h.scrollHeight - h.clientHeight);
|
||||
bar.style.width = (scrolled * 100) + '%';
|
||||
}
|
||||
window.addEventListener('scroll', onScroll, {passive:true});
|
||||
onScroll();
|
||||
|
||||
// Infobulles d'acronymes (souris + clavier)
|
||||
var tip = document.getElementById('tip');
|
||||
var current = null;
|
||||
|
||||
function place(el){
|
||||
var r = el.getBoundingClientRect();
|
||||
requestAnimationFrame(function(){
|
||||
var tw = tip.offsetWidth, th = tip.offsetHeight;
|
||||
var left = r.left + r.width/2 - tw/2;
|
||||
var top = r.top - th - 10;
|
||||
if(top < 8){ top = r.bottom + 10; }
|
||||
if(left < 8){ left = 8; }
|
||||
if(left + tw > window.innerWidth - 8){ left = window.innerWidth - tw - 8; }
|
||||
tip.style.left = left + 'px';
|
||||
tip.style.top = top + 'px';
|
||||
});
|
||||
}
|
||||
|
||||
function show(el){
|
||||
var full = el.getAttribute('data-full') || '';
|
||||
var def = el.getAttribute('data-tip') || '';
|
||||
tip.innerHTML = '<b>' + full + '</b>' + def;
|
||||
tip.classList.add('on');
|
||||
current = el;
|
||||
place(el);
|
||||
}
|
||||
function hide(){
|
||||
tip.classList.remove('on');
|
||||
current = null;
|
||||
}
|
||||
|
||||
document.querySelectorAll('.acr').forEach(function(el){
|
||||
el.addEventListener('mouseenter', function(){ show(el); });
|
||||
el.addEventListener('mouseleave', hide);
|
||||
el.addEventListener('focus', function(){ show(el); });
|
||||
el.addEventListener('blur', hide);
|
||||
});
|
||||
window.addEventListener('scroll', function(){ if(current) place(current); }, {passive:true});
|
||||
document.addEventListener('keydown', function(e){ if(e.key === 'Escape') hide(); });
|
||||
})();
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
Reference in New Issue
Block a user