From bd514054bf52f0f35d5b6010a8ebc3159886f473 Mon Sep 17 00:00:00 2001 From: Alex38Lyon <55714436+Alex38Lyon@users.noreply.github.com> Date: Fri, 25 Sep 2026 18:37:51 +0200 Subject: [PATCH] update pyThStats --- .../DB_Synthese-PSM_LARRA_histo.pdf | Bin 12008 -> 12008 bytes .../DB_Synthese-PSM_LARRA_log.log | 481 +++++ .../DB_Synthese-PSM_LARRA_rose.pdf | Bin 17463 -> 17463 bytes .../DB_Synthese-PSM_LARRA_stats.csv | 454 ++--- .../DB_Synthese-PSM_LARRA_stats.db | Bin 19320832 -> 19320832 bytes .../DB_Synthese-PSM_LARRA_stats.md | 4 +- .../DB_Synthese-PSM_LARRA_year.pdf | Bin 13137 -> 13137 bytes .../DB_Synthese-PSM_LARRA_yearCum.pdf | Bin 14642 -> 14642 bytes Outputs/readme.md | 259 +++ Scripts/pyCreateTh.log | 11 + .../pyCreateTh/Template/Outputs/Outputs.md | 2 + .../pyCreateTh/Template/Outputs/outputs.txt | 2 - .../pyCreateTh/Template/Sources/Sources.md | 2 + Scripts/pyCreateTh/Template/template.thconfig | 20 +- Scripts/pyCreateTh/config.ini | 25 +- Scripts/pyCreateTh/therion.log | 7 - .../__pycache__/global_data.cpython-314.pyc | Bin 789 -> 822 bytes Scripts/pyThStat/Lib/global_data.py | 6 +- Scripts/pyThStat/pythStat.py | 1718 +++++++---------- 19 files changed, 1707 insertions(+), 1284 deletions(-) create mode 100644 Outputs/readme.md create mode 100644 Scripts/pyCreateTh.log create mode 100644 Scripts/pyCreateTh/Template/Outputs/Outputs.md delete mode 100644 Scripts/pyCreateTh/Template/Outputs/outputs.txt create mode 100644 Scripts/pyCreateTh/Template/Sources/Sources.md delete mode 100644 Scripts/pyCreateTh/therion.log diff --git a/Outputs/DB_Synthese-PSM_LARRA_Stats/DB_Synthese-PSM_LARRA_histo.pdf b/Outputs/DB_Synthese-PSM_LARRA_Stats/DB_Synthese-PSM_LARRA_histo.pdf index aeeafd08e208312d2f37c6933cf0d8e97af2a49e..7d5480497ddccaa228125663aed320db34bc45dc 100644 GIT binary patch delta 21 ccmaD6`yzIOsWyj^siB3jk&)$QTkX}%09nNc3;+NC delta 21 ccmaD6`yzIOsWyj!v5}#vv4O>ATkX}%09jrK0ssI2 diff --git a/Outputs/DB_Synthese-PSM_LARRA_Stats/DB_Synthese-PSM_LARRA_log.log b/Outputs/DB_Synthese-PSM_LARRA_Stats/DB_Synthese-PSM_LARRA_log.log index 0d9e893..cb735d5 100644 --- a/Outputs/DB_Synthese-PSM_LARRA_Stats/DB_Synthese-PSM_LARRA_log.log +++ b/Outputs/DB_Synthese-PSM_LARRA_Stats/DB_Synthese-PSM_LARRA_log.log @@ -548,3 +548,484 @@ on 31827: 2026-09-03 11:29:12,208 - INFO - Jonction à la Station_ID: 25261 entr 2026-09-03 21:52:03,224 - INFO - Table des STATION, entrée et fix nbre: 194 2026-09-03 21:53:08,640 - INFO - Phase 5: Fin de traitement en 02 (m) 32 (s), résultats enregistrés dans ~\Outputs\DB_Synthese-PSM_LARRA_Stats\DB_Synthese-PSM_LARRA_stats 2026-09-03 21:53:08,641 - INFO - Execution terminée sans erreur en 02(m)32(s) +2026-09-25 08:56:02,559 - INFO - *********************************************************************************************************************** +2026-09-25 08:56:02,560 - INFO - * Calcul des statistiques par entrées d'une BD Therion * +2026-09-25 08:56:02,560 - INFO - * Script pyThStat par : alexandre.pont@yahoo.fr * +2026-09-25 08:56:02,561 - INFO - * Version : 2026.09.03 * +2026-09-25 08:56:02,561 - INFO - * Fichier source : ~\Synthese-PSM_LARRA\Outputs\DB_Synthese-PSM_LARRA.sql * +2026-09-25 08:56:02,561 - INFO - * Dossier destination : ~\Synthese-PSM_LARRA\Outputs\DB_Synthese-PSM_LARRA_Stats * +2026-09-25 08:56:02,561 - INFO - * Date : 2026-09-25 08h56m02s * +2026-09-25 08:56:02,561 - INFO - * Mode : sync * +2026-09-25 08:56:02,562 - INFO - *********************************************************************************************************************** +2026-09-25 08:56:02,563 - INFO - Phase 1: Importation de la base de données Therion ~\Synthese-PSM_LARRA\Outputs\DB_Synthese-PSM_LARRA.sql dans: ~\Outputs\DB_Synthese-PSM_LARRA_Stats\DB_Synthese-PSM_LARRA_stats.db +2026-09-25 08:56:05,441 - INFO - Phase 2: Création des nouvelles tables, indexation +2026-09-25 08:56:05,737 - INFO - Jonction de SHOT equates nbre: 2580 +2026-09-25 08:59:36,514 - WARNING - Table des SHOT, visée(s) bloquante(s), même départ et arrivée, longueur nulle supprimée(s) nbre: 1688 +2026-09-25 08:59:38,323 - INFO - Table des SHOT, visées dupliquées traités nbre: 19 +2026-09-25 08:59:38,538 - INFO - Création de l'index des tables principales et optimisation de la mémoire +2026-09-25 08:59:38,688 - INFO - Marquage des visées et des stations d'habillage nbre: 19021 +2026-09-25 09:00:39,424 - INFO - Phase 3: Remplissage des tables d'après les 64171 entrée(s) +2026-09-25 09:00:39,431 - INFO - Table des STATION, entrée et fix nbre: 194 +2026-09-25 09:00:39,479 - INFO - Phase 4: Remplissage des tables d'après les séries vides jonctionnées aux 194 entrée(s) +on 1423: 2026-09-25 09:00:57,496 - INFO - Jonction à la Station_ID: 49335 entre les entrées 49456 et 49327 +on 3318: 2026-09-25 09:01:18,885 - INFO - Jonction à la Station_ID: 229 entre les entrées 218 et 834 +on 3357: 2026-09-25 09:01:19,690 - INFO - Jonction à la Station_ID: 3525 entre les entrées 3455 et 3525 +on 6351: 2026-09-25 09:02:12,376 - INFO - Jonction à la Station_ID: 1666 entre les entrées 1613 et 2784 +on 9158: 2026-09-25 09:03:31,987 - INFO - Jonction à la Station_ID: 3348 entre les entrées 3358 et 3397 +on 9594: 2026-09-25 09:03:47,553 - INFO - Jonction à la Station_ID: 48093 entre les entrées 49183 et 48104 +on 9622: 2026-09-25 09:03:51,206 - INFO - Jonction à la Station_ID: 49838 entre les entrées 49183 et 49803 +on 10275: 2026-09-25 09:04:05,069 - INFO - Jonction à la Station_ID: 40146 entre les entrées 38328 et 39667 +on 12587: 2026-09-25 09:05:03,907 - INFO - Jonction à la Station_ID: 47396 entre les entrées 48104 et 47360 +on 13062: 2026-09-25 09:05:14,849 - INFO - Jonction à la Station_ID: 9041 entre les entrées 10902 et 8905 +on 15553: 2026-09-25 09:06:21,984 - INFO - Jonction à la Station_ID: 12059 entre les entrées 10902 et 12987 +on 16763: 2026-09-25 09:06:51,965 - INFO - Jonction à la Station_ID: 9337 entre les entrées 14852 et 10902 +on 16763: 2026-09-25 09:06:51,978 - INFO - Jonction à la Station_ID: 9337 entre les entrées 14852 et 10902 +on 16817: 2026-09-25 09:06:54,158 - INFO - Jonction à la Station_ID: 9547 entre les entrées 9884 et 9366 +on 17832: 2026-09-25 09:07:27,488 - INFO - Jonction à la Station_ID: 12777 entre les entrées 10902 et 14852 +on 17833: 2026-09-25 09:07:27,618 - INFO - Jonction à la Station_ID: 9338 entre les entrées 10902 et 14852 +on 17833: 2026-09-25 09:07:27,730 - INFO - Jonction à la Station_ID: 12777 entre les entrées 10902 et 14852 +on 18972: 2026-09-25 09:07:55,769 - INFO - Jonction à la Station_ID: 12771 entre les entrées 14852 et 9366 +on 19046: 2026-09-25 09:07:58,773 - INFO - Jonction à la Station_ID: 17222 entre les entrées 16774 et 10902 +on 21114: 2026-09-25 09:09:00,518 - INFO - Jonction à la Station_ID: 15570 entre les entrées 8905 et 9366 +on 21600: 2026-09-25 09:09:17,328 - INFO - Jonction à la Station_ID: 47077 entre les entrées 49183 et 49089 +on 23056: 2026-09-25 09:09:59,072 - INFO - Jonction à la Station_ID: 15611 entre les entrées 9366 et 8905 +on 23137: 2026-09-25 09:10:01,400 - INFO - Jonction à la Station_ID: 15557 entre les entrées 8905 et 9366 +on 23142: 2026-09-25 09:10:01,511 - INFO - Jonction à la Station_ID: 9477 entre les entrées 8905 et 14852 +on 23144: 2026-09-25 09:10:01,966 - INFO - Jonction à la Station_ID: 9834 entre les entrées 14852 et 11338 +on 24975: 2026-09-25 09:11:03,202 - INFO - Jonction à la Station_ID: 16242 entre les entrées 15665 et 14852 +on 25697: 2026-09-25 09:11:32,706 - INFO - Jonction à la Station_ID: 16259 entre les entrées 10902 et 14852 +on 25981: 2026-09-25 09:11:44,327 - INFO - Jonction à la Station_ID: 50263 entre les entrées 50909 et 50130 +on 28328: 2026-09-25 09:12:48,062 - INFO - Jonction à la Station_ID: 9522 entre les entrées 16789 et 9366 +on 28497: 2026-09-25 09:12:55,373 - INFO - Jonction à la Station_ID: 44662 entre les entrées 49456 et 43628 +on 29909: 2026-09-25 09:13:40,650 - INFO - Jonction à la Station_ID: 44814 entre les entrées 48104 et 49456 +on 30963: 2026-09-25 09:14:09,628 - INFO - Jonction à la Station_ID: 16483 entre les entrées 15665 et 10902 +on 31414: 2026-09-25 09:14:28,590 - INFO - Jonction à la Station_ID: 17453 entre les entrées 19538 et 17667 +on 31827: 2026-09-25 09:14:37,289 - INFO - Jonction à la Station_ID: 25261 entre les entrées 27454 et 24729 +2026-09-25 09:21:27,889 - INFO - Intégrations des visées orphelines (entre 2 stations existantes) nbre: 340 +2026-09-25 09:21:35,555 - INFO - Réseau: 1, entrées jonctionnées: 10, [11338, 14852, 8905, 9366, 10902, 15665, 9884, 16789, 12987, 16774] +2026-09-25 09:21:35,742 - INFO - Réseau: 2, entrées jonctionnées: 2, [3397, 3358] +2026-09-25 09:21:36,412 - INFO - Réseau: 3, entrées jonctionnées: 8, [43628, 49456, 48104, 49327, 47360, 49183, 49089, 49803] +2026-09-25 09:21:36,558 - INFO - Réseau: 4, entrées jonctionnées: 2, [1613, 2784] +2026-09-25 09:21:36,802 - INFO - Réseau: 5, entrées jonctionnées: 2, [3455, 3525] +2026-09-25 09:21:36,973 - INFO - Réseau: 6, entrées jonctionnées: 2, [24729, 27454] +2026-09-25 09:21:37,459 - INFO - Réseau: 7, entrées jonctionnées: 2, [834, 218] +2026-09-25 09:21:37,559 - INFO - Réseau: 8, entrées jonctionnées: 2, [38328, 39667] +2026-09-25 09:21:37,708 - INFO - Réseau: 9, entrées jonctionnées: 2, [50130, 50909] +2026-09-25 09:21:37,862 - INFO - Réseau: 10, entrées jonctionnées: 2, [17667, 19538] +2026-09-25 09:21:37,863 - WARNING - Phase 4: Fin du remplissage des tables, attention 82 station(s) non comptabilisé(s) +2026-09-25 09:21:38,027 - INFO - Phase 5: Écriture des statistiques dans le fichier: ~\Outputs\DB_Synthese-PSM_LARRA_Stats\DB_Synthese-PSM_LARRA_stats +2026-09-25 09:21:38,030 - INFO - Table des CENTRELINE, longueur: [(340302.67, 15575.02, 8956.61)] +2026-09-25 09:24:08,764 - INFO - Table des STATION, entrée et fix nbre: 194 +2026-09-25 09:26:05,872 - WARNING - Phase 5: Fin de traitement en 30 (m) 03 (s), avec 1 erreur(s), résultats enregistrés dans ~\Outputs\DB_Synthese-PSM_LARRA_Stats\DB_Synthese-PSM_LARRA_stats +2026-09-25 09:26:05,878 - WARNING - Execution terminée avec 1 erreurs en 30(m)03(s), verifier le log +2026-09-25 09:28:23,185 - INFO - *********************************************************************************************************************** +2026-09-25 09:28:23,185 - INFO - * Calcul des statistiques par entrées d'une BD Therion * +2026-09-25 09:28:23,185 - INFO - * Script pyThStat par : alexandre.pont@yahoo.fr * +2026-09-25 09:28:23,186 - INFO - * Version : 2026.09.25 * +2026-09-25 09:28:23,186 - INFO - * Fichier source : ~\Synthese-PSM_LARRA\Outputs\DB_Synthese-PSM_LARRA.sql * +2026-09-25 09:28:23,186 - INFO - * Dossier destination : ~\Synthese-PSM_LARRA\Outputs\DB_Synthese-PSM_LARRA_Stats * +2026-09-25 09:28:23,186 - INFO - * Date : 2026-09-25 09h28m23s * +2026-09-25 09:28:23,187 - INFO - * Mode : sync * +2026-09-25 09:28:23,187 - INFO - *********************************************************************************************************************** +2026-09-25 09:28:23,188 - INFO - Phase 1: Importation de la base de données Therion ~\Synthese-PSM_LARRA\Outputs\DB_Synthese-PSM_LARRA.sql dans: ~\Outputs\DB_Synthese-PSM_LARRA_Stats\DB_Synthese-PSM_LARRA_stats.db +2026-09-25 09:28:25,913 - INFO - Phase 2: Création des nouvelles tables, indexation +2026-09-25 09:28:26,225 - INFO - Jonction de SHOT equates nbre: 2580 +2026-09-25 09:32:19,773 - WARNING - Table des SHOT, visée(s) bloquante(s), même départ et arrivée, longueur nulle supprimée(s) nbre: 1688 +2026-09-25 09:32:22,495 - INFO - Table des SHOT, visées dupliquées traités nbre: 19 +2026-09-25 09:32:22,883 - INFO - Création de l'index des tables principales et optimisation de la mémoire +2026-09-25 09:32:23,057 - INFO - Marquage des visées et des stations d'habillage nbre: 19021 +2026-09-25 09:33:49,244 - INFO - Phase 3: Remplissage des tables d'après les 64171 entrée(s) +2026-09-25 09:33:49,251 - INFO - Table des STATION, entrée et fix nbre: 194 +2026-09-25 09:33:49,296 - INFO - Phase 4: Remplissage des tables d'après les séries vides jonctionnées aux 194 entrée(s) +on 1423: 2026-09-25 09:34:07,005 - INFO - Jonction à la Station_ID: 49335 entre les entrées 49456 et 49327 +on 3318: 2026-09-25 09:34:28,031 - INFO - Jonction à la Station_ID: 229 entre les entrées 218 et 834 +on 3357: 2026-09-25 09:34:28,795 - INFO - Jonction à la Station_ID: 3525 entre les entrées 3455 et 3525 +on 6351: 2026-09-25 09:35:03,177 - INFO - Jonction à la Station_ID: 1666 entre les entrées 1613 et 2784 +on 9158: 2026-09-25 09:35:49,698 - INFO - Jonction à la Station_ID: 3348 entre les entrées 3358 et 3397 +on 9594: 2026-09-25 09:36:05,542 - INFO - Jonction à la Station_ID: 48093 entre les entrées 49183 et 48104 +on 9622: 2026-09-25 09:36:08,361 - INFO - Jonction à la Station_ID: 49838 entre les entrées 49183 et 49803 +on 10275: 2026-09-25 09:36:23,241 - INFO - Jonction à la Station_ID: 40146 entre les entrées 38328 et 39667 +on 12587: 2026-09-25 09:37:22,037 - INFO - Jonction à la Station_ID: 47396 entre les entrées 48104 et 47360 +on 13062: 2026-09-25 09:37:33,118 - INFO - Jonction à la Station_ID: 9041 entre les entrées 10902 et 8905 +on 15553: 2026-09-25 09:38:37,508 - INFO - Jonction à la Station_ID: 12059 entre les entrées 10902 et 12987 +on 16763: 2026-09-25 09:39:08,078 - INFO - Jonction à la Station_ID: 9337 entre les entrées 14852 et 10902 +on 16763: 2026-09-25 09:39:08,090 - INFO - Jonction à la Station_ID: 9337 entre les entrées 14852 et 10902 +on 16817: 2026-09-25 09:39:10,059 - INFO - Jonction à la Station_ID: 9547 entre les entrées 9884 et 9366 +on 17832: 2026-09-25 09:39:41,295 - INFO - Jonction à la Station_ID: 12777 entre les entrées 10902 et 14852 +on 17833: 2026-09-25 09:39:41,469 - INFO - Jonction à la Station_ID: 9338 entre les entrées 10902 et 14852 +on 17833: 2026-09-25 09:39:41,516 - INFO - Jonction à la Station_ID: 12777 entre les entrées 10902 et 14852 +on 18972: 2026-09-25 09:40:10,365 - INFO - Jonction à la Station_ID: 12771 entre les entrées 14852 et 9366 +on 19046: 2026-09-25 09:40:14,112 - INFO - Jonction à la Station_ID: 17222 entre les entrées 16774 et 10902 +on 21114: 2026-09-25 09:41:13,826 - INFO - Jonction à la Station_ID: 15570 entre les entrées 8905 et 9366 +on 21600: 2026-09-25 09:41:29,632 - INFO - Jonction à la Station_ID: 47077 entre les entrées 49183 et 49089 +on 23056: 2026-09-25 09:42:08,145 - INFO - Jonction à la Station_ID: 15611 entre les entrées 9366 et 8905 +on 23137: 2026-09-25 09:42:10,268 - INFO - Jonction à la Station_ID: 15557 entre les entrées 8905 et 9366 +on 23142: 2026-09-25 09:42:10,342 - INFO - Jonction à la Station_ID: 9477 entre les entrées 8905 et 14852 +on 23144: 2026-09-25 09:42:10,578 - INFO - Jonction à la Station_ID: 9834 entre les entrées 14852 et 11338 +on 24975: 2026-09-25 09:43:04,127 - INFO - Jonction à la Station_ID: 16242 entre les entrées 15665 et 14852 +on 25697: 2026-09-25 09:43:28,963 - INFO - Jonction à la Station_ID: 16259 entre les entrées 10902 et 14852 +on 25981: 2026-09-25 09:43:39,099 - INFO - Jonction à la Station_ID: 50263 entre les entrées 50909 et 50130 +on 28328: 2026-09-25 09:44:53,839 - INFO - Jonction à la Station_ID: 9522 entre les entrées 16789 et 9366 +on 28497: 2026-09-25 09:45:02,864 - INFO - Jonction à la Station_ID: 44662 entre les entrées 49456 et 43628 +2026-09-25 09:45:18,712 - INFO - *********************************************************************************************************************** +2026-09-25 09:45:18,713 - INFO - * Calcul des statistiques par entrées d'une BD Therion * +2026-09-25 09:45:18,713 - INFO - * Script pyThStat par : alexandre.pont@yahoo.fr * +2026-09-25 09:45:18,713 - INFO - * Version : 2026.09.25 * +2026-09-25 09:45:18,714 - INFO - * Fichier source : ~\Synthese-PSM_LARRA\Outputs\DB_Synthese-PSM_LARRA.sql * +2026-09-25 09:45:18,714 - INFO - * Dossier destination : ~\Synthese-PSM_LARRA\Outputs\DB_Synthese-PSM_LARRA_Stats * +2026-09-25 09:45:18,714 - INFO - * Date : 2026-09-25 09h45m18s * +2026-09-25 09:45:18,715 - INFO - * Mode : sync * +2026-09-25 09:45:18,715 - INFO - *********************************************************************************************************************** +2026-09-25 09:45:18,717 - INFO - Phase 1: Importation de la base de données Therion ~\Synthese-PSM_LARRA\Outputs\DB_Synthese-PSM_LARRA.sql dans: ~\Outputs\DB_Synthese-PSM_LARRA_Stats\DB_Synthese-PSM_LARRA_stats.db +2026-09-25 09:45:21,997 - INFO - Phase 2: Création des nouvelles tables, indexation +2026-09-25 09:45:24,220 - INFO - Jonction de SHOT equates, nbre: 2580 +2026-09-25 13:29:34,757 - INFO - *********************************************************************************************************************** +2026-09-25 13:29:34,762 - INFO - * Calcul des statistiques par entrées d'une BD Therion * +2026-09-25 13:29:34,762 - INFO - * Script pyThStat par : alexandre.pont@yahoo.fr * +2026-09-25 13:29:34,762 - INFO - * Version : 2026.09.25 * +2026-09-25 13:29:34,763 - INFO - * Fichier source : ~\Synthese-PSM_LARRA\Outputs\DB_Synthese-PSM_LARRA.sql * +2026-09-25 13:29:34,763 - INFO - * Dossier destination : ~\Synthese-PSM_LARRA\Outputs\DB_Synthese-PSM_LARRA_Stats * +2026-09-25 13:29:34,763 - INFO - * Date : 2026-09-25 13h29m34s * +2026-09-25 13:29:34,764 - INFO - * Mode : sync * +2026-09-25 13:29:34,764 - INFO - *********************************************************************************************************************** +2026-09-25 13:29:34,765 - INFO - Phase 1: Importation de la base de données Therion ~\Synthese-PSM_LARRA\Outputs\DB_Synthese-PSM_LARRA.sql dans: ~\Outputs\DB_Synthese-PSM_LARRA_Stats\DB_Synthese-PSM_LARRA_stats.db +2026-09-25 13:29:37,109 - INFO - Phase 2: Création des nouvelles tables, indexation +2026-09-25 13:29:37,384 - INFO - Jonction de SHOT equates, nbre: 2580 +2026-09-25 13:32:29,786 - WARNING - Table des SHOT, visée(s) bloquante(s), même départ et arrivée, longueur nulle supprimée(s), nbre: 1688 +2026-09-25 13:32:31,987 - INFO - Table des SHOT, visées dupliquées traités nbre: 19 +2026-09-25 13:32:32,237 - INFO - Création de l'index des tables principales et optimisation de la mémoire +2026-09-25 13:32:32,393 - INFO - Marquage des visées et des stations d'habillage, nbre: 19021 +2026-09-25 13:33:29,929 - INFO - Phase 3: Remplissage des tables d'après les 64171 entrée(s) +2026-09-25 13:33:29,935 - INFO - Table des STATION entrée et fix, nbre: 194 +2026-09-25 13:33:29,978 - INFO - Phase 4: Remplissage des tables d'après les séries vides jonctionnées aux 194 entrée(s) +on 1423: 2026-09-25 13:33:54,316 - INFO - Jonction à la Station_ID: 49335 entre les entrées 49456 et 49327 +on 3318: 2026-09-25 13:34:24,094 - INFO - Jonction à la Station_ID: 229 entre les entrées 218 et 834 +on 3357: 2026-09-25 13:34:25,149 - INFO - Jonction à la Station_ID: 3525 entre les entrées 3455 et 3525 +on 6351: 2026-09-25 13:35:07,931 - INFO - Jonction à la Station_ID: 1666 entre les entrées 1613 et 2784 +on 9158: 2026-09-25 13:36:04,556 - INFO - Jonction à la Station_ID: 3348 entre les entrées 3358 et 3397 +on 9594: 2026-09-25 13:36:22,101 - INFO - Jonction à la Station_ID: 48093 entre les entrées 49183 et 48104 +on 9622: 2026-09-25 13:36:26,303 - INFO - Jonction à la Station_ID: 49838 entre les entrées 49183 et 49803 +on 10275: 2026-09-25 13:36:43,488 - INFO - Jonction à la Station_ID: 40146 entre les entrées 38328 et 39667 +on 12587: 2026-09-25 13:37:47,559 - INFO - Jonction à la Station_ID: 47396 entre les entrées 48104 et 47360 +on 13062: 2026-09-25 13:37:59,496 - INFO - Jonction à la Station_ID: 9041 entre les entrées 10902 et 8905 +on 15553: 2026-09-25 13:39:09,986 - INFO - Jonction à la Station_ID: 12059 entre les entrées 10902 et 12987 +on 16763: 2026-09-25 13:39:42,530 - INFO - Jonction à la Station_ID: 9337 entre les entrées 14852 et 10902 +on 16763: 2026-09-25 13:39:42,543 - INFO - Jonction à la Station_ID: 9337 entre les entrées 14852 et 10902 +on 16817: 2026-09-25 13:39:44,744 - INFO - Jonction à la Station_ID: 9547 entre les entrées 9884 et 9366 +on 17832: 2026-09-25 13:40:18,110 - INFO - Jonction à la Station_ID: 12777 entre les entrées 10902 et 14852 +on 17833: 2026-09-25 13:40:18,207 - INFO - Jonction à la Station_ID: 9338 entre les entrées 10902 et 14852 +on 17833: 2026-09-25 13:40:18,267 - INFO - Jonction à la Station_ID: 12777 entre les entrées 10902 et 14852 +on 18972: 2026-09-25 13:40:47,557 - INFO - Jonction à la Station_ID: 12771 entre les entrées 14852 et 9366 +on 19046: 2026-09-25 13:40:50,262 - INFO - Jonction à la Station_ID: 17222 entre les entrées 16774 et 10902 +on 21114: 2026-09-25 13:41:49,626 - INFO - Jonction à la Station_ID: 15570 entre les entrées 8905 et 9366 +on 21600: 2026-09-25 13:42:05,319 - INFO - Jonction à la Station_ID: 47077 entre les entrées 49183 et 49089 +on 23056: 2026-09-25 13:42:44,492 - INFO - Jonction à la Station_ID: 15611 entre les entrées 9366 et 8905 +on 23137: 2026-09-25 13:42:46,660 - INFO - Jonction à la Station_ID: 15557 entre les entrées 8905 et 9366 +on 23142: 2026-09-25 13:42:46,740 - INFO - Jonction à la Station_ID: 9477 entre les entrées 8905 et 14852 +on 23144: 2026-09-25 13:42:46,986 - INFO - Jonction à la Station_ID: 9834 entre les entrées 14852 et 11338 +on 24975: 2026-09-25 13:43:43,239 - INFO - Jonction à la Station_ID: 16242 entre les entrées 15665 et 14852 +on 25697: 2026-09-25 13:44:09,588 - INFO - Jonction à la Station_ID: 16259 entre les entrées 10902 et 14852 +on 25981: 2026-09-25 13:44:21,298 - INFO - Jonction à la Station_ID: 50263 entre les entrées 50909 et 50130 +on 28328: 2026-09-25 13:45:21,382 - INFO - Jonction à la Station_ID: 9522 entre les entrées 16789 et 9366 +on 28497: 2026-09-25 13:45:27,207 - INFO - Jonction à la Station_ID: 44662 entre les entrées 49456 et 43628 +on 29909: 2026-09-25 13:46:09,359 - INFO - Jonction à la Station_ID: 44814 entre les entrées 48104 et 49456 +on 30963: 2026-09-25 13:46:36,462 - INFO - Jonction à la Station_ID: 16483 entre les entrées 15665 et 10902 +on 31414: 2026-09-25 13:46:51,003 - INFO - Jonction à la Station_ID: 17453 entre les entrées 19538 et 17667 +on 31827: 2026-09-25 13:47:00,812 - INFO - Jonction à la Station_ID: 25261 entre les entrées 27454 et 24729 +2026-09-25 13:53:13,135 - INFO - Intégrations des visées orphelines (entre 2 stations existantes), nbre: 340 +2026-09-25 13:53:21,522 - INFO - Réseau: 1, entrées jonctionnées: 10, [11338, 14852, 8905, 9366, 10902, 15665, 9884, 16789, 12987, 16774] +2026-09-25 13:53:21,647 - INFO - Réseau: 2, entrées jonctionnées: 2, [3397, 3358] +2026-09-25 13:53:21,978 - INFO - Réseau: 3, entrées jonctionnées: 8, [43628, 49456, 48104, 49327, 47360, 49183, 49089, 49803] +2026-09-25 13:53:22,074 - INFO - Réseau: 4, entrées jonctionnées: 2, [1613, 2784] +2026-09-25 13:53:22,273 - INFO - Réseau: 5, entrées jonctionnées: 2, [3455, 3525] +2026-09-25 13:53:22,394 - INFO - Réseau: 6, entrées jonctionnées: 2, [24729, 27454] +2026-09-25 13:53:22,498 - INFO - Réseau: 7, entrées jonctionnées: 2, [834, 218] +2026-09-25 13:53:22,603 - INFO - Réseau: 8, entrées jonctionnées: 2, [38328, 39667] +2026-09-25 13:53:22,711 - INFO - Réseau: 9, entrées jonctionnées: 2, [50130, 50909] +2026-09-25 13:53:22,874 - INFO - Réseau: 10, entrées jonctionnées: 2, [17667, 19538] +2026-09-25 13:53:22,883 - DEBUG - Réseau ID 10, ENT_1 full name : Explo_101_2006_08_18.Explo_101_2006_08_18.Complexe_Anialarra.Synthese-PSM_LARRA, Survey ID 10532, ENT_2 full name : Explo_01_1999_07_25.Explo_01_1999_07_25.Complexe_Anialarra.Synthese-PSM_LARRA, Survey ID 5613 +2026-09-25 13:53:22,888 - DEBUG - Premier commun : (5609, 'Complexe_Anialarra', 'Complexe Anialarra') +2026-09-25 13:53:22,903 - DEBUG - Réseau ID 13, ENT_1 full name : Explo_279_2014_09_13.Explo_279_2014_09_13.Complexe_Anialarra.Synthese-PSM_LARRA, Survey ID 19806, ENT_2 full name : Explo_101_2006_08_18.Explo_101_2006_08_18.Complexe_Anialarra.Synthese-PSM_LARRA, Survey ID 10532 +2026-09-25 13:53:22,909 - DEBUG - Premier commun : (5609, 'Complexe_Anialarra', 'Complexe Anialarra') +2026-09-25 13:53:22,909 - DEBUG - Réseau ID 14, ENT_1 full name : Explo_54_2002_09_27.Explo_54_2002_09_27.Complexe_Anialarra.Synthese-PSM_LARRA, Survey ID 8087, ENT_2 full name : Explo_26_2001_08_06.Explo_26_2001_08_06.Complexe_Anialarra.Synthese-PSM_LARRA, Survey ID 6752 +2026-09-25 13:53:22,916 - DEBUG - Premier commun : (5609, 'Complexe_Anialarra', 'Complexe Anialarra') +2026-09-25 13:53:22,916 - DEBUG - Réseau ID 17, ENT_1 full name : Explo_101_2006_08_18.Explo_101_2006_08_18.Complexe_Anialarra.Synthese-PSM_LARRA, Survey ID 10532, ENT_2 full name : Explo_279_2014_09_13.Explo_279_2014_09_13.Complexe_Anialarra.Synthese-PSM_LARRA, Survey ID 19806 +2026-09-25 13:53:22,923 - DEBUG - Premier commun : (5609, 'Complexe_Anialarra', 'Complexe Anialarra') +2026-09-25 13:53:22,923 - DEBUG - Réseau ID 18, ENT_1 full name : Explo_279_2014_09_13.Explo_279_2014_09_13.Complexe_Anialarra.Synthese-PSM_LARRA, Survey ID 19806, ENT_2 full name : Explo_26_2001_08_06.Explo_26_2001_08_06.Complexe_Anialarra.Synthese-PSM_LARRA, Survey ID 6752 +2026-09-25 13:53:22,929 - DEBUG - Premier commun : (5609, 'Complexe_Anialarra', 'Complexe Anialarra') +2026-09-25 13:53:22,930 - DEBUG - Réseau ID 19, ENT_1 full name : Explo_386_2020_09_23.Explo_386_2020_09_23.Complexe_Anialarra.Synthese-PSM_LARRA, Survey ID 24415, ENT_2 full name : Explo_101_2006_08_18.Explo_101_2006_08_18.Complexe_Anialarra.Synthese-PSM_LARRA, Survey ID 10532 +2026-09-25 13:53:22,935 - DEBUG - Premier commun : (5609, 'Complexe_Anialarra', 'Complexe Anialarra') +2026-09-25 13:53:22,936 - DEBUG - Réseau ID 23, ENT_1 full name : Explo_01_1999_07_25.Explo_01_1999_07_25.Complexe_Anialarra.Synthese-PSM_LARRA, Survey ID 5613, ENT_2 full name : Explo_26_2001_08_06.Explo_26_2001_08_06.Complexe_Anialarra.Synthese-PSM_LARRA, Survey ID 6752 +2026-09-25 13:53:22,942 - DEBUG - Premier commun : (5609, 'Complexe_Anialarra', 'Complexe Anialarra') +2026-09-25 13:53:22,943 - DEBUG - Réseau ID 24, ENT_1 full name : Explo_01_1999_07_25.Explo_01_1999_07_25.Complexe_Anialarra.Synthese-PSM_LARRA, Survey ID 5613, ENT_2 full name : Explo_279_2014_09_13.Explo_279_2014_09_13.Complexe_Anialarra.Synthese-PSM_LARRA, Survey ID 19806 +2026-09-25 13:53:22,950 - DEBUG - Premier commun : (5609, 'Complexe_Anialarra', 'Complexe Anialarra') +2026-09-25 13:53:22,950 - DEBUG - Réseau ID 26, ENT_1 full name : Explo_320_2016_09_23.Explo_320_2016_09_23.Complexe_Anialarra.Synthese-PSM_LARRA, Survey ID 21678, ENT_2 full name : Explo_279_2014_09_13.Explo_279_2014_09_13.Complexe_Anialarra.Synthese-PSM_LARRA, Survey ID 19806 +2026-09-25 13:53:22,958 - DEBUG - Premier commun : (5609, 'Complexe_Anialarra', 'Complexe Anialarra') +2026-09-25 13:53:22,958 - DEBUG - Réseau ID 27, ENT_1 full name : Explo_101_2006_08_18.Explo_101_2006_08_18.Complexe_Anialarra.Synthese-PSM_LARRA, Survey ID 10532, ENT_2 full name : Explo_279_2014_09_13.Explo_279_2014_09_13.Complexe_Anialarra.Synthese-PSM_LARRA, Survey ID 19806 +2026-09-25 13:53:22,965 - DEBUG - Premier commun : (5609, 'Complexe_Anialarra', 'Complexe Anialarra') +2026-09-25 13:53:22,965 - DEBUG - Réseau ID 29, ENT_1 full name : Explo_387_2021_08_03.Explo_387_2021_08_03.Complexe_Anialarra.Synthese-PSM_LARRA, Survey ID 24458, ENT_2 full name : Explo_26_2001_08_06.Explo_26_2001_08_06.Complexe_Anialarra.Synthese-PSM_LARRA, Survey ID 6752 +2026-09-25 13:53:22,973 - DEBUG - Premier commun : (5609, 'Complexe_Anialarra', 'Complexe Anialarra') +2026-09-25 13:53:22,973 - DEBUG - Réseau ID 32, ENT_1 full name : Explo_320_2016_09_23.Explo_320_2016_09_23.Complexe_Anialarra.Synthese-PSM_LARRA, Survey ID 21678, ENT_2 full name : Explo_101_2006_08_18.Explo_101_2006_08_18.Complexe_Anialarra.Synthese-PSM_LARRA, Survey ID 10532 +2026-09-25 13:53:22,981 - DEBUG - Premier commun : (5609, 'Complexe_Anialarra', 'Complexe Anialarra') +2026-09-25 13:53:22,981 - DEBUG - Réseau ID 39, ENT_1 full name : Explo_01_1999_07_25.Explo_01_1999_07_25.Complexe_Anialarra.Synthese-PSM_LARRA, Survey ID 5613, ENT_2 full name : Explo_101_2006_08_18.Explo_101_2006_08_18.Complexe_Anialarra.Synthese-PSM_LARRA, Survey ID 10532 +2026-09-25 13:53:22,989 - DEBUG - Premier commun : (5609, 'Complexe_Anialarra', 'Complexe Anialarra') +2026-09-25 13:53:22,989 - DEBUG - Réseau ID 40, ENT_1 full name : Explo_101_2006_08_18.Explo_101_2006_08_18.Complexe_Anialarra.Synthese-PSM_LARRA, Survey ID 10532, ENT_2 full name : Explo_279_2014_09_13.Explo_279_2014_09_13.Complexe_Anialarra.Synthese-PSM_LARRA, Survey ID 19806 +2026-09-25 13:53:22,997 - DEBUG - Premier commun : (5609, 'Complexe_Anialarra', 'Complexe Anialarra') +2026-09-25 13:53:22,998 - DEBUG - Réseau ID 41, ENT_1 full name : Explo_279_2014_09_13.Explo_279_2014_09_13.Complexe_Anialarra.Synthese-PSM_LARRA, Survey ID 19806, ENT_2 full name : Explo_01_1999_07_25.Explo_01_1999_07_25.Complexe_Anialarra.Synthese-PSM_LARRA, Survey ID 5613 +2026-09-25 13:53:23,005 - DEBUG - Premier commun : (5609, 'Complexe_Anialarra', 'Complexe Anialarra') +2026-09-25 13:53:23,006 - DEBUG - Réseau ID 42, ENT_1 full name : Explo_26_2001_08_06.Explo_26_2001_08_06.Complexe_Anialarra.Synthese-PSM_LARRA, Survey ID 6752, ENT_2 full name : Explo_387_2021_08_03.Explo_387_2021_08_03.Complexe_Anialarra.Synthese-PSM_LARRA, Survey ID 24458 +2026-09-25 13:53:23,012 - DEBUG - Premier commun : (5609, 'Complexe_Anialarra', 'Complexe Anialarra') +2026-09-25 13:53:23,013 - DEBUG - Réseau ID 43, ENT_1 full name : Explo_26_2001_08_06.Explo_26_2001_08_06.Complexe_Anialarra.Synthese-PSM_LARRA, Survey ID 6752, ENT_2 full name : Explo_54_2002_09_27.Explo_54_2002_09_27.Complexe_Anialarra.Synthese-PSM_LARRA, Survey ID 8087 +2026-09-25 13:53:23,020 - DEBUG - Premier commun : (5609, 'Complexe_Anialarra', 'Complexe Anialarra') +2026-09-25 13:53:23,020 - DEBUG - Réseau ID 44, ENT_1 full name : Explo_279_2014_09_13.Explo_279_2014_09_13.Complexe_Anialarra.Synthese-PSM_LARRA, Survey ID 19806, ENT_2 full name : Explo_112_2007_10_04.Explo_112_2007_10_04.Complexe_Anialarra.Synthese-PSM_LARRA, Survey ID 11155 +2026-09-25 13:53:23,028 - DEBUG - Premier commun : (5609, 'Complexe_Anialarra', 'Complexe Anialarra') +2026-09-25 13:53:23,029 - DEBUG - Réseau ID 45, ENT_1 full name : Explo_101_2006_08_18.Explo_101_2006_08_18.Complexe_Anialarra.Synthese-PSM_LARRA, Survey ID 10532, ENT_2 full name : Explo_188_2011_09_15.Explo_188_2011_09_15.Complexe_Anialarra.Synthese-PSM_LARRA, Survey ID 15365 +2026-09-25 13:53:23,036 - DEBUG - Premier commun : (5609, 'Complexe_Anialarra', 'Complexe Anialarra') +2026-09-25 13:53:23,036 - DEBUG - Réseau ID 46, ENT_1 full name : Explo_26_2001_08_06.Explo_26_2001_08_06.Complexe_Anialarra.Synthese-PSM_LARRA, Survey ID 6752, ENT_2 full name : Explo_279_2014_09_13.Explo_279_2014_09_13.Complexe_Anialarra.Synthese-PSM_LARRA, Survey ID 19806 +2026-09-25 13:53:23,043 - DEBUG - Premier commun : (5609, 'Complexe_Anialarra', 'Complexe Anialarra') +2026-09-25 13:53:23,043 - DEBUG - Réseau ID 47, ENT_1 full name : Explo_279_2014_09_13.Explo_279_2014_09_13.Complexe_Anialarra.Synthese-PSM_LARRA, Survey ID 19806, ENT_2 full name : Explo_101_2006_08_18.Explo_101_2006_08_18.Complexe_Anialarra.Synthese-PSM_LARRA, Survey ID 10532 +2026-09-25 13:53:23,050 - DEBUG - Premier commun : (5609, 'Complexe_Anialarra', 'Complexe Anialarra') +2026-09-25 13:53:23,051 - DEBUG - Réseau ID 48, ENT_1 full name : Explo_101_2006_08_18.Explo_101_2006_08_18.Complexe_Anialarra.Synthese-PSM_LARRA, Survey ID 10532, ENT_2 full name : Explo_279_2014_09_13.Explo_279_2014_09_13.Complexe_Anialarra.Synthese-PSM_LARRA, Survey ID 19806 +2026-09-25 13:53:23,058 - DEBUG - Premier commun : (5609, 'Complexe_Anialarra', 'Complexe Anialarra') +2026-09-25 13:53:23,059 - DEBUG - Réseau ID 49, ENT_1 full name : Explo_279_2014_09_13.Explo_279_2014_09_13.Complexe_Anialarra.Synthese-PSM_LARRA, Survey ID 19806, ENT_2 full name : Explo_101_2006_08_18.Explo_101_2006_08_18.Complexe_Anialarra.Synthese-PSM_LARRA, Survey ID 10532 +2026-09-25 13:53:23,067 - DEBUG - Premier commun : (5609, 'Complexe_Anialarra', 'Complexe Anialarra') +2026-09-25 13:53:23,068 - DEBUG - Réseau ID 50, ENT_1 full name : Explo_279_2014_09_13.Explo_279_2014_09_13.Complexe_Anialarra.Synthese-PSM_LARRA, Survey ID 19806, ENT_2 full name : Explo_101_2006_08_18.Explo_101_2006_08_18.Complexe_Anialarra.Synthese-PSM_LARRA, Survey ID 10532 +2026-09-25 13:53:23,075 - DEBUG - Premier commun : (5609, 'Complexe_Anialarra', 'Complexe Anialarra') +2026-09-25 13:53:23,076 - DEBUG - Réseau ID 51, ENT_1 full name : Explo_26_2001_08_06.Explo_26_2001_08_06.Complexe_Anialarra.Synthese-PSM_LARRA, Survey ID 6752, ENT_2 full name : Explo_01_1999_07_25.Explo_01_1999_07_25.Complexe_Anialarra.Synthese-PSM_LARRA, Survey ID 5613 +2026-09-25 13:53:23,083 - DEBUG - Premier commun : (5609, 'Complexe_Anialarra', 'Complexe Anialarra') +2026-09-25 13:53:23,084 - DEBUG - Réseau ID 52, ENT_1 full name : Explo_01_1999_07_25.Explo_01_1999_07_25.Complexe_Anialarra.Synthese-PSM_LARRA, Survey ID 5613, ENT_2 full name : Explo_26_2001_08_06.Explo_26_2001_08_06.Complexe_Anialarra.Synthese-PSM_LARRA, Survey ID 6752 +2026-09-25 13:53:23,092 - DEBUG - Premier commun : (5609, 'Complexe_Anialarra', 'Complexe Anialarra') +2026-09-25 13:53:23,092 - DEBUG - Réseau ID 53, ENT_1 full name : Explo_26_2001_08_06.Explo_26_2001_08_06.Complexe_Anialarra.Synthese-PSM_LARRA, Survey ID 6752, ENT_2 full name : Explo_01_1999_07_25.Explo_01_1999_07_25.Complexe_Anialarra.Synthese-PSM_LARRA, Survey ID 5613 +2026-09-25 13:53:23,099 - DEBUG - Premier commun : (5609, 'Complexe_Anialarra', 'Complexe Anialarra') +2026-09-25 13:53:23,100 - DEBUG - Réseau ID 54, ENT_1 full name : Explo_279_2014_09_13.Explo_279_2014_09_13.Complexe_Anialarra.Synthese-PSM_LARRA, Survey ID 19806, ENT_2 full name : Explo_320_2016_09_23.Explo_320_2016_09_23.Complexe_Anialarra.Synthese-PSM_LARRA, Survey ID 21678 +2026-09-25 13:53:23,107 - DEBUG - Premier commun : (5609, 'Complexe_Anialarra', 'Complexe Anialarra') +2026-09-25 13:53:23,108 - DEBUG - Réseau ID 55, ENT_1 full name : Explo_279_2014_09_13.Explo_279_2014_09_13.Complexe_Anialarra.Synthese-PSM_LARRA, Survey ID 19806, ENT_2 full name : Explo_101_2006_08_18.Explo_101_2006_08_18.Complexe_Anialarra.Synthese-PSM_LARRA, Survey ID 10532 +2026-09-25 13:53:23,115 - DEBUG - Premier commun : (5609, 'Complexe_Anialarra', 'Complexe Anialarra') +2026-09-25 13:53:23,116 - DEBUG - Réseau ID 56, ENT_1 full name : Explo_101_2006_08_18.Explo_101_2006_08_18.Complexe_Anialarra.Synthese-PSM_LARRA, Survey ID 10532, ENT_2 full name : Explo_320_2016_09_23.Explo_320_2016_09_23.Complexe_Anialarra.Synthese-PSM_LARRA, Survey ID 21678 +2026-09-25 13:53:23,121 - DEBUG - Premier commun : (5609, 'Complexe_Anialarra', 'Complexe Anialarra') +2026-09-25 13:53:23,122 - DEBUG - Réseau ID 57, ENT_1 full name : Explo_101_2006_08_18.Explo_101_2006_08_18.Complexe_Anialarra.Synthese-PSM_LARRA, Survey ID 10532, ENT_2 full name : Explo_386_2020_09_23.Explo_386_2020_09_23.Complexe_Anialarra.Synthese-PSM_LARRA, Survey ID 24415 +2026-09-25 13:53:23,128 - DEBUG - Premier commun : (5609, 'Complexe_Anialarra', 'Complexe Anialarra') +2026-09-25 13:53:23,129 - DEBUG - Réseau ID 5, ENT_1 full name : Explo_03_2011_08_08.Explo_03_2011_08_08.AN676-Helado.Synthese-PSM_LARRA, Survey ID 2552, ENT_2 full name : Explo_04_2011_08_14.Explo_04_2011_08_14.AN676-Helado.Synthese-PSM_LARRA, Survey ID 2559 +2026-09-25 13:53:23,135 - DEBUG - Premier commun : (2534, 'AN676-Helado', 'AN676-Helado') +2026-09-25 13:53:23,151 - DEBUG - Réseau ID 37, ENT_1 full name : Explo_04_2011_08_14.Explo_04_2011_08_14.AN676-Helado.Synthese-PSM_LARRA, Survey ID 2559, ENT_2 full name : Explo_03_2011_08_08.Explo_03_2011_08_08.AN676-Helado.Synthese-PSM_LARRA, Survey ID 2552 +2026-09-25 13:53:23,157 - DEBUG - Premier commun : (2534, 'AN676-Helado', 'AN676-Helado') +2026-09-25 13:53:23,158 - DEBUG - Réseau ID 1, ENT_1 full name : Explo_01_2007_08_01.Explo_01_2007_08_01.C104.Complexe_PSM_GdP.Synthese-PSM_LARRA, Survey ID 64914, ENT_2 full name : Explo_01_2007_08_01.Explo_01_2007_08_01.C104.Complexe_PSM_GdP.Synthese-PSM_LARRA, Survey ID 64914 +2026-09-25 13:53:23,165 - DEBUG - Premier commun : (64912, 'Explo_01_2007_08_01', 'Explo 01 2007 08 01') +2026-09-25 13:53:23,181 - DEBUG - Réseau ID 6, ENT_1 full name : Explo_02_1987_08_01.Explo_02_1987_08_01.C50_Pre_Hus.Complexe_PSM_GdP.Synthese-PSM_LARRA, Survey ID 64529, ENT_2 full name : Explo_23_1983_08_01.Explo_23_1983_08_01.M31_Pourtet.Complexe_PSM_GdP.Synthese-PSM_LARRA, Survey ID 60728 +2026-09-25 13:53:23,187 - DEBUG - Premier commun : (44156, 'Complexe_PSM_GdP', 'Complexe PSM GdP') +2026-09-25 13:53:23,204 - DEBUG - Réseau ID 7, ENT_1 full name : Explo_02_1987_08_01.Explo_02_1987_08_01.C50_Pre_Hus.Complexe_PSM_GdP.Synthese-PSM_LARRA, Survey ID 64529, ENT_2 full name : Explo_01_2011_08_01.Explo_01_2011_08_01.C226.Complexe_PSM_GdP.Synthese-PSM_LARRA, Survey ID 66326 +2026-09-25 13:53:23,210 - DEBUG - Premier commun : (44156, 'Complexe_PSM_GdP', 'Complexe PSM GdP') +2026-09-25 13:53:23,210 - DEBUG - Réseau ID 9, ENT_1 full name : Explo_23_1983_08_01.Explo_23_1983_08_01.M31_Pourtet.Complexe_PSM_GdP.Synthese-PSM_LARRA, Survey ID 60728, ENT_2 full name : Explo_08_1981_08_02.Explo_08_1981_08_02.M31_Pourtet.Complexe_PSM_GdP.Synthese-PSM_LARRA, Survey ID 58183 +2026-09-25 13:53:23,216 - DEBUG - Premier commun : (56312, 'M31_Pourtet', 'M31 Pourtet') +2026-09-25 13:53:23,233 - DEBUG - Réseau ID 21, ENT_1 full name : Explo_02_1987_08_01.Explo_02_1987_08_01.C50_Pre_Hus.Complexe_PSM_GdP.Synthese-PSM_LARRA, Survey ID 64529, ENT_2 full name : Explo_43_2011_08_04.Explo_43_2011_08_04.M31_Pourtet.Complexe_PSM_GdP.Synthese-PSM_LARRA, Survey ID 64263 +2026-09-25 13:53:23,238 - DEBUG - Premier commun : (44156, 'Complexe_PSM_GdP', 'Complexe PSM GdP') +2026-09-25 13:53:23,255 - DEBUG - Réseau ID 30, ENT_1 full name : Explo_01_2007_08_01.Explo_01_2007_08_01.C104.Complexe_PSM_GdP.Synthese-PSM_LARRA, Survey ID 64914, ENT_2 full name : Explo_01_1983_08_18.Explo_01_1983_08_18.M413_Partages.Complexe_PSM_GdP.Synthese-PSM_LARRA, Survey ID 44188 +2026-09-25 13:53:23,261 - DEBUG - Premier commun : (44156, 'Complexe_PSM_GdP', 'Complexe PSM GdP') +2026-09-25 13:53:23,262 - DEBUG - Réseau ID 31, ENT_1 full name : Explo_23_1983_08_01.Explo_23_1983_08_01.M31_Pourtet.Complexe_PSM_GdP.Synthese-PSM_LARRA, Survey ID 60728, ENT_2 full name : Explo_01_2007_08_01.Explo_01_2007_08_01.C104.Complexe_PSM_GdP.Synthese-PSM_LARRA, Survey ID 64914 +2026-09-25 13:53:23,267 - DEBUG - Premier commun : (44156, 'Complexe_PSM_GdP', 'Complexe PSM GdP') +2026-09-25 13:53:23,267 - DEBUG - Réseau ID 61, ENT_1 full name : Explo_01_1983_08_18.Explo_01_1983_08_18.M413_Partages.Complexe_PSM_GdP.Synthese-PSM_LARRA, Survey ID 44188, ENT_2 full name : Explo_01_2007_08_01.Explo_01_2007_08_01.C104.Complexe_PSM_GdP.Synthese-PSM_LARRA, Survey ID 64914 +2026-09-25 13:53:23,272 - DEBUG - Premier commun : (44156, 'Complexe_PSM_GdP', 'Complexe PSM GdP') +2026-09-25 13:53:23,273 - DEBUG - Réseau ID 62, ENT_1 full name : Explo_01_2007_08_01.Explo_01_2007_08_01.C104.Complexe_PSM_GdP.Synthese-PSM_LARRA, Survey ID 64914, ENT_2 full name : Explo_23_1983_08_01.Explo_23_1983_08_01.M31_Pourtet.Complexe_PSM_GdP.Synthese-PSM_LARRA, Survey ID 60728 +2026-09-25 13:53:23,278 - DEBUG - Premier commun : (44156, 'Complexe_PSM_GdP', 'Complexe PSM GdP') +2026-09-25 13:53:23,279 - DEBUG - Réseau ID 63, ENT_1 full name : Explo_43_2011_08_04.Explo_43_2011_08_04.M31_Pourtet.Complexe_PSM_GdP.Synthese-PSM_LARRA, Survey ID 64263, ENT_2 full name : Explo_02_1987_08_01.Explo_02_1987_08_01.C50_Pre_Hus.Complexe_PSM_GdP.Synthese-PSM_LARRA, Survey ID 64529 +2026-09-25 13:53:23,285 - DEBUG - Premier commun : (44156, 'Complexe_PSM_GdP', 'Complexe PSM GdP') +2026-09-25 13:53:23,285 - DEBUG - Réseau ID 64, ENT_1 full name : Explo_08_1981_08_02.Explo_08_1981_08_02.M31_Pourtet.Complexe_PSM_GdP.Synthese-PSM_LARRA, Survey ID 58183, ENT_2 full name : Explo_23_1983_08_01.Explo_23_1983_08_01.M31_Pourtet.Complexe_PSM_GdP.Synthese-PSM_LARRA, Survey ID 60728 +2026-09-25 13:53:23,290 - DEBUG - Premier commun : (56312, 'M31_Pourtet', 'M31 Pourtet') +2026-09-25 13:53:23,309 - DEBUG - Réseau ID 65, ENT_1 full name : Explo_23_1983_08_01.Explo_23_1983_08_01.M31_Pourtet.Complexe_PSM_GdP.Synthese-PSM_LARRA, Survey ID 60728, ENT_2 full name : Explo_02_1987_08_01.Explo_02_1987_08_01.C50_Pre_Hus.Complexe_PSM_GdP.Synthese-PSM_LARRA, Survey ID 64529 +2026-09-25 13:53:23,316 - DEBUG - Premier commun : (44156, 'Complexe_PSM_GdP', 'Complexe PSM GdP') +2026-09-25 13:53:23,327 - DEBUG - Réseau ID 66, ENT_1 full name : Explo_01_2007_08_01.Explo_01_2007_08_01.C104.Complexe_PSM_GdP.Synthese-PSM_LARRA, Survey ID 64914, ENT_2 full name : Explo_01_2007_08_01.Explo_01_2007_08_01.C104.Complexe_PSM_GdP.Synthese-PSM_LARRA, Survey ID 64914 +2026-09-25 13:53:23,333 - DEBUG - Premier commun : (64912, 'Explo_01_2007_08_01', 'Explo 01 2007 08 01') +2026-09-25 13:53:23,345 - DEBUG - Réseau ID 67, ENT_1 full name : Explo_01_2011_08_01.Explo_01_2011_08_01.C226.Complexe_PSM_GdP.Synthese-PSM_LARRA, Survey ID 66326, ENT_2 full name : Explo_02_1987_08_01.Explo_02_1987_08_01.C50_Pre_Hus.Complexe_PSM_GdP.Synthese-PSM_LARRA, Survey ID 64529 +2026-09-25 13:53:23,351 - DEBUG - Premier commun : (44156, 'Complexe_PSM_GdP', 'Complexe PSM GdP') +2026-09-25 13:53:23,364 - DEBUG - Réseau ID 36, ENT_1 full name : Explo_01_1993_09_01.Explo_01_1993_09_01.AN211.Synthese-PSM_LARRA, Survey ID 708, ENT_2 full name : Explo_01_2016_09_15.Explo_01_2016_09_15.AN596-Antartica.Synthese-PSM_LARRA, Survey ID 2272 +2026-09-25 13:53:23,371 - DEBUG - Premier commun : (57, 'Synthese-PSM_LARRA', 'Synthèse générale des réseaux de la Pierre Saint Martin-Larra') +2026-09-25 13:53:23,389 - DEBUG - Réseau ID 3, ENT_1 full name : Explo_01_2019_09_15.Explo_01_2019_09_15.AN702-Burros.Synthese-PSM_LARRA, Survey ID 2613, ENT_2 full name : Explo_01_2019_09_19.Explo_01_2019_09_19.AN704.Synthese-PSM_LARRA, Survey ID 2651 +2026-09-25 13:53:23,396 - DEBUG - Premier commun : (57, 'Synthese-PSM_LARRA', 'Synthèse générale des réseaux de la Pierre Saint Martin-Larra') +2026-09-25 13:53:23,409 - DEBUG - Réseau ID 38, ENT_1 full name : Explo_01_2019_09_19.Explo_01_2019_09_19.AN704.Synthese-PSM_LARRA, Survey ID 2651, ENT_2 full name : Explo_01_2019_09_15.Explo_01_2019_09_15.AN702-Burros.Synthese-PSM_LARRA, Survey ID 2613 +2026-09-25 13:53:23,414 - DEBUG - Premier commun : (57, 'Synthese-PSM_LARRA', 'Synthèse générale des réseaux de la Pierre Saint Martin-Larra') +2026-09-25 13:53:23,415 - DEBUG - Réseau ID 34, ENT_1 full name : Explo_62_2021_07_24.Explo_62_2021_07_24.Complexe_BU56_Ilamina.Synthese-PSM_LARRA, Survey ID 30152, ENT_2 full name : Explo_06_2014_08_01.Explo_06_2014_08_01.Complexe_BU56_Ilamina.Synthese-PSM_LARRA, Survey ID 27850 +2026-09-25 13:53:23,421 - DEBUG - Premier commun : (27366, 'Complexe_BU56_Ilamina', 'Complexe BU56 Ilamina') +2026-09-25 13:53:23,434 - DEBUG - Réseau ID 59, ENT_1 full name : Explo_06_2014_08_01.Explo_06_2014_08_01.Complexe_BU56_Ilamina.Synthese-PSM_LARRA, Survey ID 27850, ENT_2 full name : Explo_62_2021_07_24.Explo_62_2021_07_24.Complexe_BU56_Ilamina.Synthese-PSM_LARRA, Survey ID 30152 +2026-09-25 13:53:23,441 - DEBUG - Premier commun : (27366, 'Complexe_BU56_Ilamina', 'Complexe BU56 Ilamina') +2026-09-25 13:53:23,441 - DEBUG - Réseau ID 35, ENT_1 full name : Explo_02_1992_08_01.Explo_02_1992_08_01.AN008.Synthese-PSM_LARRA, Survey ID 162, ENT_2 full name : Explo_11_2003_08_01.Explo_11_2003_08_01.AN008.Synthese-PSM_LARRA, Survey ID 225 +2026-09-25 13:53:23,447 - DEBUG - Premier commun : (151, 'AN008', 'AN008') +2026-09-25 13:53:23,461 - DEBUG - Réseau ID 8, ENT_1 full name : GL04_Entree.GL04_Entree.GL04_Cam_Claque.Complexe_Lonne_Peyret-Bourrugues.Synthese-PSM_LARRA, Survey ID 39253, ENT_2 full name : GL102_Entree_01.Gouffre_du_Lonne_Peyret.Complexe_Lonne_Peyret-Bourrugues.Synthese-PSM_LARRA, Survey ID 40869 +2026-09-25 13:53:23,467 - DEBUG - Premier commun : (32648, 'Complexe_Lonne_Peyret-Bourrugues', 'Complexe Lonné Peyret-Bourrugues') +2026-09-25 13:53:23,480 - DEBUG - Réseau ID 60, ENT_1 full name : GL102_Entree_01.Gouffre_du_Lonne_Peyret.Complexe_Lonne_Peyret-Bourrugues.Synthese-PSM_LARRA, Survey ID 40869, ENT_2 full name : GL04_Entree.GL04_Entree.GL04_Cam_Claque.Complexe_Lonne_Peyret-Bourrugues.Synthese-PSM_LARRA, Survey ID 39253 +2026-09-25 13:53:23,486 - DEBUG - Premier commun : (32648, 'Complexe_Lonne_Peyret-Bourrugues', 'Complexe Lonné Peyret-Bourrugues') +2026-09-25 13:53:23,487 - DEBUG - Réseau ID 28, ENT_1 full name : Explo_14_2015_03_30.Explo_14_2015_03_30.Aranzadi.Complexe_PSM_GdP.Synthese-PSM_LARRA, Survey ID 69727, ENT_2 full name : Explo_01_2017_05_20.Explo_01_2017_05_20.Xendako.Complexe_PSM_GdP.Synthese-PSM_LARRA, Survey ID 67320 +2026-09-25 13:53:23,494 - DEBUG - Premier commun : (44156, 'Complexe_PSM_GdP', 'Complexe PSM GdP') +2026-09-25 13:53:23,508 - DEBUG - Réseau ID 68, ENT_1 full name : Explo_01_2017_05_20.Explo_01_2017_05_20.Xendako.Complexe_PSM_GdP.Synthese-PSM_LARRA, Survey ID 67320, ENT_2 full name : Explo_14_2015_03_30.Explo_14_2015_03_30.Aranzadi.Complexe_PSM_GdP.Synthese-PSM_LARRA, Survey ID 69727 +2026-09-25 13:53:23,512 - DEBUG - Premier commun : (44156, 'Complexe_PSM_GdP', 'Complexe PSM GdP') +2026-09-25 13:53:23,513 - DEBUG - Réseau ID 58, ENT_1 full name : Explo_62_1994_08_06.Explo_62_1994_08_06.Complexe_Arrestelia.Synthese-PSM_LARRA, Survey ID 26086, ENT_2 full name : Explo_11_1992_06_26.Explo_11_1992_06_26.Complexe_Arrestelia.Synthese-PSM_LARRA, Survey ID 25729 +2026-09-25 13:53:23,518 - DEBUG - Premier commun : (25655, 'Complexe_Arrestelia', 'Complexe Arrestelia') +2026-09-25 13:53:23,534 - WARNING - Phase 4: Fin du remplissage des tables, attention 82 station(s) non comptabilisé(s) +2026-09-25 13:53:23,664 - INFO - Phase 5: Écriture des statistiques dans le fichier: ~\Synthese-PSM_LARRA\Outputs\readme +2026-09-25 13:53:23,666 - INFO - Table des CENTRELINE, longueur: [(340302.67, 15575.02, 8956.61)] +2026-09-25 13:54:51,061 - INFO - Table des STATION entrée et fix, nbre: 194 +2026-09-25 13:56:04,191 - WARNING - Phase 5: Fin de traitement en 26 (m) 29 (s), avec 1 erreur(s), résultats enregistrés dans ~\Outputs\DB_Synthese-PSM_LARRA_Stats\DB_Synthese-PSM_LARRA_stats +2026-09-25 13:56:04,197 - WARNING - Execution terminée avec 1 erreurs en 26(m)29(s), verifier le log +2026-09-25 16:47:15,690 - INFO - *********************************************************************************************************************** +2026-09-25 16:47:15,691 - INFO - * Calcul des statistiques par entrées d'une BD Therion * +2026-09-25 16:47:15,691 - INFO - * Script pyThStat par : alexandre.pont@yahoo.fr * +2026-09-25 16:47:15,692 - INFO - * Version : 2026.09.25 * +2026-09-25 16:47:15,692 - INFO - * Fichier source : ~\Synthese-PSM_LARRA\Outputs\DB_Synthese-PSM_LARRA.sql * +2026-09-25 16:47:15,692 - INFO - * Dossier destination : ~\Synthese-PSM_LARRA\Outputs\DB_Synthese-PSM_LARRA_Stats * +2026-09-25 16:47:15,692 - INFO - * Date : 2026-09-25 16h47m15s * +2026-09-25 16:47:15,693 - INFO - * Mode : sync * +2026-09-25 16:47:15,693 - INFO - *********************************************************************************************************************** +2026-09-25 16:47:15,694 - INFO - Phase 1: Importation de la base de données Therion ~\Synthese-PSM_LARRA\Outputs\DB_Synthese-PSM_LARRA.sql dans: ~\Outputs\DB_Synthese-PSM_LARRA_Stats\DB_Synthese-PSM_LARRA_stats.db +2026-09-25 16:47:18,753 - INFO - Phase 2: Création des nouvelles tables, indexation +2026-09-25 16:47:19,080 - INFO - Jonction de SHOT equates, nbre: 2580 +2026-09-25 16:52:05,791 - INFO - *********************************************************************************************************************** +2026-09-25 16:52:05,792 - INFO - * Calcul des statistiques par entrées d'une BD Therion * +2026-09-25 16:52:05,792 - INFO - * Script pyThStat par : alexandre.pont@yahoo.fr * +2026-09-25 16:52:05,792 - INFO - * Version : 2026.09.25 * +2026-09-25 16:52:05,793 - INFO - * Fichier source : ~\Synthese-PSM_LARRA\Outputs\DB_Synthese-PSM_LARRA.sql * +2026-09-25 16:52:05,793 - INFO - * Dossier destination : ~\Synthese-PSM_LARRA\Outputs\DB_Synthese-PSM_LARRA_Stats * +2026-09-25 16:52:05,793 - INFO - * Date : 2026-09-25 16h52m05s * +2026-09-25 16:52:05,793 - INFO - * Mode : sync * +2026-09-25 16:52:05,794 - INFO - *********************************************************************************************************************** +2026-09-25 16:52:05,795 - INFO - Phase 1: Importation de la base de données Therion ~\Synthese-PSM_LARRA\Outputs\DB_Synthese-PSM_LARRA.sql dans: ~\Outputs\DB_Synthese-PSM_LARRA_Stats\DB_Synthese-PSM_LARRA_stats.db +2026-09-25 16:52:08,557 - INFO - Phase 2: Création des nouvelles tables, indexation +2026-09-25 16:52:08,857 - INFO - Jonction de SHOT equates, nbre: 2580 +2026-09-25 16:55:11,015 - WARNING - Table des SHOT, visée(s) bloquante(s), même départ et arrivée, longueur nulle supprimée(s), nbre: 1688 +2026-09-25 16:55:12,749 - INFO - Table des SHOT, visées dupliquées traités, nbre: 19 +2026-09-25 16:55:12,965 - INFO - Création de l'index des tables principales et optimisation de la mémoire +2026-09-25 16:55:13,091 - INFO - Marquage des visées et des stations d'habillage, nbre: 19021 +2026-09-25 16:56:05,633 - INFO - Phase 3: Remplissage des tables d'après les 64171 entrée(s) +2026-09-25 16:56:05,639 - INFO - Table des STATION entrée et fix, nbre: 194 +2026-09-25 16:56:05,680 - INFO - Phase 4: Remplissage des tables d'après les séries vides jonctionnées aux 194 entrée(s) +on 1423: 2026-09-25 16:56:23,587 - INFO - Jonction à la Station_ID: 49335 entre les entrées 49456 et 49327 +on 3318: 2026-09-25 16:56:45,276 - INFO - Jonction à la Station_ID: 229 entre les entrées 218 et 834 +on 3357: 2026-09-25 16:56:46,060 - INFO - Jonction à la Station_ID: 3525 entre les entrées 3455 et 3525 +on 6351: 2026-09-25 16:57:20,739 - INFO - Jonction à la Station_ID: 1666 entre les entrées 1613 et 2784 +on 9158: 2026-09-25 16:58:28,171 - INFO - Jonction à la Station_ID: 3348 entre les entrées 3358 et 3397 +on 9594: 2026-09-25 16:58:43,664 - INFO - Jonction à la Station_ID: 48093 entre les entrées 49183 et 48104 +on 9622: 2026-09-25 16:58:47,830 - INFO - Jonction à la Station_ID: 49838 entre les entrées 49183 et 49803 +on 10275: 2026-09-25 16:59:02,939 - INFO - Jonction à la Station_ID: 40146 entre les entrées 38328 et 39667 +on 12587: 2026-09-25 17:00:04,043 - INFO - Jonction à la Station_ID: 47396 entre les entrées 48104 et 47360 +on 13062: 2026-09-25 17:00:15,401 - INFO - Jonction à la Station_ID: 9041 entre les entrées 10902 et 8905 +on 15553: 2026-09-25 17:01:23,971 - INFO - Jonction à la Station_ID: 12059 entre les entrées 10902 et 12987 +on 16763: 2026-09-25 17:01:53,334 - INFO - Jonction à la Station_ID: 9337 entre les entrées 14852 et 10902 +on 16763: 2026-09-25 17:01:53,348 - INFO - Jonction à la Station_ID: 9337 entre les entrées 14852 et 10902 +on 16817: 2026-09-25 17:01:55,341 - INFO - Jonction à la Station_ID: 9547 entre les entrées 9884 et 9366 +on 17832: 2026-09-25 17:02:26,728 - INFO - Jonction à la Station_ID: 12777 entre les entrées 10902 et 14852 +on 17833: 2026-09-25 17:02:26,819 - INFO - Jonction à la Station_ID: 9338 entre les entrées 10902 et 14852 +on 17833: 2026-09-25 17:02:26,901 - INFO - Jonction à la Station_ID: 12777 entre les entrées 10902 et 14852 +on 18972: 2026-09-25 17:02:54,687 - INFO - Jonction à la Station_ID: 12771 entre les entrées 14852 et 9366 +on 19046: 2026-09-25 17:02:58,500 - INFO - Jonction à la Station_ID: 17222 entre les entrées 16774 et 10902 +on 21114: 2026-09-25 17:03:55,184 - INFO - Jonction à la Station_ID: 15570 entre les entrées 8905 et 9366 +on 21600: 2026-09-25 17:04:09,586 - INFO - Jonction à la Station_ID: 47077 entre les entrées 49183 et 49089 +on 23056: 2026-09-25 17:04:49,226 - INFO - Jonction à la Station_ID: 15611 entre les entrées 9366 et 8905 +on 23137: 2026-09-25 17:04:51,614 - INFO - Jonction à la Station_ID: 15557 entre les entrées 8905 et 9366 +on 23142: 2026-09-25 17:04:51,706 - INFO - Jonction à la Station_ID: 9477 entre les entrées 8905 et 14852 +on 23144: 2026-09-25 17:04:51,940 - INFO - Jonction à la Station_ID: 9834 entre les entrées 14852 et 11338 +on 24975: 2026-09-25 17:05:47,136 - INFO - Jonction à la Station_ID: 16242 entre les entrées 15665 et 14852 +on 25697: 2026-09-25 17:06:11,697 - INFO - Jonction à la Station_ID: 16259 entre les entrées 10902 et 14852 +on 25981: 2026-09-25 17:06:22,742 - INFO - Jonction à la Station_ID: 50263 entre les entrées 50909 et 50130 +on 28328: 2026-09-25 17:07:22,128 - INFO - Jonction à la Station_ID: 9522 entre les entrées 16789 et 9366 +on 28497: 2026-09-25 17:07:28,936 - INFO - Jonction à la Station_ID: 44662 entre les entrées 49456 et 43628 +on 29909: 2026-09-25 17:08:06,745 - INFO - Jonction à la Station_ID: 44814 entre les entrées 48104 et 49456 +on 30963: 2026-09-25 17:08:34,847 - INFO - Jonction à la Station_ID: 16483 entre les entrées 15665 et 10902 +on 31414: 2026-09-25 17:08:50,770 - INFO - Jonction à la Station_ID: 17453 entre les entrées 19538 et 17667 +on 31827: 2026-09-25 17:08:58,838 - INFO - Jonction à la Station_ID: 25261 entre les entrées 27454 et 24729 +2026-09-25 17:15:42,526 - INFO - Intégrations des visées orphelines (entre 2 stations existantes), nbre: 340 +2026-09-25 17:15:51,202 - INFO - Réseau: 1, entrées jonctionnées: 10, [11338, 14852, 8905, 9366, 10902, 15665, 9884, 16789, 12987, 16774] +2026-09-25 17:15:51,336 - INFO - Réseau: 2, entrées jonctionnées: 2, [3397, 3358] +2026-09-25 17:15:51,853 - INFO - Réseau: 3, entrées jonctionnées: 8, [43628, 49456, 48104, 49327, 47360, 49183, 49089, 49803] +2026-09-25 17:15:52,002 - INFO - Réseau: 4, entrées jonctionnées: 2, [1613, 2784] +2026-09-25 17:15:52,130 - INFO - Réseau: 5, entrées jonctionnées: 2, [3455, 3525] +2026-09-25 17:15:52,318 - INFO - Réseau: 6, entrées jonctionnées: 2, [24729, 27454] +2026-09-25 17:15:52,564 - INFO - Réseau: 7, entrées jonctionnées: 2, [834, 218] +2026-09-25 17:15:52,719 - INFO - Réseau: 8, entrées jonctionnées: 2, [38328, 39667] +2026-09-25 17:15:52,873 - INFO - Réseau: 9, entrées jonctionnées: 2, [50130, 50909] +2026-09-25 17:15:53,057 - INFO - Réseau: 10, entrées jonctionnées: 2, [17667, 19538] +2026-09-25 17:15:54,300 - WARNING - Phase 4: Fin du remplissage des tables, attention 82 station(s) non comptabilisé(s) +2026-09-25 17:15:54,469 - INFO - Phase 5: Écriture des statistiques dans le fichier: ~\Synthese-PSM_LARRA\Outputs\readme +2026-09-25 17:15:54,472 - INFO - Table des CENTRELINE, longueur: [(340302.67, 15575.02, 8956.61)] +2026-09-25 17:17:51,665 - INFO - Table des STATION entrée et fix, nbre: 194 +2026-09-25 17:19:27,421 - INFO - Phase 5: Fin de traitement en 27 (m) 21 (s), résultats enregistrés dans ~\Outputs\DB_Synthese-PSM_LARRA_Stats\DB_Synthese-PSM_LARRA_stats +2026-09-25 17:19:27,425 - INFO - Execution terminée sans erreur en 27(m)21(s) +2026-09-25 17:58:56,870 - INFO - *********************************************************************************************************************** +2026-09-25 17:58:56,871 - INFO - * Calcul des statistiques par entrées d'une BD Therion * +2026-09-25 17:58:56,871 - INFO - * Script pyThStat par : alexandre.pont@yahoo.fr * +2026-09-25 17:58:56,872 - INFO - * Version : 2026.09.25 * +2026-09-25 17:58:56,872 - INFO - * Fichier source : ~\Synthese-PSM_LARRA\Outputs\DB_Synthese-PSM_LARRA.sql * +2026-09-25 17:58:56,872 - INFO - * Dossier destination : ~\Synthese-PSM_LARRA\Outputs\DB_Synthese-PSM_LARRA_Stats * +2026-09-25 17:58:56,873 - INFO - * Date : 2026-09-25 17h58m56s * +2026-09-25 17:58:56,873 - INFO - * Mode : sync * +2026-09-25 17:58:56,873 - INFO - *********************************************************************************************************************** +2026-09-25 17:58:56,876 - INFO - Phase 1: Importation de la base de données Therion ~\Synthese-PSM_LARRA\Outputs\DB_Synthese-PSM_LARRA.sql dans: ~\Outputs\DB_Synthese-PSM_LARRA_Stats\DB_Synthese-PSM_LARRA_stats.db +2026-09-25 17:59:00,541 - INFO - Phase 2: Création des nouvelles tables, indexation +2026-09-25 17:59:00,911 - INFO - Jonction de SHOT equates, nbre: 2580 +2026-09-25 18:02:49,702 - INFO - *********************************************************************************************************************** +2026-09-25 18:02:49,703 - INFO - * Calcul des statistiques par entrées d'une BD Therion * +2026-09-25 18:02:49,703 - INFO - * Script pyThStat par : alexandre.pont@yahoo.fr * +2026-09-25 18:02:49,703 - INFO - * Version : 2026.09.25 * +2026-09-25 18:02:49,704 - INFO - * Fichier source : ~\Synthese-PSM_LARRA\Outputs\DB_Synthese-PSM_LARRA.sql * +2026-09-25 18:02:49,704 - INFO - * Dossier destination : ~\Synthese-PSM_LARRA\Outputs\DB_Synthese-PSM_LARRA_Stats * +2026-09-25 18:02:49,704 - INFO - * Date : 2026-09-25 18h02m49s * +2026-09-25 18:02:49,705 - INFO - * Mode : sync * +2026-09-25 18:02:49,705 - INFO - *********************************************************************************************************************** +2026-09-25 18:02:49,708 - INFO - Phase 1: Importation de la base de données Therion ~\Synthese-PSM_LARRA\Outputs\DB_Synthese-PSM_LARRA.sql dans: ~\Outputs\DB_Synthese-PSM_LARRA_Stats\DB_Synthese-PSM_LARRA_stats.db +2026-09-25 18:02:54,221 - INFO - Phase 2: Création des nouvelles tables, indexation +2026-09-25 18:02:54,679 - INFO - Jonction de SHOT equates, nbre: 2580 +2026-09-25 18:07:31,851 - WARNING - Table des SHOT, visée(s) bloquante(s), même départ et arrivée, longueur nulle supprimée(s), nbre: 1688 +2026-09-25 18:07:34,662 - INFO - Table des SHOT, visées dupliquées traités, nbre: 19 +2026-09-25 18:07:35,072 - INFO - Création de l'index des tables principales et optimisation de la mémoire +2026-09-25 18:07:35,285 - INFO - Marquage des visées et des stations d'habillage, nbre: 19021 +2026-09-25 18:09:08,064 - INFO - Phase 3: Remplissage des tables d'après les 64171 entrée(s) +2026-09-25 18:09:08,072 - INFO - Table des STATION entrée et fix, nbre: 194 +2026-09-25 18:09:08,122 - INFO - Phase 4: Remplissage des tables d'après les séries vides jonctionnées aux 194 entrée(s) +on 1423: 2026-09-25 18:09:27,468 - INFO - Jonction à la Station_ID: 49335 entre les entrées 49456 et 49327 +on 3318: 2026-09-25 18:09:50,453 - INFO - Jonction à la Station_ID: 229 entre les entrées 218 et 834 +on 3357: 2026-09-25 18:09:51,295 - INFO - Jonction à la Station_ID: 3525 entre les entrées 3455 et 3525 +on 6351: 2026-09-25 18:11:00,212 - INFO - Jonction à la Station_ID: 1666 entre les entrées 1613 et 2784 +on 9158: 2026-09-25 18:12:22,402 - INFO - Jonction à la Station_ID: 3348 entre les entrées 3358 et 3397 +on 9594: 2026-09-25 18:12:38,943 - INFO - Jonction à la Station_ID: 48093 entre les entrées 49183 et 48104 +on 9622: 2026-09-25 18:12:41,762 - INFO - Jonction à la Station_ID: 49838 entre les entrées 49183 et 49803 +on 10275: 2026-09-25 18:12:56,901 - INFO - Jonction à la Station_ID: 40146 entre les entrées 38328 et 39667 +on 12587: 2026-09-25 18:13:58,237 - INFO - Jonction à la Station_ID: 47396 entre les entrées 48104 et 47360 +on 13062: 2026-09-25 18:14:09,113 - INFO - Jonction à la Station_ID: 9041 entre les entrées 10902 et 8905 +on 15553: 2026-09-25 18:15:13,682 - INFO - Jonction à la Station_ID: 12059 entre les entrées 10902 et 12987 +on 16763: 2026-09-25 18:15:42,526 - INFO - Jonction à la Station_ID: 9337 entre les entrées 14852 et 10902 +on 16763: 2026-09-25 18:15:42,541 - INFO - Jonction à la Station_ID: 9337 entre les entrées 14852 et 10902 +on 16817: 2026-09-25 18:15:45,430 - INFO - Jonction à la Station_ID: 9547 entre les entrées 9884 et 9366 +on 17832: 2026-09-25 18:16:17,954 - INFO - Jonction à la Station_ID: 12777 entre les entrées 10902 et 14852 +on 17833: 2026-09-25 18:16:18,157 - INFO - Jonction à la Station_ID: 9338 entre les entrées 10902 et 14852 +on 17833: 2026-09-25 18:16:18,216 - INFO - Jonction à la Station_ID: 12777 entre les entrées 10902 et 14852 +on 18972: 2026-09-25 18:16:46,502 - INFO - Jonction à la Station_ID: 12771 entre les entrées 14852 et 9366 +on 19046: 2026-09-25 18:16:50,330 - INFO - Jonction à la Station_ID: 17222 entre les entrées 16774 et 10902 +on 21114: 2026-09-25 18:17:46,319 - INFO - Jonction à la Station_ID: 15570 entre les entrées 8905 et 9366 +on 21600: 2026-09-25 18:18:01,235 - INFO - Jonction à la Station_ID: 47077 entre les entrées 49183 et 49089 +on 23056: 2026-09-25 18:18:39,939 - INFO - Jonction à la Station_ID: 15611 entre les entrées 9366 et 8905 +on 23137: 2026-09-25 18:18:42,163 - INFO - Jonction à la Station_ID: 15557 entre les entrées 8905 et 9366 +on 23142: 2026-09-25 18:18:42,254 - INFO - Jonction à la Station_ID: 9477 entre les entrées 8905 et 14852 +on 23144: 2026-09-25 18:18:42,494 - INFO - Jonction à la Station_ID: 9834 entre les entrées 14852 et 11338 +on 24975: 2026-09-25 18:19:36,345 - INFO - Jonction à la Station_ID: 16242 entre les entrées 15665 et 14852 +on 25697: 2026-09-25 18:19:59,598 - INFO - Jonction à la Station_ID: 16259 entre les entrées 10902 et 14852 +on 25981: 2026-09-25 18:20:11,021 - INFO - Jonction à la Station_ID: 50263 entre les entrées 50909 et 50130 +on 28328: 2026-09-25 18:21:11,688 - INFO - Jonction à la Station_ID: 9522 entre les entrées 16789 et 9366 +on 28497: 2026-09-25 18:21:20,415 - INFO - Jonction à la Station_ID: 44662 entre les entrées 49456 et 43628 +on 29909: 2026-09-25 18:22:04,612 - INFO - Jonction à la Station_ID: 44814 entre les entrées 48104 et 49456 +on 30963: 2026-09-25 18:22:34,297 - INFO - Jonction à la Station_ID: 16483 entre les entrées 15665 et 10902 +on 31414: 2026-09-25 18:22:52,151 - INFO - Jonction à la Station_ID: 17453 entre les entrées 19538 et 17667 +on 31827: 2026-09-25 18:23:00,835 - INFO - Jonction à la Station_ID: 25261 entre les entrées 27454 et 24729 +2026-09-25 18:29:19,710 - INFO - Intégrations des visées orphelines (entre 2 stations existantes), nbre: 340 +2026-09-25 18:29:27,074 - INFO - Réseau: 1, entrées jonctionnées: 10, [11338, 14852, 8905, 9366, 10902, 15665, 9884, 16789, 12987, 16774] +2026-09-25 18:29:27,199 - INFO - Réseau: 2, entrées jonctionnées: 2, [3397, 3358] +2026-09-25 18:29:27,602 - INFO - Réseau: 3, entrées jonctionnées: 8, [43628, 49456, 48104, 49327, 47360, 49183, 49089, 49803] +2026-09-25 18:29:27,686 - INFO - Réseau: 4, entrées jonctionnées: 2, [1613, 2784] +2026-09-25 18:29:27,780 - INFO - Réseau: 5, entrées jonctionnées: 2, [3455, 3525] +2026-09-25 18:29:27,934 - INFO - Réseau: 6, entrées jonctionnées: 2, [24729, 27454] +2026-09-25 18:29:28,027 - INFO - Réseau: 7, entrées jonctionnées: 2, [834, 218] +2026-09-25 18:29:28,137 - INFO - Réseau: 8, entrées jonctionnées: 2, [38328, 39667] +2026-09-25 18:29:28,246 - INFO - Réseau: 9, entrées jonctionnées: 2, [50130, 50909] +2026-09-25 18:29:28,374 - INFO - Réseau: 10, entrées jonctionnées: 2, [17667, 19538] +2026-09-25 18:29:28,890 - WARNING - Phase 4: Fin du remplissage des tables, attention 82 station(s) non comptabilisé(s) +2026-09-25 18:29:29,061 - INFO - Phase 5: Écriture des statistiques dans le fichier: ~\Synthese-PSM_LARRA\Outputs\readme +2026-09-25 18:29:29,063 - INFO - Table des CENTRELINE, longueur: [(340302.67, 15575.02, 8956.61)] +2026-09-25 18:31:14,108 - INFO - Table des STATION entrée et fix, nbre: 194 +2026-09-25 18:32:29,198 - INFO - Phase 5: Fin de traitement en 29 (m) 39 (s), résultats enregistrés dans ~\Outputs\DB_Synthese-PSM_LARRA_Stats\DB_Synthese-PSM_LARRA_stats +2026-09-25 18:32:29,203 - INFO - Execution terminée sans erreur en 29(m)39(s) diff --git a/Outputs/DB_Synthese-PSM_LARRA_Stats/DB_Synthese-PSM_LARRA_rose.pdf b/Outputs/DB_Synthese-PSM_LARRA_Stats/DB_Synthese-PSM_LARRA_rose.pdf index 3faba78ea19235fc013a2b2f5e95f4c220c83ee0..587ad2a14d6e772c22fdea03dbccf6efe5d881cb 100644 GIT binary patch delta 23 ecmdnq!MMGHaYKhAhmonFg|U&5#pVf)%b5UVUI)$q delta 23 ecmdnq!MMGHaYKhAhk>z?p{cQf`Q{0Z%b5UU_XorP diff --git a/Outputs/DB_Synthese-PSM_LARRA_Stats/DB_Synthese-PSM_LARRA_stats.csv b/Outputs/DB_Synthese-PSM_LARRA_Stats/DB_Synthese-PSM_LARRA_stats.csv index ba50f1b..3b6a172 100644 --- a/Outputs/DB_Synthese-PSM_LARRA_Stats/DB_Synthese-PSM_LARRA_stats.csv +++ b/Outputs/DB_Synthese-PSM_LARRA_Stats/DB_Synthese-PSM_LARRA_stats.csv @@ -1,238 +1,238 @@ *********************************************************************************************************************** * Calcul des statistiques par entrées d'une BD Therion * * Script pyThStat par : alexandre.pont@yahoo.fr * -* Version : 2026.09.03 * +* Version : 2026.09.25 * * Fichier source : ~\Synthese-PSM_LARRA\Outputs\DB_Synthese-PSM_LARRA.sql * * Dossier destination : ~\Synthese-PSM_LARRA\Outputs\DB_Synthese-PSM_LARRA_Stats * -* Date : 2026-09-03 21h50m35s * -* Durée calcul : 02 (m) 32 (s) sans erreur * +* Date : 2026-09-25 18h02m49s * +* Durée calcul : 29 (m) 39 (s) sans erreur * *********************************************************************************************************************** -**Développement total centerline (m):** développement: 340302.67 , dupliqué: 15575.02 , surface: 8956.61 +**Développement total centerline (m):** développement: 340302.67 , dupliqué: 15575.02 , surface: 8956.61 Attention, 82 station(s) non comptabilisée(s) et raccordée(s) Développement total par réseaux - Entrée(s) Nbre Dev.(m) Prof.(m) Dupl.(m) Surf.(m) Visées ID Sta. Alt. min(m) ID Sta. Alt. max(m) - Totaux (entrées et points fixes) 194 340302.68 2016.00 15575.02 8956.61 45150 ILLA13B 318.0 AN634 2334.00 - ERUSO, ODITA 2 61230.74 866.88 0.00 0.00 6345 LAR_d_15/16 568.12 ERUSO 1435.00 - C_104, C_2, C_226, C_50, D_9, LEPINEUX, M_31, M_413 8 48226.13 1113.08 7349.51 1.81 6021 - 1010.92 AN532 2124.00 - AN454, AN509, AN51, AN519, AN563, AN597, AN6, AN60, AN709, FR3 10 46208.59 859.07 329.07 7339.64 7484 AN43GA2 1319.13 AN509 2178.20 - 0, A60_GPS 2 41760.25 1204.65 3557.47 0.00 5594 S7-6 773.77 P1 1978.42 - ROBINET 1 12791.76 491.99 0.00 0.00 1478 ARP419/50 588.45 ARP338/21 1080.44 - LAK_1 1 10493.84 667.68 1481.76 0.00 1457 HF3 856.53 . 1524.21 - T_VENT, XEN 2 8676.45 548.79 1618.14 0.00 1062 LAR_d_478/2 966.47 _d_XEN_f_XX2 1515.26 - AN8, AN9 2 8226.55 805.22 0.00 0.00 898 AN8_d_1701 1007.78 AN9 1813.00 - AP_7 1 7233.06 377.95 116.43 0.00 1211 A 1327.05 AP_7 1705.00 - 0 1 7228.71 514.65 0.00 0.00 700 34 1460.35 0 1975.00 - B_3 1 6615.73 667.24 0.00 0.00 740 N-00 952.76 B_3 1620.00 - DS_49 1 5435.99 696.11 0.00 0.00 680 DS495/172 853.89 DS_49 1550.00 - BT_6 1 5212.26 670.59 0.00 0.00 744 BT6_d_2/641 947.41 BT_6 1618.00 - UK_4 1 4164.03 715.19 0.00 0.00 581 UK4_d_25/16 1083.81 VB11 1799.00 - LACS 1 4054.16 108.40 0.00 15.50 435 LAC_d_SORT27 529.73 LAC_d_MS7 638.13 - CHIPI 1 3512.87 553.48 0.00 0.00 572 CHI_d_46/6 941.52 CHIPI 1495.00 - RENARD 1 3338.53 208.44 0.00 0.00 395 REN_d_1/34 396.01 REN_d_2/15 604.45 - BG_63 1 3278.77 356.85 0.00 0.00 675 BG6322-31 1029.15 BG_63 1386.00 - GL_102, GL_4 2 3026.31 471.24 111.58 0.00 323 25 1164.76 GL_4 1636.00 - UK_557 1 2564.77 316.87 0.00 0.00 327 UK557_d_5/56 1828.13 A_4 2145.00 - E2000 1 2383.58 535.79 0.00 0.00 279 B38 1727.21 AN639 2263.00 - ALAHAIS 1 1892.89 136.24 0.00 0.00 253 ALA_d_6/11 795.76 ALAHAIS 932.00 - SC_60 1 1795.14 323.45 64.40 0.00 269 232 1838.77 2.4 2162.22 - M_326 1 1667.15 384.30 0.00 0.00 289 M3263/199 1725.70 M_326 2110.00 - L_5 1 1645.48 371.69 66.04 0.00 292 FL386.138.71 1651.31 L_5 2023.00 - AN43 1 1540.03 376.73 0.00 0.00 248 BG632-31 1349.27 AN43 1726.00 - Z_124 1 1412.20 379.71 0.00 0.00 117 39V 1349.71 A60_111 1729.42 - Z_127 1 1400.82 529.78 0.00 0.00 262 _d_Z127_f_264 1128.22 HP10 1658.00 - C_214 1 1064.44 420.12 0.00 0.00 157 C214_d_130 1513.88 C_214 1934.00 - Z_17 1 1011.10 404.84 0.00 0.00 115 Z17_d_11/5 1348.16 - 1753.00 - AN669 1 1002.32 352.95 0.00 23.59 168 FL15 1870.75 AN669 2223.70 - AN211, AN596 2 882.32 344.27 0.00 21.77 114 QR2_35 1715.79 HB20 2060.06 - MARTIN 1 874.76 244.16 0.00 0.00 98 MAR_d_10/4 575.84 MARTIN 820.00 - Z_510 1 852.63 237.20 162.35 0.00 185 M31_d_98/3 1406.80 - 1644.00 - C_230 1 836.03 268.62 0.00 0.00 135 _d_C230_f_164 1616.38 C_230 1885.00 - AN506 1 817.47 409.24 0.00 0.00 87 PF10 1754.06 AN506 2163.30 - M_414 1 807.45 351.32 40.10 0.00 119 M414_d_1/52 1762.68 AN109 2114.00 - BL_118 1 794.25 296.93 0.00 0.00 114 BL118_d_2/89 726.07 BL_118 1023.00 - Z_112 1 767.20 261.03 0.00 0.00 90 AN43DO11 1377.97 Z_112 1639.00 - GORRIA 1 750.26 431.36 0.00 0.00 137 GOR_d_6/32 1172.64 GORRIA 1604.00 - C_110 1 735.00 303.54 0.00 0.00 52 . 1479.46 C_110 1783.00 - Visée(s) non raccordées 0 727.76 - 0.00 0.00 81 AN514 2324.00 - - - C_243 1 673.74 186.53 0.00 0.00 84 C243_d_84 1752.47 UD13 1939.00 - AN26 1 658.53 256.95 0.00 0.00 107 AN26DA7 1462.05 AN26 1719.00 - AN_594 1 639.69 185.76 0.00 83.78 165 VB17 1770.24 AN_594 1956.00 - AN52, AN676A 2 616.56 100.93 0.00 51.08 165 BFF47 2069.07 AN52 2170.00 - AN_326 1 598.25 271.81 0.00 119.58 129 AN326CF11 1350.19 AN_324 1622.00 - AN595 1 570.06 291.30 0.00 92.15 92 FZ28 1957.20 AN595 2248.50 - STALAC 1 537.38 164.47 0.00 0.00 49 STALAC 530.00 STA_d_2/2 694.47 - BEAUF 1 530.65 281.98 0.00 0.00 67 BEAU2/10 1458.02 E20_d_226 1740.00 - Sima_1748 1 515.00 263.50 0.00 0.00 17 _d_1748_f_5.7 1484.50 Sima_1748 1748.00 - C_108 1 509.80 194.09 0.00 0.00 26 C1085_1 1702.91 C_108 1897.00 - Z_106 1 503.29 241.69 0.00 0.00 86 - 1383.31 FL386.160 1625.00 - ILLAMI 1 479.60 120.00 0.00 0.00 52 ILLA13B 318.00 ILLAMI 438.00 - CASCA 1 474.60 23.51 0.00 0.00 63 CAS_d_1/63 539.66 LAC_d_RD 563.17 - F_2 1 464.88 294.26 0.00 0.00 49 GDP1050/9 1687.74 M_13 1982.00 - AN109 1 436.21 253.70 0.00 0.00 73 QO2_13 1860.30 AN109 2114.00 - AN_702, AN_704 2 426.96 216.55 17.01 0.00 80 MHX33 1766.73 CX15 1983.28 - E22_00 1 410.70 312.59 0.00 0.00 43 E22_d_38 1948.41 E22_00 2261.00 - AN588 1 385.24 220.08 0.00 0.00 56 QS2 1862.92 AN588 2083.00 - AN58 1 373.97 127.99 0.00 24.34 81 XX17 2072.01 AN58 2200.00 - AN514 1 361.91 182.14 0.00 60.83 82 XI3 2143.31 QU6 2325.45 - SC_223 1 347.61 177.54 0.00 0.00 58 18 1981.10 SC212 2158.64 - Z_111 1 316.00 175.12 0.00 0.00 21 Z11113 1509.88 Z_111 1685.00 - AN3 1 310.92 205.15 0.00 44.73 53 QE18 1839.85 AN3 2045.00 - BOUQUE 1 297.11 144.44 0.00 0.00 52 BOU_d_4/6 1432.56 BOUQUE 1577.00 - AN534 1 291.51 133.81 0.00 178.10 64 QW19 2001.19 AN534 2135.00 - K7_00 1 278.70 190.43 0.00 0.00 15 MA22 1750.57 K7_00 1941.00 - AN591 1 268.36 102.32 0.00 0.00 55 IZ40 2044.68 AN591 2147.00 - M_405 1 255.79 185.38 0.00 0.00 46 M405_d_2/46 1939.62 AN107 2125.00 - A_106 1 253.98 126.55 0.00 0.00 61 A106_d_EA1 1521.45 A_106 1648.00 - AN73 1 248.35 210.40 0.00 38.50 23 ESF1 1861.60 AN73 2072.00 - ARPHIDIA 1 243.24 68.25 0.00 0.00 33 ARP100/33 985.75 ROBINET 1054.00 - AN107 1 242.97 161.77 0.00 14.50 48 AH6X 1963.23 AN107 2125.00 - ERE_80 1 240.75 158.68 0.00 0.00 18 LIN_d_1/10 1697.32 ERE_80 1856.00 - BB26 1 227.19 71.56 62.66 4.80 71 32d 1448.44 LT345_79DD 1520.00 - AN61 1 224.45 139.93 0.00 2.78 44 XA40 2076.57 AN61 2216.50 - E3_TSR3 1 220.56 120.89 0.00 0.00 40 F.44 1809.11 E3_TSR3 1930.00 - oueils 1 218.33 72.59 0.00 0.00 18 l1 617.41 oueils 690.00 - UT_140 1 209.48 187.18 0.00 0.00 19 UT140_d_1/19 940.82 UT_140 1128.00 - AP_337 1 208.06 118.44 0.00 0.00 25 AP_d_7A19 1631.56 AP_333 1750.00 - UK_559 1 206.95 70.13 0.00 0.00 53 UK559_d_1/22 1967.87 UK_559 2038.00 - AN103 1 204.38 92.68 0.00 42.98 52 KH7 2045.32 AN103 2138.00 - UK_D6 1 191.26 61.02 0.00 0.00 48 UKD6_d_1/11 1963.32 UKD6_d_2/7 2024.34 - Z_143 1 187.50 113.00 0.00 0.00 22 _d_Z143_f_14 1561.00 Z_143 1674.00 - AN456 1 156.69 107.52 0.00 0.00 36 UV7 1854.48 AN456 1962.00 - PYRENE 1 154.46 35.34 0.00 0.00 58 _d_PY_f_57 2274.76 _d_PY_f_3 2310.10 - AN548 1 153.85 50.43 5.62 10.18 30 HH3 2046.24 BA11 2096.67 - A_110 1 148.40 126.43 0.00 0.00 13 A110_d_1/13 1693.57 A_110 1820.00 - AN1 1 143.33 111.32 0.00 0.00 28 MD27 2057.68 AN1 2169.00 - Z208 1 140.65 47.61 0.00 0.00 21 Z208_d_4 1494.53 JK01 1542.14 - AN57 1 140.39 77.17 95.38 0.00 50 LK1 1995.23 BFF25 2072.40 - AN624 1 130.95 78.13 0.00 19.57 43 HD2 1870.87 AN624 1949.00 - MOUTON 1 128.55 43.84 0.00 0.00 19 LACS 535.00 MOU_d_3/3 578.84 - C_299 1 128.51 46.27 0.00 0.00 53 50 1966.53 2 2012.80 - AN542 1 128.43 76.76 0.00 0.00 20 PO01 2073.24 AN542 2150.00 - AN546 1 124.15 84.79 0.00 0.00 20 VX14 2182.21 AN546 2267.00 - AN619 1 122.42 65.84 0.00 0.00 19 QD11 1967.42 QD2 2033.26 - AN672 1 116.60 79.29 0.00 0.00 27 RO4 1883.71 AN672 1963.00 - AN567 1 112.67 75.18 0.00 0.00 17 FH1 2069.82 A_4 2145.00 - F_404 1 110.42 70.79 0.00 0.00 12 F404_d_2/3 1919.21 LT346_80UH 1990.00 - AN683 1 110.10 67.33 0.00 0.00 14 CK12 2082.67 AN542 2150.00 - AN561 1 109.01 88.93 0.00 0.00 17 AX18 2137.07 AN561 2226.00 - M_108 1 106.39 80.56 0.00 0.00 17 M108_d_1/15 1949.44 M_108 2030.00 - C_103 1 105.60 58.28 0.00 0.00 9 C103_d_1/5 1796.91 C103_d_1/1 1855.19 - Z_107 1 103.65 49.77 0.00 0.00 23 - 1610.23 Z_107 1660.00 - AN639 1 102.88 39.06 0.00 0.00 18 HF7 2223.94 AN639 2263.00 - Z_123 1 102.29 45.64 0.00 0.00 21 PE33 1652.61 EB45 1698.25 - A_4 1 99.18 51.51 0.00 31.01 27 SW11 2093.49 A_4 2145.00 - AN671 1 96.98 89.95 0.00 0.00 10 FM1 1868.05 AN671 1958.00 - M_400 1 94.53 88.87 0.00 0.00 9 PO07 2114.13 M_400 2203.00 - AN453 1 91.25 66.69 0.00 0.00 19 MFX11 1905.31 AN453 1972.00 - CUCC_5 1 89.00 42.88 0.00 0.00 14 CUCC5_d_9 1668.12 CUCC_5 1711.00 - AN507 1 88.22 56.14 0.00 9.06 20 HL5 2089.46 AN507 2145.60 - AN62 1 86.80 64.76 0.00 0.00 10 LJ2 2127.24 AN62 2192.00 - CUCC_4 1 86.60 56.50 0.00 0.00 11 CUCC4_d_8 1671.50 CUCC_4 1728.00 - AN708 1 79.05 31.86 0.00 2.19 23 JU2 2102.14 AN708 2134.00 - AN631 1 78.00 69.33 0.00 7.26 14 XB1 2175.67 AN631 2245.00 - MARMI 1 76.12 23.64 0.00 0.00 14 MARMI 2005.00 MARM1/12 2028.64 - C_213 1 75.96 51.79 0.00 0.00 18 _d_C213_f_AA7 1838.21 C_213 1890.00 - LAK_15 1 75.19 29.45 0.00 2.99 16 _d_LAK15_f_AA12 1505.55 LAK_15 1535.00 - IS_6B 1 74.90 61.87 0.00 0.00 10 IS6B_d_10 1667.13 IS_6B 1729.00 - AN616 1 69.84 53.77 0.00 0.00 14 UD2 1890.23 AN616 1944.00 - AN635 1 68.51 46.38 0.00 0.00 9 TD1 2268.62 AN635 2315.00 - AN627 1 67.93 15.78 0.00 11.22 25 FG6 2128.22 AN627 2144.00 - BB09 1 66.89 58.51 0.00 0.00 12 suite 1442.49 BB09 1501.00 - AN634 1 63.56 50.07 0.00 0.00 10 NA11 2283.93 AN634 2334.00 - AN564 1 60.62 30.84 0.00 0.00 10 FQ9 2124.16 AN564 2155.00 - AN_455 1 59.25 38.27 0.00 5.26 21 OZ0 1929.73 AN_455 1968.00 - AN692 1 58.83 45.51 0.00 6.95 20 GF1 1917.63 CY13 1963.14 - AN557 1 57.83 36.74 0.00 121.83 30 FS22 2080.11 FS6 2116.85 - BB27 1 57.60 26.51 17.50 0.00 22 15 1474.74 0 1501.25 - AN646 1 54.48 47.28 0.00 0.00 10 QC11 2114.72 AN646 2162.00 - AN536 1 54.27 10.39 0.00 13.33 19 BGG11 2099.25 BGG3 2109.64 - AN_465 1 53.34 18.72 0.00 39.73 23 PX11 2106.35 PX14 2125.07 - AN480 1 50.56 47.11 0.00 0.00 9 ZC8 1897.89 AN480 1945.00 - Z_108 1 49.64 9.59 0.00 0.00 15 _d_Z108_f_2.3 1675.08 _d_Z108_f_1.9 1684.67 - AP_45 1 47.80 17.95 0.00 0.00 8 AP45_d_3A 1684.05 AP_45 1702.00 - AN622 1 44.78 23.44 0.00 19.82 16 EL2 2010.56 AN622 2034.00 - AN576 1 44.01 27.71 0.00 0.00 8 JD1 2121.29 AN576 2149.00 - Z_100 1 43.32 34.66 0.00 0.00 7 - 1645.34 Z_100 1680.00 - IS9_00 1 43.13 30.43 0.00 0.00 9 GDP10/24 1755.57 IS9_00 1786.00 - AP_333 1 37.25 15.23 0.00 0.00 7 AP_d_3B07 1734.77 AP_333 1750.00 - AN66 1 33.99 32.95 0.00 5.08 6 JEX1 2078.05 JEX6 2111.00 - AN45 1 32.50 28.67 0.00 0.00 7 AN45-7 1627.33 AN45 1656.00 - AN37 1 32.00 27.68 0.00 0.00 6 AN376 1718.32 AN37 1746.00 - AN532 1 31.50 3.67 0.00 0.00 11 UW10 2121.19 UW01 2124.86 - AN711 1 31.00 5.85 0.00 0.00 10 NE8 2106.15 AN557 2112.00 - Z_444 1 26.44 6.21 0.00 0.00 9 _d_Z444_f_1.5 1679.79 QUI1.38 1686.00 - AN699 1 26.18 21.75 0.00 11.26 7 AH13 1984.25 AN699 2006.00 - BB_50 1 25.00 21.87 0.00 39.41 27 _d_BB50_f_FOND 1515.13 BB_50 1537.00 - AN_324 1 20.47 12.89 0.00 0.00 7 _d_AN324_f_5 1609.11 AN_324 1622.00 - AN_325 1 17.74 10.15 0.00 0.00 6 _d_AN325_f_6 1592.85 AN_325 1603.00 - LT345_79 1 0.00 40.00 0.00 120.00 6 LT345_79HH 1480.00 LT345_79DD 1520.00 - LT346_80 1 0.00 20.00 0.00 60.00 6 LT346_80UH 1990.00 LT346_80UD 2010.00 - LT344_80 1 0.00 20.00 0.00 60.00 6 LT346_80UH 1990.00 LT346_80UD 2010.00 - LT346_78 1 0.00 20.00 0.00 60.00 6 LT346_80UH 1990.00 LT346_80UD 2010.00 - LT344_78 1 0.00 20.00 0.00 60.00 6 LT346_80UH 1990.00 LT346_80UD 2010.00 - UT683_4757 1 0.00 0.00 0.00 20.00 2 LT346_80 2000.00 LT346_80 2000.00 - UT684_4757 1 0.00 0.00 0.00 20.00 2 LT346_80 2000.00 LT346_80 2000.00 - UT684_4758 1 0.00 0.00 0.00 20.00 2 LT346_80 2000.00 LT346_80 2000.00 - UT683_4758 1 0.00 0.00 0.00 20.00 2 LT346_80 2000.00 LT346_80 2000.00 - SC_3 1 0.00 40.00 120.00 0.00 6 4 2017.00 AN596 2057.00 - M_13 1 0.00 40.00 120.00 0.00 6 AN456 1962.00 B 2002.00 - SL_19 1 0.00 40.00 120.00 0.00 6 G 1747.00 - 1787.00 - HUET 1 0.00 40.00 120.00 0.00 6 CHI_d_38/1 1275.00 N 1315.00 - Entrée(s) sans topographie 5 0.00 245.00 0.00 0.00 0 LT345_79 1500.0 Z150_d_1_0 1745.00 + Réseaux Entrée(s) Nbre Dev.(m) Prof.(m) Dupl.(m) Surf.(m) Visées ID Sta. Alt. min(m) ID Sta. Alt. max(m) + Totaux 194 340302.68 2016.00 15575.02 8956.61 45150 ILLA13B 318.0 AN634 2334.00 + Complexe Arrestelia 555S700C2X164, 565S800C1X157 2 61230.74 866.88 0.00 0.00 6345 LAR_d_15/16 568.12 ERUSO 1435.00 + Complexe PSM GdP C104, C2 Gouffre des quinquas, C104, C2 Gouffre des quinquas, C226 Sima grande, SECTION001 - Puits C50 , D9 Gouffre de la tête sauvage, Puits Lépineux, M31 Gouffre du Pourtet, M413 Gouffre des partages 8 48226.13 1113.08 7349.51 1.81 6021 - 1010.92 AN532 2124.00 + Complexe Anialarra AN454-21-01, AN509-1, AN51 01, AN519 A AN519 B, AN563-14-16, AN597-16-1, AN6-02-01, AN60-11-00, AN709-20-01, FR3-FI06 16 10 46208.59 859.07 329.07 7339.64 7484 AN43GA2 1319.13 AN509 2178.20 + Complexe BU56 Ilamina ILAMINA - BU56 A60 Explo num 06, ILAMINA - BU56 A60 Explo num 62 2 41760.25 1204.65 3557.47 0.00 5594 S7-6 773.77 P1 1978.42 + 12S15C2X1 - 9S9C2X1 1 12791.76 491.99 0.00 0.00 1478 ARP419/50 588.45 ARP338/21 1080.44 + Grotte de l'Ours - Perdida del Becerro Explo num 32 1 10493.84 667.68 1481.76 0.00 1457 HF3 856.53 . 1524.21 + Complexe PSM GdP VER SECTION001 VER SECTION002 Tunnel de la Verna, Xendako ziloa 2 8676.45 548.79 1618.14 0.00 1062 LAR_d_478/2 966.47 _d_XEN_f_XX2 1515.26 + AN008 SECTION001, SECTION014 SECTION015 2 8226.55 805.22 0.00 0.00 898 AN8_d_1701 1007.78 AN9 1813.00 + Gouffre des arres planères AP7 1 7233.06 377.95 116.43 0.00 1211 A 1327.05 AP_7 1705.00 + Sima del Tobozo (galerie 1) 1 7228.71 514.65 0.00 0.00 700 34 1460.35 0 1975.00 + Gouffre des Bourrugues B3, entrée 01 : puits d'entrée 1 6615.73 667.24 0.00 0.00 740 N-00 952.76 B_3 1620.00 + 10S6C7X1 - 9S5C6X1 1 5435.99 696.11 0.00 0.00 680 DS495/172 853.89 DS_49 1550.00 + 1S1C1X1 2S2C1X1 3S3C1X1 1 5212.26 670.59 0.00 0.00 744 BT6_d_2/641 947.41 BT_6 1618.00 + 1S1C1X1 2S1C4X1 1 4164.03 715.19 0.00 0.00 581 UK4_d_25/16 1083.81 VB11 1799.00 + SECTION006 - SECTION009 1 4054.16 108.40 0.00 15.50 435 LAC_d_SORT27 529.73 LAC_d_MS7 638.13 + 10S10C1X1 - 9S9C1X1 1 3512.87 553.48 0.00 0.00 572 CHI_d_46/6 941.52 CHIPI 1495.00 + 1S1C1X1 - 9S9C1X1 1 3338.53 208.44 0.00 0.00 395 REN_d_1/34 396.01 REN_d_2/15 604.45 + SECTION001 1 3278.77 356.85 0.00 0.00 675 BG6322-31 1029.15 BG_63 1386.00 + Complexe Lonné Peyret-Bourrugues Gouffre du Lonné Peyret GL102 - Entrée, Gouffre du Cam de Caque GL04 2 3026.31 471.24 111.58 0.00 323 25 1164.76 GL_4 1636.00 + 17S17C1X1 18S17C3X1 19S18C1X1 1S1C1X1 1 2564.77 316.87 0.00 0.00 327 UK557_d_5/56 1828.13 A_4 2145.00 + SECTION001 1 2383.58 535.79 0.00 0.00 279 B38 1727.21 AN639 2263.00 + 1S1C1X1 1 1892.89 136.24 0.00 0.00 253 ALA_d_6/11 795.76 ALAHAIS 932.00 + SC 60 1 1795.14 323.45 64.40 0.00 269 232 1838.77 2.4 2162.22 + 1S1C1X1 2S2C1X1 3S3C1X1 5S4C1X1 7S5C1X1 1 1667.15 384.30 0.00 0.00 289 M3263/199 1725.70 M_326 2110.00 + L5 Entrée puits 1 1645.48 371.69 66.04 0.00 292 FL386.138.71 1651.31 L_5 2023.00 + AN43SECTION001 1 1540.03 376.73 0.00 0.00 248 BG632-31 1349.27 AN43 1726.00 + SECTION001 1 1412.20 379.71 0.00 0.00 117 39V 1349.71 A60_111 1729.42 + Z127 SECTION001 1 1400.82 529.78 0.00 0.00 262 _d_Z127_f_264 1128.22 HP10 1658.00 + C214 Sima de la niebla 1 1064.44 420.12 0.00 0.00 157 C214_d_130 1513.88 C_214 1934.00 + 10S10C1X1 - 9S9C1X1 1 1011.10 404.84 0.00 0.00 115 Z17_d_11/5 1348.16 - 1753.00 + AN669-10-20 1 1002.32 352.95 0.00 23.59 168 FL15 1870.75 AN669 2223.70 + Synthèse générale des réseaux de la Pierre Saint Martin-Larra AN211-93 S1, AN596-16-1 2 882.32 344.27 0.00 21.77 114 QR2_35 1715.79 HB20 2060.06 + 10S10C1X1 - 9S9C1X1 1 874.76 244.16 0.00 0.00 98 MAR_d_10/4 575.84 MARTIN 820.00 + Gouffre Z510 1 852.63 237.20 162.35 0.00 185 M31_d_98/3 1406.80 - 1644.00 + C230 Sima ricky et ses ours 1 836.03 268.62 0.00 0.00 135 _d_C230_f_164 1616.38 C_230 1885.00 + AN506 MO AN506 PF 1 817.47 409.24 0.00 0.00 87 PF10 1754.06 AN506 2163.30 + M414 (entrée) 1 807.45 351.32 40.10 0.00 119 M414_d_1/52 1762.68 AN109 2114.00 + 1S1C1X1 2S2C1X1 1 794.25 296.93 0.00 0.00 114 BL118_d_2/89 726.07 BL_118 1023.00 + Z112 SECTION001 1 767.20 261.03 0.00 0.00 90 AN43DO11 1377.97 Z_112 1639.00 + 1S1C1X1 1 750.26 431.36 0.00 0.00 137 GOR_d_6/32 1172.64 GORRIA 1604.00 + C110 1 735.00 303.54 0.00 0.00 52 . 1479.46 C_110 1783.00 + Visée(s) non raccordées 0 727.76 - 0.00 0.00 81 AN514 2324.00 - - + C243 Sima de los cairns 1 673.74 186.53 0.00 0.00 84 C243_d_84 1752.47 UD13 1939.00 + SECTION001 1 658.53 256.95 0.00 0.00 107 AN26DA7 1462.05 AN26 1719.00 + AN594-12-25 1 639.69 185.76 0.00 83.78 165 VB17 1770.24 AN_594 1956.00 + AN676-Helado AN676-FI11-16, AN676-FI11-10 2 616.56 100.93 0.00 51.08 165 BFF47 2069.07 AN52 2170.00 + AN326SECTION001 1 598.25 271.81 0.00 119.58 129 AN326CF11 1350.19 AN_324 1622.00 + AN595-FI10-25 1 570.06 291.30 0.00 92.15 92 FZ28 1957.20 AN595 2248.50 + 1S1C1X1 - 7S8C1X1 1 537.38 164.47 0.00 0.00 49 STALAC 530.00 STA_d_2/2 694.47 + 1S1C1X1 4S4C1X1 5S5C1X1 6S6C1X1 7S7C1X1 1 530.65 281.98 0.00 0.00 67 BEAU2/10 1458.02 E20_d_226 1740.00 + 1748 SECTION001 1 515.00 263.50 0.00 0.00 17 _d_1748_f_5.7 1484.50 Sima_1748 1748.00 + C108 Sima H 1 509.80 194.09 0.00 0.00 26 C1085_1 1702.91 C_108 1897.00 + 1S1C1X1 2S2C1X1 3S3C1X1 4S4C1X1 5S5C1X1 1 503.29 241.69 0.00 0.00 86 - 1383.31 FL386.160 1625.00 + SECTION001 SECTION002 1 479.60 120.00 0.00 0.00 52 ILLA13B 318.00 ILLAMI 438.00 + 1S1C1X1 1 474.60 23.51 0.00 0.00 63 CAS_d_1/63 539.66 LAC_d_RD 563.17 + 1S1C1X1 2S2C1X1 1 464.88 294.26 0.00 0.00 49 GDP1050/9 1687.74 M_13 1982.00 + AN109 S1 - AN109 S6 1 436.21 253.70 0.00 0.00 73 QO2_13 1860.30 AN109 2114.00 + Synthèse générale des réseaux de la Pierre Saint Martin-Larra AN702-19-01, AN704-19-01 2 426.96 216.55 17.01 0.00 80 MHX33 1766.73 CX15 1983.28 + SECTION001 1 410.70 312.59 0.00 0.00 43 E22_d_38 1948.41 E22_00 2261.00 + AN588-FI10-12 1 385.24 220.08 0.00 0.00 56 QS2 1862.92 AN588 2083.00 + AN58-2024-02 1 373.97 127.99 0.00 24.34 81 XX17 2072.01 AN58 2200.00 + AN514-08 14 1 361.91 182.14 0.00 60.83 82 XI3 2143.31 QU6 2325.45 + SC 223 1 347.61 177.54 0.00 0.00 58 18 1981.10 SC212 2158.64 + SECTION001 1 316.00 175.12 0.00 0.00 21 Z11113 1509.88 Z_111 1685.00 + AN3-2023-01 AN3-2023-02 1 310.92 205.15 0.00 44.73 53 QE18 1839.85 AN3 2045.00 + 1S1C1X1 1 297.11 144.44 0.00 0.00 52 BOU_d_4/6 1432.56 BOUQUE 1577.00 + AN534-01 AN534-02 1 291.51 133.81 0.00 178.10 64 QW19 2001.19 AN534 2135.00 + K7 Hourat det soure 1 278.70 190.43 0.00 0.00 15 MA22 1750.57 K7_00 1941.00 + AN591-FI11 20 1 268.36 102.32 0.00 0.00 55 IZ40 2044.68 AN591 2147.00 + 1S1C1X1 2S2C1X1 1 255.79 185.38 0.00 0.00 46 M405_d_2/46 1939.62 AN107 2125.00 + A106 SECTION001 1 253.98 126.55 0.00 0.00 61 A106_d_EA1 1521.45 A_106 1648.00 + AN73-86-05 1 248.35 210.40 0.00 38.50 23 ESF1 1861.60 AN73 2072.00 + 30S100C1X11 1 243.24 68.25 0.00 0.00 33 ARP100/33 985.75 ROBINET 1054.00 + AN107-03 12 1 242.97 161.77 0.00 14.50 48 AH6X 1963.23 AN107 2125.00 + 1S1C1X1 2S2C2X2 3S3C2X2 1 240.75 158.68 0.00 0.00 18 LIN_d_1/10 1697.32 ERE_80 1856.00 + BB26 zone d'entree 1 227.19 71.56 62.66 4.80 71 32d 1448.44 LT345_79DD 1520.00 + AN61 01 AN61 02 1 224.45 139.93 0.00 2.78 44 XA40 2076.57 AN61 2216.50 + 1S1C1X1 - 9S5C1X1 1 220.56 120.89 0.00 0.00 40 F.44 1809.11 E3_TSR3 1930.00 + Oueils exondé étiage 1 218.33 72.59 0.00 0.00 18 l1 617.41 oueils 690.00 + 1S1C1X1 1 209.48 187.18 0.00 0.00 19 UT140_d_1/19 940.82 UT_140 1128.00 + SECTION001 1 208.06 118.44 0.00 0.00 25 AP_d_7A19 1631.56 AP_333 1750.00 + 1S1C2X1 - 7S6C1X1 1 206.95 70.13 0.00 0.00 53 UK559_d_1/22 1967.87 UK_559 2038.00 + AN103 1 1 204.38 92.68 0.00 42.98 52 KH7 2045.32 AN103 2138.00 + 1S1C1X1 - 9S8C1X1 1 191.26 61.02 0.00 0.00 48 UKD6_d_1/11 1963.32 UKD6_d_2/7 2024.34 + Z143 SECTION001 1 187.50 113.00 0.00 0.00 22 _d_Z143_f_14 1561.00 Z_143 1674.00 + AN456-21-01 1 156.69 107.52 0.00 0.00 36 UV7 1854.48 AN456 1962.00 + SECTION001 1 154.46 35.34 0.00 0.00 58 _d_PY_f_57 2274.76 _d_PY_f_3 2310.10 + AN548-FI03 04 1 153.85 50.43 5.62 10.18 30 HH3 2046.24 BA11 2096.67 + 1S1C1X1 1 148.40 126.43 0.00 0.00 13 A110_d_1/13 1693.57 A_110 1820.00 + AN1 1 143.33 111.32 0.00 0.00 28 MD27 2057.68 AN1 2169.00 + Z208 SECTION001 Z208 SECTION002 1 140.65 47.61 0.00 0.00 21 Z208_d_4 1494.53 JK01 1542.14 + AN57-FI07-03 1 140.39 77.17 95.38 0.00 50 LK1 1995.23 BFF25 2072.40 + AN624-16-1 1 130.95 78.13 0.00 19.57 43 HD2 1870.87 AN624 1949.00 + 1S1C1X1 2S2C1X1 3S3C1X1 1 128.55 43.84 0.00 0.00 19 LACS 535.00 MOU_d_3/3 578.84 + C299 Gouffre belle gueule 1 128.51 46.27 0.00 0.00 53 50 1966.53 2 2012.80 + FI00 21 FI00 21b 1 128.43 76.76 0.00 0.00 20 PO01 2073.24 AN542 2150.00 + AN546-FI00 18 1 124.15 84.79 0.00 0.00 20 VX14 2182.21 AN546 2267.00 + AN619-13-16 1 122.42 65.84 0.00 0.00 19 QD11 1967.42 QD2 2033.26 + AN672-FI10-06 1 116.60 79.29 0.00 0.00 27 RO4 1883.71 AN672 1963.00 + FI02 05 1 112.67 75.18 0.00 0.00 17 FH1 2069.82 A_4 2145.00 + 1S1C1X1 2S2C1X1 3S3C1X1 1 110.42 70.79 0.00 0.00 12 F404_d_2/3 1919.21 LT346_80UH 1990.00 + AN683-FI12-31 1 110.10 67.33 0.00 0.00 14 CK12 2082.67 AN542 2150.00 + AN561 1 109.01 88.93 0.00 0.00 17 AX18 2137.07 AN561 2226.00 + 1S1C1X1 1 106.39 80.56 0.00 0.00 17 M108_d_1/15 1949.44 M_108 2030.00 + 1S1C1X1 2S2C1X1 3S3C1X1 1 105.60 58.28 0.00 0.00 9 C103_d_1/5 1796.91 C103_d_1/1 1855.19 + Z107 SECTION001 1 103.65 49.77 0.00 0.00 23 - 1610.23 Z_107 1660.00 + AN639-15-01 1 102.88 39.06 0.00 0.00 18 HF7 2223.94 AN639 2263.00 + Z123 SECTION001 1 102.29 45.64 0.00 0.00 21 PE33 1652.61 EB45 1698.25 + FI00 19 1 99.18 51.51 0.00 31.01 27 SW11 2093.49 A_4 2145.00 + AN671-16-1 1 96.98 89.95 0.00 0.00 10 FM1 1868.05 AN671 1958.00 + 1S1C1X1 1 94.53 88.87 0.00 0.00 9 PO07 2114.13 M_400 2203.00 + AN453-20-01 1 91.25 66.69 0.00 0.00 19 MFX11 1905.31 AN453 1972.00 + SECTION001 1 89.00 42.88 0.00 0.00 14 CUCC5_d_9 1668.12 CUCC_5 1711.00 + AN507-15-1 1 88.22 56.14 0.00 9.06 20 HL5 2089.46 AN507 2145.60 + FI02 16 1 86.80 64.76 0.00 0.00 10 LJ2 2127.24 AN62 2192.00 + SECTION001 1 86.60 56.50 0.00 0.00 11 CUCC4_d_8 1671.50 CUCC_4 1728.00 + AN708-19-1 1 79.05 31.86 0.00 2.19 23 JU2 2102.14 AN708 2134.00 + AN631 1 78.00 69.33 0.00 7.26 14 XB1 2175.67 AN631 2245.00 + 1S1C1X1 2S2C1X1 1 76.12 23.64 0.00 0.00 14 MARMI 2005.00 MARM1/12 2028.64 + C213 SECTION001 1 75.96 51.79 0.00 0.00 18 _d_C213_f_AA7 1838.21 C_213 1890.00 + LAK15 SECTION001 1 75.19 29.45 0.00 2.99 16 _d_LAK15_f_AA12 1505.55 LAK_15 1535.00 + SECTION001 1 74.90 61.87 0.00 0.00 10 IS6B_d_10 1667.13 IS_6B 1729.00 + AN616-15-1 1 69.84 53.77 0.00 0.00 14 UD2 1890.23 AN616 1944.00 + AN635-04-00 1 68.51 46.38 0.00 0.00 9 TD1 2268.62 AN635 2315.00 + AN627-14-21 1 67.93 15.78 0.00 11.22 25 FG6 2128.22 AN627 2144.00 + BB09 1 66.89 58.51 0.00 0.00 12 suite 1442.49 BB09 1501.00 + AN634 1 63.56 50.07 0.00 0.00 10 NA11 2283.93 AN634 2334.00 + AN564-17-1 1 60.62 30.84 0.00 0.00 10 FQ9 2124.16 AN564 2155.00 + AN455-23-01 1 59.25 38.27 0.00 5.26 21 OZ0 1929.73 AN_455 1968.00 + AN692-15-1 1 58.83 45.51 0.00 6.95 20 GF1 1917.63 CY13 1963.14 + AN5577-17-1 1 57.83 36.74 0.00 121.83 30 FS22 2080.11 FS6 2116.85 + BB27 1 57.60 26.51 17.50 0.00 22 15 1474.74 0 1501.25 + FI08 15 1 54.48 47.28 0.00 0.00 10 QC11 2114.72 AN646 2162.00 + AN536-FI12-07 1 54.27 10.39 0.00 13.33 19 BGG11 2099.25 BGG3 2109.64 + AN465-23-01 1 53.34 18.72 0.00 39.73 23 PX11 2106.35 PX14 2125.07 + AN480-21-01 1 50.56 47.11 0.00 0.00 9 ZC8 1897.89 AN480 1945.00 + Z108 SECTION001 1 49.64 9.59 0.00 0.00 15 _d_Z108_f_2.3 1675.08 _d_Z108_f_1.9 1684.67 + SECTION001 1 47.80 17.95 0.00 0.00 8 AP45_d_3A 1684.05 AP_45 1702.00 + AN622-14-05 1 44.78 23.44 0.00 19.82 16 EL2 2010.56 AN622 2034.00 + AN576 1 44.01 27.71 0.00 0.00 8 JD1 2121.29 AN576 2149.00 + Z100 SECTION001 1 43.32 34.66 0.00 0.00 7 - 1645.34 Z_100 1680.00 + SECTION001 1 43.13 30.43 0.00 0.00 9 GDP10/24 1755.57 IS9_00 1786.00 + SECTION001 1 37.25 15.23 0.00 0.00 7 AP_d_3B07 1734.77 AP_333 1750.00 + AN66 1 33.99 32.95 0.00 5.08 6 JEX1 2078.05 JEX6 2111.00 + AN45 SECTION001 1 32.50 28.67 0.00 0.00 7 AN45-7 1627.33 AN45 1656.00 + SECTION001 1 32.00 27.68 0.00 0.00 6 AN376 1718.32 AN37 1746.00 + AN532-FI00 22 1 31.50 3.67 0.00 0.00 11 UW10 2121.19 UW01 2124.86 + AN711-21-01 1 31.00 5.85 0.00 0.00 10 NE8 2106.15 AN557 2112.00 + Z444 SECTION001 1 26.44 6.21 0.00 0.00 9 _d_Z444_f_1.5 1679.79 QUI1.38 1686.00 + AN699-19-01 1 26.18 21.75 0.00 11.26 7 AH13 1984.25 AN699 2006.00 + BB50 SECTION001 1 25.00 21.87 0.00 39.41 27 _d_BB50_f_FOND 1515.13 BB_50 1537.00 + AN324 SECTION001 1 20.47 12.89 0.00 0.00 7 _d_AN324_f_5 1609.11 AN_324 1622.00 + AN325 SECTION001 1 17.74 10.15 0.00 0.00 6 _d_AN325_f_6 1592.85 AN_325 1603.00 + Lambert Square 1 0.00 40.00 0.00 120.00 6 LT345_79HH 1480.00 LT345_79DD 1520.00 + Lambert Square 1 0.00 20.00 0.00 60.00 6 LT346_80UH 1990.00 LT346_80UD 2010.00 + Lambert Square 1 0.00 20.00 0.00 60.00 6 LT346_80UH 1990.00 LT346_80UD 2010.00 + Lambert Square 1 0.00 20.00 0.00 60.00 6 LT346_80UH 1990.00 LT346_80UD 2010.00 + Lambert Square 1 0.00 20.00 0.00 60.00 6 LT346_80UH 1990.00 LT346_80UD 2010.00 + UTM Square 1 0.00 0.00 0.00 20.00 2 LT346_80 2000.00 LT346_80 2000.00 + UTM Square 1 0.00 0.00 0.00 20.00 2 LT346_80 2000.00 LT346_80 2000.00 + UTM Square 1 0.00 0.00 0.00 20.00 2 LT346_80 2000.00 LT346_80 2000.00 + UTM Square 1 0.00 0.00 0.00 20.00 2 LT346_80 2000.00 LT346_80 2000.00 + Entrées non racordées 1 0.00 40.00 120.00 0.00 6 4 2017.00 AN596 2057.00 + Entrées non racordées 1 0.00 40.00 120.00 0.00 6 AN456 1962.00 B 2002.00 + Entrées non racordées 1 0.00 40.00 120.00 0.00 6 G 1747.00 - 1787.00 + Entrées non racordées 1 0.00 40.00 120.00 0.00 6 CHI_d_38/1 1275.00 N 1315.00 + Entrée(s) sans topographie 5 0.00 245.00 0.00 0.00 0 LT345_79 1500.0 Z150_d_1_0 1745.00 Développement total topographié par année(s) - Année Dev.(m) Cumul (m) Dupl.(m) Cumul (m) Surf.(m) Cumul (m) - 1950 1724.74 1724.74 0.00 0.00 0.00 0.00 - 1971 2627.02 4351.76 116.43 116.43 0.00 0.00 - 1974 575.30 4927.06 0.00 116.43 0.00 0.00 - 1976 606.16 5533.22 0.00 116.43 0.00 0.00 - 1977 1411.32 6944.54 0.00 116.43 0.00 0.00 - 1978 2081.24 9025.78 0.00 116.43 0.00 0.00 - 1979 5031.79 14057.57 64.40 180.83 0.00 0.00 - 1980 940.79 14998.36 0.00 180.83 0.00 0.00 - 1981 4122.90 19121.26 0.00 180.83 0.00 0.00 - 1982 6422.46 25543.72 0.00 180.83 0.00 0.00 - 1983 8885.25 34428.97 1022.47 1203.30 0.00 0.00 - 1984 5635.70 40064.67 0.00 1203.30 0.00 0.00 - 1985 7594.11 47658.78 0.00 1203.30 0.00 0.00 - 1986 2747.84 50406.62 0.00 1203.30 38.50 38.50 - 1987 10648.06 61054.68 70.66 1273.96 0.00 38.50 - 1988 1310.71 62365.39 0.00 1273.96 0.00 38.50 - 1989 4088.49 66453.88 0.00 1273.96 0.00 38.50 - 1990 6920.12 73374.00 0.00 1273.96 0.00 38.50 - 1991 1164.14 74538.14 0.00 1273.96 0.00 38.50 - 1992 14467.22 89005.36 0.00 1273.96 0.00 38.50 - 1993 19380.69 108386.05 0.00 1273.96 0.00 38.50 - 1994 8749.22 117135.27 0.00 1273.96 0.00 38.50 - 1995 5661.53 122796.80 0.00 1273.96 0.00 38.50 - 1996 8964.07 131760.87 70.08 1344.04 0.00 38.50 - 1997 13193.45 144954.32 0.00 1344.04 0.00 38.50 - 1998 12640.07 157594.39 21.10 1365.14 0.00 38.50 - 1999 10657.59 168251.98 3706.31 5071.45 137.44 175.94 - 2000 6419.46 174671.44 1214.92 6286.37 409.80 585.74 - 2001 12440.67 187112.11 596.17 6882.54 27.39 613.13 - 2002 5107.89 192220.00 247.31 7129.85 45.44 658.57 - 2003 3927.29 196147.29 0.00 7129.85 406.12 1064.69 - 2004 2645.33 198792.62 11.06 7140.91 178.02 1242.71 - 2005 2733.71 201526.33 0.00 7140.91 405.03 1647.74 - 2006 7659.27 209185.60 80.00 7220.91 203.64 1851.38 - 2007 6496.08 215681.68 95.38 7316.29 9.35 1860.73 - 2008 4780.88 220462.56 0.00 7316.29 158.13 2018.86 - 2009 4993.39 225455.95 71.84 7388.13 875.47 2894.33 - 2010 4406.45 229862.40 404.20 7792.33 181.61 3075.94 - 2011 5698.22 235560.62 0.00 7792.33 309.63 3385.57 - 2012 9116.66 244677.28 0.00 7792.33 1382.85 4768.42 - 2013 9810.78 254488.06 7.42 7799.75 527.56 5295.98 - 2014 9800.55 264288.61 150.80 7950.55 286.91 5582.89 - 2015 8429.72 272718.33 1054.63 9005.18 1347.63 6930.52 - 2016 9689.42 282407.75 1381.39 10386.57 211.21 7141.73 - 2017 4858.50 287266.25 83.46 10470.03 294.39 7436.12 - 2018 7369.21 294635.46 395.87 10865.90 496.43 7932.55 - 2019 6017.18 300652.64 289.22 11155.12 266.20 8198.75 - 2020 5050.76 305703.40 265.07 11420.19 24.74 8223.49 - 2021 7945.59 313648.99 529.80 11949.99 315.77 8539.26 - 2022 6913.36 320562.35 1794.04 13744.03 42.40 8581.66 - 2023 6343.27 326905.62 1180.34 14924.37 79.70 8661.36 - 2024 7701.11 334606.73 547.76 15472.13 144.72 8806.08 - 2025 5695.94 340302.67 102.89 15575.02 150.53 8956.61 + Année Dev.(m) Cumul (m) Dupl.(m) Cumul (m) Surf.(m) Cumul (m) + 1950 1724.74 1724.74 0.00 0.00 0.00 0.00 + 1971 2627.02 4351.76 116.43 116.43 0.00 0.00 + 1974 575.30 4927.06 0.00 116.43 0.00 0.00 + 1976 606.16 5533.22 0.00 116.43 0.00 0.00 + 1977 1411.32 6944.54 0.00 116.43 0.00 0.00 + 1978 2081.24 9025.78 0.00 116.43 0.00 0.00 + 1979 5031.79 14057.57 64.40 180.83 0.00 0.00 + 1980 940.79 14998.36 0.00 180.83 0.00 0.00 + 1981 4122.90 19121.26 0.00 180.83 0.00 0.00 + 1982 6422.46 25543.72 0.00 180.83 0.00 0.00 + 1983 8885.25 34428.97 1022.47 1203.30 0.00 0.00 + 1984 5635.70 40064.67 0.00 1203.30 0.00 0.00 + 1985 7594.11 47658.78 0.00 1203.30 0.00 0.00 + 1986 2747.84 50406.62 0.00 1203.30 38.50 38.50 + 1987 10648.06 61054.68 70.66 1273.96 0.00 38.50 + 1988 1310.71 62365.39 0.00 1273.96 0.00 38.50 + 1989 4088.49 66453.88 0.00 1273.96 0.00 38.50 + 1990 6920.12 73374.00 0.00 1273.96 0.00 38.50 + 1991 1164.14 74538.14 0.00 1273.96 0.00 38.50 + 1992 14467.22 89005.36 0.00 1273.96 0.00 38.50 + 1993 19380.69 108386.05 0.00 1273.96 0.00 38.50 + 1994 8749.22 117135.27 0.00 1273.96 0.00 38.50 + 1995 5661.53 122796.80 0.00 1273.96 0.00 38.50 + 1996 8964.07 131760.87 70.08 1344.04 0.00 38.50 + 1997 13193.45 144954.32 0.00 1344.04 0.00 38.50 + 1998 12640.07 157594.39 21.10 1365.14 0.00 38.50 + 1999 10657.59 168251.98 3706.31 5071.45 137.44 175.94 + 2000 6419.46 174671.44 1214.92 6286.37 409.80 585.74 + 2001 12440.67 187112.11 596.17 6882.54 27.39 613.13 + 2002 5107.89 192220.00 247.31 7129.85 45.44 658.57 + 2003 3927.29 196147.29 0.00 7129.85 406.12 1064.69 + 2004 2645.33 198792.62 11.06 7140.91 178.02 1242.71 + 2005 2733.71 201526.33 0.00 7140.91 405.03 1647.74 + 2006 7659.27 209185.60 80.00 7220.91 203.64 1851.38 + 2007 6496.08 215681.68 95.38 7316.29 9.35 1860.73 + 2008 4780.88 220462.56 0.00 7316.29 158.13 2018.86 + 2009 4993.39 225455.95 71.84 7388.13 875.47 2894.33 + 2010 4406.45 229862.40 404.20 7792.33 181.61 3075.94 + 2011 5698.22 235560.62 0.00 7792.33 309.63 3385.57 + 2012 9116.66 244677.28 0.00 7792.33 1382.85 4768.42 + 2013 9810.78 254488.06 7.42 7799.75 527.56 5295.98 + 2014 9800.55 264288.61 150.80 7950.55 286.91 5582.89 + 2015 8429.72 272718.33 1054.63 9005.18 1347.63 6930.52 + 2016 9689.42 282407.75 1381.39 10386.57 211.21 7141.73 + 2017 4858.50 287266.25 83.46 10470.03 294.39 7436.12 + 2018 7369.21 294635.46 395.87 10865.90 496.43 7932.55 + 2019 6017.18 300652.64 289.22 11155.12 266.20 8198.75 + 2020 5050.76 305703.40 265.07 11420.19 24.74 8223.49 + 2021 7945.59 313648.99 529.80 11949.99 315.77 8539.26 + 2022 6913.36 320562.35 1794.04 13744.03 42.40 8581.66 + 2023 6343.27 326905.62 1180.34 14924.37 79.70 8661.36 + 2024 7701.11 334606.73 547.76 15472.13 144.72 8806.08 + 2025 5695.94 340302.67 102.89 15575.02 150.53 8956.61 diff --git a/Outputs/DB_Synthese-PSM_LARRA_Stats/DB_Synthese-PSM_LARRA_stats.db b/Outputs/DB_Synthese-PSM_LARRA_Stats/DB_Synthese-PSM_LARRA_stats.db index ed894ab5695b9ec7259717153992e77e1f071e8a..13dad5d1200209566dc198cb52d458cccc9889c3 100644 GIT binary patch delta 61621 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 diff --git a/Outputs/DB_Synthese-PSM_LARRA_Stats/DB_Synthese-PSM_LARRA_stats.md b/Outputs/DB_Synthese-PSM_LARRA_Stats/DB_Synthese-PSM_LARRA_stats.md index 420d182..1f3fdd3 100644 --- a/Outputs/DB_Synthese-PSM_LARRA_Stats/DB_Synthese-PSM_LARRA_stats.md +++ b/Outputs/DB_Synthese-PSM_LARRA_Stats/DB_Synthese-PSM_LARRA_stats.md @@ -6,8 +6,8 @@ | Version | 2026.09.03 | | Fichier source | ~\Synthese-PSM_LARRA\Outputs\DB_Synthese-PSM_LARRA.sql | | Dossier destination | ~\Synthese-PSM_LARRA\Outputs\DB_Synthese-PSM_LARRA_Stats | -| Date | 2026-09-03 21h50m35s | -| Durée calcul |02 (m) 32 (s) sans erreur | +| Date | 2026-09-25 08h56m02s | +| Durée calcul |30 (m) 03 (s) avec erreur(s): 1 | -------------- ### Développement total (m) diff --git a/Outputs/DB_Synthese-PSM_LARRA_Stats/DB_Synthese-PSM_LARRA_year.pdf b/Outputs/DB_Synthese-PSM_LARRA_Stats/DB_Synthese-PSM_LARRA_year.pdf index fc73674bf8e248a21d9319cd6241c8c22206cb4c..98271bea89611e335947c7671ea27566b6f3500e 100644 GIT binary patch delta 20 bcmcbZb}?;3nLfLbsiB3jkR+k58 delta 20 bcmcbZb}?;3nLfLLv5}#vvBBnA{VU7>RzC+{ diff --git a/Outputs/DB_Synthese-PSM_LARRA_Stats/DB_Synthese-PSM_LARRA_yearCum.pdf b/Outputs/DB_Synthese-PSM_LARRA_Stats/DB_Synthese-PSM_LARRA_yearCum.pdf index cafee383d2b72fafb84f4674686152bc5134ed52..b902eaa7ff3d6010575e784e8475d3d117e7f0e8 100644 GIT binary patch delta 20 bcmdl~w5ezVyD7VosiB3jk [!WARNING] `82` station(s) non comptabilisée(s) et raccordée(s) + + +-------------- +### Développement total par réseau +| Réseau | Entrée(s) | Nbre | Dev. (m) | Prof. (m) | Dupl. (m) | Surf. (m) | Visées | ID Stat. | Alt. min (m) | ID Stat. | Alt. max (m) | +|------------|------------|------------|------------|------------|------------|------------|------------|------------|------------|------------|------------| +| | **Totaux** | **194** | **340 302,68** | **2 016,00** | **15 575,02** | **8 956,61** | **45150** | **ILLA13B** | **318,00** | **AN634** | **2 334,00** | +| Complexe Arrestelia | 555S700C2X164, 565S800C1X157 | 2 | 61 230,74 | 866,88 | 0,00 | 0,00 | 6345 | LAR_d_15/16 | 568,12 | ERUSO | 1 435,00 | +| Complexe PSM GdP | C104, C2 Gouffre des quinquas, C104, C2 Gouffre des quinquas, C226 Sima grande, SECTION001 - Puits C50 , D9 Gouffre de la tête sauvage, Puits Lépineux, M31 Gouffre du Pourtet, M413 Gouffre des partages | 8 | 48 226,13 | 1 113,08 | 7 349,51 | 1,81 | 6021 | - | 1 010,92 | AN532 | 2 124,00 | +| Complexe Anialarra | AN454-21-01, AN509-1, AN51 01, AN519 A AN519 B, AN563-14-16, AN597-16-1, AN6-02-01, AN60-11-00, AN709-20-01, FR3-FI06 16 | 10 | 46 208,59 | 859,07 | 329,07 | 7 339,64 | 7484 | AN43GA2 | 1 319,13 | AN509 | 2 178,20 | +| Complexe BU56 Ilamina | ILAMINA - BU56 A60 Explo num 06, ILAMINA - BU56 A60 Explo num 62 | 2 | 41 760,25 | 1 204,65 | 3 557,47 | 0,00 | 5594 | S7-6 | 773,77 | P1 | 1 978,42 | +| | 12S15C2X1 - 9S9C2X1 | 1 | 12 791,76 | 491,99 | 0,00 | 0,00 | 1478 | ARP419/50 | 588,45 | ARP338/21 | 1 080,44 | +| | Grotte de l'Ours - Perdida del Becerro Explo num 32 | 1 | 10 493,84 | 667,68 | 1 481,76 | 0,00 | 1457 | HF3 | 856,53 | . | 1 524,21 | +| Complexe PSM GdP | VER SECTION001 VER SECTION002 Tunnel de la Verna, Xendako ziloa | 2 | 8 676,45 | 548,79 | 1 618,14 | 0,00 | 1062 | LAR_d_478/2 | 966,47 | _d_XEN_f_XX2 | 1 515,26 | +| AN008 | SECTION001, SECTION014 SECTION015 | 2 | 8 226,55 | 805,22 | 0,00 | 0,00 | 898 | AN8_d_1701 | 1 007,78 | AN9 | 1 813,00 | +| | Gouffre des arres planères AP7 | 1 | 7 233,06 | 377,95 | 116,43 | 0,00 | 1211 | A | 1 327,05 | AP_7 | 1 705,00 | +| | Sima del Tobozo (galerie 1) | 1 | 7 228,71 | 514,65 | 0,00 | 0,00 | 700 | 34 | 1 460,35 | 0 | 1 975,00 | +| | Gouffre des Bourrugues B3, entrée 01 : puits d'entrée | 1 | 6 615,73 | 667,24 | 0,00 | 0,00 | 740 | N-00 | 952,76 | B_3 | 1 620,00 | +| | 10S6C7X1 - 9S5C6X1 | 1 | 5 435,99 | 696,11 | 0,00 | 0,00 | 680 | DS495/172 | 853,89 | DS_49 | 1 550,00 | +| | 1S1C1X1 2S2C1X1 3S3C1X1 | 1 | 5 212,26 | 670,59 | 0,00 | 0,00 | 744 | BT6_d_2/641 | 947,41 | BT_6 | 1 618,00 | +| | 1S1C1X1 2S1C4X1 | 1 | 4 164,03 | 715,19 | 0,00 | 0,00 | 581 | UK4_d_25/16 | 1 083,81 | VB11 | 1 799,00 | +| | SECTION006 - SECTION009 | 1 | 4 054,16 | 108,40 | 0,00 | 15,50 | 435 | LAC_d_SORT27 | 529,73 | LAC_d_MS7 | 638,13 | +| | 10S10C1X1 - 9S9C1X1 | 1 | 3 512,87 | 553,48 | 0,00 | 0,00 | 572 | CHI_d_46/6 | 941,52 | CHIPI | 1 495,00 | +| | 1S1C1X1 - 9S9C1X1 | 1 | 3 338,53 | 208,44 | 0,00 | 0,00 | 395 | REN_d_1/34 | 396,01 | REN_d_2/15 | 604,45 | +| | SECTION001 | 1 | 3 278,77 | 356,85 | 0,00 | 0,00 | 675 | BG6322-31 | 1 029,15 | BG_63 | 1 386,00 | +| Complexe Lonné Peyret-Bourrugues | Gouffre du Lonné Peyret GL102 - Entrée, Gouffre du Cam de Caque GL04 | 2 | 3 026,31 | 471,24 | 111,58 | 0,00 | 323 | 25 | 1 164,76 | GL_4 | 1 636,00 | +| | 17S17C1X1 18S17C3X1 19S18C1X1 1S1C1X1 | 1 | 2 564,77 | 316,87 | 0,00 | 0,00 | 327 | UK557_d_5/56 | 1 828,13 | A_4 | 2 145,00 | +| | SECTION001 | 1 | 2 383,58 | 535,79 | 0,00 | 0,00 | 279 | B38 | 1 727,21 | AN639 | 2 263,00 | +| | 1S1C1X1 | 1 | 1 892,89 | 136,24 | 0,00 | 0,00 | 253 | ALA_d_6/11 | 795,76 | ALAHAIS | 932,00 | +| | SC 60 | 1 | 1 795,14 | 323,45 | 64,40 | 0,00 | 269 | 232 | 1 838,77 | 2.4 | 2 162,22 | +| | 1S1C1X1 2S2C1X1 3S3C1X1 5S4C1X1 7S5C1X1 | 1 | 1 667,15 | 384,30 | 0,00 | 0,00 | 289 | M3263/199 | 1 725,70 | M_326 | 2 110,00 | +| | L5 Entrée puits | 1 | 1 645,48 | 371,69 | 66,04 | 0,00 | 292 | FL386.138.71 | 1 651,31 | L_5 | 2 023,00 | +| | AN43SECTION001 | 1 | 1 540,03 | 376,73 | 0,00 | 0,00 | 248 | BG632-31 | 1 349,27 | AN43 | 1 726,00 | +| | SECTION001 | 1 | 1 412,20 | 379,71 | 0,00 | 0,00 | 117 | 39V | 1 349,71 | A60_111 | 1 729,42 | +| | Z127 SECTION001 | 1 | 1 400,82 | 529,78 | 0,00 | 0,00 | 262 | _d_Z127_f_264 | 1 128,22 | HP10 | 1 658,00 | +| | C214 Sima de la niebla | 1 | 1 064,44 | 420,12 | 0,00 | 0,00 | 157 | C214_d_130 | 1 513,88 | C_214 | 1 934,00 | +| | 10S10C1X1 - 9S9C1X1 | 1 | 1 011,10 | 404,84 | 0,00 | 0,00 | 115 | Z17_d_11/5 | 1 348,16 | - | 1 753,00 | +| | AN669-10-20 | 1 | 1 002,32 | 352,95 | 0,00 | 23,59 | 168 | FL15 | 1 870,75 | AN669 | 2 223,70 | +| Synthèse générale des réseaux de la Pierre Saint Martin-Larra | AN211-93 S1, AN596-16-1 | 2 | 882,32 | 344,27 | 0,00 | 21,77 | 114 | QR2_35 | 1 715,79 | HB20 | 2 060,06 | +| | 10S10C1X1 - 9S9C1X1 | 1 | 874,76 | 244,16 | 0,00 | 0,00 | 98 | MAR_d_10/4 | 575,84 | MARTIN | 820,00 | +| | Gouffre Z510 | 1 | 852,63 | 237,20 | 162,35 | 0,00 | 185 | M31_d_98/3 | 1 406,80 | - | 1 644,00 | +| | C230 Sima ricky et ses ours | 1 | 836,03 | 268,62 | 0,00 | 0,00 | 135 | _d_C230_f_164 | 1 616,38 | C_230 | 1 885,00 | +| | AN506 MO AN506 PF | 1 | 817,47 | 409,24 | 0,00 | 0,00 | 87 | PF10 | 1 754,06 | AN506 | 2 163,30 | +| | M414 (entrée) | 1 | 807,45 | 351,32 | 40,10 | 0,00 | 119 | M414_d_1/52 | 1 762,68 | AN109 | 2 114,00 | +| | 1S1C1X1 2S2C1X1 | 1 | 794,25 | 296,93 | 0,00 | 0,00 | 114 | BL118_d_2/89 | 726,07 | BL_118 | 1 023,00 | +| | Z112 SECTION001 | 1 | 767,20 | 261,03 | 0,00 | 0,00 | 90 | AN43DO11 | 1 377,97 | Z_112 | 1 639,00 | +| | 1S1C1X1 | 1 | 750,26 | 431,36 | 0,00 | 0,00 | 137 | GOR_d_6/32 | 1 172,64 | GORRIA | 1 604,00 | +| | C110 | 1 | 735,00 | 303,54 | 0,00 | 0,00 | 52 | . | 1 479,46 | C_110 | 1 783,00 | +| | Visée(s) non raccordées | 0 | 727,76 | - | 0,00 | 0,00 | 81 | AN514 | 2 324,00 | - | - | +| | C243 Sima de los cairns | 1 | 673,74 | 186,53 | 0,00 | 0,00 | 84 | C243_d_84 | 1 752,47 | UD13 | 1 939,00 | +| | SECTION001 | 1 | 658,53 | 256,95 | 0,00 | 0,00 | 107 | AN26DA7 | 1 462,05 | AN26 | 1 719,00 | +| | AN594-12-25 | 1 | 639,69 | 185,76 | 0,00 | 83,78 | 165 | VB17 | 1 770,24 | AN_594 | 1 956,00 | +| AN676-Helado | AN676-FI11-16, AN676-FI11-10 | 2 | 616,56 | 100,93 | 0,00 | 51,08 | 165 | BFF47 | 2 069,07 | AN52 | 2 170,00 | +| | AN326SECTION001 | 1 | 598,25 | 271,81 | 0,00 | 119,58 | 129 | AN326CF11 | 1 350,19 | AN_324 | 1 622,00 | +| | AN595-FI10-25 | 1 | 570,06 | 291,30 | 0,00 | 92,15 | 92 | FZ28 | 1 957,20 | AN595 | 2 248,50 | +| | 1S1C1X1 - 7S8C1X1 | 1 | 537,38 | 164,47 | 0,00 | 0,00 | 49 | STALAC | 530,00 | STA_d_2/2 | 694,47 | +| | 1S1C1X1 4S4C1X1 5S5C1X1 6S6C1X1 7S7C1X1 | 1 | 530,65 | 281,98 | 0,00 | 0,00 | 67 | BEAU2/10 | 1 458,02 | E20_d_226 | 1 740,00 | +| | 1748 SECTION001 | 1 | 515,00 | 263,50 | 0,00 | 0,00 | 17 | _d_1748_f_5.7 | 1 484,50 | Sima_1748 | 1 748,00 | +| | C108 Sima H | 1 | 509,80 | 194,09 | 0,00 | 0,00 | 26 | C1085_1 | 1 702,91 | C_108 | 1 897,00 | +| | 1S1C1X1 2S2C1X1 3S3C1X1 4S4C1X1 5S5C1X1 | 1 | 503,29 | 241,69 | 0,00 | 0,00 | 86 | - | 1 383,31 | FL386.160 | 1 625,00 | +| | SECTION001 SECTION002 | 1 | 479,60 | 120,00 | 0,00 | 0,00 | 52 | ILLA13B | 318,00 | ILLAMI | 438,00 | +| | 1S1C1X1 | 1 | 474,60 | 23,51 | 0,00 | 0,00 | 63 | CAS_d_1/63 | 539,66 | LAC_d_RD | 563,17 | +| | 1S1C1X1 2S2C1X1 | 1 | 464,88 | 294,26 | 0,00 | 0,00 | 49 | GDP1050/9 | 1 687,74 | M_13 | 1 982,00 | +| | AN109 S1 - AN109 S6 | 1 | 436,21 | 253,70 | 0,00 | 0,00 | 73 | QO2_13 | 1 860,30 | AN109 | 2 114,00 | +| Synthèse générale des réseaux de la Pierre Saint Martin-Larra | AN702-19-01, AN704-19-01 | 2 | 426,96 | 216,55 | 17,01 | 0,00 | 80 | MHX33 | 1 766,73 | CX15 | 1 983,28 | +| | SECTION001 | 1 | 410,70 | 312,59 | 0,00 | 0,00 | 43 | E22_d_38 | 1 948,41 | E22_00 | 2 261,00 | +| | AN588-FI10-12 | 1 | 385,24 | 220,08 | 0,00 | 0,00 | 56 | QS2 | 1 862,92 | AN588 | 2 083,00 | +| | AN58-2024-02 | 1 | 373,97 | 127,99 | 0,00 | 24,34 | 81 | XX17 | 2 072,01 | AN58 | 2 200,00 | +| | AN514-08 14 | 1 | 361,91 | 182,14 | 0,00 | 60,83 | 82 | XI3 | 2 143,31 | QU6 | 2 325,45 | +| | SC 223 | 1 | 347,61 | 177,54 | 0,00 | 0,00 | 58 | 18 | 1 981,10 | SC212 | 2 158,64 | +| | SECTION001 | 1 | 316,00 | 175,12 | 0,00 | 0,00 | 21 | Z11113 | 1 509,88 | Z_111 | 1 685,00 | +| | AN3-2023-01 AN3-2023-02 | 1 | 310,92 | 205,15 | 0,00 | 44,73 | 53 | QE18 | 1 839,85 | AN3 | 2 045,00 | +| | 1S1C1X1 | 1 | 297,11 | 144,44 | 0,00 | 0,00 | 52 | BOU_d_4/6 | 1 432,56 | BOUQUE | 1 577,00 | +| | AN534-01 AN534-02 | 1 | 291,51 | 133,81 | 0,00 | 178,10 | 64 | QW19 | 2 001,19 | AN534 | 2 135,00 | +| | K7 Hourat det soure | 1 | 278,70 | 190,43 | 0,00 | 0,00 | 15 | MA22 | 1 750,57 | K7_00 | 1 941,00 | +| | AN591-FI11 20 | 1 | 268,36 | 102,32 | 0,00 | 0,00 | 55 | IZ40 | 2 044,68 | AN591 | 2 147,00 | +| | 1S1C1X1 2S2C1X1 | 1 | 255,79 | 185,38 | 0,00 | 0,00 | 46 | M405_d_2/46 | 1 939,62 | AN107 | 2 125,00 | +| | A106 SECTION001 | 1 | 253,98 | 126,55 | 0,00 | 0,00 | 61 | A106_d_EA1 | 1 521,45 | A_106 | 1 648,00 | +| | AN73-86-05 | 1 | 248,35 | 210,40 | 0,00 | 38,50 | 23 | ESF1 | 1 861,60 | AN73 | 2 072,00 | +| | 30S100C1X11 | 1 | 243,24 | 68,25 | 0,00 | 0,00 | 33 | ARP100/33 | 985,75 | ROBINET | 1 054,00 | +| | AN107-03 12 | 1 | 242,97 | 161,77 | 0,00 | 14,50 | 48 | AH6X | 1 963,23 | AN107 | 2 125,00 | +| | 1S1C1X1 2S2C2X2 3S3C2X2 | 1 | 240,75 | 158,68 | 0,00 | 0,00 | 18 | LIN_d_1/10 | 1 697,32 | ERE_80 | 1 856,00 | +| | BB26 zone d'entree | 1 | 227,19 | 71,56 | 62,66 | 4,80 | 71 | 32d | 1 448,44 | LT345_79DD | 1 520,00 | +| | AN61 01 AN61 02 | 1 | 224,45 | 139,93 | 0,00 | 2,78 | 44 | XA40 | 2 076,57 | AN61 | 2 216,50 | +| | 1S1C1X1 - 9S5C1X1 | 1 | 220,56 | 120,89 | 0,00 | 0,00 | 40 | F.44 | 1 809,11 | E3_TSR3 | 1 930,00 | +| | Oueils exondé étiage | 1 | 218,33 | 72,59 | 0,00 | 0,00 | 18 | l1 | 617,41 | oueils | 690,00 | +| | 1S1C1X1 | 1 | 209,48 | 187,18 | 0,00 | 0,00 | 19 | UT140_d_1/19 | 940,82 | UT_140 | 1 128,00 | +| | SECTION001 | 1 | 208,06 | 118,44 | 0,00 | 0,00 | 25 | AP_d_7A19 | 1 631,56 | AP_333 | 1 750,00 | +| | 1S1C2X1 - 7S6C1X1 | 1 | 206,95 | 70,13 | 0,00 | 0,00 | 53 | UK559_d_1/22 | 1 967,87 | UK_559 | 2 038,00 | +| | AN103 1 | 1 | 204,38 | 92,68 | 0,00 | 42,98 | 52 | KH7 | 2 045,32 | AN103 | 2 138,00 | +| | 1S1C1X1 - 9S8C1X1 | 1 | 191,26 | 61,02 | 0,00 | 0,00 | 48 | UKD6_d_1/11 | 1 963,32 | UKD6_d_2/7 | 2 024,34 | +| | Z143 SECTION001 | 1 | 187,50 | 113,00 | 0,00 | 0,00 | 22 | _d_Z143_f_14 | 1 561,00 | Z_143 | 1 674,00 | +| | AN456-21-01 | 1 | 156,69 | 107,52 | 0,00 | 0,00 | 36 | UV7 | 1 854,48 | AN456 | 1 962,00 | +| | SECTION001 | 1 | 154,46 | 35,34 | 0,00 | 0,00 | 58 | _d_PY_f_57 | 2 274,76 | _d_PY_f_3 | 2 310,10 | +| | AN548-FI03 04 | 1 | 153,85 | 50,43 | 5,62 | 10,18 | 30 | HH3 | 2 046,24 | BA11 | 2 096,67 | +| | 1S1C1X1 | 1 | 148,40 | 126,43 | 0,00 | 0,00 | 13 | A110_d_1/13 | 1 693,57 | A_110 | 1 820,00 | +| | AN1 | 1 | 143,33 | 111,32 | 0,00 | 0,00 | 28 | MD27 | 2 057,68 | AN1 | 2 169,00 | +| | Z208 SECTION001 Z208 SECTION002 | 1 | 140,65 | 47,61 | 0,00 | 0,00 | 21 | Z208_d_4 | 1 494,53 | JK01 | 1 542,14 | +| | AN57-FI07-03 | 1 | 140,39 | 77,17 | 95,38 | 0,00 | 50 | LK1 | 1 995,23 | BFF25 | 2 072,40 | +| | AN624-16-1 | 1 | 130,95 | 78,13 | 0,00 | 19,57 | 43 | HD2 | 1 870,87 | AN624 | 1 949,00 | +| | 1S1C1X1 2S2C1X1 3S3C1X1 | 1 | 128,55 | 43,84 | 0,00 | 0,00 | 19 | LACS | 535,00 | MOU_d_3/3 | 578,84 | +| | C299 Gouffre belle gueule | 1 | 128,51 | 46,27 | 0,00 | 0,00 | 53 | 50 | 1 966,53 | 2 | 2 012,80 | +| | FI00 21 FI00 21b | 1 | 128,43 | 76,76 | 0,00 | 0,00 | 20 | PO01 | 2 073,24 | AN542 | 2 150,00 | +| | AN546-FI00 18 | 1 | 124,15 | 84,79 | 0,00 | 0,00 | 20 | VX14 | 2 182,21 | AN546 | 2 267,00 | +| | AN619-13-16 | 1 | 122,42 | 65,84 | 0,00 | 0,00 | 19 | QD11 | 1 967,42 | QD2 | 2 033,26 | +| | AN672-FI10-06 | 1 | 116,60 | 79,29 | 0,00 | 0,00 | 27 | RO4 | 1 883,71 | AN672 | 1 963,00 | +| | FI02 05 | 1 | 112,67 | 75,18 | 0,00 | 0,00 | 17 | FH1 | 2 069,82 | A_4 | 2 145,00 | +| | 1S1C1X1 2S2C1X1 3S3C1X1 | 1 | 110,42 | 70,79 | 0,00 | 0,00 | 12 | F404_d_2/3 | 1 919,21 | LT346_80UH | 1 990,00 | +| | AN683-FI12-31 | 1 | 110,10 | 67,33 | 0,00 | 0,00 | 14 | CK12 | 2 082,67 | AN542 | 2 150,00 | +| | AN561 | 1 | 109,01 | 88,93 | 0,00 | 0,00 | 17 | AX18 | 2 137,07 | AN561 | 2 226,00 | +| | 1S1C1X1 | 1 | 106,39 | 80,56 | 0,00 | 0,00 | 17 | M108_d_1/15 | 1 949,44 | M_108 | 2 030,00 | +| | 1S1C1X1 2S2C1X1 3S3C1X1 | 1 | 105,60 | 58,28 | 0,00 | 0,00 | 9 | C103_d_1/5 | 1 796,91 | C103_d_1/1 | 1 855,19 | +| | Z107 SECTION001 | 1 | 103,65 | 49,77 | 0,00 | 0,00 | 23 | - | 1 610,23 | Z_107 | 1 660,00 | +| | AN639-15-01 | 1 | 102,88 | 39,06 | 0,00 | 0,00 | 18 | HF7 | 2 223,94 | AN639 | 2 263,00 | +| | Z123 SECTION001 | 1 | 102,29 | 45,64 | 0,00 | 0,00 | 21 | PE33 | 1 652,61 | EB45 | 1 698,25 | +| | FI00 19 | 1 | 99,18 | 51,51 | 0,00 | 31,01 | 27 | SW11 | 2 093,49 | A_4 | 2 145,00 | +| | AN671-16-1 | 1 | 96,98 | 89,95 | 0,00 | 0,00 | 10 | FM1 | 1 868,05 | AN671 | 1 958,00 | +| | 1S1C1X1 | 1 | 94,53 | 88,87 | 0,00 | 0,00 | 9 | PO07 | 2 114,13 | M_400 | 2 203,00 | +| | AN453-20-01 | 1 | 91,25 | 66,69 | 0,00 | 0,00 | 19 | MFX11 | 1 905,31 | AN453 | 1 972,00 | +| | SECTION001 | 1 | 89,00 | 42,88 | 0,00 | 0,00 | 14 | CUCC5_d_9 | 1 668,12 | CUCC_5 | 1 711,00 | +| | AN507-15-1 | 1 | 88,22 | 56,14 | 0,00 | 9,06 | 20 | HL5 | 2 089,46 | AN507 | 2 145,60 | +| | FI02 16 | 1 | 86,80 | 64,76 | 0,00 | 0,00 | 10 | LJ2 | 2 127,24 | AN62 | 2 192,00 | +| | SECTION001 | 1 | 86,60 | 56,50 | 0,00 | 0,00 | 11 | CUCC4_d_8 | 1 671,50 | CUCC_4 | 1 728,00 | +| | AN708-19-1 | 1 | 79,05 | 31,86 | 0,00 | 2,19 | 23 | JU2 | 2 102,14 | AN708 | 2 134,00 | +| | AN631 | 1 | 78,00 | 69,33 | 0,00 | 7,26 | 14 | XB1 | 2 175,67 | AN631 | 2 245,00 | +| | 1S1C1X1 2S2C1X1 | 1 | 76,12 | 23,64 | 0,00 | 0,00 | 14 | MARMI | 2 005,00 | MARM1/12 | 2 028,64 | +| | C213 SECTION001 | 1 | 75,96 | 51,79 | 0,00 | 0,00 | 18 | _d_C213_f_AA7 | 1 838,21 | C_213 | 1 890,00 | +| | LAK15 SECTION001 | 1 | 75,19 | 29,45 | 0,00 | 2,99 | 16 | _d_LAK15_f_AA12 | 1 505,55 | LAK_15 | 1 535,00 | +| | SECTION001 | 1 | 74,90 | 61,87 | 0,00 | 0,00 | 10 | IS6B_d_10 | 1 667,13 | IS_6B | 1 729,00 | +| | AN616-15-1 | 1 | 69,84 | 53,77 | 0,00 | 0,00 | 14 | UD2 | 1 890,23 | AN616 | 1 944,00 | +| | AN635-04-00 | 1 | 68,51 | 46,38 | 0,00 | 0,00 | 9 | TD1 | 2 268,62 | AN635 | 2 315,00 | +| | AN627-14-21 | 1 | 67,93 | 15,78 | 0,00 | 11,22 | 25 | FG6 | 2 128,22 | AN627 | 2 144,00 | +| | BB09 | 1 | 66,89 | 58,51 | 0,00 | 0,00 | 12 | suite | 1 442,49 | BB09 | 1 501,00 | +| | AN634 | 1 | 63,56 | 50,07 | 0,00 | 0,00 | 10 | NA11 | 2 283,93 | AN634 | 2 334,00 | +| | AN564-17-1 | 1 | 60,62 | 30,84 | 0,00 | 0,00 | 10 | FQ9 | 2 124,16 | AN564 | 2 155,00 | +| | AN455-23-01 | 1 | 59,25 | 38,27 | 0,00 | 5,26 | 21 | OZ0 | 1 929,73 | AN_455 | 1 968,00 | +| | AN692-15-1 | 1 | 58,83 | 45,51 | 0,00 | 6,95 | 20 | GF1 | 1 917,63 | CY13 | 1 963,14 | +| | AN5577-17-1 | 1 | 57,83 | 36,74 | 0,00 | 121,83 | 30 | FS22 | 2 080,11 | FS6 | 2 116,85 | +| | BB27 | 1 | 57,60 | 26,51 | 17,50 | 0,00 | 22 | 15 | 1 474,74 | 0 | 1 501,25 | +| | FI08 15 | 1 | 54,48 | 47,28 | 0,00 | 0,00 | 10 | QC11 | 2 114,72 | AN646 | 2 162,00 | +| | AN536-FI12-07 | 1 | 54,27 | 10,39 | 0,00 | 13,33 | 19 | BGG11 | 2 099,25 | BGG3 | 2 109,64 | +| | AN465-23-01 | 1 | 53,34 | 18,72 | 0,00 | 39,73 | 23 | PX11 | 2 106,35 | PX14 | 2 125,07 | +| | AN480-21-01 | 1 | 50,56 | 47,11 | 0,00 | 0,00 | 9 | ZC8 | 1 897,89 | AN480 | 1 945,00 | +| | Z108 SECTION001 | 1 | 49,64 | 9,59 | 0,00 | 0,00 | 15 | _d_Z108_f_2.3 | 1 675,08 | _d_Z108_f_1.9 | 1 684,67 | +| | SECTION001 | 1 | 47,80 | 17,95 | 0,00 | 0,00 | 8 | AP45_d_3A | 1 684,05 | AP_45 | 1 702,00 | +| | AN622-14-05 | 1 | 44,78 | 23,44 | 0,00 | 19,82 | 16 | EL2 | 2 010,56 | AN622 | 2 034,00 | +| | AN576 | 1 | 44,01 | 27,71 | 0,00 | 0,00 | 8 | JD1 | 2 121,29 | AN576 | 2 149,00 | +| | Z100 SECTION001 | 1 | 43,32 | 34,66 | 0,00 | 0,00 | 7 | - | 1 645,34 | Z_100 | 1 680,00 | +| | SECTION001 | 1 | 43,13 | 30,43 | 0,00 | 0,00 | 9 | GDP10/24 | 1 755,57 | IS9_00 | 1 786,00 | +| | SECTION001 | 1 | 37,25 | 15,23 | 0,00 | 0,00 | 7 | AP_d_3B07 | 1 734,77 | AP_333 | 1 750,00 | +| | AN66 | 1 | 33,99 | 32,95 | 0,00 | 5,08 | 6 | JEX1 | 2 078,05 | JEX6 | 2 111,00 | +| | AN45 SECTION001 | 1 | 32,50 | 28,67 | 0,00 | 0,00 | 7 | AN45-7 | 1 627,33 | AN45 | 1 656,00 | +| | SECTION001 | 1 | 32,00 | 27,68 | 0,00 | 0,00 | 6 | AN376 | 1 718,32 | AN37 | 1 746,00 | +| | AN532-FI00 22 | 1 | 31,50 | 3,67 | 0,00 | 0,00 | 11 | UW10 | 2 121,19 | UW01 | 2 124,86 | +| | AN711-21-01 | 1 | 31,00 | 5,85 | 0,00 | 0,00 | 10 | NE8 | 2 106,15 | AN557 | 2 112,00 | +| | Z444 SECTION001 | 1 | 26,44 | 6,21 | 0,00 | 0,00 | 9 | _d_Z444_f_1.5 | 1 679,79 | QUI1.38 | 1 686,00 | +| | AN699-19-01 | 1 | 26,18 | 21,75 | 0,00 | 11,26 | 7 | AH13 | 1 984,25 | AN699 | 2 006,00 | +| | BB50 SECTION001 | 1 | 25,00 | 21,87 | 0,00 | 39,41 | 27 | _d_BB50_f_FOND | 1 515,13 | BB_50 | 1 537,00 | +| | AN324 SECTION001 | 1 | 20,47 | 12,89 | 0,00 | 0,00 | 7 | _d_AN324_f_5 | 1 609,11 | AN_324 | 1 622,00 | +| | AN325 SECTION001 | 1 | 17,74 | 10,15 | 0,00 | 0,00 | 6 | _d_AN325_f_6 | 1 592,85 | AN_325 | 1 603,00 | +| | Lambert Square | 1 | 0,00 | 40,00 | 0,00 | 120,00 | 6 | LT345_79HH | 1 480,00 | LT345_79DD | 1 520,00 | +| | Lambert Square | 1 | 0,00 | 20,00 | 0,00 | 60,00 | 6 | LT346_80UH | 1 990,00 | LT346_80UD | 2 010,00 | +| | Lambert Square | 1 | 0,00 | 20,00 | 0,00 | 60,00 | 6 | LT346_80UH | 1 990,00 | LT346_80UD | 2 010,00 | +| | Lambert Square | 1 | 0,00 | 20,00 | 0,00 | 60,00 | 6 | LT346_80UH | 1 990,00 | LT346_80UD | 2 010,00 | +| | Lambert Square | 1 | 0,00 | 20,00 | 0,00 | 60,00 | 6 | LT346_80UH | 1 990,00 | LT346_80UD | 2 010,00 | +| | UTM Square | 1 | 0,00 | 0,00 | 0,00 | 20,00 | 2 | LT346_80 | 2 000,00 | LT346_80 | 2 000,00 | +| | UTM Square | 1 | 0,00 | 0,00 | 0,00 | 20,00 | 2 | LT346_80 | 2 000,00 | LT346_80 | 2 000,00 | +| | UTM Square | 1 | 0,00 | 0,00 | 0,00 | 20,00 | 2 | LT346_80 | 2 000,00 | LT346_80 | 2 000,00 | +| | UTM Square | 1 | 0,00 | 0,00 | 0,00 | 20,00 | 2 | LT346_80 | 2 000,00 | LT346_80 | 2 000,00 | +| | Entrées non racordées | 1 | 0,00 | 40,00 | 120,00 | 0,00 | 6 | 4 | 2 017,00 | AN596 | 2 057,00 | +| | Entrées non racordées | 1 | 0,00 | 40,00 | 120,00 | 0,00 | 6 | AN456 | 1 962,00 | B | 2 002,00 | +| | Entrées non racordées | 1 | 0,00 | 40,00 | 120,00 | 0,00 | 6 | G | 1 747,00 | - | 1 787,00 | +| | Entrées non racordées | 1 | 0,00 | 40,00 | 120,00 | 0,00 | 6 | CHI_d_38/1 | 1 275,00 | N | 1 315,00 | +| | Entrée(s) sans topographie | 5 | 0,00 | 245,00 | 0,00 | 0,00 | 0 | LT345_79 | 1 500,00 | Z150_d_1_0 | 1 745,00 | + + +-------------- + +### Développement total topographié par année(s) +| Année | Dev. (m) | Cumul (m) | Dupl. (m) | Cumul (m) | Surf. (m) | Cumul (m) | +|---|---|---|---|---|---|---| +| 1950 | 1 724,74 | 1 724,74 | 0,00 | 0,00 | 0,00 | 0,00 | +| 1971 | 2 627,02 | 4 351,76 | 116,43 | 116,43 | 0,00 | 0,00 | +| 1974 | 575,30 | 4 927,06 | 0,00 | 116,43 | 0,00 | 0,00 | +| 1976 | 606,16 | 5 533,22 | 0,00 | 116,43 | 0,00 | 0,00 | +| 1977 | 1 411,32 | 6 944,54 | 0,00 | 116,43 | 0,00 | 0,00 | +| 1978 | 2 081,24 | 9 025,78 | 0,00 | 116,43 | 0,00 | 0,00 | +| 1979 | 5 031,79 | 14 057,57 | 64,40 | 180,83 | 0,00 | 0,00 | +| 1980 | 940,79 | 14 998,36 | 0,00 | 180,83 | 0,00 | 0,00 | +| 1981 | 4 122,90 | 19 121,26 | 0,00 | 180,83 | 0,00 | 0,00 | +| 1982 | 6 422,46 | 25 543,72 | 0,00 | 180,83 | 0,00 | 0,00 | +| 1983 | 8 885,25 | 34 428,97 | 1 022,47 | 1 203,30 | 0,00 | 0,00 | +| 1984 | 5 635,70 | 40 064,67 | 0,00 | 1 203,30 | 0,00 | 0,00 | +| 1985 | 7 594,11 | 47 658,78 | 0,00 | 1 203,30 | 0,00 | 0,00 | +| 1986 | 2 747,84 | 50 406,62 | 0,00 | 1 203,30 | 38,50 | 38,50 | +| 1987 | 10 648,06 | 61 054,68 | 70,66 | 1 273,96 | 0,00 | 38,50 | +| 1988 | 1 310,71 | 62 365,39 | 0,00 | 1 273,96 | 0,00 | 38,50 | +| 1989 | 4 088,49 | 66 453,88 | 0,00 | 1 273,96 | 0,00 | 38,50 | +| 1990 | 6 920,12 | 73 374,00 | 0,00 | 1 273,96 | 0,00 | 38,50 | +| 1991 | 1 164,14 | 74 538,14 | 0,00 | 1 273,96 | 0,00 | 38,50 | +| 1992 | 14 467,22 | 89 005,36 | 0,00 | 1 273,96 | 0,00 | 38,50 | +| 1993 | 19 380,69 | 108 386,05 | 0,00 | 1 273,96 | 0,00 | 38,50 | +| 1994 | 8 749,22 | 117 135,27 | 0,00 | 1 273,96 | 0,00 | 38,50 | +| 1995 | 5 661,53 | 122 796,80 | 0,00 | 1 273,96 | 0,00 | 38,50 | +| 1996 | 8 964,07 | 131 760,87 | 70,08 | 1 344,04 | 0,00 | 38,50 | +| 1997 | 13 193,45 | 144 954,32 | 0,00 | 1 344,04 | 0,00 | 38,50 | +| 1998 | 12 640,07 | 157 594,39 | 21,10 | 1 365,14 | 0,00 | 38,50 | +| 1999 | 10 657,59 | 168 251,98 | 3 706,31 | 5 071,45 | 137,44 | 175,94 | +| 2000 | 6 419,46 | 174 671,44 | 1 214,92 | 6 286,37 | 409,80 | 585,74 | +| 2001 | 12 440,67 | 187 112,11 | 596,17 | 6 882,54 | 27,39 | 613,13 | +| 2002 | 5 107,89 | 192 220,00 | 247,31 | 7 129,85 | 45,44 | 658,57 | +| 2003 | 3 927,29 | 196 147,29 | 0,00 | 7 129,85 | 406,12 | 1 064,69 | +| 2004 | 2 645,33 | 198 792,62 | 11,06 | 7 140,91 | 178,02 | 1 242,71 | +| 2005 | 2 733,71 | 201 526,33 | 0,00 | 7 140,91 | 405,03 | 1 647,74 | +| 2006 | 7 659,27 | 209 185,60 | 80,00 | 7 220,91 | 203,64 | 1 851,38 | +| 2007 | 6 496,08 | 215 681,68 | 95,38 | 7 316,29 | 9,35 | 1 860,73 | +| 2008 | 4 780,88 | 220 462,56 | 0,00 | 7 316,29 | 158,13 | 2 018,86 | +| 2009 | 4 993,39 | 225 455,95 | 71,84 | 7 388,13 | 875,47 | 2 894,33 | +| 2010 | 4 406,45 | 229 862,40 | 404,20 | 7 792,33 | 181,61 | 3 075,94 | +| 2011 | 5 698,22 | 235 560,62 | 0,00 | 7 792,33 | 309,63 | 3 385,57 | +| 2012 | 9 116,66 | 244 677,28 | 0,00 | 7 792,33 | 1 382,85 | 4 768,42 | +| 2013 | 9 810,78 | 254 488,06 | 7,42 | 7 799,75 | 527,56 | 5 295,98 | +| 2014 | 9 800,55 | 264 288,61 | 150,80 | 7 950,55 | 286,91 | 5 582,89 | +| 2015 | 8 429,72 | 272 718,33 | 1 054,63 | 9 005,18 | 1 347,63 | 6 930,52 | +| 2016 | 9 689,42 | 282 407,75 | 1 381,39 | 10 386,57 | 211,21 | 7 141,73 | +| 2017 | 4 858,50 | 287 266,25 | 83,46 | 10 470,03 | 294,39 | 7 436,12 | +| 2018 | 7 369,21 | 294 635,46 | 395,87 | 10 865,90 | 496,43 | 7 932,55 | +| 2019 | 6 017,18 | 300 652,64 | 289,22 | 11 155,12 | 266,20 | 8 198,75 | +| 2020 | 5 050,76 | 305 703,40 | 265,07 | 11 420,19 | 24,74 | 8 223,49 | +| 2021 | 7 945,59 | 313 648,99 | 529,80 | 11 949,99 | 315,77 | 8 539,26 | +| 2022 | 6 913,36 | 320 562,35 | 1 794,04 | 13 744,03 | 42,40 | 8 581,66 | +| 2023 | 6 343,27 | 326 905,62 | 1 180,34 | 14 924,37 | 79,70 | 8 661,36 | +| 2024 | 7 701,11 | 334 606,73 | 547,76 | 15 472,13 | 144,72 | 8 806,08 | +| 2025 | 5 695,94 | 340 302,67 | 102,89 | 15 575,02 | 150,53 | 8 956,61 | + + +-------------- +### Bilan final +| | | +| :---------------- | :--- | +| Script pyThStat par | alexandre.pont@yahoo.fr | +| Version | 2026.09.25 | +| Fichier source | ~\Synthese-PSM_LARRA\Outputs\DB_Synthese-PSM_LARRA.sql | +| Dossier destination | ~\Synthese-PSM_LARRA\Outputs\DB_Synthese-PSM_LARRA_Stats | +| Date | 2026-09-25 18h02m49s | +| Durée calcul |29 (m) 39 (s) sans erreur | + +-------------- diff --git a/Scripts/pyCreateTh.log b/Scripts/pyCreateTh.log new file mode 100644 index 0000000..6841730 --- /dev/null +++ b/Scripts/pyCreateTh.log @@ -0,0 +1,11 @@ +2026-09-09 13:12:03,027 - INFO - ###################################################################################################################################################### +2026-09-09 13:12:03,028 - INFO - # Files conversion th, dat, mak, tro and trox to therion files and folders # +2026-09-09 13:12:03,028 - INFO - # Script pyCreateTh by : alexandre.pont@yahoo.fr # +2026-09-09 13:12:03,028 - INFO - # Version : 2026.01.08 # +2026-09-09 13:12:03,033 - INFO - # Input file : . # +2026-09-09 13:12:03,033 - INFO - # Output folder : . # +2026-09-09 13:12:03,033 - INFO - # Log file : pyCreateTh.log # +2026-09-09 13:12:03,034 - INFO - # Config file : config.ini, profile : CRIOU # +2026-09-09 13:12:03,034 - INFO - # # +2026-09-09 13:12:03,034 - INFO - ###################################################################################################################################################### +2026-09-09 13:12:03,034 - CRITICAL - !!! No valid file selected, try again diff --git a/Scripts/pyCreateTh/Template/Outputs/Outputs.md b/Scripts/pyCreateTh/Template/Outputs/Outputs.md new file mode 100644 index 0000000..3cadd51 --- /dev/null +++ b/Scripts/pyCreateTh/Template/Outputs/Outputs.md @@ -0,0 +1,2 @@ +## Folder where Therion outputs are exported + diff --git a/Scripts/pyCreateTh/Template/Outputs/outputs.txt b/Scripts/pyCreateTh/Template/Outputs/outputs.txt deleted file mode 100644 index 4a3b6e4..0000000 --- a/Scripts/pyCreateTh/Template/Outputs/outputs.txt +++ /dev/null @@ -1,2 +0,0 @@ -Folder where Therion outputs are exported - diff --git a/Scripts/pyCreateTh/Template/Sources/Sources.md b/Scripts/pyCreateTh/Template/Sources/Sources.md new file mode 100644 index 0000000..84b4bb3 --- /dev/null +++ b/Scripts/pyCreateTh/Template/Sources/Sources.md @@ -0,0 +1,2 @@ +## Folder where you can put your originals files + diff --git a/Scripts/pyCreateTh/Template/template.thconfig b/Scripts/pyCreateTh/Template/template.thconfig index 292dc70..441d2b7 100644 --- a/Scripts/pyCreateTh/Template/template.thconfig +++ b/Scripts/pyCreateTh/Template/template.thconfig @@ -89,7 +89,7 @@ layout layout-Plan grid-size 50 50 50 m ## la topo est transparente (on peut voir les galeries en dessous) - ## C'est on par défaut, donc, pas vraiment besoin de specifier + ## C'est 'on' par défaut, donc, pas vraiment besoin de specifier transparency on ## Couleurs de la topographie @@ -103,7 +103,7 @@ layout layout-Plan #colour-legend off colour map-fg 90 - ## ça marche seulement si transparency est "on" 90% blanc= 10% noir + ## Ça marche seulement si 'transparency' est "on" 90% blanc= 10% noir opacity 75 #surface bottom #surface-opacity 100 @@ -123,7 +123,7 @@ layout layout-Plan ## ou une autre combinaison... map-header 2 -98 nw - ## arrière plan de la manchette + ## Arrière plan de la manchette map-header-bg on ## Légende pour expliciter les symboles. "on" imprimera seulement la légende des symboles dessinés @@ -260,7 +260,7 @@ layout layout-Extended #grid-size 250 250 250 m ## la topo est transparente (on peut voir les galeries inférieurs) - ## C'est on par défaut, donc, pas vraiment besoin de spécifier + ## C'est 'on' par défaut, donc, pas vraiment besoin de spécifier transparency on ## Couleurs de la topographie @@ -274,7 +274,7 @@ layout layout-Extended #colour-legend off colour map-fg 90 - ## ça marche seulement si transparency est "on" 90% blanc= 10% noir + ## Ça marche seulement si transparency est "on" 90% blanc= 10% noir opacity 75 #surface bottom #surface-opacity 100 @@ -294,7 +294,7 @@ layout layout-Extended ## ou une autre combinaison... map-header 98 98 ne - ## arrière plan de la manchette + ## Arrière plan de la manchette map-header-bg on ## Légende pour expliciter les symboles. "on" imprimera seulement la légende des symboles dessinés @@ -381,11 +381,11 @@ layout xviexport ## taille de la grille grid-size 2 2 2 m - ## mettre la grille en arrière plan + ## Mettre la grille en arrière plan grid bottom endlayout -## fin de la définition du layout +## Fin de la définition du layout ############################################################################################### ## 3-EXPORT ## @@ -423,8 +423,6 @@ endlayout # export database -fmt sql -o Outputs/{fileName}-Database.sql # export continuation-list -o Outputs/{fileName}-Continuations.html - - ############################################################################################### ## END FILE ## -############################################################################################### \ No newline at end of file +############################################################################################### diff --git a/Scripts/pyCreateTh/config.ini b/Scripts/pyCreateTh/config.ini index 7dbbb21..8147b3f 100644 --- a/Scripts/pyCreateTh/config.ini +++ b/Scripts/pyCreateTh/config.ini @@ -7,15 +7,15 @@ ############################################################################################# [Survey_Data] # Default Author = Alexandre Pont -Copyright1 = # Copyright (C) ARSIP {YEAR} +Copyright1 = # Copyright (C) {YEAR} Copyright2 = # This work is under the Creative Commons Attribution-NonCommercial-NoDerivatives License: Copyright3 = # Copyright_Short = License CC by-nc-nd : http://creativecommons.org/licenses/by-nc-nd/4.0/ -map_comment = Massif de la Pierre Saint Martin - Larra -club = ARSIP +map_comment = +club = thanksto = Merci à tout le monde -datat = https://github.com/Alex38Lyon/Synthese-PSM_LARRA -wpage = https://www.arsip.fr/ +datat = +wpage = cs = UTM30 [Survey_Data:Tritons] @@ -70,6 +70,19 @@ datat = wpage = cs = UTM48 +[Survey_Data:CRIOU] +Author = Alexandre Pont +Copyright1 = # Copyright (C) Collectif Mirolda {YEAR} +Copyright2 = # This work is under the Creative Commons Attribution-NonCommercial-NoDerivatives License: +Copyright3 = # +Copyright_Short = License CC by-nc-nd : http://creativecommons.org/licenses/by-nc-nd/4.0/ +map_comment = Collectif Mirolda {YEAR} +club = Collectif Mirolda {YEAR} +thanksto = Merci à tout le monde +datat = https://github.com/robertxa/Mirolda +wpage = https://github.com/robertxa/Mirolda +cs = UTM32 + ############################################################################################# # Configuration data ############################################################################################# @@ -82,7 +95,7 @@ parse_tro_files_by_explo = True final_therion_exe = True therion_path = C:\Program Files\Therion\therion.exe -# Survey prefix name use tu create Survey folders +# Survey prefix name use to create survey folders survey_prefix_name = Explo_ # Options for th2 files diff --git a/Scripts/pyCreateTh/therion.log b/Scripts/pyCreateTh/therion.log deleted file mode 100644 index c1d6f56..0000000 --- a/Scripts/pyCreateTh/therion.log +++ /dev/null @@ -1,7 +0,0 @@ -therion 6.3.4+999e03f9+dev (2026-03-16) - - using Proj 9.5.1, compiled against 9.7.1 -C:\Program Files\Therion\therion.exe: warning -- Proj version mismatch: using 9.5.1, compiled against 9.7.1 -initialization file: C:\Program Files\Therion/therion.ini -reading ... done -C:\Program Files\Therion\therion.exe: error -- can't open file for input -- Xendako.thconfig -Press ENTER to exit! \ No newline at end of file diff --git a/Scripts/pyThStat/Lib/__pycache__/global_data.cpython-314.pyc b/Scripts/pyThStat/Lib/__pycache__/global_data.cpython-314.pyc index b6993a7a920d50a2b18ecc4e1bc3912ba7c36320..301ef92dcba3da52bde2feb9c8e92e4071f94c7e 100644 GIT binary patch delta 143 zcmbQrwvCNXn~#@^0SLk?wq-FePvn!35d-oX7=jo|7=jo}7=xHfn1Yx~n1fi988lfp z+8HzP8JW7>Vk=5bOvz34(`1=k&Lk^vi!Z;lq@c9KEi)%IFEKZD@)V|UeUQ0~KwK;f nBt9@RGBSQ-Vq;|aAi%&a-oXBWi-A|Df%Ac&WD{Qz2T%n7;%*=m delta 128 zcmdnSHkFM}n~#@^0SHz~%*=YqG?7n2UI@r*U 0: # type: ignore # print(f"{Colors.GREEN}{Colors.BOLD}Phase 4.{Count}: Remplissage des tables _JONCTION et _SERIE itération: {Count}, séries créée(s): {New_Serie_ID} ajoutée(s): {New_Serie_ID-New_Serie_IDOld} à traiter: {len(results)}{Colors.ENDC}") # type: ignore - bar.text(f"{Colors.YELLOW}itération(s): {Colors.ENDC}{Count}{Colors.YELLOW}, série(s) créée(s): {Colors.ENDC}{New_Serie_ID}") # type: ignore + bar.text(f"{Colors.YELLOW}itération(s): {Colors.ENDC}{Count}{Colors.YELLOW}, série(s) créée(s): {Colors.ENDC}{New_Serie_ID}{Colors.YELLOW}") # type: ignore cursor.execute("SELECT COUNT(*) AS nbre FROM _JONCTION WHERE STATION_TYPE IS NULL") _compteur = cursor.fetchall() compteur = int(_compteur[0][0]) @@ -377,16 +379,16 @@ def construction_tables(): orphelines_shot() jonction_RESEAU() + name_RESEAU() if compteur > 0 : log.warning(f"Phase 4: Fin du remplissage des tables,{Colors.WARNING} attention {Colors.ENDC}{compteur}{Colors.WARNING} station(s) non comptabilisé(s)") - error_count += 1 # else : # print(f"{Colors.GREEN}{Colors.BOLD}Phase 4: Fin du remplissage des tables voir {imported_database}{Colors.ENDC}") except sqlite3.Error as e: - log.error(f"Erreur lors de l'exécution d'une des requêtes (construction_tables) code:{Colors.ENDC} {e}") + log.error(f"Erreur lors de l'exécution d'une de la fonction construction_tables, code:{Colors.ENDC} {e}") error_count += 1 return @@ -430,7 +432,7 @@ def orphelines_shot(): conn.commit() orphelines = cursor.fetchall() - log.info(f"Intégrations des visées orphelines (entre 2 stations existantes) nbre: {Colors.ENDC}{len(orphelines)}") + log.info(f"Intégrations des visées orphelines (entre 2 stations existantes), nbre: {Colors.ENDC}{len(orphelines)}") for row in orphelines: _SERIE_LENGHT = 0 @@ -571,7 +573,70 @@ def jonction_RESEAU(): log.info(f"Réseau: {Colors.ENDC}{index_reseau}{Colors.INFO}, entrées jonctionnées: {Colors.ENDC}{len(liste_entrees_reseau)}{Colors.INFO}, {Colors.ENDC}{liste_entrees_reseau}") except sqlite3.Error as e: - log.error(f"Erreur lors de l'exécution de la requête Jonction_RESEAU code:{Colors.ENDC} {e}") + log.error(f"Erreur lors de l'exécution de la fonction Jonction_RESEAU, code:{Colors.ENDC} {e}") + error_count += 1 + + return + +##################################################################################################################################### +# Fonction pour nommer les réseaux d'après les survey name # +##################################################################################################################################### +def name_RESEAU(): + global error_count + + try: + cursor.execute(""" + SELECT + _RESEAU.ID AS _ID, + _RESEAU.RESEAU_ID AS _RESEAU_ID, + _RESEAU.ENT_1, + _RESEAU.ENT_2, + STATION_ENT_1.NAME AS S1_NAME, + STATION_ENT_2.NAME AS S2_NAME, + SURVEY_ENT_1.NAME AS SURVEY_NAME_ENT_1, + SURVEY_ENT_1.FULL_NAME AS SURVEY_FULL_NAME_ENT_1, + SURVEY_ENT_1.ID AS SURVEY_ID_ENT_1, + SURVEY_ENT_1.TITLE AS SURVEY_TITLE_NAME_ENT_1, + SURVEY_ENT_2.NAME AS SURVEY_NAME_ENT_2, + SURVEY_ENT_2.FULL_NAME AS SURVEY_FULL_NAME_ENT_2, + SURVEY_ENT_2.ID AS SURVEY_ID_ENT_2, + SURVEY_ENT_2.TITLE AS SURVEY_TITLE_NAME_ENT_2 + FROM _RESEAU AS _RESEAU + INNER JOIN STATION AS STATION_ENT_1 ON _RESEAU.ENT_1 = STATION_ENT_1.ID + LEFT JOIN STATION AS STATION_ENT_2 ON _RESEAU.ENT_2 = STATION_ENT_2.ID + INNER JOIN SURVEY AS SURVEY_ENT_1 ON STATION_ENT_1.SURVEY_ID = SURVEY_ENT_1.ID + INNER JOIN SURVEY AS SURVEY_ENT_2 ON STATION_ENT_2.SURVEY_ID = SURVEY_ENT_2.ID + ORDER BY _RESEAU_ID; + """) + + conn.commit() + name_reseau = cursor.fetchall() + + for row in name_reseau : + log.debug(f"{Colors.BLUE}Réseau ID {Colors.ENDC}{row[0]}{Colors.BLUE}, ENT_1 full name : {Colors.ENDC}{row[7]}{Colors.BLUE}, Survey ID {Colors.ENDC}{row[8]}{Colors.BLUE}, ENT_2 full name : {Colors.ENDC}{row[11]}{Colors.BLUE}, Survey ID {Colors.ENDC}{row[12]}{Colors.BLUE}") + + parent_ent_01 = sql_Parents_Survey(row[8]) + parent_ent_02 = sql_Parents_Survey(row[12]) + + # IDs communs aux deux listes, en parcourant depuis la racine vers l'enfant + ids_01 = [row[0] for row in parent_ent_01] # type: ignore + ids_02 = [row[0] for row in parent_ent_02] # type: ignore + + # Ancêtres communs = intersection + communs = set(ids_01) & set(ids_02) + + # Premier parent commun = celui le plus proche des enfants + # → dans les listes ordonnées enfant→racine, c'est le commun le plus "à gauche" + premier_commun = next( (row for row in parent_ent_01 if row[0] in communs), )# type: ignore + log.debug(f"{Colors.BLUE}Premier commun : {Colors.ENDC}{premier_commun}") + + cursor.execute("UPDATE _RESEAU SET RESEAU_NAME = ? WHERE RESEAU_ID = ?", (premier_commun[2], row[1])) + conn.commit() + + + + except sqlite3.Error as e: + log.error(f"Erreur lors de l'exécution de la fonction name_RESEAU, code:{Colors.ENDC} {e}") error_count += 1 return @@ -605,7 +670,7 @@ def SHOT_equates_station(): """) equate = cursor.fetchall() - log.info(f"Jonction de SHOT equates nbre: {Colors.ENDC}{len(equate)}") + log.info(f"Jonction de SHOT equates, nbre: {Colors.ENDC}{len(equate)}") for row in equate : sous_valeurs = row[0].split(',') # print(f": {sous_valeurs[0]} = ", end="") @@ -730,7 +795,7 @@ def duplicate_SHOT(): # filtre = cursor.fetchall() if len(duplicate) > 0: - log.info(f"Table des SHOT, visées dupliquées traités nbre: {Colors.ENDC}{len(duplicate)}") + log.info(f"Table des SHOT, visées dupliquées traités, nbre: {Colors.ENDC}{len(duplicate)}") # print(f"Visées dupliqués supprimés {duplicate}") else : @@ -768,7 +833,7 @@ def issue_SHOT(): if len(issue) > 0: - log.warning(f"Table des SHOT, visée(s) bloquante(s), même départ et arrivée, longueur nulle supprimée(s) nbre: {Colors.ENDC}{len(issue)}") + log.warning(f"Table des SHOT, visée(s) bloquante(s), même départ et arrivée, longueur nulle supprimée(s), nbre: {Colors.ENDC}{len(issue)}") # print(f"Visée(s) bloquante(s) supprimée(s) {issue}") else : log.info(f"Table des SHOT, aucune visée bloquante") @@ -797,7 +862,7 @@ def marquage_visee_station_habillage() : """ ) filtre = cursor.fetchall() - log.info(f"Marquage des visées et des stations d'habillage nbre: {Colors.ENDC}{len(filtre)}") + log.info(f"Marquage des visées et des stations d'habillage, nbre: {Colors.ENDC}{len(filtre)}") for row in filtre : cursor.execute(f"UPDATE _JONCTION SET STATION_TYPE = 'hab' WHERE STATION_ID = {row[0]}") cursor.execute(f"UPDATE _VISEE_FLAG SET SERIE_ID = -1 WHERE SHOT_ID = {row[1]}") @@ -1270,7 +1335,7 @@ def test_jonction(station, serie, entree) : _serie = cursor.fetchall() # print (f"Jonction à proximité de la Station_ID: {row[0]}, retour: {str(val)}, serie {serie} - {_serie[0][0]}, entrée {entree} - {retour[0][0]}") if (retour[0][0] != entree) and (retour[0][0] != None) : - log.info(f"Jonction à la Station_ID: {Colors.ENDC}{row[0]}{Colors.INFO} entre les entrées {Colors.ENDC}{entree}{Colors.INFO} et {Colors.ENDC}{retour[0][0]}") + log.info(f"Jonction à la Station_ID: {Colors.ENDC}{row[0]}{Colors.INFO} entre les entrées {Colors.ENDC}{entree}{Colors.INFO} et {Colors.ENDC}{retour[0][0]}{Colors.YELLOW}") cursor.execute(f"INSERT INTO _RESEAU ( STATION_JONC, ENT_1, ENT_2) VALUES (?, ?, ?)", (row[0], entree, retour[0][0])) conn.commit() # if _serie[0][0] != serie and (_serie[0][0] != None): @@ -1292,9 +1357,9 @@ def test_jonction(station, serie, entree) : _serie = cursor.fetchall() # print (f"Jonction à proximité de la Station_ID: {row[0]}, retour: {str(val)}, serie {serie} - {_serie[0][0]}, entrée {entree} - {retour[0][0]}") if retour[0][0] != entree : - log.info(f"Jonction à la Station_ID: {Colors.ENDC}{station}{Colors.INFO} entre les entrées {Colors.ENDC}{entree}{Colors.INFO} et {Colors.ENDC}{retour[0][0]}") + log.info(f"Jonction à la Station_ID: {Colors.ENDC}{station}{Colors.INFO} entre les entrées {Colors.ENDC}{entree}{Colors.INFO} et {Colors.ENDC}{retour[0][0]}{Colors.YELLOW}") if _serie[0][0] != serie : - log.info (f"Jonction à la Station_ID: {Colors.ENDC}{station}{Colors.INFO} entre les series {Colors.ENDC}{serie}{Colors.INFO} et {Colors.ENDC}{_serie[0][0]}") + log.info (f"Jonction à la Station_ID: {Colors.ENDC}{station}{Colors.INFO} entre les series {Colors.ENDC}{serie}{Colors.INFO} et {Colors.ENDC}{_serie[0][0]}{Colors.YELLOW}") return True except sqlite3.Error as e: @@ -1340,520 +1405,7 @@ def format_french_number(value): ##################################################################################################################################### # Fonction pour exécuter une requête et sauvegarder les résultats dans un fichier texte # ##################################################################################################################################### -def calcul_statsNew(output_file, filename= "None"): - global error_count - - try: - # ===================================================================== - # Phase 5 - Génération des statistiques - # ===================================================================== - - log.info( - f"{Colors.UNDERLINE}Phase 5:{Colors.ENDC}" - f"{Colors.INFO} Écriture des statistiques dans " - f"{Colors.ENDC}{safe_relpath(output_file, 2)}" - ) - - md = [] - csv = [] - - # --------------------------------------------------------------------- - # En-tête CSV - # --------------------------------------------------------------------- - - csv.extend(f"{titre[i].ljust(118)}*\n" for i in range(9)) - - # --------------------------------------------------------------------- - # En-tête Markdown - # --------------------------------------------------------------------- - - md.extend([ - f"# {titre[1].strip()[2:]}\n\n", - "## Informations générales\n\n", - f"| Information | Valeur |\n", - "|---|---|\n", - f"| Script | {titre[2].strip()[2:]} |\n", - f"| Version | {titre[3].strip()[2:]} |\n", - f"| Fichier source | `{titre[4].strip()[2:]}` |\n", - f"| Dossier destination | `{titre[5].strip()[2:]}` |\n", - f"| Date | {titre[6].strip()[2:]} |\n", - ]) - - # --------------------------------------------------------------------- - # Développement total - # --------------------------------------------------------------------- - - cursor.execute(""" - SELECT - ROUND(SUM(LENGTH), 2), - ROUND(SUM(DUPLICATE_LENGTH), 2), - ROUND(SUM(SURFACE_LENGTH), 2) - FROM CENTRELINE - """) - - total = cursor.fetchone() - - developpement = total[0] or 0 - duplique = total[1] or 0 - surface = total[2] or 0 - - md.extend([ - "\n## Synthèse\n\n", - "| Statistique | Valeur |\n", - "|---|---:|\n", - f"| Développement total | **{developpement:.2f} m** |\n", - f"| Développement dupliqué | {duplique:.2f} m |\n", - f"| Surface | {surface:.2f} m² |\n", - ]) - - csv.append( - f"**Développement total centerline (m):**\t" - f"développement: {developpement:.2f}\t" - f"dupliqué: {duplique:.2f}\t" - f"surface: {surface:.2f}\n" - ) - - # --------------------------------------------------------------------- - # Vérification des stations - # --------------------------------------------------------------------- - - cursor.execute( - "SELECT COUNT(*) FROM _JONCTION WHERE STATION_TYPE IS NULL" - ) - - compteur = int(cursor.fetchone()[0]) - - md.append("\n### Raccordement des stations\n\n") - - if compteur > 0: - md.append( - f"> [!WARNING]\n" - f"> **{compteur} station(s)** ne sont pas comptabilisées " - f"et sont raccordées.\n\n" - ) - - csv.append( - f"Attention, {compteur} station(s) non comptabilisée(s) " - f"et raccordée(s)\n" - ) - else: - md.append( - "> [!NOTE]\n" - "> Toutes les stations sont comptabilisées et raccordées.\n\n" - ) - - csv.append( - "Toutes les stations sont comptabilisées et raccordées\n" - ) - - # --------------------------------------------------------------------- - # Développement par réseaux - # --------------------------------------------------------------------- - - results = sql_bilan_reseaux() - - if results and results[0][0] is not None: - - headers = [ - "Entrée(s)", "Nbre", "Dev. (m)", "Prof. (m)", - "Dupl. (m)", "Surf. (m)", "Visées", - "ID min", "Alt. min (m)", "ID max", "Alt. max (m)" - ] - - md.extend([ - "## Développement par réseaux\n\n", - "

