Lo Furòl

... de l'ouverture (en occitan)

Vous êtes ici : Accueil / Logiciels Libres / QGIS / [QGIS3] Créer une carte de sectorisation par rue d'une ville

QGIS

[QGIS3] Créer une carte de sectorisation par rue d'une ville

QGIS logoProblème : une ville ayant 2 écoles élémentaires, affecte les élèves sur l'une des 2 en fonction de leur adresse de résidence. Pour cela, 2 secteurs A et B ont été créés et chaque rue de la ville est associée à un secteur. Ces affectations se faisaient jusqu'à présent manuellement avec une carte papier et des stylo fluo pour colorier les rues.
But des manipulations :

  • obtenir la carte numérique d'une ville avec tous les noms de rue et les rues coloriées selon leur secteur d'appartenance.
  • afficher le nombre d'élèves dans chaque rue.

Merci beaucoup à Arnaud Champollion (ERUN sur l'académie d'Aix-Marseille et spécialiste d'OSM et de QGIS) qui m'a indiqué comment procéder.

Remarque : s'il s'agit de créer un simple carte de la ville, on peut passer par le site MyOSMatic : https://maposmatic.osm-baustelle.de/.

I- Pré-requis

Disposer de QGIS, avec le plugin mis à jour QuickOSM.

AVERTISSEMENT : Il est certain que faute de normalisation dans les adresses, avec des bases de données non uniformisées (base BAN qui est officielle mais avec pas mal de manques, BANO qui est ouverte, ...), des provenances diverses (ONDE, carte papier de la ville, ...), on aura des distorsions dans les noms des rues (mauvais types, problèmes d'accents, d'apostrophes, de traits d'union, ...). Comme nous utilisons QuickOSM qui récupère les données dans OpenStreetMap (OSM), le mieux est d'éditer les données dans OSM afin de les corriger ou de les rajouter (voir au bas de cette page, comment on peut corriger le nom des rues par lot avec JOSM). Ce qui constitue quand même un assez gros travail en amont. Mais c'est à ce prix-là qu'on aura un outil performant.
Cela permet aussi de collaborer à ce beau projet qu'est OpenStreetMap et de permettre l'élaboration de cartes de plus en plus fidèles et complètes.

II- Dans QuickOSM

Aller dans le menu "Vecteurs" -> "QuickOSM" -> "QuickOSM..."

Aller dans la partie "Thème", cliquer sur "Urban", puis en bas dans la partie pré-réglages, indiquer le nom de la ville et appuyer sur le bouton "Exécuter le pré-réglage" :

Partie "Thèmes" dans QuickOSM

 On obtient alors une couche temporaire "road" (ainsi que la couche "building" que j'ai décochée pour une meilleure lisibilité) :

QGIS Decoupage Lezignan 1

Les couches obtenues sont temporaires aussi si l'on veut les retrouver lors de la ré-ouverture du fichier, il faut les transformer en couche permanente. Pour cela, on clique sur l'icône en bout de ligne en forme de puce (entourées en rouge dans la capture ci-dessus), on choisit package au format JSON et on indique un emplacement et un nom pour sauvegarder ces données de façon pérenne.

REMARQUE :
Il est possible d'exporter en format .ods, les rues avec leur géolocalisation dans OSM, en faisant un clic droit sur la couche "road" -> "Exporte" -> "Sauvegarder les entités sous..." :

QGIS Decoupage Lezignan 21

III- Ajout de la feuille de calcul contenant les noms des rues et leur secteur respectif

On fait un glissé-déposé de son classeur .ods "Lézignan Rues" dans la partie "Couches" de QGIS et on choisit la feuille qui nous intéresse, ici "Lézignan Rues". On obtient alors la couche "Lézignan Rues" :

QGIS Decoupage Lezignan 2

QGIS Decoupage Lezignan 3

 

IV- Créer la jointure entre la feuille de calcul et les rues

On se place sur la couche "road". On édite ses propriétés et on va dans la partie "Jointures" (1) et on en rajoute une en cliquant sur le + vert en bas (2). On renseigne les champs pour la jointure : la couche à joindre est la feuille de calcul "Lézignan Rues" qui comporte un champ "nom_osm", et le champ cible de la couche "road" est "name" (3). On peut cocher "Formulaire dynamique" qui permet d'actualiser automatiquement si on modifie le champ cible.

QGIS Decoupage Lezignan 4

V- Faire apparaître les rues selon les secteurs

Remarque : pour améliorer la lisibilité, on peut décocher la couche "OSM" en fond de carte.

Maintenant que la jointure est faite, on se replace sur la couche "road", sur la symbologie (1) et on rajoute une nouvelle règle en cliquant sur le + vert (2) :

QGIS Decoupage Lezignan 5

 On donne un nom à cette nouvelle règle ("Secteur A" dans mon cas), on choisit la couleur et la largeur du trait et on clique sur le symbole Epsilon ε pour créer un filtre :

QGIS Decoupage Lezignan 6

Pour créer le filtre, on va dans "Champs et valeur" (1) et on clique sur le champ à discriminer, ici le champ sur les secteurs "Lézignan Rues_Secteur INITIAL" (2). Cela rajoute automatiquement ce champ dans la formule à gauche. Il faut alors indiquer l'égalité ='A' (attention un champ de texte doit être entre des apostrophes et non des guillemets) et on valide :

QGIS Decoupage Lezignan 7

On a maintenant un nouvelle règle "Secteur A" qui apparaîtra en rouge.
On refait les mêmes manipulations pour filtrer les rues du secteur B en choisissant évidemment une couleur différente de trait. Ici le secteur B apparaîtra en vert.
Mais il y a un problème car malgré ces réglages (et même en plaçant ces nouvelles règles tout en haut), les rues n'apparaissent pas sur la carte -> Il faut agir sur les niveaux de symboles en appuyant sur le bouton idoine (entouré en rouge ci-dessous) :

QGIS Decoupage Lezignan 8

Dans la fenêtre qui apparaît, on va fixer le niveau 100 pour nos règles et on verra apparaître automatiquement les rues tracées en fonction de leur secteur :

QGIS Decoupage Lezignan 9

 La carte est terminée, en dehors des ajustements concernant des rues non sectorisées, ceci étant dû à une divergence de nom entre celui de OSM (couche "road") et de celui indiqué dans le tableur "Lézignan_Rues.ods", sans compter les rues sans nom dans OSM qu'il faudra aller nommer.
Il est très facile de repérer ces rues dans QGIS puisqu'elles ne sont pas colorées.

VI- Faire apparaître le nombre d'élèves par rue

Pour cette partie, il y a un gros problème qui est lié au fait qu'une rue peut être constituée de plusieurs morceaux ayant le même nom. Du coup, si l'on fait une jointure se basant sur le nom des rues, on verra apparaître le nombre d'élèves sur tous les morceaux d'une même rue. Du coup, il ne faut retenir qu'un morceau de rue (le plus représentatif) en se basant sur le champ OSM, "full_id" qu'on rajoutera dans notre tableur .ods recensant les noms des rues ainsi que le nombre d'élèves y résidant, chose qui demande quelques manipulations...

QGIS Decoupage Lezignan 23 - Tableur avec champ "full_id"

Cela peut être aussi l'occasion de "faire le ménage" dans les rues répertoriées dans OSM en fusionnant, si c'est possible, leurs différents morceaux en un seul (attention cependant car parfois ça ne sera pas possible car des caractéristiques peuvent changer comme par exemple un élargissement oiu un rétrécissement des voies).

Voilà le résultat qu'on peut obtenir (pour distinguer les 6 des 9, on choisira une police de caractères avec soulignement) :

QGIS Decoupage Lezignan 22

 

VII- Imprimer la carte

Voir la partie de cet article où j'explique cela : Imprimer une carte

 

VIII- Partager la carte sous forme de fichier html -> NON SATISFAISANT

Remarque : La carte partagée sera basique contrairement à la version imprimable ci-dessus -> Je n'ai pas réussi à faire afficher le nombre d'élèves par rue.

Il est possible d'exporter la carte obtenue dans QGIS au format html, facilement consultable avec un navigateur Internet avec le plugin qgis2web.
Source : https://www.sigterritoires.fr/index.php/comment-exporter-votre-projet-qgis-en-page-html-en-deux-clics-le-plugin-qgis2web/
Le plugin est accessible via le menu Internet -> qgis2web -> Create web map :

QGIS Decoupage Lezignan 16Attention : il sera certainement nécessaire d'éliminer des couches non utiles pour éviter des bugs. Pour cela, le mieux est de copier le fichier QGIS sous un autre nom pour ne pas perdre toutes les données originelles.
Pour tester les changements de paramètres, on appuiera sur le bouton "Update preview".

On obtient de meilleurs résultats avec l'export Leaflet.
Dans l'onglet "Layers and Groups", on coche "Popups" afin de pouvoir obtenir des informations sur les rues et on choisit l'option "inline label" pour les champs "name" et "Lézignan Rues_Secteur INITIAL" afin d'avoir leur étiquette.

QGIS Decoupage Lezignan 17

Dans l'onglet "Appearence", on décoche "Add address search" pour ne pas faire une recherche en dehors de notre emprise. On choisit "Expanded" dans "Add layers list" pour avoir la légende affichée. On laisse vide le champ "Attribute filter" car ça entraîne de gros ralentissements dans le navigateur.
On coche "Highlight on hover" qui permet de montrer la ligne sur laquelle se trouve la souris.
Dans "Layer search", on indique "road:name" ce qui permettra de faire des recherches sur les noms ce qui est très pratique pour localiser une rue rapidement.
On coche "Match project CRS" car j'ai remarqué que ça avait une incidence sur le niveau de zoom.
Pour le reste, on peut choisir la couleur des boutons avec les options Widget et les niveaux minimum et maximum du zoom (entre 8 et 12 pour mon cas).

QGIS Decoupage Lezignan 18

Dans l'onglet "Export", on coche "Minify GeoJSON files" pour réduire la taille des fichiers. On peut aussi choisir à quel endroit seront exporter les fichiers.

QGIS Decoupage Lezignan 19

Dans l'onglet "Settings", on peut cocher "Preview on startup" qui permet d'afficher le résultat de l'export directement dans le navigateur.

QGIS Decoupage Lezignan 20

 Une fois le paramétrage terminé, on appuie sur le bouton "Export".

Si tout s'est bien passé, on pourra exporter le dossier contenant à sa racine un fichier "index.html".

IX- Corriger les noms des rues globalement dans OSM avec JOSM

Pour faire ces modifications, il faut être sûr de soi : pour cela, on s'appuiera sur les noms indiqués sur le terrain (sachant que les accents sont souvent absents sur les majuscules des plaques de rues...) et aussi Wikipédia pour l'écriture des noms propres en particulier.

Sources :

 

  1. On ouvre l'application JOSM et si ce n'est pas déjà fait, via le menu "Édition" -> "Préférences...", on installe le greffon "ToDo" qui permet de travailler avec de longues listes (un redémarrage de JOSM est nécessaire)t on appuie sur la flèche verte permettant de télécharger des données.
  2. Sur la nouvelle fenêtre, on vérifie qu'on est bien sur l'onglet "Télécharger depuis l'API Overpass" (1).
  3. En bas, on se met su l'onglet "Carte glissante" (2) et on trace la zone qui nous intéresse (3).
  4. Ensuite on construit une requête en cliquant sur le bouton "Assistant de requête" (4) et on tape la requête suivante :
    type:way name=* highway=*
    Ensuite on clique sur le bouton "Construire la requête", ce qui code notre requête dans la partie blanche :

QGIS Decoupage Lezignan 10

QGIS Decoupage Lezignan 11

  1. On appuie sur le bouton avec la flèche verte "Télécharger" (5) et au bout de quelques secondes, on obtient nos rues dans JOSM :
    QGIS Decoupage Lezignan 12
  2.  Pour éliminer les noeuds et n'obtenir que les chemins, on clique sur le bouton "Rechercher" (entouré en rouge ci-dessus). On coche "sélectionner" et on indique dans le champ "Recherche" : -type:node
    Et on appuie sur le bouton "Rechercher" :
    QGIS Decoupage Lezignan 13 
  3. Voilà nos rues sélectionnées (1), il ne reste plus qu'à les envoyer dans la liste des tâches en cliquant sur le bouton "+ Ajouter" (2) :
    QGIS Decoupage Lezignan 15
    QGIS Decoupage Lezignan 14
    On pourra donc passer en revue les rues, une par une pour éventuellement corriger leur nom et téléverser ces changements à travers JOSM directement dans OSM. La liste des tâches permet en fait de pointer ce qui a été fait.

X- Passer d'une ligne à un point

Les rues sont des lignes mais cela ne permet pas d'afficher des données quantitatives comme cela est possible de le faire avec des points. Il est possible d'obtenir une couche vecteur de points à partir de lignes avec les centroïdes (https://docs.qgis.org/3.16/fr/docs/user_manual/processing_algs/qgis/vectorgeometry.html#centroids). Pour cela, il faut :

  • Aller dans le menu "Vecteurs" -> "Outils de géométrie" -> "Centroïdes...".
  • Choisir la couche vecteur "road" qui contient toutes les lignes des rues et cliquer sur le bouton "Exécuter".QGIS Decoupage Lezignan 24
  •  On obtient une couche temporaire que l'on enregistre par exemple sous le nom "rues_points.geojson".
  • Cette nouvelle couche vectorielle fournit des points sur toutes les lignes et notamment des lignes qui ne contiennent pas de données. Il est possible de les filtrer pour ne garder que les points des rues ayant des élèves.
    QGIS Decoupage Lezignan 25
  • Ensuite on peut dupliquer cette couche autant de fois que l'on veut pour faire apparaître le nombre d'élèves par niveaux de classe, etc...

 

XI- Partager son travail sur un autre ordinateur

Afin qu'un autre service (la mairie par exemple) récupère tout ce travail, il est possible de l'exporter dans QGIS. Par contre, il faut savoir qu'un projet QGIS est constitué de nombreux fichiers.

Vous êtes ici : Accueil / Logiciels Libres / QGIS / [QGIS3] Créer une carte de sectorisation par rue d'une ville