[general]
name=STAT GEOM QC
qgisMinimumVersion=3.16
qgisMaximumVersion=3.99
description=Quality control and geometric statistics for vector layers, with a correctness score and exportable report.
about=STAT GEOM QC analyses QGIS vector layers and detects quality issues: null or empty geometries, invalid geometries, self-intersections, overlaps/intersections between polygons, duplicates, small polygons (optional, configurable m² threshold), duplicate vertices (optional), holes in polygons (optional, with an area threshold so that large justified holes are kept) and multipart features. Overlap detection is strictly topological — interiors that intersect, however slightly, with no metric tolerance — so a shared boundary or a single point of contact is never reported. An "Extras" section adds three optional checks: sharp angles (spike vertices), vertices that are too close together, and the height of nested polygons - when a polygon lies entirely inside another, its elevation must be strictly greater than the containing polygon's. The AGL and HEIGHT fields are matched case-insensitively and each is compared with its own counterpart; only the inner polygon is flagged, a missing or non-numeric value makes the pair "not verifiable" rather than compliant, and a layer carrying neither field marks the check as not run instead of reporting zero. The overlap check has exactly two exceptions, both off by default and presented as sub-choices of the check itself: ignore overlaps caused by a missing vertex on the shared wall, and ignore polygons entirely contained in another. Neither has any threshold to set. Duplicate vertex detection is likewise threshold-free: only exactly superimposed vertices count. The panel header shows the installed version. Any indicator tied to a control that did not run is labelled "not requested" instead of a misleading zero, and such a control is excluded from the correctness score and its breakdown, so a score is never a verdict on a dimension that was never measured. It computes a weighted correctness score (0-100), shows a modern summary (gauge, indicators, breakdown) and produces an exportable report (HTML/CSV/JSON). Built-in QGIS actions: select flagged features, create a point error layer locating each issue exactly (self-intersection nodes for invalid geometries, representative point otherwise), and selective geometry repair (checkboxes) that writes the result to a NEW file without modifying the source layer. Native PyQGIS port of the STAT GEOM application, with no external dependencies.
version=2.9.31
author=Adel.bchini@gmail.com
email=adel.bchini@gmail.com
tags=quality,quality control,qc,geometry,validation,topology,statistics,vector,correctness,duplicates,overlaps,intersection,vertex,holes,multipart
category=Vector
icon=icon.svg
experimental=False
deprecated=False
homepage=https://github.com/Bchini/stat-geom-qc
tracker=https://github.com/Bchini/stat-geom-qc/issues
repository=https://github.com/Bchini/stat-geom-qc
changelog=2.9.31
    Cette version regroupe les changements accumulés depuis la 2.9.21, seule version publiée jusqu'ici.
    Ajouté
    - Nouveau contrôle « Hauteur des polygones inclus » (section Extras, décoché par défaut). Quand un polygone est entièrement inclus dans un autre, son altitude doit être STRICTEMENT supérieure à celle du polygone qui le contient : une superstructure posée sur un toit est plus haute que le bâtiment qui la porte. Égalité comprise dans l'anomalie.
    - Les champs AGL et HEIGHT sont reconnus quelle que soit la casse, et chacun est comparé à son homologue : AGL avec AGL, HEIGHT avec HEIGHT, jamais l'un avec l'autre. Seul le polygone inclus est signalé, car c'est sa valeur qui doit dépasser celle de son contenant.
    - Une altitude vide ou non numérique d'un côté rend la paire non vérifiable : elle est comptée à part, jamais tenue pour conforme. Sans champ AGL ni HEIGHT, le contrôle se marque « non exécuté » au lieu d'afficher un 0 qui se lirait comme un sans-faute. Aucune correction automatique n'est proposée : rien ne dit laquelle des deux altitudes est fausse.
    Corrigé
    - L'option « ignorer les chevauchements dus à un sommet manquant » restait sans effet sur plus de la moitié des cas visés. La règle n'était évaluée que si l'intersection donnait une surface mesurable ; sans elle, la paire était classée d'office en conflit compact, donc signalée malgré la case cochée.
    - Or c'est l'inverse : une intersection que GEOS réduit à une ligne, à des points ou à une aire nulle est le cas limite du recouvrement filiforme, celui dont l'épaisseur est nulle. Il survient précisément sur deux murs mitoyens dont les coordonnées diffèrent dans les derniers bits du flottant.
    - Mesure sur une couche de bâti réelle de 58 055 entités : 1 177 paires en recouvrement, dont 665 sans surface mesurable, et 663 d'entre elles portant la signature exacte du sommet manquant. Le panneau affichait 1 231 entités en chevauchement ; il en affiche 54, pour 28 paires réellement en conflit.
    - Rien n'est tu pour autant : case décochée, la règle reste « intersects et non touches », sans aucune tolérance. La couche d'erreurs pose désormais un point sur ces paires, introuvable jusqu'ici faute de partie surfacique.
    Modifié
    - Les deux exceptions de chevauchement — sommet manquant et polygones entièrement inclus — sont cochées par défaut dans les trois préréglages, « Approfondi » compris. Sur du bâti mitoyen elles couvrent l'écrasante majorité des cas : dans la mesure ci-dessus, 1 149 paires sur 1 177. Les livrer décochées revenait à présenter une liste d'erreurs inexploitable. Décocher reste à un clic.
    - Leur état est mémorisé d'une session à l'autre. Une migration efface la valeur enregistrée par les versions précédentes, sans quoi le nouveau défaut resterait invisible sur les profils existants.
    - Le moteur, lui, reste conservateur : AnalysisOptions() ne masque rien sans qu'on le lui demande, ce qui protège les analyses lancées par script.
    Interface
    - Chaque seuil rejoint la ligne du contrôle qu'il paramètre, avec son unité et le sens de la comparaison portés par le champ lui-même. Les sections passent de treize lignes à huit.
    - La section « Options d'analyse » ne se replie plus : elle dit ce qui sera réellement calculé. « Extras » reste repliable.
    - Le bouton « Exporter » devient « Rapport » : il nomme ce qu'on obtient plutôt que le geste, et sa première entrée ouvre le rapport sans rien écrire sur le disque. Les quatre entrées du menu sont inchangées.
    - La couche d'erreurs adopte le symbole « dot red » de la bibliothèque de styles QGIS, chargé depuis le catalogue et non recopié. Un cercle rouge de mêmes teintes prend le relais si la bibliothèque est absente.
    - Dans le rapport HTML, la section « Avertissements » remonte juste après « Indicateurs ».
    - La limite interne de 100 000 polygones au-delà de laquelle le contrôle des chevauchements était abandonné est supprimée : il s'exécute quelle que soit la taille de la couche.
