← Blog
2026-06-06 · 10 min de lecture

Du LiDAR a la lumiere :
comment nous avons cartographie l'ensoleillement de chaque adresse au Luxembourg

Le Luxembourg a publie un releve LiDAR au metre pres de tout le pays. Nous l'avons transforme en un modele d'ensoleillement annuel et mensuel, calculant la projection d'ombres pour 17 520 positions solaires par pixel. Voici la methodologie -- des donnees de terrain au score d'ensoleillement par adresse.

Les donnees : un pays en resolution metrique

En 2024, le Luxembourg a publie un GeoTIFF optimise cloud de son Modele Numerique de Surface LiDAR via data.public.lu. Le raster couvre l'ensemble du pays a 1 m de resolution native -- chaque batiment, arbre et element de terrain est capture sous forme de valeur d'altitude.

A 1 m de resolution, le raster complet est enorme. Nous le sous-echantillonnons a environ 10 m pour le calcul d'ombres. C'est un compromis delibere : 10 m de resolution capture encore les batiments et les lignes de crete, mais reduit le calcul de milliards de verifications de rayons a un nombre geerable. Le DSM original a 1 m est conserve pour les recherches d'elevation par adresse.

17 520 positions solaires par pixel

Pour savoir si une cellule est ensoleillee a un instant donne, nous avons besoin de la position du soleil dans le ciel. Nous la calculons a l'aide des algorithmes des Astronomical Algorithms de Jean Meeus -- la reference standard pour le calcul de position solaire.

Position solaire (simplifiee)
declinaison = 23,45° × sin(360/365 × (284 + jour))
angle_horaire = 15° × (heure_solaire - 12)
altitude = arcsin(sin(lat) × sin(decl) + cos(lat) × cos(decl) × cos(ah))
azimut = arctan2(sin(ah), cos(ah) × sin(lat) - tan(decl) × cos(lat))

Nous evaluons ces equations a intervalles de 30 minutes sur les 365 jours de l'annee. Cela produit 17 520 positions solaires par cellule de grille -- chacune definie par un azimut (direction cardinale) et une altitude (angle au-dessus de l'horizon). Les positions nocturnes (altitude inferieure a 0) sont ecartees. Ce qui reste est chaque instant ou une cellule pourrait potentiellement recevoir de la lumiere directe du soleil.

Detection d'ombre : terrain contre soleil

Pour chaque cellule de grille et chaque position solaire, nous posons une seule question : y a-t-il un terrain entre cette cellule et le soleil qui est suffisamment haut pour bloquer la lumiere ?

La methode est la comparaison d'angle d'horizon. A partir de la cellule, nous tracons vers l'exterieur le long de la direction azimutale du soleil a travers la grille DSM. Pour chaque cellule le long de cette ligne, nous calculons l'angle depuis notre cellule jusqu'au sommet de ce terrain. Le maximum de ces angles est l'angle d'horizon dans cette direction.

Si l'angle d'horizon depasse l'angle d'altitude du soleil, la cellule est a l'ombre. Si le soleil se situe au-dessus de la ligne d'horizon, la cellule recoit la lumiere directe du soleil. Cela est calcule pour chaque creneau de demi-heure, chaque jour, chaque pixel.

L'idee cle : nous ne tracons pas de rayons individuels depuis le soleil. Au lieu de cela, nous pre-calculons le profil d'horizon pour chaque cellule -- l'angle d'elevation maximal dans chaque direction -- puis nous comparons avec chaque position solaire. C'est moins couteux en calcul que le lancer de rayons complet tout en produisant le meme resultat binaire : ensoleille ou ombre.

cellulesommet terrainposition soleilangle horizon (33°)altitude soleil (30°)horizon > altitude soleil → OMBREcoupe transversale du terrain selon l'azimut solaire

Le raster solaire annuel

Le resultat du modele d'ombre est simple : pour chaque pixel, compter le nombre total de creneaux de demi-heure ou l'altitude du soleil a depasse l'angle d'horizon. Multiplier par 0,5 pour convertir en heures. Le resultat est le total annuel d'heures d'ensoleillement par pixel.

Les valeurs vont de moins de 400 heures dans les vallees profondes orientees nord a plus de 1 600 heures sur les cretes exposees au sud. Le raster est rendu sous forme de PNG transparent en surcouche -- bleu marine pour faible ensoleillement, dore pour fort -- superpose sur la carte de base.

