Calculer le linéaire de voirie d’une commune avec OpenStreetMap et QGIS

qgiscc1

Explications par la pratique.

Nous allons nous baser sur la commune de Saint-Avold.

1. Récupérer les limites de la commune

On ouvre le site Overpass-turbo qui sert à interroger les données d’OSM. On cherche Saint-Avold et on s’arrange pour avoir toute la commune (et même un peu plus, pour être tranquille) à l’écran.

Ensuite, il faut utiliser un langage assez complexe faute d’interface graphique élaborée.

On obtient les limites administratives de Saint-Avold avec la requête suivante :

(
    rel[name="Saint-Avold"];

);
(._;>;);
out;

Ensuite, on exporte le résultat au format GeoJSON.

2. Récupérer la voirie de la commune

Toujours depuis Overpass-turbo, et en gardant la même zone affichée à l’écran, on va récupérer toute la voirie.

La requête est la suivante :

{{key=highway}}
<osm-script output="json">
  <union>
    <query type="node">
      <has-kv k="{{key}}"/>
      <bbox-query {{bbox}}/>
    </query>
    <query type="way">
      <has-kv k="{{key}}"/>
      <bbox-query {{bbox}}/>
    </query>
    <query type="relation">
      <has-kv k="{{key}}"/>
      <bbox-query {{bbox}}/>
    </query>
  </union>
  <print mode="body"/>
  <recurse type="down"/>
  <print mode="skeleton"/>
</osm-script>

À nouveau, on exporte le résultat au format GeoJSON.

3. Ajouter les données dans QGIS

On ouvre QGIS et on ajoute les deux fichiers en tant que couche vecteur.

Note : Au moment de l’import, QGIS demande si l’on veut afficher les points, les lignes ou les polygones présents dans les fichiers.

Pour les limites de la commune, choisir le polygone, tandis qu’il faudra choisir les lignes pour la voirie.

4. Extraire la voirie communale

Menu Vecteur, puis Outils de géotraitement, puis Découper. La couche de saisie doit être celle de la voirie, et la couche de découpe celle du polygone des limites. Ajouter le fichier obtenu à la carte.

Comme on ne veut que la voirie communale, on va ouvrir la table attributaire de la couche de voirie obtenue et la trier selon le champ « ref ». Cela permet de sélectionner facilement, à la main, toutes les voiries qui sont référencées comme des nationales, départementales, autoroutes… Ensuite, sans désélectionner, on trie la table sur le champ « highway » et on sélectionne encore tous les trunk, trunk_link, motorway_link et steps, puis on trie sur le champ « access » pour sélectionner tout ce qui est private.

Puis, on inverse la sélection afin d’obtenir la voirie communale publique. Reste à l’exporter en faisant un clic droit sur la couche puis sauvegarder la sélection sous. Sélectionner la projection Lambert 93, car la projection WGS84 posera des problèmes pour calculer les longueurs. Ajouter la couche exportée à la carte.

Note : J’aurais pu faire ça à coup de requêtes, mais parfois la sélection à la main va largement plus vite. Et elle est compréhensible du néophyte.

5. Calculer la longueur

Ouvrir la table attributaire de la couche de voirie communale, et passer en mode édition. À l’aide de la calculatrice de champs, créer un champ longueur (nombre réel). Entrer comme expression de calcul $length.

On connaît désormais la longueur de chaque tronçon.

Il est maintenant facile de connaître la longueur du réseau à l’aide de l’outil Vecteur, Outils d’analyse, Statistiques basiques. Associé à des sélections qui vont bien, cet outil permet de savoir que :

Saint-Avold comporte donc, d’après OpenStreetMap, 180 km de voirie communale dont :
- 359m de piste cyclable.
- 32 km de chemins piétons.
- 50 km d’autres chemins carrossables.
- 96 km de rues proprement dites.

Notes :

Évidemment, ces chiffres sont dépendants de la qualité de la cartographie d’OpenStreetMap. Mais si l’on compare avec d’autres cartes, la commune semble plutôt bien cartographiée donc l’ordre de grandeur doit être tout à fait correct. Sauf en ce qui concerne la piste cyclable car, même si Saint-Avold ne brille pas par la qualité de ses aménagements, il semble y en avoir un peu plus que cela.

Ce contenu a été publié dans Astuces, Informatique. Vous pouvez le mettre en favoris avec ce permalien.

