Skip to Content

Petit atelier cartographique : Créer une cartographie minimaliste d’îlots urbains à partir des données OSM

Niveau Intermédiaire
Logiciels utilisés Qgis
Plateforme Windows | Mac | Linux

Je ne sais pas vous, mais je remarque que l'on voit de plus en plus de jolies cartographies simplistes basées sur les "pâtés de maison" ayant un but purement artistique. Quasiment aucune information n’apparait : pas de nom de rues, de bâtiments, de POI, pas d’échelle ni de Nord : ces cartes représentent exclusivement les îlots constitués par le maillage routier d’une ville.

Vous trouverez quelques exemples de ce genre de cartographies sur les sites de Jazzberry Blue, de MissMap, ou d'Armelle Caron.

Carte de Paris réalisée par JazzBerry Blues

Ayant un sens de l’originalité hyper développé je me suis dis « Wouah ça serait trop cool de faire une jolie carte de ce genre de la ville que je veux ». D’autant plus qu’avec les données d’OpenStreetMap (OSM), on a, à notre disposition, les données de toutes les villes que l’on souhaite ! Et puis c’est pas très compliqué à faire et ça va assez vite ! Youpi, c’est parti !

Etape 1 – Récupérer les données OpenStreetMap (OSM)

Vous pouvez télécharger les données OSM directement au format Shapefile sur le serveur de téléchargement de Geofabrik. Il y a aussi d’autres solutions, comme passer par le plugin OSM pour QGis ou pour Arcgis.

Etape 2 – Définir le périmètre souhaité

A présent vous pouvez ajouter les couches "voiries" et "cours d’eau" OSM que vous venez de récupérer dans votre logiciel SIG préféré (dans cet article les opérations ont été réalisées sous QGis 1.8). Attention : les données OSM ont pour système de coordonnées WGS 84 (EPSG : 4326). Afin d’avoir une représentation correcte pour la France il faut reprojeter les couches dans un système de projection adapté (par exemple en Lambert 93 : EPSG : 2154).

Une fois la reprojection effectuée, attelons-nous à définir le périmètre que nous souhaitons, pour cela il nous faut créer une nouvelle couche "cadre" et découper nos couches "voiries" et "cours d’eau" par ce cadre (dans QGis : menu vecteur -> outil de géotraitement -> découper).

 

Etape 3 – Attribuer une largeur aux couches linéaires voiries et cours d’eau

