# Traitements Le plugin QSunPotentiel fournit 3 traitements : * Le traitement `PVGIS request` permet d'évaluer le potentiel solaire sur une couche vectorielle de toitures ; * Le traitement `CityJSON to roof layer` sert à extraire les toitures d'une donnée au format [CityJSON](https://www.ogc.org/fr/standards/cityjson/) vers une couche vectorielle de polygones contenant les attributs nécessaires pour exécuter, par la suite, le traitement `PVGIS Request` ; * Le traitement `LAS to API PVGIS` permet d'évaluer le potentiel solaire des toitures à partir d'un nuage de point LiDAR. Ces traitements sont accessibles à partir de la barre d'outil du plugin QSunPotential ou depuis la liste de tous les traitements QGIS : menu `Traitements > Boîte à outils`. ## Traitement `PVGIS Request` ```{figure} ../static/screenshot_ui.png :name: Interface utilisateur PVGIS request Interface utilisateur PVGIS request ``` ### Paramètres d'entrée Ce traitement prend en entrée une couche vecteur de toitures, qui doit obligatoirement contenir les attributs suivants: * L'identifiant de la toiture ; * L'inclinaison de la toiture, en degrés ; * La surface 3D de la toiture, correspondant à la surface réelle de la toiture, en mètres carrés ; * L'orientation des toitures, en degrés, comprise entre 0 et 360° par rapport au Nord. Le plugin convertira cette orientation par rapport au Sud, selon la norme utilisée par PVGIS. ### Traitements opérés La chaîne de traitement suivante est appliquée sur chaque toiture de la couche : * Tester si la géométrie est valide (une toiture à géométrie invalide est ignorée) ; * Sélectionner un point situé à l'intérieur de la géométrie de la toiture ; * Envoyer une requête à PVGIS ; * Stocker les résultats dans des tables. ### Construction de la requête pour PVGIS PVGIS renvoie des informations sur le potentiel solaire sur un point de la terre en tenant compte des paramètres suivants: #### Paramètre `angle` Il correspond à l’inclinaison en degrés de la toiture. L’installation de panneaux sur des toitures totalement planes ayant toujours une inclinaison comprise entre 5 et 10°, il est possible de fixer un angle d'inclinaison minimal ainsi qu'un angle d'inclinaison de forçage dans les paramètres avancés du plugin. :::{important} **Par défaut**, l'inclinaison minimale d'une toiture est fixée à 5° : pour les toitures présentant une inclinaison inférieure, on forcera leur inclinaison à une valeur de 10°. ::: #### Paramètre `peakpower` (puissance crête) La puissance crête d'une toiture est définie par la formule suivante: $$ S_{toiture} \times T_{occupation} \times coeff $$ où : * $S_{toiture}$ est la surface de la toiture * $T_{occupation}$ est le taux d'occupation de la toiture * $coeff$ est un coefficient multiplicateur :::{important} Par défaut, les valeurs suivantes ont été définies dans le plugin : * $T_{occupation}$ = 70% * $coeff$ = 0.215 kW/m² Elles sont modifiables dans les paramètres avancés de l'interface utilisateur. ::: #### Paramètre `aspect` Ce paramètre correspond à l'orientation (azimuth) du système photovoltaïque. Cette orientation prend une valeur entre -180 et 180 degrés. :::{important} Etant donné que l'azimuth des toitures est classiquement exprimé entre 0 et 360 degrés, le plugin va convertir systématiquement la valeur de l'azimuth d'une toiture en appliquant une soustraction de 180° par rapport à sa valeur initiale. ::: #### Paramètre `loss` Le paramètre `loss` correspond au taux de perte du système photovoltaïque, il est défini à 14% dans chaque requête, et n'est pas modifiable dans le plugin QSunPotential. ### Résultats en sortie A la fin du traitement, le plugin sort 3 résultats: * une table `PVGIS_PVcalc_totals` * une table `PVGIS_PVCalc_monthly` * une couche des toitures classifiée #### PVGIS_PVcalc_totals Cette table contient la production photovoltaïque moyenne annualisée. |Nom du champ (alias[^alias])| Description| Unité| |------------|------------|------| |gml_surf_id | identifiant de toiture (champs de jointure avec la table géométrique)| - | |e_d (E_d) | production d’énergie moyenne journalière | kWh/jour| |e_m (E_m) | production d’énergie moyenne mensuelle |kWh/mois| |e_y (E_y) | production d’énergie moyenne annuelle | kW/an | |h_i_d (H(i)_d) | moyenne d’irradiation journalière par mètre carré reçue par les modules | kWh/m2/jour| |h_i_m (H(i)_m) | moyenne d’irradiation mensuelle par mètre carré reçue par les modules|kWh/m2/mois| |h_i_y (H(i)_y) | moyenne d’irradiation annuelle par mètre carré reçue par les modules|kWh/m2/an| |sd_m (SD_m) | écart-type de production mensuelle dû aux variations interannuelles| - | |sd_y (SD_y) | écart-type de production annuelle dû aux variations interannuelles|-| |l_aoi (l_aoi) | pertes dues à l’angle d’incidence |%| |l_spec (l_spec) | pertes spectrales |%| |l_tg (l_tg) | pertes dues à la température et perte d’irradiation |%| |l_total (l_total) | pertes totales |%| |p50 (p50) | rapport de productible | kWh/kW/an | #### PVGIS_PVCalc_monthly Cette table contient la production photovoltaïque pour chaque mois. |Nom du champ (alias)| Description| Unité| |------------|------------|------| |gml_surf_id | identifiant de toiture (champs de jointure avec la table géométrique)| - | |month|numéro du mois| - | |e_d (E_d) | production d’énergie moyenne journalière | kWh/jour| |e_m (E_m) | production d’énergie moyenne mensuelle |kWh/mois| |h_i_d (H(i)_d) | moyenne d’irradiation journalière par mètre carré reçue par les modules | kWh/m2/jour| |h_i_m (H(i)_m) | moyenne d’irradiation mensuelle par mètre carré reçue par les modules|kWh/m2/mois| |sd_m (SD_m) | écart-type de production mensuelle dû aux variations interannuelles| - | #### Une couche de toitures classifiées La couche de toitures en sortie contient les toitures sélectionnées en entrée du calcul, avec une jointure des résultats annuels (i.e. contenus dans la table `PVGIS_PVcalc_totals`). ##### Classification selon `e_y` (par défaut) Par défaut, la couche de toitures est classifiée selon la production d’énergie moyenne annuelle `e_y`. Les toitures sont rangées dans les 6 classes suivantes : ```{figure} ../static/classification_e_y.png :name: Classification `e_y` Classification selon la production d’énergie moyenne annuelle `e_y` ``` ##### Classification selon P50 L'indicateur P50 est le rapport de reproductible. Il est calculé selon la formule: $$ P50 = e_y/peakpower $$ L'utilisateur a la possibilité de classifier les toitures selon P50. Dans ce cas, les toitures sont rangées dans les 7 classes suivantes : ```{figure} ../static/classification_p50.png :name: Classification selon P50 Classification selon le rapport de reproductible `P50` ``` ### Performances de calcul Le temps de calcul est conditionné par l'API PVGIS, dont les appels sont limités à 30 appels/seconde. Un mécanisme de parallélisation a été implémenté pour optimiser les appels à l'API PVGIS, dont l'utilisateur peut configurer le nombre de requêtes en parallèle et le nombre de nouvelles tentatives d'appels en cas de limite atteinte. Ces options sont modifiables depuis le menu `Préférences...` > `Options` > onglet QSunPotential. ```{figure} ../static/options.png :name: Options QSunPotential Options de parallélisation ``` Par défaut, le traitement envoie 20 requêtes en parallèle et retente par 6 fois d'envoyer des requêtes à l'API dont les réponses sont en erreur. [^alias]: Un alias est appliqué sur les champs joints à la couche de toiture classifiée ## Traitement `CityJSON to roof layer` ```{figure} ../static/cityjson_to_roof_layer_ui.png :name: Interface du traitement `CityJSON to roof layer` Interface du traitement `CityJSON to roof layer` ``` Ce traitement prend en entrée des bâtiments 3D au format `CityJSON`, et extrait uniquement les toitures de ces données. Les toitures en sortie sont sous forme d'une couche vectorielle 2D qui pourra servir de donnée d'entrée au traitement `PVGIS Request`. Cette couche contient donc les attributs suivants : * L'identifiant de la toiture ; * L'inclinaison de la toiture, en degrés ; * La surface 3D de la toiture, correspondant à la surface réelle de la toiture, en mètres carrés ; * L'orientation des toitures, en degrés, comprise entre 0 et 360° par rapport au Nord. ## Traitement `LAS to API PVGIS` Ce traitement prend en entrée un fichier de nuages de points LiDAR au format `copc.laz`/`copc.las`, une couche d'emprise au sol des bâtiments, et renvoie une couche de toitures classifiées selon les indicateurs produits par PVGIS. ```{figure} ../static/las_to_pvgis_ui.png :name: Interface du traitement `CityJSON to roof layer` Interface du traitement `CityJSON to roof layer` ``` Attention : il faut veiller à charger la couche de nuages de points dans QGIS pour la sélectionner dans l'interface du traitement. Le chargement d'un fichier depuis l'explorateur de fichier a pu engendrer des bugs au moment de l'exécution du traitement. ### Chaîne de traitement Le traitement `LAS to PVGIS` nécessite l'installation de [CityForge](https://oslandia.gitlab.io/qgis/cityforge/index.html), une extension QGIS qui permet de modéliser des bâtiments 3D à partir d'un nuage de points LiDAR. Concrètement, les étapes de ce traitement sont les suivantes : * Reconstruction des bâtiments à partir du nuage de points au format CityJSON à partir d'un traitement CityForge ; * Exécution du traitement `CityJSON to roof layer` pour extraire les toitures ; * Exécution du traitement `PVGIS Request` pour récupérer les indicateurs de potentiel solaire et classifier les toitures. ### Reconstruction 3D des bâtiments avec Roofer L'extension CityForge permet de modéliser des bâtiments 3D en choisissant parmi deux calculateurs disponibles : [Geoflow](https://github.com/geoflow3d/geoflow-bundle) ou [Roofer](https://github.com/3DBAG/roofer). Dans les deux cas, ces calculateurs produisent des bâtiments 3D en [LoD 2.2](https://3d.bk.tudelft.nl/lod/). Le projet Geoflow n'étant plus maintenu, contrairement à Roofer, ce dernier a donc été choisi pour réaliser l'étape de modélisation des bâtiments 3D au format CityJSON. Par ailleurs, des tests ont été réalisés avec CityForge pour produire des bâtiments 3D à partir de Roofer et de Geoflow, et d'une part le résultat 3D est plus rapide à obtenir avec Roofer, et d'autre part, les contours des toitures semblent plus nettes avec Roofer. TODO: illustrer avec un comparatif des toitures issues de Geoflow vs Roofer ### Configurer CityForge pour utiliser Roofer Pour que le traitement `LAS to PVGIS` puisse fonctionner correctement, il faut configurer CityForge en choisissant Roofer comme calculateur, depuis le menu `Préférences...` > `Options` > onglet CityForge, puis en suivant la [documentation de CityForge](https://oslandia.gitlab.io/qgis/cityforge/usage/installation.html#configuring-cityforge-plugin) pour configurer Roofer.