Requête pour extraire des données avec leur département

Bonjour, je souhaiterais extraire des données (éoliennes) avec leur numéro de département. Est-ce possible avec overpass ?
Merci d’avance

En principe, c’est possible. Dans la collection d’exemples Overpass, on trouve des requêtes comparables: Overpass API/Overpass API by Example - OpenStreetMap Wiki

2 Likes

Voir aussi les exemples données par Antoine Riche au dernier SOTM-FR, il a fait des trucs approchants :

2 Likes

Malheureusement, je ne trouve que des captures d’écran dans la présentation, et je ne suis pas assez motivé pour taper tout cela. Est-ce que les requêtes sont disponible aussi comme overpass turbo link? merci d’avance!

La requête qui va bien avec export en format CSV : overpass turbo
Pour ceux qui ont la flemme de cliquer, voilà ce que ça donne :

[out:csv(id_osm, lat, lon, departement, name, ref, loc_ref, height, operator, "generator:output:electricity", "generator:type", manufacturer, model, "start_date", url; true; "|")]
[timeout:50];
area[admin_level=2][name="France"]->.searchArea;

relation["boundary"="administrative"]["admin_level"="6"](area.searchArea);
foreach->.dept {
    .dept map_to_area -> .dept_a;
    nwr["power"="generator"]["generator:source"="wind"](area.dept_a) -> .eoliennes;
    .eoliennes convert Feature
        id_osm = id(),
  		lat = lat(),
  		lon = lon(),
        :: = ::,
        departement = dept.u(t["name"]),
  		url = "https://www.osm.org/" + type()+'/'+id();
    out;
};

En cadeau bonus, j’ai mis l’url vers chaque objet sur OSM. Idée piquée à Antoine, merci à lui !

2 Likes

Merci beaucoup, c’est parfait. Je vais prendre quelques minutes/heures pour décortiquer la requête :wink:

1 Like

Oui j’aurai pu développer quelques explications.
out:csv avec la liste des colonnes séparées par des virgules; true pour demander l’en-tête en 1ère ligne; le séparateur de champ
Pour le séparateur je préfère | pour éviter les problèmes posés par les , et ; qui pourrait traîner dans les tags OSM.
foreach parcourt chaque département un par un en les mettant dans la variable dept
On transforme la relation département en area avec map_to_area
On utilise cette area pour chercher toutes les éoliennes du département.
On utilise convert pour « convertir » les résultats en créant les champs cités dans le out:csv
On créé les champs id, lat et lon avec les fonctions correspondantes
:: = :: sert à récupérer tous les tags des résultats
On va chercher le nom du département avec la variable dept. u() sert à dire qu’on veut afficher la valeur unique possible (et pas la liste pour chaque éolienne)
Et on construit l’url avec la technique brevetée Antoine. :wink:

2 Likes

Top ! Par contre, la requête me retourne un nombre variable d’éoliennes (4685 ou 4915 - ou encore 6958 en augmentant le time-out à 70). Je teste en augmentant encore le timeout

Ah oui monte le timeout sur la France entière ça peut être un poil long. J’avais testé au départ juste sur l’Occitanie. Par contre ça m’étonne que ça puisse ne renvoyer qu’un résultat partiel. Ça devrait planter si le timeout est dépassé normalement.