Les couches OSM que nous avons récupérées sont constituées de polylignes. Afin de les transformer en polygones pour faire la "soustraction" avec notre couche "cadre" et ainsi créer nos îlots nous allons dans un premier temps devoir transformer ces polylignes en polygones en faisant des buffers (zones tampons). Pour cela nous pouvons ajouter une colonne "largeur" dans la table attributaire de nos couches "voiries" et "cours d’eau" et, en fonction du type de route ou du type de cours d’eau; nous attribuerons les largeurs qui détermineront la largeur de nos buffers (pour info dans mon exemple les largeurs de mon réseau routier sont comprises entre 3 mètres pour les chemins piétons à 13 pour les autoroutes et pour les cours d’eau j'oscille entre 20 et 40 mètres).
 

 

Une fois que nous avons bien rempli nos tables attributaires, nous pouvons créer les buffers (dans QGis : menu vecteur -> outil de géotraitement -> Tampon(s)).

 

Etape 4 – Générer les « pâtés de maison »

Ca y est, ça commence à prendre forme vous ne trouvez pas ? Maintenant découpons notre couche "cadre" avec les buffers de routes et de cours d’eau que l’on vient de générer ! (dans QGis : menu vecteur -> outil de géotraitement -> Différencier). On obtient alors la couche des îlots mais cette couche ne contient qu'une seule entité multi-polygone. Il faut donc éclater cette entité afin d’avoir une seule entité par polygone simple (îlot) (dans QGis menu vecteur -> outil de géométrie -> Morceaux multiples vers morceau unique).

 

 

Etape 5 – Nettoyer les « micro-polygones »

On y est presque mais tous ces géotraitements nous ont sans doute menés à la création de micropolygones, c’est pourquoi je vous conseille de créer un nouveau champ où vous calculerez la surface de chaque îlot ce qui vous permettra ensuite d’éliminer les polygones trop petits (dans QGis : aller dans la calculatrice de champ -> créer un nouveau champ -> fonction géométrie -> $area).

Etape 6 – La mise en forme !

Allez ! Un dernier petit effort : il n’y a plus qu’à mettre tout cela en forme : modifiez les symbologies à votre convenance, choisissez de jolies couleurs, rajoutez une petite typo avec le nom de la ville ou de votre grand-mère à qui vous allez offrir la carte (Noël approche !), ajoutez une marge, un coeur au milieu du lac... bref, laissez parler votre imagination !

 

Si vous souhaitez mettre différentes couleurs pour les îlots vous pouvez recréer une colonne dans votre couche "îlot" et attribuer un chiffre entier au hasard entre 1 et x (x étant le nombre de couleurs différentes que vous souhaitez attribuer aux îlots) ce qui vous permettra d'attribuer au hasard une classe à chaque îlot. Dans QGis 2.0 cette fonction est disponible en natif dans la calculatrice de champ (fonction math -> rand) pour les versions antérieures il faudra passer par un script en python ou par l’installation du très utile plugin FieldPyculator et utiliser la fonction python suivante :

 

 

Vous pourrez ensuite appliquer à votre couche "îlots" une symbologie par catégorie en lui assignant une couleur par classe.

 

Tout ça c’est très bien mais vous êtes perfectionniste (vous avez raison !) et vous aimeriez que les îlots n’aient, dans la mesure du possible, pas la même couleur que leurs voisins (vous avez encore raison : encourageons le métissage) : vous pourrez trouver des solutions sur le forum SIG en lisant ce sujet ainsi que celui-ci (merci aux membres du forum qui m'ont aidés à trouver ces pistes!).


Voici quelques exemples réalisés pour les villes de Lille et Valenciennes :

 

   

 

 

 

Vous pouvez même faire imprimer votre carto sur toile pour refaire la déco de votre appart !

 

 

Amusez-vous bien!

Site officiel : JazzBerry Blue
Site officiel : MissMap
Site officiel : Armelle Caron

Commentaires

Problème étape 4

Bonjour,

Tout d'abord, merci pour ce tuto !

Par contre j'ai un petit soucis au niveau de l'étape de différenciation. Pour l'avoir testé, cela marche parfaitement pour les couches de buffer cours d'eau et rails (oui j'ai gardé les rails :) MAIS impossible de traiter l'opération avec la couche de route ou avec la couche regroupant tous les buffers. L'opération bloque à 50%. Cela fait la même chose lors du test avec la couche rail mais au finale, ca passe ! Alors j’attends, j’attends mais est-ce qu'il est possible que ce soit l'ordinateur ou qgis qui ne soit pas assez puissant pour en venir à bout ? Ou y a t il un autre soucis qu'il faut éviter ?

Ce qui est dommage c'est qu'avec les 2 couches qui fonctionnent, j'arrive à aller jusqu'au bout mais cela ne rend rien sans les routes :(

En espérant que des gens passent encore dans le coin. Merci d'avance !

Bonjour Je vous encourage à

Bonjour

Je vous encourage à venir sur www.forumsig.org pour poser votre question, ce sera plus simple pour vous répondre et vous pourrez nous joindre vos donnnées pour que l'on puisse tester.

Etape 3

Bonjour, je me permets de réveiller un peu le sujet.
Etant également novice en la matière, je parviens jusqu'à l'étape 3 sans trop d'encombre, mais là ça coince un peu. Pourriez vous détailler, ou auriez vous un lien à disposition qui explique l'attribution de la largeur selon le type de voies (je suppose qu'il faut jouer avec les fonctions, mais je suis encore bien trop amateur sur qgis pour le moment).

Je vous remercie

Réponse ?

Bonjour à tous,

Je me permet de relancer la question car j'ai le même problème. Je ne me vois pas renommer 1 par 1 mes lignes dans ma table attributaire. Il doit exister une solution dans la calculatrice de champs pour automatiser le changement des noms de "types" vers une donnée numérique.

Quelqu'un ? HELP

Bonjour Oui il existe

Bonjour

Oui il existe plusieurs possibilités :

Selection par exemple pour le type 1 (soit par la requête attributaire, soit manuellement) puis on ouvre la calculatrice de champs, on vérifie que la case cocher qui permet de travailler uniquement sur la sélection est bien coché puis on met la valeur souhaitée pour le champs souhaités

Soit on passe par une formule à base de CASE WHEN ELSE END

CASE WHEN Type = 1 THEN 10
  WHEN Type = 2 THEN 15
  ELSE 0
END

Pour ce genre de questions techniques ou si ma réponse n'ai pas suffisante, n'hésitez pas à venir sur www.forumsig.org plus adapté pour vous répondre

 

Petit atelier cartographique : Créer une cartographie minimalist

Bonjour,

Je tenté de réaliser une carte de Toulouse selon votre modèle.
J'ai créé un 'cadre' avec remplissage blanc sur mes couches 'voirie' et 'voies d'eau', puis les tampons sur ces 2 shp selon indications.
Je bloque à l'étape 4 Générer les « pâtés de maison » : couche vectorielle de saisie 'voirie tampon' et couche de différenciation 'cadre' : mon shp de sortie est blanc.
Je viens donc solliciter votre aide (je peux vous envoyer mon fichier qgis s'il ce la peut faciliter votre aide).
Bien cordialement.

à besançon

Bonjour,
un gros merci pour ce tuto, je l'ai appliqué à Besançon :)
http://tinyurl.com/nr6cv52
et aussi avec un petit zoom sur la ville
http://tinyurl.com/pwgsv6w

Super! Merci à vous de

Super! Merci à vous de partager le résultat!

pas de quoi ! Bon, j'ai un

pas de quoi !
Bon, j'ai un peu triché, j'ai du utiliser aussi FME pour le tampon, j'avais trop de polylignes et Qgis n'avançait pas.

aide

svp comment obtenir les cartes thémaques pour mapinfo pouvez vous me les envoyer par fichier

Couleurs îlots

Bonjour et merci de partager ce tutoriel avec la communauté car c'est vraiment un très bon exemple de réutilisation des données OSM de manière originale.

J'aurais cependant une question concernant la toute fin du tutoriel (le reste n'ayant pas posé de problème) :

ne connaissant que très très peu python et toutes ses dépendances, je reste bloqué pour que chaque polygone ait une couleur différente. J'ai bien regardé les liens indiqués et notamment le second qui concerne plus particulièrement qgis, mais je sais pas trop quelle méthode vous avez suivie au final pour réaliser vos exemples de Lille ou Valenciennes ?

Est-ce que vous pourriez éclairer ma lanterne ?

Pierre

Bonjour, Oui c'est la partie

Bonjour,

Oui c'est la partie la plus délicate du tutoriel.

Au final j'en suis resté au script qu'il y a dans le premier post ce sujet : http://www.forumsig.org/showthread.php/37555-Script-pour-symbologie-différentes-entre-polygones-adjacentes?highlight=polygones+voisins et ne me suis pas lancé dans l'adaptation du script avec les librairies Fiona et Shapely (mais je garde l'idée dans un coin de la tête).

Vous pouvez essayer d'adapter le script à votre cas (changer les liens vers la couche en question, choisir le nombre de classe voulu, etc...), enregistrer ce script en .py et le lancer dans un projet vide dans Qgis via la console python : execfile("c:/blablabla/test.py").

Par contre il y a deux choses importantes à savoir :

- Le script ne fonctionne que si les polygones s'intersectent. J'ai donc appliquée une zone tampon à mes ilots pour qu'ils se touchent ou se superposent entre voisins, ensuite j'ai lancé le script et fait une jointure de table entre les identifiants de ma couche îlots avec la zone tampon et la couche îlot sans la zone tampon, pour que mes îlots sans zone tampon aient le numéro de classe dans leur table attributaires.

- Le script est basique : il passe en revue les polygones, prend connaissance des numéros de classes attribués aux polygones qui l'intersectent et attribue un nombre au hasard compris entre 1 et x (au choix) qui ne soit pas déjà prit par les polygones qui l'intersectent. Il peut arriver que tous les numéros soient déjà attribués pour les polygones voisins, dans ce cas le script affiche un avertissement dans la console python et n'attribue pas de numéro de classe à ce polygone. Dans mon cas, j'ai repris les quelques polygones concernés (pour info 5 ou 6 sur la carte de Lille) pour regler le problème "à la main".

Bon courage!

OpenStreetMap "image of the week"

I really like this artistic OpenStreetMap based image. I think it would make a good "Image of the week" on the OpenStreetMap wiki homepage. Either the image or the photo of the canvas. Both really great. We would need someone to upload an image to the wiki with CC license, and put it onto the featured image proposals page, and propose a caption to describe the image in two or three sentences. Or we can do all of that for you provided the creator of the image gives permission for an open license.

No problem, I do the upload

No problem, I do the upload this evening!

Raté...

Merci pour les conseils.

Après découpe, les 2 couches créées n'ont plus d'attributs et ne font que 100 octets.

Y a un ratage quelque part.

Je suis preneur d'une vidéo tutoriel.

Vous avez bien choisi la

Vous avez bien choisi la bonne couche de saisie (couche route ou cour d'eau) et la couche de découpage (cadre) ?

Si oui, il se peut que cela soit un problème de projection : Vos couches sont-elles dans le même système de projection?

Les shapefiles disponibles sur geofabrik sont en WGS 84. Dans mon article je conseille de les reprojeter en Lambert 93 si vous travaillez sur une commune française (sinon dans une projection métrique utilisée habituellement dans la région sur laquelle vous travaillez). Pour reprojeter une couche dans QGis : ouvrez la couche, cliquez à droite sur celle-ci (dans la table des matières) et faites "sauvegarder sous", au niveau du SCR cliquez sur "parcourir" et choisir la projection que vous voulez.

Pour que le géotraitement fonctionne correctement, il faut que vos couches soient toutes dans le même système de projection.

Pour allez plus loin sur les problèmes de projection, je ne peux que vous conseiller de lire l'article de Ludovic Granjon : http://www.portailsig.org/content/pourquoi-mes-couches-ne-se-superposent-elles-pas

Bon courage!

Je suis passé à QGis 2 et

Je suis passé à QGis 2 et l'étape de découpe s'est déroulée sans souci. Juste une petite question subsidiaire: comment fait-on pour dessiner un cadre (polygone) à angle droit?

Pour l'étape suivante du tampon, quand je lance l'opération, j'obtiens que toute la zone de travail est remplie d'une couleur unie.

J'ai raté quelque chose?

Merci.

Bonjour, - Pour faire des

Bonjour,

- Pour faire des cadre à angle droit vous pouvez passez par le plugin "Rectangles Ovals Digitizing" ou "Improved Polygon Capturing" (non testé). (menu Extension -> Gestionnaire d'extensions -> En obtenir plus)

- Pour le problème lors de la zone tampon je pense que cela est dû à un problème de projection : votre projet doit être dans une projection métrique! (menu Fichier -> Propriétés du projet -> SCR et dans général vérifiez que "Unités du canevas soit bien en mètres)

Bon courage!

Je suis bien en mètre :(

Je suis bien en mètre :(

Et avec quelle projection?

Et avec quelle projection?

En RGF93 / Lambert-93

En RGF93 / Lambert-93 EPSG:2154

Logiquement ça devrait être

Logiquement ça devrait être bon. Les couches aussi ont bien été reprojeté en Lambert 93? Je vous propose d'ouvrir un sujet sur www.forumsig.org rubrique SIG Libre -> Assistance et programmation. Ca sera plus simple pour essayer de trouver quel est le soucis : on pourra plus facilement intégrer des captures d'écrans et joindre les fichiers concernés

Il doit y avoir une

Il doit y avoir une incompréhension de ma part. Chaque couche du projet a le SCR EPSG:4326 - WGS 84
Par contre le projet lui même est en RGF93 / Lambert-93 EPSG:2154 via l'option "Activer la projection à la volée".

Si je change le SCR des couches en RGF93 / Lambert-93 EPSG:2154, elles disparaissent.

Effectivement le problème

Effectivement le problème doit venir de là vos couches sont en WGS 84 quand vous les récupérez sur GeoFabrik, c'est normal. Dans mon article je vous conseille de les reprojeter en Lambert 93. Via QGis vous pouvez le faire en faisant un clic droit sur la couche dans la table des matières et en choisissant "sauvegarder sous..." vous pouvez alors choisir de changer de projection. Si vous avez d'autres questions veuillez passer par le forum svp ;-)

Bon courage!

Cadre de découpe

Bonjour,

Tout d'abord merci pour ce tutoriel!

Ayant peu d'expérience avec les logiciels SIG, je bute sur l'étage de découpe selon une couche "cadre". Comment définir le contour du cadre en question?

Merci par avance.

Bonjour, Dans QGis créez une

Bonjour,

Dans QGis créez une nouvelle couche Shapefile de type Polygone : menu couche -> nouveau -> nouvelle couche Shapefile. Attention à bien choisir le même système de projection (SCR) que celui de vos autres couches (en France Lambert 93 par exemple).

Il faut ensuite mettre la couche en édition (clic-droit sur la nouvelle couche "basculer en mode édition") puis tracer votre cadre avec l'outil "ajouter une entité" de la barre d'outils "numérisation".

N'hésitez pas à vous familiarisez avec QGis grace aux tutoriaux très bien fait de SIGEA : http://sigea.educagri.fr/ressources-pedagogiques/utilisation-des-logiciels/tutoriels-de-logiciels-gratuits/tutoriels-qgis.html

Et grâce à la documentation officielle de QGis : http://www.qgis.org/fr/docs/

Si j'ai le temps fin décembre, je ferai peut-être une version vidéo de ce tutoriel afin que cela soit plus facile pour les débutants de reproduire la méthodologie utilisée!

N'hésitez pas à montrer la carte que vous obtiendrez quand vous aurez réalisé ce tutoriel!

Bon courage et bonne journée,

Question

Bonjour, merci pour ce très bon tuto et également maginfique résultat. Je suis plutot nouveau dans l'utilisation de Qgis et je me demande comment faire pour remplir cette nouvelle couche "largeur" fonction du type de voie. je pense que c'est grace à la fonction "conditions/case" mais j'ai un peu de mal à la configurer... Un petit indice?
Merci.

Bonjour, Perso j'avais bossé

Bonjour,

Perso j'avais bossé avec QGis 1.8 du coup il n'y avait pas encore la fonction "conditions/case" dans la calculatrice de champs. J'aurai pu le faire avec le plugin Field Pyculator mais dans mon cas, j'avais attribué les largeur type par type en sélectionnant toutes les voies que je voulais mettre avec une largeur de x mètres, puis toutes les voies à y mètres etc...

Mais je viens de tester avec QGis 2.0 et cela fonctionne quand j'entre une expression telle qui suit :

CASE WHEN "type" = 'residential' THEN 3

WHEN "type" = 'secondary' THEN 5

ELSE 10 END

 

Bon courage, n'hésite pas à poser des questions ici ou sur le forum SIG si tu bloques à une étape. Et n'hésite pas non plus à partager avec nous le résultat que tu obtiendras!

4 couleurs...

Merci pour ta réponse, j'y suis finalement arrivé mais je reste bien bloqué sur la méthode finale de l'application du théorème des 4 couleurs (ou 5/6). J'ai bien tenté un travail "à la main" mais le résultat n'est pas aussi bon que sur ton exemple de Paris. L'automatisation me parait obligatoire mais je ne comprend pas grand chose à Python... Comment puis-je réutiliser ton script dans qgis?
Dès que j'ai passé cette étape je vous montre mes "oeuvres"...

Bonjour, Tout d'abord je

Bonjour,

Tout d'abord je précise que la carte de Paris n'a pas été réalisée par moi mais par JazzBerry Blues comme indiqué dans l'article et je ne sais pas du tout quelle méthode ils ont employée. Ce sont les cartes de Lille et de Valenciennes que j'ai réalisées.

Pour le théorème des 4 couleurs, c'est la partie la plus délicate du tutoriel, j'ai donné quelques précisions sur la ré-utilisons de mon script dans un commentaire plus haut : http://www.portailsig.org/content/petit-atelier-cartographique-creer-une-cartographie-minimaliste-d-ilots-urbains-partir-des-d#comment-592

J'attends de voir le résultat avec impatience ;-)

Bon courage!

Merci pour ces explications

Merci pour ces explications très claire. Le rendu est vraiment très chouette. Pour aller jusqu'au bout, est-ce que vous pourriez nous indiquer quelles polices vous avez utilisé sur la carte de Lille ?

Vincent

Typo carte de Lille

Bonjour et merci pour votre retour,

La typographie utilisée pour la carte de Lille a été faite "à la main". Vous pouvez la faire directement dans votre logiciel SIG en créant une nouvelle couche et en dessinant les contours de vos lettres "à la main" ou après avoir fait un export en vectoriel (SVG par exemple) sur un logiciel de dessin vectoriel (Inkscape par exemple). Vous pouvez aussi trouver une police qui correspond à ce que vous cherchez!

Poster un nouveau commentaire

Le contenu de ce champ sera maintenu privé et ne sera pas affiché publiquement.