[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 checks the geometric quality of QGIS vector layers and rates it with a weighted correctness score (0-100), a visual summary and an exportable report (browser view, HTML file, PDF file). It detects null or empty geometries, invalid geometries and self-intersections, strictly topological overlaps between polygons (no metric tolerance, so a shared boundary is never reported), duplicates, small polygons, duplicate vertices, holes and multipart features, plus four optional Extras: sharp angles, vertices too close together, the height of nested polygons, and unnoded crossings between line features. A check that did not run, or that ran without being able to conclude, is labelled as such and left out of the score - never reported as a misleading zero. Built-in actions select the flagged features, build a point layer locating each anomaly, and offer a selective repair that writes a NEW file without ever modifying the source, with a per-correction preview computed on your own data beforehand and no partial output ever written. An optional analysis zone - a rectangle drawn on the map, or the current map extent - restricts everything to one tile at a time, in the panel as in the Processing algorithms; native PyQGIS, with no external dependencies.
version=2.9.48
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
hasProcessingProvider=yes
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.48
    Couche d'erreurs : un seul point par chevauchement
    - Un chevauchement entre deux batiments produisait DEUX points d'erreur quasi superposes, un par entite : l'inventaire paraissait deux fois plus fautif qu'il ne l'est et les etiquettes se genaient. Un seul point est desormais emis par paire, portant les deux identifiants (« entites 12 et 47 »). Le moteur continue d'en garder la trace des deux cotes, ce dont la surbrillance a besoin pour cadrer l'anomalie depuis l'un ou l'autre batiment : le dedoublonnage se fait a l'ecriture de la couche, pas dans l'analyse. Meme correction pour les croisements de lignes non nodes, qui souffraient du meme doublon.
    Etiquettes d'erreur affichees, y compris sur le fichier
    - Les etiquettes etaient coupees des que la couche depassait 500 points, au motif qu'elles se chevaucheraient — alors que QGIS ecarte deja de lui-meme les etiquettes en collision. Ce garde-fou privait donc de tout reperage les couches ou il sert le plus : elles sont maintenant toujours actives.
    - Un fichier de sortie ne portait aucune symbologie : un GeoPackage d'erreurs rouvert dans QGIS s'affichait en points gris sans etiquette, alors que la couche du panneau est coloree et etiquetee. Un fichier « .qml » est desormais depose a cote de la sortie, que QGIS lit automatiquement a l'ouverture — couleurs par type d'anomalie et etiquette « qc_error » comprises. La legende ne declare que les types reellement presents dans le fichier.
    - Placement des etiquettes passe en « autour du point » : elles se posaient PAR-DESSUS le marqueur et masquaient le point qu'elles decrivent.
    Rapport : CSV et JSON retires, PDF ajoute
    - Le rapport se decline desormais en TROIS formes : navigateur, fichier HTML, fichier PDF. Les exports CSV et JSON sont retires du menu du panneau comme de l'algorithme Processing (parametres OUTPUT_CSV et OUTPUT_JSON supprimes).
    - Le PDF est rendu depuis la version SIMPLIFIEE du rapport, celle ecrite pour le moteur de texte de Qt, et non depuis le rendu navigateur. Verifie par le rendu et non suppose : le rendu navigateur repose sur du SVG, du flexbox et du CSS grid dont Qt ne rend rien — la jauge de score disparait et les cartes d'indicateurs s'effondrent en « valeur puis libelle » a l'envers. Un en-tete avec le nom de la couche est ajoute, le resume ne comportant pas de titre.
    - A signaler : le JSON etait le canal lisible par MACHINE. Les sorties chainables de « statgeomqc:analyze » (score, nombre d'entites, compteurs) subsistent, mais un script qui lisait le JSON du rapport devra changer.
    - Le retrait du CSV supprime au passage toute la surface d'injection de formule tableur (CWE-1236) corrigee en 2.9.21 : plus de cellule, plus d'amorce a neutraliser. Le code devenu mort est retire.
    Tests
    - 194 tests passent. Le test d'injection CSV est remplace par un test des formats restants, qui verifie aussi qu'un nom de couche hostile ne s'injecte pas dans le PDF — en PARSANT le document, jamais par recherche de motif, « onerror= » apparaissant legitimement dans du texte echappe.
