L'économe d'Ockham

faire le vide en côtoyant le néant

lundi 6 avril 2026

Créer une carte de zonage interactive

Si vous cherchez à mieux comprendre le règlement d’urbanisme de votre ville, il est très utile d’avoir une carte interactive qui permet de faire la correspondance entre adresses ou quartiers et zones. Des grandes villes, qui ont de l’expertise interne en géomatique et des abonnements coûteux à ArcGIS, publient souvent ce genre de carte sur leur site web, par exemple Laval, Montréal ou Sherbrooke. Des petites villes… pas tant que ça!

URBANISME

C’est pour ça que, quand j’ai été élu au conseil à Sainte-Adèle, j’ai créé ZONALDA, une carte de zonage interactive simple, gratuite et libre. Cet article est la première d’une série qui détaille la conception et l’implémentation d’une telle carte, en commençant par la base - c’est à dire, la base de données géomatique, qui contient les formes et emplacements de toutes les zones ainsi que leurs identificateurs et attributs.

Obtenir un plan de zonage

Idéalement, à défaut d’une carte interactive, votre ville ou MRC publie la géomatique du plan de zonage sur Données Québec (voici celle de Repentigny par exemple) mais généralement ce n’est pas le cas. Par contre, les villes publient presque toujours une carte de zonage sur leur sites web, la plupart du temps en format PDF, plus souvent dans la section des règlements d’urbanisme. On la trouve sous le rubrique Règlements - Urbanisme à Sainte-Adèle, sur la page Règlementation et Permis à Morin-Heights, et sur la page générale de réglementation municipale à Saint-Calixte.

Afin d’en obtenir la géomatique sous-jacente (habituellement sous forme d’un Shapefile) vous pouvez aussi essayer de faire une demande d’accès à l’information. Pour les petites villes, c’est généralement à la MRC qui il faut s’adresser - c’est la raison qu’on voit «Source: MRC des Pays d’en Haut» sur les plans de zonage de Sainte-Adèle et Morin-Heights.

Finalement, on peut aussi utiliser la carte publique pour reconstruire manuellement la géomatique des zones. Pour ce faire, on utilisera le logiciel libre QGIS, accompagné par GIMP et InkScape et assaisonné avec un peu de jus de bras.

Cas facile: Morin-Heights

Il faut d’abord savoir qu’un PDF n’est pas une seul et unique sorte de fichier, et il est nécessaire de savoir d’abord à quelle sorte de PDF vous avez affaire. Le plan de zonage de Morin-Heights est un très bon PDF parce qu’il est vectoriel et géoréférencé.

Comment le savoir? D’abord, on ouvre QGIS et on ajoute une carte de base OpenStreetMap. Maintenant, il faut simplement essayer d’ajouter le PDF comme couche vectorielle dans QGIS:

Ajouter une couche vecteur à QGIS

On voit que cette opération nous réussit à ajouter plusieurs couches vecteur et, même si les zones ne sont pas ajoutées comme polygones, les limites des zones sont présentes comme lignes et placées correctement sur la carte:

Un très bon fichier PDF

Dans ce cas-ci, il ne nous reste qu’à tracer les limites de chaque zone avec les options «accrochage» et «traçage» des outils de numérisation. On va aussi importer la carte comme couche matricielle (raster) pour être capable de voir les identificateurs de zone. Donc, il faut importer le PDF une deuxième fois, cette fois comme «raster»:

Ajouter une couche raster à QGIS

