Skip to content

Releases: julientournois/KarstPro-qgis

KarstPro v1.16.1

Choose a tag to compare

@julientournois julientournois released this 10 Aug 10:50

Corrigé

  • Aucun fond de carte en Wallonie. La 1.16.0 livrait le territoire wallon
    sans fond : un projet s'ouvrait sur du blanc. Deux services SPW sont branchés,
    vérifiés avant d'être déclarés — Ortho SPW (ORTHO_LAST, qui pointe
    toujours la dernière orthophoto : rien à maintenir au changement de millésime)
    et PICC, le fond topographique wallon, tous deux en EPSG:3812.
  • La carte de décision imprimée n'avait aucun fond hors de France. La liste
    des fonds était codée en dur avec les noms français (« Plan IGN », « SCAN25
    IGN »), introuvables ailleurs. Chaque fond porte désormais une clé
    impression dans le JSON de son territoire : c'est le territoire qui
    décide
    , plus la mise en page. L'orthophoto satellite en est écartée dans les
    trois pays — posée sur une feuille elle masquerait le fond topographique —
    mais elle reste dans le projet, activable à la main.

Note

  • Le smoke test des mises en page refuse maintenant une carte de décision sans
    fond de carte. Il comptait les couches sans regarder ce qu'elles étaient,
    et déclarait « OK » sur une feuille qui serait sortie vide.

KarstPro v1.16.0

Choose a tag to compare

@julientournois julientournois released this 10 Aug 09:39

Ajouté

  • Deux mises en page imprimables dans le projet QGIS généré, pour préparer
    une sortie sur papier (la navigation reste sur QField).
    • « Carte de décision »où aller : fond IGN, cibles P1 et P2
      étiquetées par leur doline_id, cibles déjà visitées, cavités connues,
      gouffres, réseau topographié.
    • « Carte morphologique »pourquoi c'est là : ombrage du MNT, tous
      les polygones de dolines, cibles P1/P2 par-dessus. Sur un ombrage on juge
      la forme, l'alignement et la densité.
    • Légende curée, jamais automatique : une légende automatique listerait
      l'hydrologie D8 (235 872 segments sur Bayard) et les 24 formations
      BD Charm-50. A3 paysage, barre d'échelle, flèche nord.
    • Le fond SCAN25 est empilé sur le Plan IGN plutôt que choisi : le SCAN25
      rend une couche vide sans erreur quand la clé est invalide, l'empilement
      supprime ce cas au lieu de tenter de le détecter.
    • Pas de carte morphologique si lidar_work/mnt.tif est absent — mieux vaut
      une mise en page manquante qu'une page ouverte sur une couche manquante.
  • Territoire Wallonie (expérimental), sélectionnable dans le menu Pays.
    Géologie karstifiable et contexte adossés à l'Atlas du Karst Wallon
    (9902 sites). MNT LiDAR 1 m 2021-2022 fourni à la main : aucun service
    wallon ne le sert (WCS INSPIRE sans couverture, ArcGIS en MapServer).
  • Type de capacité manuel pour les territoires dont le MNT n'est
    récupérable par aucune API — cas probablement majoritaire hors de France et
    d'Espagne. Fournir le MNT soi-même est une source, pas une absence.
  • Outils de validation réutilisables : validation/inventaire/valider_akwa.py
    (convention ASHM, comparable aux chiffres français), prototypes/cv_wallonie.py
    (validation croisée spatiale), prototypes/decouper_mnt.py.
  • Smoke tests headless pour « Préparer une étude » et pour la composition des
    mises en page — le smoke test existant ne couvrait pas ces algorithmes.