14 réponses à Calculer le linéaire de voirie d’une commune avec OpenStreetMap et QGIS

  1. Etienne dit :

    Avec le wizard d’OverpassTurbo, on obtient directement la voirie de Saint-Arold avec çà :
    highway in ‘Saint-Avold’

    • Adrien dit :

      Ah ouais ? Le problème d’Overpass Turbo, c’est qu’on dirait qu’il y a un langage très complet qui permet de faire beaucoup de choses, mais je n’ai jamais pu trouver une doc nulle part !

      Du coup, je me contente d’extraire des données très générales en adaptant la syntaxe des exemples qu’ils donnent, et ensuite j’utilise QGIS car avec lui je fais ce que je veux.

      Tu sais où on la trouve ?

    • Adrien dit :

      Ah, super. Merci.

      Une remarque : utilise la fonction « répondre » directement sous le commentaire auquel tu réponds. Cela fait de jolis fils de discussion. :-)

  2. Mathias dit :

    Bonjour,

    Merci beaucoup Adrien pour cette méthode ! Je travail au sein d’une association d’usagers du vélo et je vais recenser l’ensemble des aménagements dédier au cycliste pour 20 villes de l’Oise. (linéaire de voirie, stationnement vélo, carrefour aménagé.).
    Travailler via le linéaire de Openstreetmap va nous permettre de quantifier le liénaire cyclable, sans passer par la BDTOPO, impossible à obtenir. c’est grosso-modo ce que tu expliques dans un autre article.

    Seulement je me rend compte que le linéaire obtenue via cette méthode ne correspond pas toujours à la « réalité’ lorsque je le compare avec Géoportail. Le linéaire semble en effet étiré d’est en ouest. Je l’ai passé sous L1, L93 mais cela ne change rien.

    As tu déjà fait ce constat? As tu une idée de comment redresser ce linéaire?

    Bien à toi,

    Mathias

    • Adrien dit :

      Oui, en Lambert 93 l’aspect est étiré sur l’écran. Mais c’est juste une question de projection. Ça n’a pas d’importance dans le calcul. Justement, je recommande Lambert 93 car cette projection me donnait des chiffres corrects.

      Pour que l’aspect ne soit plus étiré, il suffit d’activer la projection à la volée dans QGIS et d’ajouter une couche raster en WGS84 (par exemple, OpenStreetMap avec le plugin OpenLayers). Comme ça, le linéaire extrait va se re-caler sur la carte OSM.

      Mais ça ne change rien au calcul.

      Ou alors je suis moi-même passé à côté d’un truc.

      • Mathias dit :

        Bonjour,

        Merci, suite à tes précisions. J’ai continué à regarder et effectivement, il y a bien une différence entre la projection et les données de la table attributaire.
        Les données de la table attributaire correspondent donc au donnée relevé sur Géoportail, tandis que les mesures faites sur la projection sont exagérées.
        La table est donc exploitable! ouf! :)

  3. cardineau dit :

    Bonjour,
    J’essai de rechercher le linéaire de la voirie et chemins de ma commune( Monthoiron).
    Une erreur m’est annoncée au niveau de la requête de recherche de la voirie sue la ligne :.
    Pourriez vous m’aider. Je ne connais pas ce langage.
    Merci.

    • Mathias dit :

      Salut,

      J’ai trouvé une requête avec taginfo.

      Dans Overpass turbo tu zoom sur le secteur que tu souhaites cartographier et tu copie cette requête dans le cadre à gauche.

      /*
      This query looks for nodes, ways or relations
      with the given key.
      Choose your region and hit the Run button above!
      */
      [out:json][timeout:25];
      // gather results
      (
      // query part for: “highway=*”
      way["highway"]({{bbox}});
      );
      // print results
      out body;
      >;
      out skel qt;

  4. Mathias dit :

    Bonjour,

    Bonne année à tous et merci Adrien pour tes excellents conseils !

    Comme l’a souligné Cardineau, la requête bloque désormais à la ligne 8 et 27.

    Mathias

  5. Martin dit :

    Bonjour,

    Lorsque j’en suis à la méthode 5 de la méthode décrite (ouvrir la table attributaire, mode édition, calculatrice de champs, $length), la valeur attributaire « length » apparaît calculée correctement, mais dès lors que j’enregistre ou quitte le mode édition, les valeurs changent et la plupart affichent désormais « 0″.

    Ainsi je ne peux pas calculer la longueur totale de la voirie…

    J’imagine que je dois me tromper quelque part dans la manip… Ce problème vous est-il déjà arrivé? (Je suis relativement nouveau sur QGis!)

    Merci d’avance,

    Martin

    • Adrien dit :

      Ça doit être un problème de typage de champ. Il faut bien créer un champ de type nombre réel.

      Si ce n’est pas ça, alors il est possible que le fichier sur lequel vous êtes en train de travailler soit en lecture seule ou dans un format que QGIS ne sait pas modifier correctement. Quand vous exportez les données au point 4, choisissez bien le format de fichier shapefile. J’ai oublié de le préciser.

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Vous pouvez utiliser ces balises et attributs HTML : <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>