On est prêt à créer la géomatique des zones! Pour ce faire:

  1. Mettre la carte raster en-dessous des vecteurs dans la liste de couches.
  2. Créer une nouvelle couche temporaire en mémoire, avec une géométrie de polygone et un SCN de EPSG:4326 - WGS-84. Ajouter un champ “zone” de type texte aussi. Maintenant, cliquer avec le bouton droit sur la nouvelle couche et sélectionnez «Convertir en couche permanente», puis sauvegardez-la en GeoJSON.
  3. Activer la barre d’outils «accrochage» et sélectionner le bouton «trace» dans la barre. Très important: la fonction «trace» n’est pas toujours capable de prendre en charge plusieurs couches à la fois. Il faut donc aussi selectionner «Configuration avancée» dans le menu à droite de l’aimant, puis cocher seulement Layers_ZONAGE_2022_PG dans le menu sous l’œil qui apparaît à côté:
    Options d'accrochage QGIS
  4. Maintenant vous pouvez utiliser l’outil «Ajouter une entité polygonale» et cliquer avec le bouton gauche en suivant le contour d’une zone. L’accrochage fera en sorte que les points seront placés sur les limites de la zone, et la trace suivra les courbes et autres détails. Si vous faites une erreur, utilisez la touche «backspace» pour enlever le dernier point. Une fois rendu au point de départ, fermer le polygone avec le bouton à droite. Dans le dialogue, entrez l’identificateur de la zone tel qu’indiqué dans la carte raster:
    Créer une zone
  5. Pendant que vous tracez, vous pouvez effacer le dernier point avec la touche «Backspace», annuler la figure avec «Esc», ou bouger la carte en tenant la barre d’espace en bougeant la souris. Pour désactiver ou réactiver la trace pésez sur «T», et pour désactiver ou réactiver l’accrochage, la touche «S».
  6. N’oubliez pas de sauvegarder votre travail de temps en temps!

Après une demi-heure environ de traçage, vous aurez une couche vectorielle avec des polygones pour toutes les zones de Morin-Heights, et vous aurez aussi un fichier GeoJSON que vous pouvez visualiser avec uMap:

Cas plus difficile: Sainte-Adèle

Ce n’est pas toutes les villes qui produisent (ou demandent à leur MRC de produire) des fichiers PDF aussi futés. Ça se peut que vous aurez un PDF qui est tout simplement une image matricielle, qui ne contient que des pixels. Donc, QGIS va refuser de l’importer comme couche vecteur:

Erreur lorsqu'on ajoute un PDF matriciel

Pire encore, cette image peut aussi ne pas être géoréférencée. Donc, si vous l’importez comme raster, elle finira quelque part dans l’océan, ou dans les montagnes de l’Équateur, tout dépendant de votre SCN:

PDF matriciel dans les An(d)es

Sainte-Adèle figure malheureusement parmi ces villes moins douées en géomatique. Qui plus est, elle publie aussi deux cartes séparées de zonage, une pour la ville au complet et une autre plus détaillée pour le périmètre urbain. Mais tout n’est pas perdu! QGIS est très capable de faire quelque chose avec ce genre de PDF, avec un peu plus de travail.

D’abord, on n’ajoutera pas directement ces fichiers dans QGIS comme couche raster, car ils ne sont pas géoréférencés, mais aussi parce que QGIS par défaut va réduire la résolution de l’image qui les rend pas très lisibles. C’est très courant pour des cartes en PDF d’être composées d’une seule image matricielle, donc, on va extraire ces images avec PLAYA-PDF:

playa --images tout Plan-de-zonage-Tout-En-vigueur-20250716.pdf > tout.json
playa --images zoom Plan-de-zonage-Zoom-En-vigueur-20250716.pdf > zoom.json

En effet, si on regarde les fichiers tout.json et zoom.json on constate qu’il y a bel et bien une seule et très grande image dans chaque fichier (tout et zoom). Étant donné qu’on aura besoin de les géoréférencer de toute façon, on va d’abord ouvrir ces images avec GIMP pour les découper un peu:

  1. Ouvrir les images .jpg avec GIMP
  2. Découper l’image juste au-delà des limites de la ville, ou aux limites de la carte pour le plan plus détaillé
  3. Ajouter un canal alpha (Calque → Transparence → Ajouter un canal alpha)
  4. Exporter l’image en PNG (ou TIFF, peu importe…)