Corrigé

  • Les couches de cibles étaient écrites sans type de géométrie. Créées
    vides, leur GeoSeries non typée produisait une géométrie générique et le
    .qgs les déclarait « No geometry ». Aucune étiquette ne pouvait y être
    posée, et le même défaut empêche QField de reconnaître une couche de points.
  • Les libellés français de quatre couches valaient leur nom de table
    (cavites_georisques, bdtopo_eau, topo_reseau, courbes_niveau), alors
    que l'anglais avait de vrais noms : le panneau de couches était plus lisible
    en anglais qu'en français. cavites_connues n'avait aucun libellé.
  • Le type de capacité arcgis n'était pas générique : il ignorait l'URL
    déclarée et appelait l'IGME espagnol en dur.
  • cavites_connues n'était pas routée : la préparation appelait Géorisques
    (service français) quel que soit le territoire.
  • Le garde-fou de packaging ne comparait que les versions : ajouter un
    fichier après un build laissait l'artefact à la bonne version mais incomplet,
    et les tests échouaient au lieu de se sauter.
  • Le libellé de « MNT pré-téléchargés » annonçait « dernier recours en France,
    optionnel en Espagne » alors qu'en Wallonie c'est la seule source.

Vérifié

  • Wallonie / Calestienne mesurée, résultat NÉGATIF, piste close. Sur
    Rochefort (6437 dolines, 358 sites de l'Atlas) : à géologie constante le
    barème Barrois donne AUC 0,455, sous le hasard ; un modèle appris en
    validation croisée spatiale atteint 0,697, moins que le TPI 500 m inversé
    seul (0,736)
    . Le premier chiffre encourageant (0,770) était une tautologie
    comp_geologie seule fait 0,864. Détail et leçon transposable dans
    docs/JOURNAL_EXPERIENCES.md.

KarstPro v1.15.0

Choose a tag to compare

@julientournois julientournois released this 09 Aug 14:07

Ajouté

  • Identifiants de dolines stables entre préparations. Le fid GeoPackage
    est un rang d'écriture : dès qu'une doline apparaissait, disparaissait,
    fusionnait ou se scindait, toutes les suivantes se décalaient, et
    doline_1247 d'un rapport MLL ou d'une note de terrain devenait faux.
    Les dolines portent désormais une colonne doline_id, alimentée par un
    registre (table doline_ids du gpkg) et un appariement par recouvrement de
    polygones. Une doline qui disparaît puis réapparaît retrouve son
    identifiant ; un identifiant retiré n'est jamais recyclé ; une doline qui
    se scinde ne le conserve que si la plus grosse pièce représente au moins 60 %
    de la surface conservée.
    • Les études existantes conservent leurs numéros : le registre est amorcé
      sur les fid au premier passage.
    • Sur une étude neuve, le mécanisme est invisible : doline_id vaut le
      fid, comme avant. Il ne joue qu'à la re-détection suivante.
    • Le rapport MLL, le GPX, les regroupements, le CSV et le rapport PDF de la
      synchro nomment tous les dolines par cet identifiant.

Modifié

  • Formulaire de cible allégé : fid, doline_id, bassin_versant_m2,
    comp_geologie_dist_m et circularite sont masqués (les colonnes restent en
    table et au CSV de labels). Le fid y était devenu trompeur — affiché au-
    dessus de l'identifiant, il invitait à lire « doline n° 1 » sur la doline 1247.
  • Toutes les couches produites par KarstPro sont entièrement libellées :
    plus aucun nom de colonne brut sur dolines, cibles, gouffres ou
    courbes_niveau. Les couches de référence externes (Géorisques, BD TOPO,
    BD Charm-50) gardent le vocabulaire de leur fournisseur.
  • Les cibles portent bassin_versant_m2, comp_geologie_dist_m et
    circularite : le label d'une cible dont la doline a disparu reste
    exploitable au ré-entraînement au lieu de perdre trois features sur neuf.
  • La suppression des cibles déjà prospectées apparie par identifiant, avec la
    position (5 m) en repli — une doline re-détectée dont le centroïde a bougé de
    20 m n'est plus re-proposée à l'opérateur.

Corrigé

  • Labels d'entraînement corrompus par la re-préparation. Une cible visitée
    archivée porte l'identifiant de la préparation où elle a été visitée, et
    l'archive survit à la re-préparation. extract_terrain_labels la joignait par
    fid à la couche dolines fraîchement re-détectée : le verdict terrain
    recevait donc la morphométrie d'une doline sans rapport, et ce vecteur
    faux partait tel quel dans labels_terrain.csv. La jointure se fait
    maintenant par doline_id.
  • « Refaire une étude » plantait à chaque appel depuis la v1.14.0 :
    t("… {source}", source=…) entrait en collision avec le premier paramètre
    positionnel de t(), d'où un TypeError immédiat. Jamais publié, donc aucun
    utilisateur touché. Un test AST interdit désormais ce mot-clé.
  • Le journal de préparation annonçait « Dolines déjà calculées — étape ignorée »
    alors que la détection re-tournait réellement (MNT rempli en cache mais
    dolines.gpkg absent). C'est justement le cas où les identifiants peuvent
    bouger, et le journal est le seul endroit où le constater.

Retiré

  • Colonne score_positionnel des couches de cibles : écrite par le packaging,
    jamais produite par le scoring, jamais relue, absente du schéma. Toujours
    NULL, et affichée sur le formulaire de terrain.

Vérifié

  • Bout-en-bout sur Bayard (1806 dolines, 85 cibles visitées) : deux
    re-préparations headless après suppression de lidar_work/dolines.gpkg
    donc avec re-détection réelle, whitebox compris — puis deux « Refaire une
    étude » depuis l'interface QGIS. Dans tous les cas 1806/1806 identifiants
    conservés
    , aucun doublon, aucune cible archivée orpheline, les 85 noms de
    cibles visitées inchangés, géométries identiques à identifiant égal.
  • Robustesse de l'appariement mesurée sur ces mêmes 1806 polygones réels sous
    dérive du seuil de détection : 96,1 % des identifiants conservés à
    0,11 m, 92,7 % à 0,12 m, sans aucun doublon ni recyclage.

Note

  • Tant que lidar_work/ est intact, « Refaire une étude » saute la détection et
    relit les mêmes polygones : les identifiants ne bougeaient déjà pas. Ce
    chantier couvre le cas où la détection re-tourne réellement — dossier de
    travail supprimé, dossier de sortie neuf, nouvelle génération LiDAR IGN, ou
    changement de l'algorithme de détection.
  • Le registre vit dans le gpkg du dossier de sortie : re-préparer la même
    zone dans un dossier neuf, ou sous un autre nom de secteur, renumérote depuis
    1 (le journal l'indique alors par « première étude de ce dossier »).

KarstPro v1.13.0

Choose a tag to compare

@julientournois julientournois released this 08 Aug 09:44

Version multi-pays. Le pipeline nomme désormais ses besoins, jamais ses
fournisseurs : chaque territoire déclare comment il les satisfait, ou déclare
explicitement l'absence. Premier territoire ajouté : l'Espagne
(expérimentale).

Ajouté

  • Architecture territoires / capacités (core/territoires/) : 12 capacités
    requises (CRS de travail, MNT, géologie, contexte karstique, cavités connues,
    obstacles et végétation pour les gouffres, filtre anthropique, affaissement
    historique, modèle appris, fonds de carte, points d'eau karstiques). Chaque
    territoire les déclare toutes, par un fournisseur ou par Absente(raison).
    Trois contrôles d'exhaustivité refusent au démarrage une configuration
    incomplète, inconnue (faute de frappe) ou invalide (capacité obligatoire
    déclarée absente) — plutôt que d'échouer en cours de préparation.
  • Configuration déclarative par pays (config/territoires/*.json) : URLs,
    couches, champs et projection en configuration ; tout ce qui comporte une
    boucle, une condition ou une expression régulière reste du code.
  • Espagne (expérimentale) — menu Pays dans « Préparer une sortie » :
    • LiDAR PNOA 1 m automatique (CNIG), niveaux NPC01/02/03 avec sélection du
      plus élaboré par cellule de grille, progression par dalle et cache local
      identiques à la France ; repli MDT WCS 5 m si aucune dalle disponible.
    • Géologie IGME 1/50 000 puis 1/1 M, avec table de karstifiabilité.
    • CRS de travail ETRS89 / UTM 29N, 30N ou 31N, résolu depuis la longitude
      par table explicite (Canaries non couvertes).
    • Fonds de carte : ortho PNOA, plan MTN raster et IGN Base.
    • Filtrage des gouffres par SIOSE (INSPIRE Land Cover) : 535 → 40
      candidats/km² sur le secteur de test.
  • Garde de cohérence du cache lidar_work/ : un MNT en cache n'est réutilisé
    que s'il couvre réellement l'emprise demandée ; sinon il est signalé,
    supprimé avec ses dérivés, et recalculé. Avertissement également si le dossier
    de sortie contient déjà une autre étude.
  • Doublure qgis.core pour les tests (tests/qgis_stub.py) : les 6 modules
    d'algorithms/ deviennent testables sans QGIS installé.

Modifié

  • Le pays est choisi par un menu explicite et non plus déduit de l'emprise :
    une bbox à cheval sur une frontière n'a pas de réponse correcte.
  • Les paramètres propres à la France sont grisés et ignorés hors de France,
    avec la raison affichée dans le journal plutôt qu'un silence.
  • « MNT déjà présent » devient « MNT déjà présent et couvrant l'emprise » —
    un saut d'étape doit justifier sa validité, pas la supposer.

Corrigé

  • Dalles PNOA nommées par le coin haut-gauche, et non bas-gauche : la
    sélection était décalée d'une rangée vers le sud. Il manquait jusqu'à 999 m de
    LiDAR en haut de chaque emprise espagnole et une rangée entière était
    téléchargée pour rien en bas. Mesuré au mètre près sur deux études.
  • Cache lidar_work/ réutilisé sans contrôle : deux études préparées dans un
    même dossier de sortie produisaient des résultats parfaitement cohérents entre
    eux mais sur la zone de la première.
  • 5 corruptions silencieuses de CRS dues à des systèmes codés en dur
    (proximité aux cavités, Géorisques non conditionné, couche cavités vide,
    export MLL produisant des coordonnées à 1 500 km).
  • Projet QField figé en EPSG:2154 hors de France ; fond de carte PNOA jamais
    atteint (CRS transformé en chaîne au lieu de EPSG:xxxx, puis préfixe de
    fuseau EPSG:2582 faux pour les zones 30 et 31).
  • BDLISA et BD Topo (bases françaises) interrogées hors de France, donnant un
    avertissement « zone non karstique » trompeur en plein karst espagnol.
  • PNOA : faux « blocage » du CNIG (en-têtes navigateur manquants), Navarre sans
    aucun NPC01, dalles rangées hors de lidar_work/laz/, et laz_files vide à
    tort quand le MNT était déjà en cache (fausse mention « mode MNT manuel »).
  • Géologie IGME : inSR/outSR absents de la requête ArcGIS.
  • SIOSE : budget de réessais insuffisant face aux HTTP 502 du service espagnol,
    et découpe en quadrants au lieu d'une pagination profonde (le temps de réponse
    doublait avec STARTINDEX).

KarstPro v1.12.0

Choose a tag to compare

@julientournois julientournois released this 29 Jul 19:06

Ajouté

  • Signal RGE ALTI — affaissement historique (core/rgealti.py) : différence
    entre le MNT LiDAR HD actuel et un relevé LiDAR ancien de l'IGN (RGE ALTI,
    souvent 2009-2016), biais systématique retiré (fond régional 50 m, numpy
    pur). Contrôle qualité obligatoire (rugosité du relevé local) qui écarte
    automatiquement les zones de corrélation photogrammétrique (non-LiDAR).
    Dolines concernées : colonnes rge_contrast_m/rge_eligible, anneau
    cyan sur la carte, section dédiée du rapport MLL. Nouveau paramètre
    avancé SIGNAL_RGEALTI (activé par défaut).
  • Contrairement au signal ponctuel (pc_*, purement informatif), ce
    signal CONTRIBUE AU SCORE
    — mais uniquement là où c'est validé.
    Intégré au modèle Barrois (gain LOCO +0,0089, positif sur les 4
    secteurs de calibration individuellement). Testé et REJETÉ sur le Lot
    (-0,0151) et le Jura plateau (-0,0015) : hypothèse retenue, le signal capte
    un affaissement propre au karst sous couverture sédimentaire, sans
    équivalent sur du karst à nu (causses, plateaux). Détail complet des
    trois domaines : docs/JOURNAL_EXPERIENCES.md.

Modifié

  • Fenêtre « Préparer une sortie » simplifiée : CONTOUR_INTERVAL et
    SEUIL_SURFACE_PC retirés des paramètres avancés (réglages quasiment
    jamais changés d'une préparation à l'autre). Toujours modifiables en
    éditant karstpro_etude.json puis en relançant « Refaire une étude » —
    aucune perte de fonctionnalité, juste moins de champs à l'écran.

KarstPro v1.11.1

Choose a tag to compare

@julientournois julientournois released this 28 Jul 05:49

Documentation uniquement : investigation des pistes d'amélioration de la détection (intensité LiDAR, InSAR/EGMS, coupes de forage BSS/BRGM, recall multi-secteurs, signal ponctuel en détecteur autonome). Aucun changement de comportement du plugin. Détail complet dans docs/JOURNAL_EXPERIENCES.md (dépôt privé).

KarstPro v1.11.0

Choose a tag to compare

@julientournois julientournois released this 26 Jul 19:59

Version mineure et non corrective : trois comportements par défaut
changent (seuil de surface du signal ponctuel, visibilité/position de la
couche dolines, critère de sélection des gouffres dans l'export MLL) et un
nouveau fichier de sortie apparaît. Une préparation relancée sur un secteur
existant donnera donc des résultats sensiblement différents — en mieux, mais
différents.

Ajouté

  • Export MLL : les gouffres jamais visités deviennent des cibles à part
    entière.
    Nouveau fichier mll_gouffres_<secteur>_<date>.csv (fichier
    séparé de celui des dolines : un puits se décrit par diamètre/compacité,
    une doline par surface/profondeur/score — aucune colonne commune, les
    fusionner donnerait un tableau à moitié vide). La section du rapport est
    réécrite en conséquence : l'IA est explicitement informée que ce sont des
    cibles au même titre que les dolines, pas seulement un renfort d'hypothèse.

Corrigé

  • ~90 % des gouffres à prospecter étaient absents du rapport MLL. La
    section ne listait que les candidats à ≤ 100 m d'une cible rouge/orange
    (plafond 40 lignes), un filtre conçu à l'époque pour masquer les centaines
    de faux positifs de canopée. Depuis que la canopée est auto-déclassée en
    interet = 0 (core/shafts.py), ce filtre de distance ne servait plus qu'à
    perdre de vrais puits : mesuré le 2026-07-26, Marnaval 111/124 perdus,
    Beurey 22/23, Sommelonne 2/2
    — dont le plus gros puits du secteur
    (Ø 17,4 m, à 163 m de la doline la plus proche). Le tri se fait désormais
    sur interet == -1 (jamais visité), sans contrainte de distance ; la
    distance reste affichée comme information de regroupement. La colonne
    interet n'était d'ailleurs même pas lue par l'export.
  • BDLISA : le journal annonçait « ✓ Zone karstique confirmée » sans avoir
    rien vérifié.
    Le serveur eaufrance redirige désormais http→https (301)
    mais son handshake TLS échoue (UNEXPECTED_EOF_WHILE_READING, reproduit en
    TLS brut avec ET sans vérification de certificat) : la vérification partait
    systématiquement en fail-open, qui renvoie True par principe. Nouvelle
    fonction check_bdlisa_karst_status renvoyant (karstique, vérifié)
    l'API booléenne historique est conservée. Le message devient « ⚠ Service
    BDLISA indisponible — contexte karstique NON vérifié ». L'appel passe au
    passage en https:// (le serveur redirige de toute façon). Le fail-open
    est inchangé : une panne externe ne bloque jamais une préparation.

Modifié

  • Signal ponctuel : deux limites mesurées et documentées. (1)
    Sous-détection sous canopée fermée — la méthode exige que des derniers
    retours atteignent le fond du puits ; sous forêt dense il en reste trop peu.
    Mesuré sur Marnaval : 7,4 % de dolines avec signal sous canopée contre
    11,4 % à découvert, et deux fois moins de points par cellule (médiane 74
    contre 134). L'absence de signal n'infirme donc rien, surtout en secteur
    boisé — cette phrase manquait partout, alors qu'elle existait déjà pour les
    gouffres. Ajoutée au guide, à la doc technique, au journal d'expériences et
    au rapport MLL (qui affirmait par ailleurs, à tort depuis la validation, ne
    pas être « encore validé contre un inventaire »). (2) Biais de
    découvrabilité testé et largement écarté
    : les dolines à signal sont plus
    proches du bâti (médiane 128 m contre 318 m), mais en ne gardant que les
    1131 dolines à plus de 500 m de tout bâti, le signal conserve un ratio de
    4,9× (16,2 % contre 3,3 %) — la corrélation ne s'explique donc pas par
    l'accessibilité. La doc technique rappelle aussi que toute cette validation
    reste un proxy (cavités déjà connues), et chiffre le coût d'une vraie
    validation terrain (~158 visites appariées pour l'effet observé).
  • Détection ponctuelle de puits : le seuil de surface par défaut passe de
    50 m² à « toutes les dolines ».
    L'hypothèse initiale (« le signal n'est
    fiable que sur les petites dolines ») n'avait jamais été vérifiée — elle est
    fausse. Mesuré sur 5 secteurs contre les inventaires de cavités connues
    (rayon 20 m), le signal est au moins aussi prédictif au-delà de 50 m² :
    Marnaval 7,2× (contre 2,6× sous le seuil), Molain 12,8× (4,1×),
    Arc-sous-Cicon 7,1× (5,2×), Besain 4,0× (3,9×), Beurey 4,6× (4,9×). Le taux
    de détection reste stable (8,6–9,0 %) quel que soit le seuil : pas
    d'explosion de faux positifs. L'ancien défaut excluait donc la population où
    le signal marche le mieux, et qui contient 78 % des dolines rouges
    (57/73 sur Marnaval — le nombre de rouges avec signal y passe de 12 à 29).
    Le paramètre reste réglable (0 = désactivé, valeur basse = petites dolines
    seulement).
  • Couche dolines : repositionnée et visible par défaut. Elle passe sous
    les points de prospection (cibles, gouffres) et au-dessus des couches de
    contexte (Géorisques, bdtopo_eau, hydro, géologie) — un polygone ne doit pas
    masquer les points. Elle n'est plus décochée à l'ouverture : elle l'était
    tant qu'elle n'avait aucune symbologie exploitable (son style catégorisé
    n'était en fait jamais chargé), or elle porte désormais la couleur de
    priorité et l'anneau du signal ponctuel — la masquer revenait à cacher
    ces deux informations.
  • Documentation de la détection ponctuelle de puits, jusqu'ici absente
    partout sauf du CHANGELOG : nouvelle section §2.4 dans
    DOC_TECHNIQUE_DETECTION.md (méthode, seuils, piège d'alignement des
    grilles PDAL, validation 8 secteurs), encadré dédié dans le guide
    utilisateur (donc dans le PDF) avec les 3 colonnes pc_* en table de
    référence, et ligne chiffrée dans JOURNAL_EXPERIENCES.md.
  • Aide des fenêtres : « Exporter pour analyse MLL » distingue désormais
    explicitement ce qui est à fournir au chat IA de ce qui ne l'est pas
    (le GPX est pour le terrain) ; « Préparer une sortie » documente enfin le
    paramètre de détection ponctuelle de puits (livré en 1.10.0, jamais
    mentionné dans l'aide).
  • Guide utilisateur : la capture du dossier de sortie est remplacée par une
    arborescence texte
    — l'image datait de juin et ne montrait plus les bons
    fichiers d'export. L'image inutilisée est supprimée du dépôt.
  • Avertissement clé API SCAN25 : la clé est écrite en clair dans le
    .qgs et karstpro_etude.json, qui partent sur QFieldCloud et le
    téléphone — ne pas partager ces fichiers, révoquer la clé en cas de doute.
  • Filtre anthropique : trois affirmations fausses corrigées. Le docstring
    annonçait les flags 'zone_activite'/'bati' (jamais produits), un
    commentaire parlait de « carrière/zone d'activité/bâti », et le message de
    log runtime affichait « carrières / zones d'activité ». Le filtre ne traite
    que les carrières — le bâti est volontairement exclu (un bâtiment n'est
    pas une dépression), choix désormais justifié par la mesure dans le code.

KarstPro v1.10.2

Choose a tag to compare

@julientournois julientournois released this 25 Jul 08:16

Modifié

  • Symboles de carte plafonnés à 2 mm, unité déclarée explicitement
    (size_unit=MM, plutôt que de dépendre du défaut QGIS). L'anneau du
    signal ponctuel passe de 4 à 2 mm (trait 0,8 → 0,4 mm) — au-delà, il
    débordait des petites dolines qu'il signale justement (le signal ne
    concerne que les dolines sous le seuil de surface, souvent quelques m²).
    Les gouffres passent de 2-4 mm à 1-2 mm, écarts relatifs entre catégories
    conservés : en secteur boisé dense, des dizaines de milliers de gouffres
    détectés (cf. core/shafts.py) se chevauchaient à l'ancienne taille.

KarstPro v1.10.1

Choose a tag to compare

@julientournois julientournois released this 25 Jul 06:53

Ajouté

  • Export MLL : CSV de données par doline (mll_data_<secteur>_<date>.csv,
    mêmes lignes que le JSON déjà joint, colonnes = union dynamique des
    attributs présents). Remplace les tableaux markdown P1 (toutes les rouges)
    • P2 (30 premières oranges) auparavant embarqués dans le .txt — pure
      redondance avec le JSON. Prompt Marnaval : 133 706 → 119 471 caractères.
  • Symbole « signal ponctuel » intégré aux dolines/à la carte de contexte
    MLL.
    Anneau noir posé au centroïde de chaque doline avec un signal
    pc_plongee_m (cf. v1.10.0), intégré DANS le symbole de remplissage de
    chaque catégorie de priorité (QgsCentroidFillSymbolLayer, actif via une
    propriété data-defined) plutôt qu'une couche point séparée à garder
    alignée. Même repère (restreint P1/P2) ajouté à la carte de contexte PNG
    de l'export MLL, avec légende dédiée. Décidé après validation croisée
    positive sur 8 secteurs réels (ratio 2,2x-6x de cavités connues à
    proximité d'une doline signalée vs sans signal, session du 2026-07-25).

Modifié

  • Export MLL : le GPX n'est plus régénéré par le LLM. Le fichier
    .gpx (coordonnées exactes) est écrit une seule fois par script et n'est
    plus embarqué dans le prompt ni joint au message MLL — redondant avec un
    fichier déjà correct, et un vrai risque de dégradation silencieuse
    (troncature/doublon) en lui demandant de réémettre des centaines de
    <wpt>. La mission se limite désormais à donner l'ordre de visite
    (liste d'IDs par journée de prospection, quelques lignes) ; le .gpx
    reste trié par score brut, à réordonner à la main sur le terrain si
    besoin.

Corrigé

  • Blocage de 8h+ à la préparation de grands secteurs boisés (Poligny,
    Chaux-Neuve). Cause : shafts.py déclasse automatiquement en
    interet=0 tout gouffre détecté sous canopée fermée (faux positifs
    LiDAR) — sur un secteur boisé, ça représente la quasi-totalité des
    gouffres détectés (117 267/118 060 sur Poligny). Le carryover
    (capture_investigated_gouffres) confondait ce déclassement automatique
    avec un vrai verdict terrain humain, et apply_gouffres_carryover les
    appariait par une double boucle Python sans index spatial —
    jusqu'à ~14 milliards de comparaisons. Remplacé par un index spatial
    (shapely.strtree.STRtree) dans apply_gouffres_carryover et
    _suppress_cibles_near : même volume réel vérifié en 19,5 s au lieu de
    8h+. Question de comportement non tranchée (hors scope de ce correctif) :
    un gouffre auto-déclassé canopée ne sera donc jamais reproposé comme
    cible fraîche à une re-préparation, même si personne ne l'a vraiment
    regardé.
  • prototypes/validate_pc_signal.py : comparaisons de distance fausses
    si l'inventaire de cavités connues n'est pas en EPSG:2154.
    Trouvé en
    conditions réelles (inventaire ASHM en EPSG:4326 contre un secteur en
    Lambert-93) : les distances comparaient des degrés à des mètres, donnant
    0% de correspondance sans rapport avec le signal réel. Reprojection
    automatique (pyproj.Transformer) ajoutée avant comparaison.
  • La coloration des couches dolines (par priorité) et gouffres (par
    intérêt) ne s'est probablement jamais appliquée
    , dans aucune version
    publiée — ni dans le .qgs, ni en ouvrant le gpkg brut hors projet.
    Deux bugs cumulés : (1) _embed_styles codait en dur le nom de colonne
    géométrie "geometry" dans la table layer_styles du gpkg, alors que
    pyogrio/GDAL nomme réellement cette colonne "geom" pour un GeoPackage —
    QGIS ne retrouvait donc jamais le style associé à ces couches ; (2) même
    corrigé, le QML embarqué (_DOLINES_QML/_GOUFFRES_QML) définissait ses
    symboles en ligne dans chaque <category> au lieu de les référencer
    depuis le bloc <symbols> (format non standard) — QGIS chargeait le bon
    type de renderer et l'attribut, mais avec zéro catégorie utilisable.
    Corrigé en reconstruisant les deux renderers via l'API QGIS
    (_style_dolines, _style_gouffres, mêmes couleurs qu'avant) plutôt
    que via QML écrit à la main.

KarstPro v1.10.0

Choose a tag to compare

@julientournois julientournois released this 24 Jul 12:16

Ajouté

  • Détection ponctuelle de puits depuis le nuage de points brut (Phase 1,
    informatif).
    Nouveau signal complémentaire aux dolines/gouffres : sous
    un seuil de surface configurable (défaut 50 m²), compare l'altitude
    minimale des DERNIERS RETOURS LiDAR bruts (pas seulement les points
    classés sol) à une référence de voisinage local — révèle parfois une
    profondeur qu'un puits étroit ne laisse pas voir au MNT lissé (validé sur
    20+ cas réels, 3 secteurs, 2 régions géologiques, session du
    2026-07-23/24 — voir
    docs/superpowers/specs/2026-07-24-detection-ponctuelle-puits-design.md).
    Nouvelles colonnes pc_plongee_m, pc_dist_m, pc_n_points sur la
    couche dolines, purement informatives — n'affecte jamais le score, la
    priorité, ni le modèle appris. Nouvelle section dans le rapport MLL
    (repère 🔻). Best-effort : ignoré proprement en mode MNT manuel (nuage de
    points brut indisponible) ou si le seuil de surface est mis à 0. Script
    de validation croisée avec les cavités connues (prototypes/validate_pc_signal.py)
    pour accumuler de la preuve avant une éventuelle Phase 2 (intégration au
    modèle appris + réentraînement).
    ⚠️ Bug réel trouvé et corrigé en vérifiant sur données réelles (Marnaval)
    avant de livrer : le raster des derniers retours et le MNT étaient générés
    par deux appels PDAL séparés, chacun calant sa propre grille sur l'emprise
    de ses points — décalage de quelques dixièmes de mètre entre les deux. Un
    rééchantillonnage naïf (fenêtre + out_shape) comparait alors des
    cellules sans rapport, produisant des « plongées » de 30 à 50 m au lieu
    des 2 à 5 m réels. Corrigé en forçant generate_pc_rasters à aligner sa
    grille pixel pour pixel sur celle du MNT (origin_x/origin_y/width/
    height de writers.gdal) — plus besoin de rééchantillonnage, lecture
    directe. Re-vérifié sur Marnaval après correction (plongées 2,9-5,2 m,
    cohérentes avec les cas réels connus).