Orientation Façades Bâtiments
Dans un précèdent tutoriel présenté ici, nous avons vu comment calculer l’angle d’orientation des polygones et de leurs styles en fonction de leur orientation avec Qgis. Je vais vous présenter ici maintenant comment déterminer l’orientation des façades des bâtiments avec PostgreSQL. En effet, un bâtiment peut avoir plusieurs expositions: Nord, Sud, Est et Ouest.
Outils et Données
Dans ce cadre nous allons utiliser Postgis, l’extension spatiale de PostgreSQL. Les données proviennent d’OSM sur la commune de Gorée au Sénégal.
Méthode
L’azimut est l’angle est référencé à partir du nord. Les valeurs de l’orientation sont positifs dans le sens des aiguilles d’une montre. Pour calculer l’orientation dans Postgis, nous utilisons la fonction st_azimut qui renvoie l’azimut en radians du segment défini par les géométries de type de points. Pour ce faire nous allons d’abord transformer les polygones en points avant de calculer leur orientation.
- Etape 1: Extraire les points des segments à partir des polygones
CREATE TEMP TABLE tab_point AS
SELECT
ST_PointN(geom, generate_series(1, ST_NPoints(geom)-1)) AS start_pt,
ST_PointN(geom, generate_series(2, ST_NPoints(geom) )) AS end_pt
FROM
-- Transformer les polygons en lignes
(SELECT (ST_Dump(ST_Boundary(geom))).geom
FROM goree) AS linestrings;
- Etape 2: Créer des lignes
CREATE TEMP TABLE tab_lignes AS
SELECT start_pt, end_pt, st_makeline(start_pt, end_pt)
FROM tab_point;
- Etape 3: Calculer l’azimut en degrés de chaque segment des points des segments
CREATE TABLE orientation_facade AS
SELECT bd.id, row_number()
OVER (order by bd.id), degrees(st_azimuth(ff.start_pt, ff.end_pt)) AS az_deg,
ST_LENGTH(ff.st_makeline) , ff.st_makeline FROM tab_lignes ff
JOIN goree bd ON st_touches(ff.st_makeline, bd.geom)
GROUP BY bd.id, ff.start_pt, ff.end_pt, ff.st_makeline;
Visualiser les résultats dans Qgis
Tableau de correspondance avec la rose des vents
Une rose des vents est une figure indiquant les points cardinaux : N pour nord, S pour sud, E pour est, O pour ouest et les orientations intermédiaires, jusqu’à 32 directions. En fait, les roses initiales n’indiquaient pas quatre directions mais huit directions. L’objectif ici est de traduire nos degrés pour faciliter la lecture de la carte. Par exemple trouver les façades bâtiments qui sont orienté Nord Ouest ou Sud.
Pour donner un sens à des données de direction des façades qui sont en degrés, nous allons commencer par une conversion. Pour convertir des degrés en directions de boussole, je divise d’abord la boussole en 16 secteurs de 22,5 degrés chacune. Les secteurs sont des parts, centrées sur les points cardinaux.
Tableau de correspondance | |
1 -> Nord = 0° ou 360° 2->Nord-Nord-Est = 22,5° 3->Nord-Est = 45° 4->Est-Nord-Est = 67,5° 5->Est = 90° 6->Est-Sud-Est = 112,5° 7->Sud-Est = 135° 8->Sud-Sud-Est = 157,5° 9->Sud = 180° | 10->Sud-Sud-Ouest = 202,5° 11->Sud-Ouest = 225° 12->Ouest-Sud-Ouest = 247,5° 13->Ouest = 270° 14->Ouest-Nord-Ouest = 292,5° 15->Nord-Ouest = 315° 16->Nord-Nord-Ouest = 337,5° 17 -> Nord = 0° ou 360° |
En divisant les degrés par 22,5 degrés (pour chaque façade), nous obtenons des chiffres allant de 0 à 16. Parce que les étiquettes stockées dans le tableau sont indexés 1-17, il faut ajouter 1 pour correspondre à la tranche. Par exemple si on prend 45 degrés on le divise par 22,5, nous obtenons 2: 45 / 22.5 = 2. Si nous ajoutons 1, le résultat est 3 : 2 + 1 = 3. Dans notre tableau la valeur “3” correspond à la direction “NE.” (nord-est).
Application sur nos données
Ajouter deux variables et les mettre à jour en.
ALTER TABLE orientation_facade ADD COLUMN orientation integer;
UPDATE orientation_facade SET orientation=round(az_deg::numeric/22.5,0)+1 ;
ALTER TABLE orientation_facade ADD COLUMN orientation text;
UPDATE orientation_facade SET orientationtxt=
CASE WHEN orientation=1 THEN'N'
WHEN orientation=2 THEN 'NNE'
WHEN orientation=3 THEN 'NE'
WHEN orientation=4 THEN 'ENE'
WHEN orientation=5 THEN 'E'
WHEN orientation=6 THEN 'ESE'
WHEN orientation=7 THEN 'SE'
WHEN orientation=8 THEN 'SSE'
WHEN orientation=9 THEN 'S'
WHEN orientation=10 THEN 'SSW'
WHEN orientation=11 THEN 'SW'
WHEN orientation=12 THEN 'WSW'
WHEN orientation=13 THEN 'W'
WHEN orientation=14 THEN 'WNW'
WHEN orientation=15 THEN 'NW'
WHEN orientation=16 THEN 'NNW'
WHEN orientation= 17 THEN 'N' end;
Résultats avec Qgis
Super travail ; quel est le système de projection de la couche des bâtiments?
Gaëtan
Merci, voici le système de projection EPSG:4326.