Ça nous donne tout.png et zoom.png. Par la suite on va les incorporer dans QGIS avec la fênêtre «Géoréférencer…» (dans le menu «Couche»). Mais, pour faire ceci, ça nous prend des points de référence fiable, comme les limites de la ville. Très important: N’utilisez jamais les limites administratives dans OpenStreetMap, elles sont incorrectes! On va alors télécharger les données ouvertes des découpages administratifs du Québec. Pour rendre ça plus rapide, on n’a qu’à sélectionner l’objet munic_s:

Ajouter les limites des villes

Il est sûrement possible de demander simplement la limite d’une seule ville avec le serveur REST, mais je n’ai pas réussi à en trouver la documentation…

On peut maintenant géoréférencer la carte complète de la ville par rapport aux limites administratives:

  1. Ouvrir le géoréférenceur et ouvrir tout.png comme raster (Ctrl+O ou Fichier → Ouvrir un raster…)
  2. Selectionner l’outil «Ajouter un point de contrôle» et placer un point à un point sur le contour de la ville, puis selectionner «Depuis le canevas de la carte…»
  3. Identifier le point correspondant sur les limites administratives. En activant l’accrochage (icône en forme d’aimant) sur cette couche spécifique on peut avoir un peu plus de précision.
  4. Le coin Sud-Est de la ville ne correspond pas exactement, alors il vaut mieux ne pas l’utiliser. Ces 5 points suffisent:
    Points de contrôle
  5. Modifier les paramètres de transformation pour utiliser «Polynomiale 1» et «Cubic» et définir le nom du fichier en sortie, puis débuter le géoréférencement.
  6. En superposant de nouveau la couche des limites administratives, on confirme qu’on a un très bon alignement:
    Nouvelle couche géoréférencée

Pour la carte d’agrandissement, on fera un processus semblable, sauf que les limites de l’agrandissement ne sont pas exactes, donc il vaut mieux définir des points de contrôle sur les points saillants des zones, au lieu des limites de la carte:

Points de contrôle

Après le géoréférencement, on peut réduire l’opacité de la nouvelle couche pour confirmer que les zones sont bien alignées, bien qu’il y ait un petit écart sur le haut de l’agrandissement:

Nouvelle couche géoréférencée

Ça nous fais une très belle carte, mais… il faut quand même tracer les zones. Pour celles qui sont plutôt rectiligne, et collées sur les limites de la ville, ce n’est pas trop difficile, mais plusieurs ont des formes très complexes. Il serait donc très utile de pouvoir extraire au moins quelque chose de vectoriel sur lequel on pourait accrocher pour faciliter le traçage.

Auto-traçage et géoréférencement

Pour obtenir une couche vectorielle qui nous aidera à guider le traçage, on peut ouvrir nos fichiers PNG avec InkScape, puis sélectionner «Chemin → Vectoriser un objet matriciel…». Pour l’agrandissement, des paramètres comme ceux-ci fonctionnent:

Paramètres InkScape

On peut masquer (ou carrément supprimer) l’image matricielle de base pour voir que ça nous donne déjà quelque chose un peu plus potable:

Traçage des zones avec InkScape

Après avoir detecté les lignes, il faut sauvegarder le projet en format DXF (pourquoi ce format? seul QGIS le sait…) et par la suite refaire le géoréférencement, mais en ajoutant les objets dans ce fichier comme vecteur:

Géoréférencer un DXF

La principale difficulté à tracer en utilisant ces vecteurs, c’est que parce que les lignes dans l’image originale sont épaisses, on se retrouve avec deux traces pour chaque ligne. Il faut aussi faire attention aux flèches et textes qui se font aussi tracer (la touche «T» est très utile).

Tracer le DXF

En fin de compte, ça nous permet d’avoir des pas pires resultats, mais ça prend du temps:

Par la suite, nous allons regarder comment géolocaliser des adresses pour les situer dans une zone, et comment réparer la base géomatique au cas où des géométries invalides empêchent ceci de fonctionner. QGIS est muni des «outils de numérisation avancés» qui permettent de nettoyer les données qu’on aura créées en traçant.

Il est aussi possible d’améliorer l’extraction de figures en détectant automatiquement les étiquettes textuelles des zones et les enlever de la figure… on regardera ça dans un deuxième temps!