Julien Fastré
10 février 2021
Permet de générer des cartes…
… de calculer des itinéraires …
… de géocoder / reverse geocoder …
… d’analyser le territoire …
OSM Foundation
Local Chapters
En Belgique: osmbe
Gamification sur Android: StreetComplete
Vous êtes libres de:
Aussi longtemps que:
Les œuvres créées à partir de la base de donnée peuvent être distribuées sous une licence plus restrictive ou propriétaire.
Exemples: cartes, applications, etc.
.pbf
ou XML (.osm
);Téléchargement depuis l’api
Surface limitée
https://download.bbbike.org/osm/
Sélection d’une aire spécifique sur la carte.
Exports par pays / région. Mises à jour quotidienne.
Formats:
.osm
(xml).pbf
(protocol buffer)Possibilité de s’authentifier => accès à l’username et userid
Question: n’y a-t-il pas plus simple ?
Lecture des données OSM;
Optimisé pour la requête;
Langage de requête dédié;
Permet de travailler avec les données historiques;
Licence AGPLv3.0;
Plusieurs instances publiques:
Soit en XML;
Soit Overpass-QL
Langage procédural, impératif.
[out:json][timeout:900];
area["name"="Liège"]->.sa;
nw["amenity"="restaurant"](area.sa);
out;
{
"version": 0.6,
"generator": "Overpass API 0.7.56.8 7d656e78",
"osm3s": {
"timestamp_osm_base": "2021-02-05T14:16:03Z",
"timestamp_areas_base": "2021-02-05T13:44:03Z",
"copyright": "The data included in this document is from www.openstreetmap.org. The data is made available under ODbL."
},
"elements": [
{
"type": "node",
"id": 254279248,
"lat": 50.6260055,
"lon": 6.2347182,
"tags": {
"addr:city": "Raeren",
"addr:country": "BE",
"addr:housenumber": "2",
"addr:postcode": "4730",
"addr:street": "Fringshaus",
"amenity": "restaurant",
"cuisine": "regional",
"name": "Fringshaus"
}
}, // ...
]}
Interface pour construire des requêtes Overpass QL
Si le premier et le dernier nœud d’un way sont identiques, le way est considéré comme un area (mais, dans le modèle, il s’agit d’un way).
(Coût en calcul important)
Les relations sont utilisées pour, par exemple:
relier les routes dans un itinéraire:
relier des équipements entre eux:
créer des objets complexes: multipolygones
Les identifiants diffèrent pour les nodes
, way
, relation
;
Les identifiants sont modifiés en cas de:
amenity=bicycle_parking
bicycle_parking=stands
capacity=8
operator=Ville de Bruxelles
covered=no
Les tags sont pré-sélectionnés dans les interfaces graphiques.
Quelques possibilités de requêtes.
Relation “Université de Liège” (multipolygone):
[out:json][timeout:25];
rel(1376343);
out body geom;
Sélection par éléments du modèle:
//sélection d'un chemin
way(int);
// sélection d'un noeud
node(int) ;
//sélection d'une relation
rel(int) ;
BBOX = Boîte englobante, 4 coordonnées: sud, ouest, nord, est
node(44.0918, 6.2356790, 44.09231, 6.2362690);
out skel;
Outil pour générer des bbox: http://bboxfinder.com
[out:json][timeout:900];
area["name"="Liège"]->.sa;
// la parenthèse crée une union des différents éléments
(
// sélection des nœuds
node["amenity"="restaurant"](area.sa);
// sélection des chemins
way["amenity"="restaurant"](area.sa);
)
out;
// sélection pour nodes and way
nw["amenity"="restaurant"];
// séleciton pour nodes et relations
nr["amenity"="restaurant"];
// sélection pour way et relations
wr["amenity"="restaurant"];
// sélection des way, relations et nodes
nwr["amenity"="restaurant"];
//équivalent
way[highway=pedestrian];
way["highway"="pedestrian"];
// chemins qui n'ont *pas* le tag pedestrian
way[highway!=pedestrian];
// (sélectionne aussi ceux qui ne sont pas des highway)
// sélectionne les chemins qui ont le tag highway
way[highway];
// sélection selon expression régulière
way[name~"^Rue"]; // tout ce qui commence par "Rue"
Combiner des filtres:
// gather results
way["amenity"="bicycle_parking"]["bicycle_parking"="stands"](area.searchArea);
Les zones administratives sont définies par les limites administratives (très souvent des multipolygones
dans OSM):
// Province de Liège :-(
area["name"="Liège"]->.sa;
// peut être géocodée:
{{geocodeArea:"Liege"}}->.searchArea;
Les barbecues proches d’une aire de pique-nique:
[out:json][timeout:250];
// fetch area “Province de Liège” to search in
{{geocodeArea:"Province de Liège"}}->.searchArea;
// rassembler aires de pique-nique dans une variable (.a)
(
node["tourism"="picnic_site"](area.searchArea);
way["tourism"="picnic_site"](area.searchArea);
)->.a;
// chercher les barbecues non-privés à moins de 500 mètres
(
node(around.a:500)["amenity"="bbq"]["access"!="private"]["access"!="no"];
way(around.a:500)["amenity"="bbq"]["access"!="private"]["access"!="no"];
);
// print results
out body;
>;
out skel qt;
// Select nodes last modified by user
node(user:"juminet")({{bbox}});
Liste des musées en province de Liège:
[out:csv( name, fee, wheelchair, "addr:housenumber", "addr:postcode", "addr:street", ::"lat", ::"lon" )];
{{geocodeArea:Province de Liège}}->.searchArea;
(
// query part for: “tourism=museum”
node["tourism"="museum"](area.searchArea);
way["tourism"="museum"](area.searchArea);
relation["tourism"="museum"](area.searchArea);
);
// sortie: les méta-données et le centre de chaque objet
out meta center;
name fee wheelchair addr:housenumber addr:postcode addr:street @lat @lon
Préhistosite de Ramioul 50.5786075 5.4268272
Musee de Moresnet 50.7213483 5.9888327
Archéoforum yes limited 50.6452983 5.5732626
Remember 39-45 50.6688706 5.8840043
Musée de Fléron 50.6109969 5.6797217
Charbonnage de Blegny-Mine 50.6863350 5.7226648
Ikob -Internationales Kunstzentrum Ostbelgien 3 4700 Loten 50.6258969 6.0301564
Mö(h)renmuseum 50.6918624 6.1057144
Töpfereimuseum Raeren 50.6787456 6.1206606
Uniquement avec Overpass-Turbo:
[out:json][timeout:25];
// gather results
(
way["highway"](area:3081749435);
);
// print results
out body;
>;
out skel qt;
{{style:
way {
text: surface;
}
}}
[out:json][timeout:25];
// gather results
(
// query part for: “maxspeed"
way["maxspeed"="20"]({{bbox}});
relation["maxspeed"="20"]({{bbox}});
way["maxspeed"="30"]({{bbox}});
relation["maxspeed"="30"]({{bbox}});
way["maxspeed"="signals"]({{bbox}});
relation["maxspeed"="signals"]({{bbox}});
// query part for: “maxspeed=50”
way["maxspeed"="50"]({{bbox}});
relation["maxspeed"="50"]({{bbox}});
way["maxspeed:forward"="50"]({{bbox}});
relation["maxspeed:forward"="50"]({{bbox}});
way["maxspeed:backward"="50"]({{bbox}});
relation["maxspeed:backward"="50"]({{bbox}});
way["maxspeed"="70"]({{bbox}});
relation["maxspeed"="70"]({{bbox}});
way["maxspeed"="90"]({{bbox}});
relation["maxspeed"="90"]({{bbox}});
way["maxspeed"="120"]({{bbox}});
relation["maxspeed"="120"]({{bbox}});
// query part for "amenity=school"
way["amenity"="school"]({{bbox}});
way["amenity"="kindergarten"]({{bbox}});
way["amenity"="college"]({{bbox}});
//relation["amenity"="school"]({{bbox}});
);
{{style:
way[amenity]{
width:0;
fill-color: #ff0000;
}
way[highway] {
width: 3;
opacity: 1;
color: #B5B6A5;
}
way[maxspeed=signals] {
color: #5d72d8;
}
way[maxspeed=20] {
color: #8A2BE2;
}
way[maxspeed=30] {
color: #5d72d8;
}
way[maxspeed=50] {
color: #00ff00;
}
way[maxspeed:forward=50] {
color: #00ff00;
}
way[maxspeed:backward=50] {
color: #00ff00;
}
way[maxspeed=70] {
color: #ffa500;
}
way[maxspeed=90] {
color: #ff0000;
}
way[maxspeed=120] {
color: #000000;
}
way:placeholder {
fill-opacity: 0;
opacity: 5;
width: 1;
}
}}
// print results
out body;
>;
out skel qt;
[out:csv(::count)][timeout:900];
area["name"="Liège"]->.sa;
nw["addr:housenumber"](area.sa);
out count;
Une requête Overpass peut servir de source de donnée sur une carte umap.
Des questions ?
Comment les exploiter ?
Osmosis (Java, en mode “light-maintenance mode”)
Permet un filtre par bbox ou par polygone, l’import dans une DB
imposm et osm2pgsql
Import et mise à jour d’une BDD Postgis, orienté rendu carto.