Exemple : heures de soleil annuelles
LieuOrientationHeures annuellesScore solaire
Crete sud, MoselleSud1,58097
Plateau ouvert, GutlandPlat1,32078
Fond de vallee, OeslingNord62032

12 mois, 12 histoires

Le meme calcul d'ombre est partitionne par mois calendaire. Chaque mois produit son propre raster d'heures d'ensoleillement et une grille binaire (uint8, valeurs 0-255 correspondant a la plage d'heures du mois). Cela revele la structure saisonniere que le total annuel masque.

En decembre et janvier, les vallees de l'Oesling recoivent a peine 38-45 heures de soleil direct. En juin et juillet, les memes endroits peuvent atteindre 200-220 heures. Les pentes exposees au sud dans la vallee de la Moselle sont systematiquement les mieux classees toute l'annee. Les grilles mensuelles permettent aux utilisateurs de voir non seulement combien de soleil une adresse recoit, mais quand elle le recoit.

Heures d'ensoleillement mensuelles -- moyenne nationale (approximatif)
0501001502002504565110155195210220200150955038moy. 128 hJanFevMarAvrMaiJunJulAouSepOctNovDeccreux hiverpics eteheures soleil

Du raster au score par adresse

Pour chacune des quelque 170 000 adresses du Luxembourg, nous echantillonnons le DSM LiDAR aux coordonnees geocodees, executons le modele d'ombre pour ce point specifique, et ecrivons un score solaire de 0 a 100.

Le score est un rang en percentile par rapport a toutes les adresses au niveau national. Une adresse a 85 recoit plus d'ensoleillement annuel que 85 % de toutes les adresses du Luxembourg. Cette echelle relative est necessaire car la plage absolue d'heures de soleil (environ 400 a 1 600 heures) n'est pas intuitive pour la plupart des utilisateurs, tandis que "mieux que 85 % des adresses" est immediatement parlant.

Score solaire
score_solaire = rang_percentile(heures_soleil_annuelles) / 2 + 50

Moyennes communales

Pour chaque commune, nous echantillonnons plusieurs points a l'interieur du polygone communal, calculons les heures de soleil mensuelles et annuelles pour chacun, et les moyennons. Cela produit un profil mensuel au niveau communal et une reference nationale moyenne.

Les moyennes communales servent deux objectifs : elles fournissent un point de comparaison dans le dossier par adresse ("votre adresse recoit 15 % de soleil de plus que la moyenne communale"), et elles alimentent le graphique solaire mensuel dans le rapport PDF -- montrant la courbe mensuelle de l'adresse par rapport aux moyennes communale et nationale.

Ce que cela ne capture pas

Limitations honnetes :

  • Pas de saisonnalite de la vegetation. Le LiDAR capture les arbres tels qu'ils etaient lors du vol d'acquisition (avec ou sans feuilles selon la saison). Les arbres a feuilles caduques qui bloquent le soleil en ete mais laissent passer la lumiere hivernale a travers les branches nues ne sont pas modelises de facon saisonniere. Nous utilisons un modele de surface statique unique toute l'annee.
  • Pas de facades de batiments. Le DSM capture les hauteurs de toiture, pas la geometrie des murs. Une rue etroite entre des batiments hauts peut recevoir de la lumiere reflechie par les facades -- cela n'est pas modelise. Notre verification d'ombre est purement verticale : le terrain bloque-t-il le rayon solaire direct ?
  • Lissage a 10 m de resolution. Le sous-echantillonnage de 1 m a 10 m pour le calcul signifie que les petits elements (murs de jardin, ruelles etroites, arbres individuels) sont moyennes. Une cour ombragee par un seul arbre ne montrera pas cette ombre a 10 m de resolution.
  • Soleil direct uniquement. Nous calculons les heures de lumiere directe du soleil, pas le rayonnement solaire total. La lumiere diffuse par temps couvert, la lumiere reflechie par les surfaces voisines et la diffusion atmospherique ne sont pas incluses. Le score represente le potentiel d'exposition solaire geometrique, pas l'energie reellement recue.

Le score solaire est l'une des neuf metriques du systeme de scoring Wunnscheck. Pour la methodologie complete -- incluant la securite, la marchabilite, le bruit et le risque d'inondation -- voir la documentation complete.

← Tous les articles