\n", - "Afficher le détail des réseaux\n\n", - "| " + " | ".join(headers) + " |\n", - "|" + "|".join(["---"] * len(headers)) + "|\n", - ]) - - csv.append("\nDéveloppement total par réseaux\n") - - for row in results: - csv.append("\t" + "\t".join(map(str, row)) + "\n") - - for row in results[1:]: - values = [str(v) for v in row] - - md.append("| " + " | ".join(values) + " |\n") - - md.extend([ - "\n
\n\n" - ]) - - # --------------------------------------------------------------------- - # Développement par année - # --------------------------------------------------------------------- - - results = sql_bilan_annee() - - if results and results[0][0] is not None: - - headers = [ - "Année", "Dev. (m)", "Cumul (m)", - "Dupl. (m)", "Cumul (m)", - "Surf. (m²)", "Cumul (m²)" - ] - - md.extend([ - "## Développement topographié par année\n\n", - "| " + " | ".join(headers) + " |\n", - "|" + "|".join(["---"] * len(headers)) + "|\n", - ]) - - csv.append("\nDéveloppement total topographié par année(s)\n") - - for row in results[1:]: - if ( - str(row[1]).strip() != "0.00" - or str(row[3]).strip() != "0.00" - or str(row[5]).strip() != "0.00" - ): - csv.append("\t" + "\t".join(map(str, row)) + "\n") - - md.append( - "| " + " | ".join(map(str, row)) + " |\n" - ) - - md.append("\n") - - # --------------------------------------------------------------------- - # Graphiques - # --------------------------------------------------------------------- - - Rose(output_file_name_rose) - Shot_lengths_histogram(output_file_name_histo) - - md.extend([ - "## Graphiques\n\n", - f"- [Rose des directions]({output_file_name_rose})\n", - f"- [Histogramme des longueurs]({output_file_name_histo})\n\n", - ]) - - # --------------------------------------------------------------------- - # Durée totale - # --------------------------------------------------------------------- - - duree = datetime.now() - maintenant - secondes_total = int(duree.total_seconds()) - - heures, reste = divmod(secondes_total, 3600) - minutes, secondes = divmod(reste, 60) - - if heures: - duree_formatee = f"{heures:02d} h {minutes:02d} min {secondes:02d} s" - elif minutes: - duree_formatee = f"{minutes:02d} min {secondes:02d} s" - else: - duree_formatee = f"{secondes:02d} s" - - if error_count == 0: - md.extend([ - "## Traitement\n\n", - f"> [!NOTE]\n" - f"> **Traitement terminé sans erreur.** " - f"Durée : **{duree_formatee}**.\n" - ]) - - csv[7] = ( - f"* Durée calcul : {duree_formatee} sans erreur" - ) - else: - md.extend([ - "## Traitement\n\n", - f"> [!WARNING]\n" - f"> **Traitement terminé avec {error_count} erreur(s).** " - f"Durée : **{duree_formatee}**.\n" - ]) - - csv[7] = ( - f"* Durée calcul : {duree_formatee} " - f"avec erreur(s): {error_count}" - ) - - csv[7] = csv[7].ljust(118) + "*\n" - - # --------------------------------------------------------------------- - # Écriture des fichiers - # --------------------------------------------------------------------- - - with open(output_file + ".md", "w", encoding="utf-8") as file: - file.writelines(md) - - with open(output_file + ".csv", "w", encoding="utf-8") as file: - file.writelines(csv) - - # --------------------------------------------------------------------- - # Journalisation - # --------------------------------------------------------------------- - - if error_count == 0: - log.info( - f"Phase 5: Fin de traitement en {Colors.ENDC}{duree_formatee}" - f"{Colors.INFO}, résultats enregistrés dans " - f"{Colors.ENDC}{safe_relpath(output_file, 2)}" - ) - else: - log.warning( - f"Phase 5: Fin de traitement en {Colors.ENDC}{duree_formatee}, " - f"{Colors.WARNING}avec {Colors.ENDC}{error_count}" - f"{Colors.WARNING} erreur(s), {Colors.INFO}" - f"résultats enregistrés dans {Colors.ENDC}" - f"{safe_relpath(output_file, 2)}" - ) - - except sqlite3.Error as e: - log.error( - f"Erreur lors de l'exécution des requêtes calcul_stats:" - f"{Colors.ENDC} {e}" - ) - error_count += 1 - - md.append( - f"\n> [!CAUTION]\n" - f"> **Erreur SQLite :** `{e}`\n" - ) - csv.append(f"Erreur lors de l'exécution de calcul_stats: {e}\n") - - with open(output_file + ".md", "w", encoding="utf-8") as file: - file.writelines(md) - - with open(output_file + ".csv", "w", encoding="utf-8") as file: - file.writelines(csv) - - except FileNotFoundError: - log.error( - f"Erreur d'ouverture du fichier: {Colors.ENDC}" - f"{safe_relpath(output_file)}" - ) - error_count += 1 - - except Exception as e: - log.error( - f"Erreur lors de l'exécution de calcul_stats:" - f"{Colors.ENDC} {e}" - ) - error_count += 1 - - md.append( - f"\n> [!CAUTION]\n" - f"> **Erreur lors de l'exécution de calcul_stats :** `{e}`\n" - ) - csv.append(f"Erreur lors de l'exécution de calcul_stats: {e}\n") - - with open(output_file + ".md", "w", encoding="utf-8") as file: - file.writelines(md) - - with open(output_file + ".csv", "w", encoding="utf-8") as file: - file.writelines(csv) - -def calcul_statsOld(output_file, filename= "None"): - global error_count - global _largeurCol - global _largeurColTete - - try: - ##################################################################################################################################### - # Phase 5 - # Enregistrement des résultats dans un fichier - ##################################################################################################################################### - log.info(f"{Colors.UNDERLINE}Phase 5:{Colors.ENDC}{Colors.INFO} Écriture des statistiques dans fichier {Colors.ENDC}{safe_relpath(output_file, 2)}") - - output_file_ligne_md = [] - output_file_ligne_csv = [] - - for i in range(9): - output_file_ligne_csv.append(titre[i].ljust(118)+"*\n") - - - output_file_ligne_md.extend([ - f"--------------\n", - f"# {titre[1].strip()[2:]}\n", - "|---|---|\n", - f"| Script | {titre[2].strip()[2:]} |\n", - f"| Version | {titre[3].strip()[2:]} |\n", - f"| Fichier source | `{titre[4].strip()[2:]}` |\n", - f"| Dossier destination | `{titre[5].strip()[2:]}` |\n", - f"| Date | {titre[6].strip()[2:]} |\n", - f"- {titre[2].strip()[2:]}\n", - f"- {titre[3].strip()[2:]}\n", - f"- {titre[4].strip()[2:]}\n", - f"- {titre[5].strip()[2:]}\n", - f"- {titre[6].strip()[2:]}\n", - f"- {titre[7].strip()[2:]}\n", - f"--------------\n\n", - ]) - - - sql_query1 = (""" - Select - round(sum(LENGTH), 2) as Lg, - round(sum(DUPLICATE_LENGTH),2) as Duplicate, - round(sum(SURFACE_LENGTH),2) as Surface - -- round(sum(LENGTH) + sum(DUPLICATE_LENGTH), 2) as Total - from CENTRELINE length - """) - - cursor.execute(sql_query1) - results = cursor.fetchall() - vide ="-".ljust(_largeurCol) - - output_file_ligne_csv.append( - f"**Développement total centerline (m):**\tdéveloppement: %s,\tdupliqué: %s,\tsurface: %s\n" - %(str("{:.2f}".format(results[0][0]).ljust(_largeurCol)), - str("{:.2f}".format(results[0][1]).ljust(_largeurCol)), - str("{:.2f}".format(results[0][2]).ljust(_largeurCol)), - )) - - output_file_ligne_md.append( - f"**Développement total des centerlines (m):**" - f" développement: `{results[0][0]:.2f}`" - f", dupliqué: `{results[0][1]:.2f}`" - f", surface: `{results[0][2]:.2f}`\n" - ) - - cursor.execute("SELECT COUNT(*) AS nbre FROM _JONCTION WHERE STATION_TYPE IS NULL") - _compteur = cursor.fetchall() - compteur = int(_compteur[0][0]) - - if compteur > 0 : # type: ignore - output_file_ligne_md.append(f"!!Attention, `{compteur}` station(s) non comptabilisée(s) et raccordée(s)\n\n") - output_file_ligne_csv.append(f"Attention, {compteur} station(s) non comptabilisée(s) et raccordée(s)\n\n") - else : - output_file_ligne_md.append(f"Toutes les stations sont comptabilisées et raccordées\n\n") - output_file_ligne_csv.append(f"Toutes les stations sont comptabilisées et raccordées\n\n") - - results=sql_bilan_reseaux() - - # def format_markdown_row(row_data): - # return '| ' + ' | '.join(f"{str(item):>10}" for item in row_data) + ' |' - - if results[0][0] != None :# type: ignore - output_file_ligne_csv.append("Développement total par réseaux\n") - for row in results: # type: ignore - formatted_row = '\t'.join(map(str, row)) - output_file_ligne_csv.append('\t' + formatted_row + '\n') - - #print('Développement total: ' + formatted_row + 'm') - - output_file_ligne_md.append(f"\n--------------\n") - output_file_ligne_md.append("**Développement total par réseaux**\n") - - headers = ["Entrée(s)", "Nbre", "Dev.(m)", "Prof.(m)", "Dupl.(m)", "Surf.(m)", "Visées", "ID Sta.", "Alt. min(m)", "ID Sta.", "Alt. max(m)"] - output_file_ligne_md.append("| " + " | ".join(headers) + " |\n") - output_file_ligne_md.append("|" + "|".join(["------"] * len(headers)) + "|\n") - - for row in results[1:]: # type: ignore - formatted_row = [str(v) for v in row] - output_file_ligne_md.append("| " + " | ".join(formatted_row) + " |\n") - - - results=sql_bilan_annee() - - if results[0][0] != None :# type: ignore - output_file_ligne_csv.append("\nDéveloppement total topographié par année(s)\n") - for row in results: # type: ignore - if row[1].strip() != "0.00" or row[3].strip() != "0.00" or row[5].strip() != "0.00" : - formatted_row = '\t'.join(map(str, row)) - output_file_ligne_csv.append('\t' + formatted_row + '\n') - #print('Développement total: ' + formatted_row + 'm') - - output_file_ligne_md.append(f"\n--------------\n") - output_file_ligne_md.append("\n**Développement total topographié par année(s)**\n") - headers = ["Année", "Dev.(m)", "Cumul (m)", "Dupl.(m)", "Cumul (m)", "Surf.(m)", "Cumul (m)"] - - output_file_ligne_md.append("| " + " | ".join(headers) + " |\n") - output_file_ligne_md.append("|" + "|".join(["---"] * len(headers)) + "|\n") - - for row in results[1:]: # type: ignore - if row[1].strip() != "0.00" or row[3].strip() != "0.00" or row[5].strip() != "0.00" : - formatted_row = [str(v) for v in row] - output_file_ligne_md.append("| " + " | ".join(formatted_row) + " |\n") - - - output_file_ligne_md.append(f"\n--------------\n") - - Rose(output_file_name_rose) - - Shot_lengths_histogram(output_file_name_histo) - - - findetraitement = datetime.now() - - duree = findetraitement - maintenant - jours, secondes = divmod(duree.seconds, 86400) # 86400 secondes dans une journée - heures, secondes = divmod(secondes, 3600) # 3600 secondes dans une heure - minutes, secondes = divmod(secondes, 60) # 60 secondes dans une minute - if duree.seconds > 3600: - duree_formatee = "{:02}(h){:02}(m){:02}(s)".format(heures, minutes, secondes) - - elif duree.seconds > 60: - duree_formatee = "{:02}(m){:02}(s)".format(minutes, secondes) - - else : - duree_formatee = "{:02}(s)".format(secondes) - - if error_count == 0: - output_file_ligne_csv[7] = "* Durée calcul : " + duree_formatee + " sans erreur" - output_file_ligne_md[7] = "- Durée calcul : " + duree_formatee + " sans erreur\n" - output_file_ligne_csv[7] = output_file_ligne_csv[7].ljust(118)+"*\n" - - else : - output_file_ligne_csv[7] = "* Durée calcul : " + duree_formatee + " avec erreur(s): " + str(error_count) - output_file_ligne_md[7] = "- Durée calcul : " + duree_formatee + "!! avec erreur(s): " + str(error_count) + "\n" - output_file_ligne_csv[7] = output_file_ligne_csv[7].ljust(118)+"*\n" - - with open(output_file + ".md", 'w', encoding='utf-8') as file: - file.writelines(output_file_ligne_md) - - with open(output_file + ".csv", 'w', encoding='utf-8') as file: - file.writelines(output_file_ligne_csv) - - if error_count == 0 : - log.info(f"Phase 5: Fin de traitement en {Colors.ENDC}" + duree_formatee + f"{Colors.INFO}, résultats enregistrés dans {Colors.ENDC}{safe_relpath(output_file, 2)}") - - else : - log.warning(f"Phase 5: Fin de traitement en {Colors.ENDC}" + duree_formatee - + f",{Colors.WARNING} avec {Colors.ENDC}{error_count}{Colors.WARNING} erreur(s), {Colors.INFO}résultats enregistrés dans {Colors.ENDC}{safe_relpath(output_file, 2)}") - - except sqlite3.Error as e: - log.error(f"Erreur lors de l'exécution des requêtes calcul_stats:{Colors.ENDC} {e}") - error_count += 1 - output_file_ligne_md.append(f"!!! Erreur lors de l'exécution des requêtes calcul_stats: {e}\n") - output_file_ligne_csv.append(f"Erreur lors de l'exécution des requêtes calcul_stats: {e}\n") - - with open(output_file + ".md", 'w', encoding='utf-8') as file: - file.writelines(output_file_ligne_md) - - with open(output_file + ".csv", 'w', encoding='utf-8') as file: - file.writelines(output_file_ligne_csv) - - return - - except FileNotFoundError: - log.error(f"Erreur d'ouverture du fichier: {Colors.ENDC}{safe_relpath(output_file)} ") - error_count += 1 - - return - - except Exception as e: - log.error(f"Erreur lors de l'exécution de calcul_stats:{Colors.ENDC} {e}") - error_count += 1 - output_file_ligne_md.append(f"!! Erreur lors de l'exécution de calcul_stats: {e}\n") - output_file_ligne_csv.append(f"Erreur lors de l'exécution de calcul_stats: {e}\n") - - with open(output_file + ".md", 'w', encoding='utf-8') as file: - file.writelines(output_file_ligne_md) - - with open(output_file + ".csv", 'w', encoding='utf-8') as file: - file.writelines(output_file_ligne_csv) - - return - - return - -def calcul_stats(output_file , filename= "None"): +def calcul_stats(output_file_csv , output_file_md, filename= "None", ): global error_count try: @@ -1861,7 +1413,7 @@ def calcul_stats(output_file , filename= "None"): # Phase 5 # Enregistrement des résultats dans un fichier ##################################################################################################################################### - log.info(f"{Colors.UNDERLINE}Phase 5:{Colors.ENDC}{Colors.INFO} Écriture des statistiques dans le fichier: {Colors.ENDC}{safe_relpath(output_file, 2)}") + log.info(f"{Colors.UNDERLINE}Phase 5:{Colors.ENDC}{Colors.INFO} Écriture des statistiques dans le fichier: {Colors.ENDC}{safe_relpath(output_file_md, 2)}") ############################################################################################################### # Général @@ -1875,6 +1427,8 @@ def calcul_stats(output_file , filename= "None"): Rose(output_file_name_rose) Shot_lengths_histogram(output_file_name_histo) + base_name= sql_base_name() + findetraitement = datetime.now() duree = findetraitement - maintenant @@ -1896,9 +1450,75 @@ def calcul_stats(output_file , filename= "None"): ############################################################################################################### output_file_ligne_md = [] + output_file_ligne_md.append(f"-------------\n") + output_file_ligne_md.append(f"# Statistiques de `{base_name}`\n") + output_file_ligne_md.append(f"--------------\n\n") + output_file_ligne_md.append( + f"### Développement total\n\n" + f"Développement topographié: \t`{format_french_number(results[0][0])} (m)`\n" # type: ignore + f"Développement topographie dupliqués: \t`{format_french_number(results[0][1])} (m)`\n" # type: ignore + f"Développement topographie de surface:\t`{format_french_number(results[0][2])} (m)`\n" # type: ignore + f"Soit un grand total de : \t`{format_french_number(results[0][0] + results[0][1] + results[0][2])} (m)`\n" # type: ignore + ) + + if compteur > 0 : # type: ignore + output_file_ligne_md.append(f"> [!WARNING] `{compteur}` station(s) non comptabilisée(s) et raccordée(s)\n\n") + + else : + output_file_ligne_md.append(f"Toutes les stations sont comptabilisées et raccordées\n\n") + + output_file_ligne_md.append(f"\n--------------\n") + + if results2[0][0] != None : # type: ignore + output_file_ligne_md.append("### Développement total par réseau\n") + + headers = [" Réseau ", " Entrée(s) ", " Nbre ", " Dev. (m) ", " Prof. (m) ", " Dupl. (m) ", "Surf. (m)", " Visées ", " ID Stat. ", " Alt. min (m) ", " ID Stat. ", " Alt. max (m) "] + output_file_ligne_md.append("| " + " | ".join(headers) + " |\n") + output_file_ligne_md.append("|" + "|".join(["------------"] * len(headers)) + "|\n") + + vals = results2[1] + + def fmt(v, idx): + if v is None: return "" + return format_french_number(v) if idx in (3,4,5,6,9,11) else str(v).replace(' ', '') + + first = fmt(vals[0], 0) if vals[0] is not None else " " + reste = " | ".join(f"**{fmt(v, i+1)}**" for i, v in enumerate(vals[1:])) + + output_file_ligne_md.append(f"| {first}" + (f" | {reste}" if reste else "") + " |\n") + + + for row in results2[2:]: # type: ignore + + clean_row = (v.strip() for v in row) + _row = [ + format_french_number(v) if idx in (3, 4, 5, 6, 9, 11) else str(v) + for idx, v in enumerate(clean_row) + ] + formatted_row = [str(v) for v in _row] + output_file_ligne_md.append("| " + " | ".join(formatted_row) + " |\n") + + if results3[0][0] != None : # type: ignore + output_file_ligne_md.append(f"\n\n--------------\n") + output_file_ligne_md.append("\n### Développement total topographié par année(s)\n") + headers = [" Année ", "Dev. (m)", "Cumul (m)", "Dupl. (m)", "Cumul (m)", "Surf. (m)", "Cumul (m)"] + + output_file_ligne_md.append("| " + " | ".join(headers) + " |\n") + output_file_ligne_md.append("|" + "|".join(["---"] * len(headers)) + "|\n") + + for row in results3[1:]: # type: ignore + if row[1].strip() != "0.00" or row[3].strip() != "0.00" or row[5].strip() != "0.00" : + _row = [ + format_french_number(v) if idx in (1, 2, 3, 4, 5, 6) else str(v) + for idx, v in enumerate(row) + ] + formatted_row = [str(v) for v in _row] + output_file_ligne_md.append("| " + " | ".join(formatted_row) + " |\n") + + output_file_ligne_md.append(f"\n\n--------------\n") + output_file_ligne_md.extend([ - f"--------------\n", - f"# Statistiques de la base {filename}\n", + f"### Bilan final\n", "| | |\n", "| :---------------- | :--- |\n", f"| {titre[2].strip()[2:].replace(":", "|")} |\n", @@ -1917,59 +1537,9 @@ def calcul_stats(output_file , filename= "None"): output_file_ligne_md.append("| Durée calcul |" + duree_formatee + " avec erreur(s): " + str(error_count) + " |\n") output_file_ligne_md.append(f"\n--------------\n") - - output_file_ligne_md.append( - f"### Développement total (m)\n\n" - f"Développement:\t`{format_french_number(results[0][0])}`" # type: ignore - f", dupliqué:\t`{format_french_number(results[0][1])}`" # type: ignore - f", surface:\t`{format_french_number(results[0][2])}`\n\n" # type: ignore - ) - - if compteur > 0 : # type: ignore - output_file_ligne_md.append(f"> [!WARNING] `{compteur}` station(s) non comptabilisée(s) et raccordée(s)\n\n") - else : - output_file_ligne_md.append(f"Toutes les stations sont comptabilisées et raccordées\n\n") - - output_file_ligne_md.append(f"\n--------------\n") - - if results2[0][0] != None : # type: ignore - output_file_ligne_md.append("### Développement total par réseaux\n") - - headers = [" Entrée(s) ", " Nbre ", " Dev. (m) ", " Prof. (m) ", " Dupl. (m) ", "Surf. (m)", " Visées ", " ID Stat. ", " Alt. min (m) ", " ID Stat. ", " Alt. max (m) "] - output_file_ligne_md.append("| " + " | ".join(headers) + " |\n") - output_file_ligne_md.append("|" + "|".join(["------------"] * len(headers)) + "|\n") - - for row in results2[1:]: # type: ignore - _row = [ - format_french_number(v) if idx in (2, 3, 4, 5, 8, 10) else str(v) - for idx, v in enumerate(row) - ] - formatted_row = [str(v) for v in _row] - output_file_ligne_md.append("| " + " | ".join(formatted_row) + " |\n") - - if results3[0][0] != None : # type: ignore - output_file_ligne_md.append(f"\n--------------\n") - output_file_ligne_md.append("\n### Développement total topographié par année(s)\n") - headers = [" Année ", "Dev. (m)", "Cumul (m)", "Dupl. (m)", "Cumul (m)", "Surf. (m)", "Cumul (m)"] - - output_file_ligne_md.append("| " + " | ".join(headers) + " |\n") - output_file_ligne_md.append("|" + "|".join(["---"] * len(headers)) + "|\n") - - for row in results3[1:]: # type: ignore - if row[1].strip() != "0.00" or row[3].strip() != "0.00" or row[5].strip() != "0.00" : - _row = [ - format_french_number(v) if idx in (1, 2, 3, 4, 5, 6) else str(v) - for idx, v in enumerate(row) - ] - formatted_row = [str(v) for v in _row] - output_file_ligne_md.append("| " + " | ".join(formatted_row) + " |\n") - - output_file_ligne_md.append(f"\n--------------\n") - - - with open(output_file + ".md", 'w', encoding='utf-8') as file: + with open(output_file_md + ".md", 'w', encoding='utf-8') as file: file.writelines(output_file_ligne_md) ############################################################################################################### @@ -2013,15 +1583,15 @@ def calcul_stats(output_file , filename= "None"): output_file_ligne_csv[7] = "* Durée calcul : " + duree_formatee + " avec erreur(s): " + str(error_count) output_file_ligne_csv[7] = output_file_ligne_csv[7].ljust(118)+"*\n" - with open(output_file + ".csv", 'w', encoding='utf-8') as file: + with open(output_file_csv + ".csv", 'w', encoding='utf-8') as file: file.writelines(output_file_ligne_csv) if error_count == 0 : - log.info(f"Phase 5: Fin de traitement en {Colors.ENDC}" + duree_formatee + f"{Colors.INFO}, résultats enregistrés dans {Colors.ENDC}{safe_relpath(output_file, 2)}") + log.info(f"Phase 5: Fin de traitement en {Colors.ENDC}" + duree_formatee + f"{Colors.INFO}, résultats enregistrés dans {Colors.ENDC}{safe_relpath(output_file_csv, 2)}") else : log.warning(f"Phase 5: Fin de traitement en {Colors.ENDC}" + duree_formatee - + f",{Colors.WARNING} avec {Colors.ENDC}{error_count}{Colors.WARNING} erreur(s), {Colors.INFO}résultats enregistrés dans {Colors.ENDC}{safe_relpath(output_file, 2)}") + + f",{Colors.WARNING} avec {Colors.ENDC}{error_count}{Colors.WARNING} erreur(s), {Colors.WARNING}résultats enregistrés dans {Colors.ENDC}{safe_relpath(output_file_csv, 2)}") except sqlite3.Error as e: log.error(f"Erreur lors de l'exécution des requêtes calcul_stats:{Colors.ENDC} {e}") @@ -2029,16 +1599,16 @@ def calcul_stats(output_file , filename= "None"): output_file_ligne_md.append(f"!!! Erreur lors de l'exécution des requêtes calcul_stats: {e}\n") output_file_ligne_csv.append(f"Erreur lors de l'exécution des requêtes calcul_stats: {e}\n") - with open(output_file + ".md", 'w', encoding='utf-8') as file: + with open(output_file_md + ".md", 'w', encoding='utf-8') as file: file.writelines(output_file_ligne_md) - with open(output_file + ".csv", 'w', encoding='utf-8') as file: + with open(output_file_csv + ".csv", 'w', encoding='utf-8') as file: file.writelines(output_file_ligne_csv) return except FileNotFoundError: - log.error(f"Erreur d'ouverture du fichier: {Colors.ENDC}{safe_relpath(output_file)} ") + log.error(f"Erreur d'ouverture du fichier: {Colors.ENDC}{safe_relpath(output_file_ligne_md)} ") error_count += 1 return @@ -2049,16 +1619,56 @@ def calcul_stats(output_file , filename= "None"): output_file_ligne_md.append(f"!! Erreur lors de l'exécution de calcul_stats: {e}\n") output_file_ligne_csv.append(f"Erreur lors de l'exécution de calcul_stats: {e}\n") - with open(output_file + ".md", 'w', encoding='utf-8') as file: + with open(output_file_md + ".md", 'w', encoding='utf-8') as file: file.writelines(output_file_ligne_md) - with open(output_file + ".csv", 'w', encoding='utf-8') as file: + with open(output_file_csv + ".csv", 'w', encoding='utf-8') as file: file.writelines(output_file_ligne_csv) return return +##################################################################################################################################### +# Requête : parents d'une survey # +##################################################################################################################################### +def sql_Parents_Survey(ID): + global error_count + + sql_query = (f""" + WITH RECURSIVE PARENTS AS ( + SELECT ID, PARENT_ID, NAME, TITLE + FROM SURVEY + WHERE ID = {ID} + + UNION ALL + + SELECT SURVEY.ID, SURVEY.PARENT_ID, SURVEY.NAME, SURVEY.TITLE + FROM SURVEY AS SURVEY + INNER JOIN PARENTS AS PARENTS ON SURVEY.ID = PARENTS.PARENT_ID + WHERE PARENTS.PARENT_ID <> 0 + ) + SELECT ID AS PARENT_ID, NAME, TITLE + FROM PARENTS + WHERE ID <> {ID}; + """) + + try: + cursor.execute(sql_query) + result_ent = cursor.fetchall() + + if len(result_ent) == 0 : + error_count += 1 + log.error(f"Attention aucun parents à l'ID {ID}") + + return result_ent + + except sqlite3.Error as e: + log.error(f"Erreur lors de l'exécution de la requête (sql_Parents_Survey):{Colors.ENDC} {e}") + error_count += 1 + return None + + ##################################################################################################################################### # Requête : Longueur totale des centerlines # ##################################################################################################################################### @@ -2092,7 +1702,6 @@ def sql_Centerline_length(): error_count += 1 return None - ##################################################################################################################################### # Requête : Table des entrées (Liste des entrées avec coordonnées) # ##################################################################################################################################### @@ -2141,7 +1750,7 @@ def sql_liste_entree(): error_count += 1 log.warning(f"Attention aucune entrée ou point fix comptabilisé") else : - log.info(f"Table des STATION, entrée et fix nbre: {Colors.ENDC}{len(result_ent)}") + log.info(f"Table des STATION entrée et fix, nbre: {Colors.ENDC}{len(result_ent)}") return result_ent @@ -2362,175 +1971,187 @@ def sql_bilan_reseaux(): ############################################################################################################### cursor.execute(f""" - -- Bilan table série By Réseaux - select - --SURVEY_RESEAU.TITLE as Réseau, - --SURVEY_RESEAU.NAME, - --SURVEY_RESEAU.ID, - RESEAU_ID, - --STATION.NAME as Nom, - -- sum(_SERIE.SERIE_LENGHT) as Total, - round(sum(_SERIE.SERIE_LENGHT) - sum(_SERIE.SERIE_LENGHT_SURFACE)- sum(_SERIE.SERIE_LENGHT_DUPLICATE), 2) as Long, - round(sum(_SERIE.SERIE_LENGHT_DUPLICATE),2) as Duplicate, - round(sum(_SERIE.SERIE_LENGHT_SURFACE),2) as Surface, - sum(_SERIE.SERIE_NBRE_SHOT) as Nbre_Shot - --COUNT(*) AS Nbre_serie - --round(max(STATION.Z),2) as Max_Z, - --round(min(STATION.Z),2) as Min_Z, - --max(STATION.Z) - min(STATION.Z) as Delta_Z - FROM _SERIE - JOIN STATION ON _SERIE.STATION_ENT_ID = STATION.ID - JOIN SURVEY AS SURVEY_JONCTION ON STATION.SURVEY_ID = SURVEY_JONCTION.ID - JOIN SURVEY AS SURVEY_RESEAU ON SURVEY_JONCTION.PARENT_ID = SURVEY_RESEAU.ID - WHERE RESEAU_ID is not NULL and RESEAU_ID !=0 - GROUP BY _SERIE.RESEAU_ID - ORDER BY Long DESC - """) + -- Bilan table série By Réseaux + select + --SURVEY_RESEAU.TITLE as Réseau, + --SURVEY_RESEAU.NAME, + --SURVEY_RESEAU.ID, + RESEAU_ID, + --STATION.NAME as Nom, + -- sum(_SERIE.SERIE_LENGHT) as Total, + round(sum(_SERIE.SERIE_LENGHT) - sum(_SERIE.SERIE_LENGHT_SURFACE)- sum(_SERIE.SERIE_LENGHT_DUPLICATE), 2) as Long, + round(sum(_SERIE.SERIE_LENGHT_DUPLICATE),2) as Duplicate, + round(sum(_SERIE.SERIE_LENGHT_SURFACE),2) as Surface, + sum(_SERIE.SERIE_NBRE_SHOT) as Nbre_Shot + --COUNT(*) AS Nbre_serie + --round(max(STATION.Z),2) as Max_Z, + --round(min(STATION.Z),2) as Min_Z, + --max(STATION.Z) - min(STATION.Z) as Delta_Z + FROM _SERIE + JOIN STATION ON _SERIE.STATION_ENT_ID = STATION.ID + JOIN SURVEY AS SURVEY_JONCTION ON STATION.SURVEY_ID = SURVEY_JONCTION.ID + JOIN SURVEY AS SURVEY_RESEAU ON SURVEY_JONCTION.PARENT_ID = SURVEY_RESEAU.ID + WHERE RESEAU_ID is not NULL and RESEAU_ID !=0 + GROUP BY _SERIE.RESEAU_ID + ORDER BY Long DESC + """) result = cursor.fetchall() if len(result) >0 : - # _ligne = [ ' - ', " - ", " - ", " - ", " - ", " - ", " - ", " - ", " - ", " - ", " - "] - # _ligne[0]= 'Aucun réseau'.ljust(_largeurColTete) - # retour.append(_ligne) - # return retour for row in result: - ligne = [ ' - ', " - ", " - ", " - ", " - ", " - ", " - ", " - ", " - ", " - ", " - "] + ligne = [ " - ", " - ", " - ", " - ", " - ", " - ", " - ", " - ", " - ", " - ", " - ", " - "] result_shot = 0 cursor.execute(f""" - select - COALESCE(round(sum(SHOT.length), 2), 0) as ttl, - count(_VISEE_FLAG.ID) as count, - STATION_TO.NAME as To_Name - from _VISEE_FLAG - JOIN SHOT ON SHOT.ID = _VISEE_FLAG.SHOT_ID - JOIN STATION AS STATION_TO ON SHOT.TO_ID = STATION_TO.ID - LEFT JOIN SHOT_FLAG ON SHOT.ID = SHOT_FLAG.SHOT_ID - WHERE To_Name!='.' AND To_Name!='-' AND SHOT_FLAG.FLAG is null and _VISEE_FLAG.RESEAU_ID ={row[0]} - """) + select + COALESCE(round(sum(SHOT.length), 2), 0) as ttl, + count(_VISEE_FLAG.ID) as count, + STATION_TO.NAME as To_Name + from _VISEE_FLAG + JOIN SHOT ON SHOT.ID = _VISEE_FLAG.SHOT_ID + JOIN STATION AS STATION_TO ON SHOT.TO_ID = STATION_TO.ID + LEFT JOIN SHOT_FLAG ON SHOT.ID = SHOT_FLAG.SHOT_ID + WHERE To_Name!='.' AND To_Name!='-' AND SHOT_FLAG.FLAG is null and _VISEE_FLAG.RESEAU_ID ={row[0]} + """) _result_length = cursor.fetchall() result_length = float(_result_length[0][0]) result_shot = int(_result_length[0][1]) cursor.execute(f""" - select - COALESCE(round(sum(SHOT.length), 2), 0) as ttl, - count(_VISEE_FLAG.ID) as count, - STATION_TO.NAME as To_Name - from _VISEE_FLAG - JOIN SHOT ON SHOT.ID = _VISEE_FLAG.SHOT_ID - JOIN STATION AS STATION_TO ON SHOT.TO_ID = STATION_TO.ID - LEFT JOIN SHOT_FLAG ON SHOT.ID = SHOT_FLAG.SHOT_ID - WHERE To_Name!='.' AND To_Name!='-' AND SHOT_FLAG.FLAG ='dpl' and _VISEE_FLAG.RESEAU_ID ={row[0]} - """) - + select + COALESCE(round(sum(SHOT.length), 2), 0) as ttl, + count(_VISEE_FLAG.ID) as count, + STATION_TO.NAME as To_Name + from _VISEE_FLAG + JOIN SHOT ON SHOT.ID = _VISEE_FLAG.SHOT_ID + JOIN STATION AS STATION_TO ON SHOT.TO_ID = STATION_TO.ID + LEFT JOIN SHOT_FLAG ON SHOT.ID = SHOT_FLAG.SHOT_ID + WHERE To_Name!='.' AND To_Name!='-' AND SHOT_FLAG.FLAG ='dpl' and _VISEE_FLAG.RESEAU_ID ={row[0]} + """) _result_length_dpl = cursor.fetchall() result_length_dpl = float(_result_length_dpl[0][0]) result_shot += int(_result_length_dpl[0][1]) cursor.execute(f""" - select - COALESCE(round(sum(SHOT.length), 2), 0) as ttl, - count(_VISEE_FLAG.ID) as count, - STATION_TO.NAME as To_Name - from _VISEE_FLAG - JOIN SHOT ON SHOT.ID = _VISEE_FLAG.SHOT_ID - JOIN STATION AS STATION_TO ON SHOT.TO_ID = STATION_TO.ID - LEFT JOIN SHOT_FLAG ON SHOT.ID = SHOT_FLAG.SHOT_ID - WHERE To_Name!='.' AND To_Name!='-' AND SHOT_FLAG.FLAG ='srf' and _VISEE_FLAG.RESEAU_ID ={row[0]} - """) - + select + COALESCE(round(sum(SHOT.length), 2), 0) as ttl, + count(_VISEE_FLAG.ID) as count, + STATION_TO.NAME as To_Name + from _VISEE_FLAG + JOIN SHOT ON SHOT.ID = _VISEE_FLAG.SHOT_ID + JOIN STATION AS STATION_TO ON SHOT.TO_ID = STATION_TO.ID + LEFT JOIN SHOT_FLAG ON SHOT.ID = SHOT_FLAG.SHOT_ID + WHERE To_Name!='.' AND To_Name!='-' AND SHOT_FLAG.FLAG ='srf' and _VISEE_FLAG.RESEAU_ID ={row[0]} + """) _result_length_srf = cursor.fetchall() result_length_srf = float(_result_length_srf[0][0]) result_shot += int(_result_length_srf[0][1]) - - # ligne = [ 'none', 0, 0, 0, 0, 0, 0, 'none', 0, 'none', 0, 0] cursor.execute(f""" - -- Liste des entrée dans la table _RESEAU - SELECT - --_RESEAU.ENT_1 AS ENT_ID, - --_RESEAU.RESEAU_ID, - STATION.NAME - --STATION.Z - FROM _RESEAU - JOIN STATION ON _RESEAU.ENT_1 = STATION.ID - WHERE RESEAU_ID = {row[0]} - UNION --ALL - SELECT - --_RESEAU.ENT_2 AS ENT_ID, - --_RESEAU.RESEAU_ID, - STATION.NAME - --STATION.Z - FROM _RESEAU - JOIN STATION ON _RESEAU.ENT_2 = STATION.ID - WHERE RESEAU_ID = {row[0]} - GROUP BY STATION.NAME - ORDER BY STATION.NAME - --ORDER BY STATION.Z DESC - """) + SELECT DISTINCT + _RESEAU.RESEAU_NAME + FROM _RESEAU + WHERE _RESEAU.RESEAU_ID ={row[0]}; + """) + reseau = cursor.fetchall() + + if len(reseau) : + _reseau = ", ".join(row[0] for row in reseau if row[0]) + + else : _reseau = reseau[0] + + cursor.execute(f""" + -- Liste des entrée dans la table _RESEAU + SELECT + --_RESEAU.ENT_1 AS ENT_ID, + --_RESEAU.RESEAU_ID, + STATION.NAME, + SURVEY.NAME AS Survey_Name, + SURVEY.TITLE AS Survey_Title + --STATION.Z + FROM _RESEAU + JOIN STATION ON _RESEAU.ENT_1 = STATION.ID + JOIN SURVEY ON STATION.SURVEY_ID = SURVEY.ID + WHERE RESEAU_ID = {row[0]} + UNION --ALL + SELECT + --_RESEAU.ENT_2 AS ENT_ID, + --_RESEAU.RESEAU_ID, + STATION.NAME, + SURVEY.NAME AS Survey_Name, + SURVEY.TITLE AS Survey_Title + --STATION.Z + FROM _RESEAU + JOIN STATION ON _RESEAU.ENT_2 = STATION.ID + JOIN SURVEY ON STATION.SURVEY_ID = SURVEY.ID + WHERE RESEAU_ID = {row[0]} + GROUP BY STATION.NAME + ORDER BY STATION.NAME + --ORDER BY STATION.Z DESC + """) liste_entree = cursor.fetchall() - _liste_ent = liste_entree[0][0] + _liste_ent = liste_entree[0][2] index = 1 while index < len(liste_entree): - _liste_ent += ", " + liste_entree[index][0] + _liste_ent += ", " + liste_entree[index][2] index += 1 if len(_liste_ent) > _largeurColTete : _largeurColTete = len(_liste_ent) + 2 - ligne[0] =_liste_ent.ljust(_largeurColTete) # Liste Entrées - ligne[1] = str(len(liste_entree)) # Nre Entrées - ligne[2] = str("{:.2f}".format(result_length)) # Dev. - ligne[4] = str("{:.2f}".format(result_length_dpl)) # Dupl. - ligne[5] = str("{:.2f}".format(result_length_srf)) # Surf. - ligne[6] = str(result_shot) # Visées + ligne[0] = str(_reseau) + ligne[1] = str(_liste_ent.ljust(_largeurColTete)) # Liste Entrées + ligne[2] = str(len(liste_entree)) # Nre Entrées + ligne[3] = str("{:.2f}".format(result_length)) # Dev. + ligne[5] = str("{:.2f}".format(result_length_dpl)) # Dupl. + ligne[6] = str("{:.2f}".format(result_length_srf)) # Surf. + ligne[7] = str(result_shot) # Visées cursor.execute(f""" - -- Requête pour rechercher le point bas d'un réseau / entrée - SELECT - STATION.name, - STATION.Z as Min - from STATION - join ( - select Min(STATION.Z) as Val_Min - from STATION - join _JONCTION on STATION.ID = _JONCTION.STATION_ID - WHERE _JONCTION.RESEAU_ID = {row[0]} - ) min on STATION.Z = min.Val_Min - LIMIT 1 - """) + -- Requête pour rechercher le point bas d'un réseau / entrée + SELECT + STATION.name, + STATION.Z as Min + from STATION + join ( + select Min(STATION.Z) as Val_Min + from STATION + join _JONCTION on STATION.ID = _JONCTION.STATION_ID + WHERE _JONCTION.RESEAU_ID = {row[0]} + ) min on STATION.Z = min.Val_Min + LIMIT 1 + """) altitude_min = cursor.fetchall() - ligne[7] = altitude_min[0][0] - ligne[8] = str("{:.2f}".format(altitude_min[0][1])) + ligne[8] = str(altitude_min[0][0]) + ligne[9] = str("{:.2f}".format(altitude_min[0][1])) cursor.execute(f""" - -- Requête pour rechercher le point haut d'un réseau / entrée - SELECT - STATION.name, - STATION.Z as Max - from STATION - join ( - select Max(STATION.Z) as Val_Max - from STATION - join _JONCTION on STATION.ID = _JONCTION.STATION_ID - WHERE _JONCTION.RESEAU_ID = {row[0]} - ) max on STATION.Z = max.Val_Max - LIMIT 1 - """) + -- Requête pour rechercher le point haut d'un réseau / entrée + SELECT + STATION.name, + STATION.Z as Max + from STATION + join ( + select Max(STATION.Z) as Val_Max + from STATION + join _JONCTION on STATION.ID = _JONCTION.STATION_ID + WHERE _JONCTION.RESEAU_ID = {row[0]} + ) max on STATION.Z = max.Val_Max + LIMIT 1 + """) altitude_max = cursor.fetchall() - ligne[9] = altitude_max[0][0] - ligne[10] = str("{:.2f}".format(altitude_max[0][1])) - ligne[3] = "{:.2f}".format(altitude_max[0][1] - altitude_min[0][1]) + ligne[10] = str(altitude_max[0][0]) + ligne[11] = str("{:.2f}".format(altitude_max[0][1])) + ligne[4] = str("{:.2f}".format(altitude_max[0][1] - altitude_min[0][1])) - for i in range(9): ligne[i+1] = ligne[i+1].ljust(_largeurCol) + for i in range(10): ligne[i+1] = ligne[i+1].ljust(_largeurCol) retour.append(ligne) # print(f"Reseau num {row[0]}, {len(liste_entree)} entrée(s): {_liste_ent} ") @@ -2540,17 +2161,17 @@ def sql_bilan_reseaux(): # Liste des visées non raccordées ############################################################################################################### cursor.execute(f""" - SELECT - sum (SHOT.LENGTH) as Long - FROM _VISEE_FLAG - JOIN SHOT ON SHOT.ID = _VISEE_FLAG.SHOT_ID - LEFT JOIN SHOT_FLAG ON SHOT.ID = SHOT_FLAG.SHOT_ID - JOIN STATION AS STATION_FROM ON SHOT.FROM_ID = STATION_FROM.ID - JOIN STATION AS STATION_TO ON SHOT.TO_ID = STATION_TO.ID - JOIN _JONCTION AS JONCTION_FROM ON SHOT.FROM_ID = JONCTION_FROM.ID - JOIN _JONCTION AS JONCTION_TO ON SHOT.TO_ID = JONCTION_TO.ID - WHERE _VISEE_FLAG.SERIE_ID is NULL and SHOT_FLAG.FLAG is NULL - """) + SELECT + sum (SHOT.LENGTH) as Long + FROM _VISEE_FLAG + JOIN SHOT ON SHOT.ID = _VISEE_FLAG.SHOT_ID + LEFT JOIN SHOT_FLAG ON SHOT.ID = SHOT_FLAG.SHOT_ID + JOIN STATION AS STATION_FROM ON SHOT.FROM_ID = STATION_FROM.ID + JOIN STATION AS STATION_TO ON SHOT.TO_ID = STATION_TO.ID + JOIN _JONCTION AS JONCTION_FROM ON SHOT.FROM_ID = JONCTION_FROM.ID + JOIN _JONCTION AS JONCTION_TO ON SHOT.TO_ID = JONCTION_TO.ID + WHERE _VISEE_FLAG.SERIE_ID is NULL and SHOT_FLAG.FLAG is NULL + """) result_long = cursor.fetchall() if result_long[0][0] is None : @@ -2559,17 +2180,17 @@ def sql_bilan_reseaux(): _result_long = result_long[0][0] cursor.execute(f""" - SELECT - sum (SHOT.LENGTH) as Long - FROM _VISEE_FLAG - JOIN SHOT ON SHOT.ID = _VISEE_FLAG.SHOT_ID - LEFT JOIN SHOT_FLAG ON SHOT.ID = SHOT_FLAG.SHOT_ID - JOIN STATION AS STATION_FROM ON SHOT.FROM_ID = STATION_FROM.ID - JOIN STATION AS STATION_TO ON SHOT.TO_ID = STATION_TO.ID - JOIN _JONCTION AS JONCTION_FROM ON SHOT.FROM_ID = JONCTION_FROM.ID - JOIN _JONCTION AS JONCTION_TO ON SHOT.TO_ID = JONCTION_TO.ID - WHERE _VISEE_FLAG.SERIE_ID is NULL and SHOT_FLAG.FLAG ='dpl' - """) + SELECT + sum (SHOT.LENGTH) as Long + FROM _VISEE_FLAG + JOIN SHOT ON SHOT.ID = _VISEE_FLAG.SHOT_ID + LEFT JOIN SHOT_FLAG ON SHOT.ID = SHOT_FLAG.SHOT_ID + JOIN STATION AS STATION_FROM ON SHOT.FROM_ID = STATION_FROM.ID + JOIN STATION AS STATION_TO ON SHOT.TO_ID = STATION_TO.ID + JOIN _JONCTION AS JONCTION_FROM ON SHOT.FROM_ID = JONCTION_FROM.ID + JOIN _JONCTION AS JONCTION_TO ON SHOT.TO_ID = JONCTION_TO.ID + WHERE _VISEE_FLAG.SERIE_ID is NULL and SHOT_FLAG.FLAG ='dpl' + """) result_dpl = cursor.fetchall() if result_dpl[0][0] is None : @@ -2578,17 +2199,17 @@ def sql_bilan_reseaux(): _result_dpl = result_dpl[0][0] cursor.execute(f""" - SELECT - sum (SHOT.LENGTH) as Long - FROM _VISEE_FLAG - JOIN SHOT ON SHOT.ID = _VISEE_FLAG.SHOT_ID - LEFT JOIN SHOT_FLAG ON SHOT.ID = SHOT_FLAG.SHOT_ID - JOIN STATION AS STATION_FROM ON SHOT.FROM_ID = STATION_FROM.ID - JOIN STATION AS STATION_TO ON SHOT.TO_ID = STATION_TO.ID - JOIN _JONCTION AS JONCTION_FROM ON SHOT.FROM_ID = JONCTION_FROM.ID - JOIN _JONCTION AS JONCTION_TO ON SHOT.TO_ID = JONCTION_TO.ID - WHERE _VISEE_FLAG.SERIE_ID is NULL and SHOT_FLAG.FLAG ='srf' - """) + SELECT + sum (SHOT.LENGTH) as Long + FROM _VISEE_FLAG + JOIN SHOT ON SHOT.ID = _VISEE_FLAG.SHOT_ID + LEFT JOIN SHOT_FLAG ON SHOT.ID = SHOT_FLAG.SHOT_ID + JOIN STATION AS STATION_FROM ON SHOT.FROM_ID = STATION_FROM.ID + JOIN STATION AS STATION_TO ON SHOT.TO_ID = STATION_TO.ID + JOIN _JONCTION AS JONCTION_FROM ON SHOT.FROM_ID = JONCTION_FROM.ID + JOIN _JONCTION AS JONCTION_TO ON SHOT.TO_ID = JONCTION_TO.ID + WHERE _VISEE_FLAG.SERIE_ID is NULL and SHOT_FLAG.FLAG ='srf' + """) result_srf = cursor.fetchall() if result_srf[0][0] is None : _result_srf = 0.0 @@ -2596,17 +2217,17 @@ def sql_bilan_reseaux(): _result_srf = result_srf[0][0] cursor.execute(f""" - SELECT - count (SHOT.LENGTH) as Long - FROM _VISEE_FLAG - JOIN SHOT ON SHOT.ID = _VISEE_FLAG.SHOT_ID - LEFT JOIN SHOT_FLAG ON SHOT.ID = SHOT_FLAG.SHOT_ID - JOIN STATION AS STATION_FROM ON SHOT.FROM_ID = STATION_FROM.ID - JOIN STATION AS STATION_TO ON SHOT.TO_ID = STATION_TO.ID - JOIN _JONCTION AS JONCTION_FROM ON SHOT.FROM_ID = JONCTION_FROM.ID - JOIN _JONCTION AS JONCTION_TO ON SHOT.TO_ID = JONCTION_TO.ID - WHERE _VISEE_FLAG.SERIE_ID is NULL --and SHOT_FLAG.FLAG ='srf' - """) + SELECT + count (SHOT.LENGTH) as Long + FROM _VISEE_FLAG + JOIN SHOT ON SHOT.ID = _VISEE_FLAG.SHOT_ID + LEFT JOIN SHOT_FLAG ON SHOT.ID = SHOT_FLAG.SHOT_ID + JOIN STATION AS STATION_FROM ON SHOT.FROM_ID = STATION_FROM.ID + JOIN STATION AS STATION_TO ON SHOT.TO_ID = STATION_TO.ID + JOIN _JONCTION AS JONCTION_FROM ON SHOT.FROM_ID = JONCTION_FROM.ID + JOIN _JONCTION AS JONCTION_TO ON SHOT.TO_ID = JONCTION_TO.ID + WHERE _VISEE_FLAG.SERIE_ID is NULL --and SHOT_FLAG.FLAG ='srf' + """) result_count = cursor.fetchall() if result_count[0][0] is None : @@ -2615,30 +2236,31 @@ def sql_bilan_reseaux(): else : _result_count = result_count[0][0] - ligne = [ ' - ', " - ", " - ", " - ", " - ", " - ", " - ", " - ", " - ", " - ", " - "] + ligne = [ " - ", " - ", " - ", " - ", " - ", " - ", " - ", " - ", " - ", " - ", " - ", " - "] _liste_ent = "Visée(s) non raccordées" _liste_ent = _liste_ent.ljust(_largeurColTete) - ligne[0] = _liste_ent - ligne[1] = str("0") - ligne[2] = str("{:.2f}".format(_result_long)) - ligne[4] = str("{:.2f}".format(_result_dpl)) - ligne[5] = str("{:.2f}".format(_result_srf)) - ligne[6] = str(_result_count) + ligne[0] = str(" ") + ligne[1] = str(_liste_ent) + ligne[2] = str("0") + ligne[3] = str("{:.2f}".format(_result_long)) + ligne[5] = str("{:.2f}".format(_result_dpl)) + ligne[6] = str("{:.2f}".format(_result_srf)) + ligne[7] = str(_result_count) cursor.execute(f""" - -- Requête pour rechercher le point bas d'un réseau / entrée - SELECT - STATION.name, - STATION.Z as Min - from STATION - join ( - select Min(STATION.Z) as Val_Min - from STATION - join _JONCTION on STATION.ID = _JONCTION.STATION_ID - WHERE _JONCTION.SERIE_ID is null - ) min on STATION.Z = min.Val_Min - LIMIT 1 - """) + -- Requête pour rechercher le point bas d'un réseau / entrée + SELECT + STATION.name, + STATION.Z as Min + from STATION + join ( + select Min(STATION.Z) as Val_Min + from STATION + join _JONCTION on STATION.ID = _JONCTION.STATION_ID + WHERE _JONCTION.SERIE_ID is null + ) min on STATION.Z = min.Val_Min + LIMIT 1 + """) altitude_min = cursor.fetchall() if len(altitude_min) == 0 : @@ -2649,23 +2271,23 @@ def sql_bilan_reseaux(): _altitude_min = altitude_min[0][1] _altitude_min_name = str(altitude_min[0][0]) - ligne[7] = str(_altitude_min_name) - ligne[8] = str("{:.2f}".format(_altitude_min)) + ligne[8] = str(_altitude_min_name) + ligne[9] = str("{:.2f}".format(_altitude_min)) cursor.execute(f""" - -- Requête pour rechercher le point haut d'un réseau / entrée - SELECT - STATION.name, - STATION.Z as Max - from STATION - join ( - select Max(STATION.Z) as Val_Max - from STATION - join _JONCTION on STATION.ID = _JONCTION.STATION_ID - WHERE _JONCTION.SERIE_ID is null - ) max on STATION.Z = max.Val_Max - LIMIT 1 - """) + -- Requête pour rechercher le point haut d'un réseau / entrée + SELECT + STATION.name, + STATION.Z as Max + from STATION + join ( + select Max(STATION.Z) as Val_Max + from STATION + join _JONCTION on STATION.ID = _JONCTION.STATION_ID + WHERE _JONCTION.SERIE_ID is null + ) max on STATION.Z = max.Val_Max + LIMIT 1 + """) altitude_max = cursor.fetchall() if len(altitude_max) == 0 : @@ -2676,12 +2298,12 @@ def sql_bilan_reseaux(): _altitude_max = altitude_max[0][1] _altitude_max_name = str(altitude_max[0][0]) - ligne[7] = str(_altitude_max_name) - ligne[8] = str("{:.2f}".format(_altitude_max)) - ligne[3] = "-" #"{:.2f}".format(altitude_max[0][1] - altitude_min[0][1]) + ligne[8] = str(_altitude_max_name) + ligne[9] = str("{:.2f}".format(_altitude_max)) + ligne[4] = str("-") #"{:.2f}".format(altitude_max[0][1] - altitude_min[0][1]) - for i in range(9): ligne[i+1] = ligne[i+1].ljust(_largeurCol) + for i in range(10): ligne[i+1] = ligne[i+1].ljust(_largeurCol) if _result_long !=0 or _result_dpl != 0 or _result_srf !=0 or _result_count !=0: retour.append(ligne) @@ -2692,63 +2314,63 @@ def sql_bilan_reseaux(): result_shot = 0 cursor.execute(f""" - select - COALESCE(round(sum(SHOT.length), 2), 0) as ttl, - count(_VISEE_FLAG.ID) as count, - STATION_TO.NAME as To_Name - from _VISEE_FLAG - JOIN SHOT ON SHOT.ID = _VISEE_FLAG.SHOT_ID - JOIN STATION AS STATION_TO ON SHOT.TO_ID = STATION_TO.ID - LEFT JOIN SHOT_FLAG ON SHOT.ID = SHOT_FLAG.SHOT_ID - WHERE To_Name!='.' AND To_Name!='-' AND SHOT_FLAG.FLAG is null - """) - _result_length = cursor.fetchall() + select + COALESCE(round(sum(SHOT.length), 2), 0) as ttl, + count(_VISEE_FLAG.ID) as count, + STATION_TO.NAME as To_Name + from _VISEE_FLAG + JOIN SHOT ON SHOT.ID = _VISEE_FLAG.SHOT_ID + JOIN STATION AS STATION_TO ON SHOT.TO_ID = STATION_TO.ID + LEFT JOIN SHOT_FLAG ON SHOT.ID = SHOT_FLAG.SHOT_ID + WHERE To_Name!='.' AND To_Name!='-' AND SHOT_FLAG.FLAG is 'apx' OR SHOT_FLAG.FLAG is NULL + """) + _result_length = cursor.fetchall() # Visées normales & Approximates (apx) result_length = float(_result_length[0][0]) result_shot = int(_result_length[0][1]) cursor.execute(f""" - SELECT - COALESCE(round(sum(SHOT.length), 2), 0) as ttl, - count(_VISEE_FLAG.ID) as count, - STATION_TO.NAME as To_Name - FROM _VISEE_FLAG - JOIN SHOT ON SHOT.ID = _VISEE_FLAG.SHOT_ID - JOIN STATION AS STATION_TO ON SHOT.TO_ID = STATION_TO.ID - LEFT JOIN SHOT_FLAG ON SHOT.ID = SHOT_FLAG.SHOT_ID - WHERE To_Name!='.' AND To_Name!='-' AND SHOT_FLAG.FLAG ='dpl' - """) + SELECT + COALESCE(round(sum(SHOT.length), 2), 0) as ttl, + count(_VISEE_FLAG.ID) as count, + STATION_TO.NAME as To_Name + FROM _VISEE_FLAG + JOIN SHOT ON SHOT.ID = _VISEE_FLAG.SHOT_ID + JOIN STATION AS STATION_TO ON SHOT.TO_ID = STATION_TO.ID + LEFT JOIN SHOT_FLAG ON SHOT.ID = SHOT_FLAG.SHOT_ID + WHERE To_Name!='.' AND To_Name!='-' AND SHOT_FLAG.FLAG ='dpl' + """) _result_length_dpl = cursor.fetchall() result_length_dpl = float(_result_length_dpl[0][0]) result_shot += int(_result_length_dpl[0][1]) cursor.execute(f""" - SELECT - COALESCE(round(sum(SHOT.length), 2), 0) as ttl, - count(_VISEE_FLAG.ID) as count, - STATION_TO.NAME as To_Name - FROM _VISEE_FLAG - JOIN SHOT ON SHOT.ID = _VISEE_FLAG.SHOT_ID - JOIN STATION AS STATION_TO ON SHOT.TO_ID = STATION_TO.ID - LEFT JOIN SHOT_FLAG ON SHOT.ID = SHOT_FLAG.SHOT_ID - WHERE To_Name!='.' AND To_Name!='-' AND SHOT_FLAG.FLAG ='srf' - """) + SELECT + COALESCE(round(sum(SHOT.length), 2), 0) as ttl, + count(_VISEE_FLAG.ID) as count, + STATION_TO.NAME as To_Name + FROM _VISEE_FLAG + JOIN SHOT ON SHOT.ID = _VISEE_FLAG.SHOT_ID + JOIN STATION AS STATION_TO ON SHOT.TO_ID = STATION_TO.ID + LEFT JOIN SHOT_FLAG ON SHOT.ID = SHOT_FLAG.SHOT_ID + WHERE To_Name!='.' AND To_Name!='-' AND SHOT_FLAG.FLAG ='srf' + """) _result_length_srf = cursor.fetchall() result_length_srf = float(_result_length_srf[0][0]) result_shot += int(_result_length_srf[0][1]) cursor.execute(f""" - -- Bilan table _VISEE_FLAG By entrées - select - ENTREE_ID - --STATION.NAME - FROM _VISEE_FLAG - JOIN STATION ON _VISEE_FLAG.ENTREE_ID = STATION.ID - WHERE SERIE_ID >0 - GROUP BY _VISEE_FLAG.ENTREE_ID - """) + -- Bilan table _VISEE_FLAG By entrées + select + ENTREE_ID + --STATION.NAME + FROM _VISEE_FLAG + JOIN STATION ON _VISEE_FLAG.ENTREE_ID = STATION.ID + WHERE SERIE_ID >0 + GROUP BY _VISEE_FLAG.ENTREE_ID + """) _result_entrees = cursor.fetchall() _total_entrees_topo = len(_result_entrees) @@ -2757,53 +2379,54 @@ def sql_bilan_reseaux(): _total_entrees_non_topo = len(result2) - _total_entrees_topo # type: ignore if _result_length[0][1] != None : - ligne = [ ' - ', " - ", " - ", " - ", " - ", " - ", " - ", " - ", " - ", " - ", " - "] + ligne = [ " - ", " - ", " - ", " - ", " - ", " - ", " - ", " - ", " - ", " - ", " - ", " - "] - ligne[0] = "Totaux (entrées et points fixes)".ljust(_largeurColTete) # Liste Entrées - ligne[1] = str("{:.0f}".format(len(result2))) # type: ignore # Nre Ent. - ligne[2] = str("{:.2f}".format(result_length)) # Dev. - ligne[4] = str("{:.2f}".format(result_length_dpl)) # Dupl. - ligne[5] = str("{:.2f}".format(result_length_srf)) # Surf. - ligne[6] = str(result_shot) # Visées + ligne[0] = str(" ") + ligne[1] = str("Totaux".ljust(_largeurColTete)) # Liste Entrées + ligne[2] = str("{:.0f}".format(len(result2))) # type: ignore # Nre Ent. + ligne[3] = str("{:.2f}".format(result_length)) # Dev. + ligne[5] = str("{:.2f}".format(result_length_dpl)) # Dupl. + ligne[6] = str("{:.2f}".format(result_length_srf)) # Surf. + ligne[7] = str(result_shot) # Visées cursor.execute(f""" - -- Requête pour rechercher le point bas d'un réseau / entrée - SELECT - STATION.name, - STATION.Z as Min - from STATION - join ( - select Min(STATION.Z) as Val_Min - from STATION - join _JONCTION on STATION.ID = _JONCTION.STATION_ID - ) min on STATION.Z = min.Val_Min - LIMIT 1 - """) + -- Requête pour rechercher le point bas d'un réseau / entrée + SELECT + STATION.name, + STATION.Z as Min + from STATION + join ( + select Min(STATION.Z) as Val_Min + from STATION + join _JONCTION on STATION.ID = _JONCTION.STATION_ID + ) min on STATION.Z = min.Val_Min + LIMIT 1 + """) altitude_min = cursor.fetchall() - ligne[7] = altitude_min[0][0] - ligne[8] = str(altitude_min[0][1]) + ligne[8] = str(altitude_min[0][0]) + ligne[9] = str(altitude_min[0][1]) cursor.execute(f""" - -- Requête pour rechercher le point haut d'un réseau / entrée - SELECT - STATION.name, - STATION.Z as Max - from STATION - join ( - select Max(STATION.Z) as Val_Max - from STATION - join _JONCTION on STATION.ID = _JONCTION.STATION_ID - ) max on STATION.Z = max.Val_Max - LIMIT 1 - """) + -- Requête pour rechercher le point haut d'un réseau / entrée + SELECT + STATION.name, + STATION.Z as Max + from STATION + join ( + select Max(STATION.Z) as Val_Max + from STATION + join _JONCTION on STATION.ID = _JONCTION.STATION_ID + ) max on STATION.Z = max.Val_Max + LIMIT 1 + """) altitude_max = cursor.fetchall() - ligne[9] = altitude_max[0][0] - ligne[10] = str("{:.2f}".format(altitude_max[0][1])) - ligne[3] = "{:.2f}".format(altitude_max[0][1] - altitude_min[0][1]) + ligne[10] = str(altitude_max[0][0]) + ligne[11] = str("{:.2f}".format(altitude_max[0][1])) + ligne[4] = str("{:.2f}".format(altitude_max[0][1] - altitude_min[0][1])) - for i in range(9): ligne[i+1] = ligne[i+1].ljust(_largeurCol) + for i in range(10): ligne[i+1] = ligne[i+1].ljust(_largeurCol) retour.append(ligne) else : @@ -2815,65 +2438,70 @@ def sql_bilan_reseaux(): # Liste des entrées uniques ############################################################################################################### cursor.execute(f""" - -- Bilan table _VISEE_FLAG By entrées - select - ENTREE_ID, - STATION.NAME - FROM _VISEE_FLAG - JOIN STATION ON _VISEE_FLAG.ENTREE_ID = STATION.ID - WHERE RESEAU_ID ==0 or RESEAU_ID is null and SERIE_ID >0 - GROUP BY _VISEE_FLAG.ENTREE_ID - """) + -- Bilan table _VISEE_FLAG By entrées + select + ENTREE_ID, + STATION.NAME, + STATION.SURVEY_ID, + SURVEY.NAME AS Survey_Name, + SURVEY.TITLE AS Survey_Title + FROM _VISEE_FLAG + JOIN STATION ON _VISEE_FLAG.ENTREE_ID = STATION.ID + JOIN SURVEY ON STATION.SURVEY_ID = SURVEY.ID + WHERE RESEAU_ID ==0 or RESEAU_ID is null and SERIE_ID >0 + GROUP BY _VISEE_FLAG.ENTREE_ID + """) + result = cursor.fetchall() for row in result : - ligne = [ ' - ', " - ", " - ", " - ", " - ", " - ", " - ", " - ", " - ", " - ", " - "] + ligne = [ " - ", " - ", " - ", " - ", " - ", " - ", " - ", " - ", " - ", " - ", " - ", " - "] result_shot = 0 cursor.execute(f""" - select - COALESCE(round(sum(SHOT.length), 2), 0) as ttl, - count(_VISEE_FLAG.ID) as count, - STATION_TO.NAME as To_Name - from _VISEE_FLAG - JOIN SHOT ON SHOT.ID = _VISEE_FLAG.SHOT_ID - JOIN STATION AS STATION_TO ON SHOT.TO_ID = STATION_TO.ID - LEFT JOIN SHOT_FLAG ON SHOT.ID = SHOT_FLAG.SHOT_ID - WHERE To_Name!='.' AND To_Name!='-' AND SHOT_FLAG.FLAG is null and _VISEE_FLAG.ENTREE_ID ={row[0]} - """) + select + COALESCE(round(sum(SHOT.length), 2), 0) as ttl, + count(_VISEE_FLAG.ID) as count, + STATION_TO.NAME as To_Name + from _VISEE_FLAG + JOIN SHOT ON SHOT.ID = _VISEE_FLAG.SHOT_ID + JOIN STATION AS STATION_TO ON SHOT.TO_ID = STATION_TO.ID + LEFT JOIN SHOT_FLAG ON SHOT.ID = SHOT_FLAG.SHOT_ID + WHERE To_Name!='.' AND To_Name!='-' AND SHOT_FLAG.FLAG is null and _VISEE_FLAG.ENTREE_ID ={row[0]} + """) _result_length = cursor.fetchall() result_length = float(_result_length[0][0]) result_shot = int(_result_length[0][1]) cursor.execute(f""" - select - COALESCE(round(sum(SHOT.length), 2), 0) as ttl, - count(_VISEE_FLAG.ID) as count, - STATION_TO.NAME as To_Name - from _VISEE_FLAG - JOIN SHOT ON SHOT.ID = _VISEE_FLAG.SHOT_ID - JOIN STATION AS STATION_TO ON SHOT.TO_ID = STATION_TO.ID - LEFT JOIN SHOT_FLAG ON SHOT.ID = SHOT_FLAG.SHOT_ID - WHERE To_Name!='.' AND To_Name!='-' AND SHOT_FLAG.FLAG ='dpl' and _VISEE_FLAG.ENTREE_ID ={row[0]} - """) + select + COALESCE(round(sum(SHOT.length), 2), 0) as ttl, + count(_VISEE_FLAG.ID) as count, + STATION_TO.NAME as To_Name + from _VISEE_FLAG + JOIN SHOT ON SHOT.ID = _VISEE_FLAG.SHOT_ID + JOIN STATION AS STATION_TO ON SHOT.TO_ID = STATION_TO.ID + LEFT JOIN SHOT_FLAG ON SHOT.ID = SHOT_FLAG.SHOT_ID + WHERE To_Name!='.' AND To_Name!='-' AND SHOT_FLAG.FLAG ='dpl' and _VISEE_FLAG.ENTREE_ID ={row[0]} + """) _result_length_dpl = cursor.fetchall() result_length_dpl = float(_result_length_dpl[0][0]) result_shot += int(_result_length_dpl[0][1]) cursor.execute(f""" - select - COALESCE(round(sum(SHOT.length), 2), 0) as ttl, - count(_VISEE_FLAG.ID) as count, - STATION_TO.NAME as To_Name - from _VISEE_FLAG - JOIN SHOT ON SHOT.ID = _VISEE_FLAG.SHOT_ID - JOIN STATION AS STATION_TO ON SHOT.TO_ID = STATION_TO.ID - LEFT JOIN SHOT_FLAG ON SHOT.ID = SHOT_FLAG.SHOT_ID - WHERE To_Name!='.' AND To_Name!='-' AND SHOT_FLAG.FLAG ='srf' and _VISEE_FLAG.ENTREE_ID ={row[0]} - """) + select + COALESCE(round(sum(SHOT.length), 2), 0) as ttl, + count(_VISEE_FLAG.ID) as count, + STATION_TO.NAME as To_Name + from _VISEE_FLAG + JOIN SHOT ON SHOT.ID = _VISEE_FLAG.SHOT_ID + JOIN STATION AS STATION_TO ON SHOT.TO_ID = STATION_TO.ID + LEFT JOIN SHOT_FLAG ON SHOT.ID = SHOT_FLAG.SHOT_ID + WHERE To_Name!='.' AND To_Name!='-' AND SHOT_FLAG.FLAG ='srf' and _VISEE_FLAG.ENTREE_ID ={row[0]} + """) _result_length_srf = cursor.fetchall() result_length_srf = float(_result_length_srf[0][0]) @@ -2881,112 +2509,115 @@ def sql_bilan_reseaux(): if result_length_srf == 0.0 and result_length == 0.0 and result_length_dpl == 0.0 : _total_entrees_non_topo+=1 + else : - ligne[0] = str((row[1])).ljust(_largeurColTete) - ligne[1] = str("1") - ligne[2] = str("{:.2f}".format(result_length)) # Dev. - ligne[4] = str("{:.2f}".format(result_length_dpl)) # Dupl. - ligne[5] = str("{:.2f}".format(result_length_srf)) # Surf. - ligne[6] = str(result_shot) # Visées + ligne[0] = str(" ") + ligne[1] = str((row[4])).ljust(_largeurColTete) + ligne[2] = str("1") + ligne[3] = str("{:.2f}".format(result_length)) # Dev. + ligne[5] = str("{:.2f}".format(result_length_dpl)) # Dupl. + ligne[6] = str("{:.2f}".format(result_length_srf)) # Surf. + ligne[7] = str(result_shot) # Visées cursor.execute(f""" - -- Requête pour rechercher le point bas d'un réseau / entrée - SELECT - STATION.name, - STATION.Z as Min - from STATION - join ( - select Min(STATION.Z) as Val_Min - from STATION - join _JONCTION on STATION.ID = _JONCTION.STATION_ID - WHERE _JONCTION.ENTREE_ID = {row[0]} - ) min on STATION.Z = min.Val_Min - LIMIT 1 - """) + -- Requête pour rechercher le point bas d'un réseau / entrée + SELECT + STATION.name, + STATION.Z as Min + from STATION + join ( + select Min(STATION.Z) as Val_Min + from STATION + join _JONCTION on STATION.ID = _JONCTION.STATION_ID + WHERE _JONCTION.ENTREE_ID = {row[0]} + ) min on STATION.Z = min.Val_Min + LIMIT 1 + """) altitude_min = cursor.fetchall() - ligne[7] = altitude_min[0][0] - ligne[8] = str("{:.2f}".format(altitude_min[0][1])) + ligne[8] = str(altitude_min[0][0]) + ligne[9] = str("{:.2f}".format(altitude_min[0][1])) cursor.execute(f""" - -- Requête pour rechercher le point haut d'un réseau / entrée - SELECT - STATION.name, - STATION.Z as Max - from STATION - join ( - select Max(STATION.Z) as Val_Max - from STATION - join _JONCTION on STATION.ID = _JONCTION.STATION_ID - WHERE _JONCTION.ENTREE_ID = {row[0]} - ) max on STATION.Z = max.Val_Max - LIMIT 1 - """) + -- Requête pour rechercher le point haut d'un réseau / entrée + SELECT + STATION.name, + STATION.Z as Max + from STATION + join ( + select Max(STATION.Z) as Val_Max + from STATION + join _JONCTION on STATION.ID = _JONCTION.STATION_ID + WHERE _JONCTION.ENTREE_ID = {row[0]} + ) max on STATION.Z = max.Val_Max + LIMIT 1 + """) altitude_max = cursor.fetchall() - ligne[9] = altitude_max[0][0] - ligne[10] = str("{:.2f}".format(altitude_max[0][1])) - ligne[3] = "{:.2f}".format(altitude_max[0][1] - altitude_min[0][1]) + ligne[10] = str(altitude_max[0][0]) + ligne[11] = str("{:.2f}".format(altitude_max[0][1])) + ligne[4] = str("{:.2f}".format(altitude_max[0][1] - altitude_min[0][1])) - for i in range(9): ligne[i+1] = ligne[i+1].ljust(_largeurCol) + for i in range(10): ligne[i+1] = ligne[i+1].ljust(_largeurCol) retour.append(ligne) ############################################################################################################### # Entrées sans topo ############################################################################################################### - ligne = [ ' - ', " - ", " - ", " - ", " - ", " - ", " - ", " - ", " - ", " - ", " - "] + ligne = [ " - ", " - ", " - ", " - ", " - ", " - ", " - ", " - ", " - ", " - ", " - ", " - "] if _total_entrees_non_topo >=1 : - ligne[0] = "Entrée(s) sans topographie".ljust(_largeurColTete) - ligne[1] = str(_total_entrees_non_topo) - ligne[2] = "0.00" - ligne[3] = "0.00" - ligne[4] = "0.00" - ligne[5] = "0.00" - ligne[6] = "0" + ligne[0] = str(" ") + ligne[1] = str("Entrée(s) sans topographie".ljust(_largeurColTete)) + ligne[2] = str(_total_entrees_non_topo) + ligne[3] = str("0.00") + ligne[4] = str("0.00") + ligne[5] = str("0.00") + ligne[6] = str("0.00") + ligne[7] = str("0") cursor.execute(f""" - -- Requête pour rechercher le points bas d'un réseau / entrée - SELECT - STATION.name, - STATION.Z as Min - from STATION - join ( - select Min(STATION.Z) as Val_Min - from STATION - join _JONCTION on STATION.ID = _JONCTION.STATION_ID - WHERE _JONCTION.SERIE_ENT = -1 AND _JONCTION.STATION_TYPE = 'ent' - ) min on STATION.Z = min.Val_Min - LIMIT 1 - """) + -- Requête pour rechercher le points bas d'un réseau / entrée + SELECT + STATION.name, + STATION.Z as Min + from STATION + join ( + select Min(STATION.Z) as Val_Min + from STATION + join _JONCTION on STATION.ID = _JONCTION.STATION_ID + WHERE _JONCTION.SERIE_ENT = -1 AND _JONCTION.STATION_TYPE = 'ent' + ) min on STATION.Z = min.Val_Min + LIMIT 1 + """) altitude_min = cursor.fetchall() - ligne[7] = altitude_min[0][0] - ligne[8] = str(altitude_min[0][1]) + ligne[8] = str(altitude_min[0][0]) + ligne[9] = str(altitude_min[0][1]) cursor.execute(f""" - -- Requête pour rechercher le point haut d'un réseau / entrée - SELECT - STATION.name, - STATION.Z as Max - from STATION - join ( - select Max(STATION.Z) as Val_Max - from STATION - join _JONCTION on STATION.ID = _JONCTION.STATION_ID - WHERE _JONCTION.SERIE_ENT = -1 AND _JONCTION.STATION_TYPE = 'ent' - ) max on STATION.Z = max.Val_Max - LIMIT 1 - """) + -- Requête pour rechercher le point haut d'un réseau / entrée + SELECT + STATION.name, + STATION.Z as Max + from STATION + join ( + select Max(STATION.Z) as Val_Max + from STATION + join _JONCTION on STATION.ID = _JONCTION.STATION_ID + WHERE _JONCTION.SERIE_ENT = -1 AND _JONCTION.STATION_TYPE = 'ent' + ) max on STATION.Z = max.Val_Max + LIMIT 1 + """) altitude_max = cursor.fetchall() - ligne[9] = altitude_max[0][0] - ligne[10] = str("{:.2f}".format(altitude_max[0][1])) - ligne[3] = "{:.2f}".format(altitude_max[0][1] - altitude_min[0][1]) + ligne[10] = str(altitude_max[0][0]) + ligne[11] = str("{:.2f}".format(altitude_max[0][1])) + ligne[4] = str("{:.2f}".format(altitude_max[0][1] - altitude_min[0][1])) - for i in range(9): ligne[i+1] = ligne[i+1].ljust(_largeurCol) + for i in range(10): ligne[i+1] = ligne[i+1].ljust(_largeurCol) retour.append(ligne) @@ -2995,10 +2626,10 @@ def sql_bilan_reseaux(): # Tri et résultats ############################################################################################################### - entetes = [ 'Entrée(s)', "Nbre", "Dev.(m)", "Prof.(m)", "Dupl.(m)", "Surf.(m)", "Visées", "ID Sta.", "Alt. min(m)", "ID Sta.", "Alt. max(m)" ] + entetes = [ "Réseaux", "Entrée(s)", "Nbre", "Dev.(m)", "Prof.(m)", "Dupl.(m)", "Surf.(m)", "Visées", "ID Sta.", "Alt. min(m)", "ID Sta.", "Alt. max(m)" ] entetes[0] = entetes[0].ljust(_largeurColTete) - for i in range(9): entetes[i+1] = entetes[i+1].ljust(_largeurCol) + for i in range(10): entetes[i+1] = entetes[i+1].ljust(_largeurCol) _corps_retour = sorted(retour, key=cle_tri, reverse=True) @@ -3080,7 +2711,37 @@ def sql_optimisation(): # Clé de tri # ##################################################################################################################################### def cle_tri(element): - return float(element[2]) + return float(element[3]) + +##################################################################################################################################### +# Nom de base de la base de donnée # +##################################################################################################################################### +def sql_base_name(): + global error_count + + try: + + cursor.execute(f""" + SELECT + SURVEY.TITLE + FROM SURVEY + WHERE PARENT_ID = 1 + """) + result = cursor.fetchall() + + return str(result[0][0]) + + + except sqlite3.Error as e: + log.error(f"Exécution de la requête (sql_base_name):{Colors.ENDC} {e}") + error_count += 1 + return None + + except Exception as e: + log.error(f"Exécution de sql_base_name:{Colors.ENDC} {e}") + error_count += 1 + + return None ##################################################################################################################################### # Bilan topo par années # @@ -3094,11 +2755,11 @@ def sql_bilan_annee(): retour = [] cursor.execute(f""" - select strftime('%Y', TOPO_DATE) as annee - from CENTRELINE - Where TOPO_DATE is not NULL - order by TOPO_DATE - """) + select strftime('%Y', TOPO_DATE) as annee + from CENTRELINE + Where TOPO_DATE is not NULL + order by TOPO_DATE + """) result = cursor.fetchall() entetes = [ "Année" , "Dev.(m)", "Cumul (m)", "Dupl.(m)", "Cumul (m)", "Surf.(m)", "Cumul (m)" ] @@ -3111,13 +2772,13 @@ def sql_bilan_annee(): # topo sans année cursor.execute(f""" - select - COALESCE( sum(LENGTH), 0), - COALESCE (sum(DUPLICATE_LENGTH), 0), - COALESCE( sum(SURFACE_LENGTH), 0) - from CENTRELINE - where TOPO_DATE IS NULL - """) + select + COALESCE( sum(LENGTH), 0), + COALESCE (sum(DUPLICATE_LENGTH), 0), + COALESCE( sum(SURFACE_LENGTH), 0) + from CENTRELINE + where TOPO_DATE IS NULL + """) bilan_annee = cursor.fetchall() if ( len(bilan_annee) >= 1 ) and (( float(bilan_annee[0][0]) > 0.0) or (float(bilan_annee[0][1]) > 0.0 ) or (float(bilan_annee[0][2]) > 0.0 )): @@ -3146,13 +2807,13 @@ def sql_bilan_annee(): for annee in range(debut, fin + 1, 1 ): cursor.execute(f""" - select - COALESCE (sum(LENGTH), 0), - COALESCE (sum(DUPLICATE_LENGTH), 0), - COALESCE (sum(SURFACE_LENGTH), 0) - from CENTRELINE - where TOPO_DATE between '{annee}-01-01' and '{annee}-12-31'; - """) + select + COALESCE (sum(LENGTH), 0), + COALESCE (sum(DUPLICATE_LENGTH), 0), + COALESCE (sum(SURFACE_LENGTH), 0) + from CENTRELINE + where TOPO_DATE between '{annee}-01-01' and '{annee}-12-31'; + """) bilan_annee = cursor.fetchall() ligne = [ " - ", " - ", " - ", " - ", " - ", " - ", " - " ] @@ -3175,12 +2836,12 @@ def sql_bilan_annee(): except sqlite3.Error as e: - log.error(f"Erreur lors de l'exécution de la requête (sql_bilan_annee):{Colors.ENDC} {e}") + log.error(f"Exécution de la requête (sql_bilan_annee):{Colors.ENDC} {e}") error_count += 1 return None except Exception as e: - log.error(f"Erreur lors de l'exécution de sql_bilan_annee:{Colors.ENDC} {e}") + log.error(f"Exécution de sql_bilan_annee:{Colors.ENDC} {e}") error_count += 1 return None @@ -3410,15 +3071,16 @@ def PlotExploYears(graph_name, rangeyear = [1959, datetime.now().year], systems return - +##################################################################################################################################### ##################################################################################################################################### # # # Main # # # ##################################################################################################################################### +##################################################################################################################################### if __name__ == '__main__': - _largeurColTete = 35 - _largeurCol = 15 + _largeurColTete = 40 + _largeurCol = 20 avt_compteur = 0 error_count = 0 visee_suprimmees= [ 0.0, 0.0, 0.0, 0] # Lg, Lg dpl, Lg surf @@ -3502,6 +3164,8 @@ if __name__ == '__main__': output_file_name_histo = outputfolder + input_file[:-4] + "_histo.pdf" output_file_name_year = outputfolder + input_file[:-4] + "_year" imported_database = outputfolder + input_file[:-4] + "_stats.db" + + output_file_md = os.path.join(os.path.dirname(input_file_name), globalDat.outputFilename) log = setup_logger(output_file_name_log, globalDat.debug_log) @@ -3530,12 +3194,12 @@ if __name__ == '__main__': cursor = conn.cursor() construction_tables() sql_optimisation() - calcul_stats(output_file_name, input_file[:-4]) + calcul_stats(output_file_name, output_file_md, input_file[:-4]) elif args.option == "update" : conn = sqlite3.connect(imported_database) # Connexion à la base de données SQLite cursor = conn.cursor() - calcul_stats(output_file_name, input_file[:-4]) + calcul_stats(output_file_name, output_file_md, input_file[:-4]) elif args.option == "test" : conn = sqlite3.connect(imported_database) # Connexion à la base de données SQLite @@ -3551,13 +3215,13 @@ if __name__ == '__main__': minutes, secondes = divmod(secondes, 60) # 60 secondes dans une minute if duree.seconds > 3600: - duree_formatee = f"{heures:02d}{Colors.INFO}(h){Colors.ENDC}{minutes:02d}{Colors.INFO}(m){Colors.ENDC}{secondes:02d}{Colors.INFO}(s)" + duree_formatee = f"{heures:02d}{Colors.ENDC}(h){Colors.ENDC}{minutes:02d}{Colors.ENDC}(m){Colors.ENDC}{secondes:02d}{Colors.ENDC}(s)" elif duree.seconds > 60: - duree_formatee = f"{minutes:02d}{Colors.INFO}(m){Colors.ENDC}{secondes:02d}{Colors.INFO}(s)" + duree_formatee = f"{minutes:02d}{Colors.ENDC}(m){Colors.ENDC}{secondes:02d}{Colors.ENDC}(s)" else : - duree_formatee = f"{secondes:02d}{Colors.INFO}(s)" + duree_formatee = f"{secondes:02d}{Colors.ENDC}(s)" if error_count == 0 : log.info(f"Execution terminée sans erreur en {Colors.ENDC}{duree_formatee}{Colors.INFO}")