Compare commits

...

1 Commits

Author SHA1 Message Date
d6887e181d Ajout algorithme du script
Algorithme incomplet, un affinage de plus nécessaire
2025-02-21 16:11:44 +01:00

443
algorithme.txt Normal file
View File

@ -0,0 +1,443 @@
~~ ALGORITHME Script DORY Digitanie ~~
Traitement de documents d'un dossier de PLU pour mise a disposition d'un opérateur.
Dans ce programme, la notion de "projet" fait référence à un fichier SHP.
Après l'exécution de ce programme, l'opérateur devra traiter chaque projet.
CONTRAINTES
Il n'y a pas d'arborescence prédéfinie à l'intérieur du dossier source.
Les fichiers du cadastres ne sont nécessairement isolés des autres fichiers. // Mais normalement, leurs noms devraient respecter une nomenclature : "commune", "parcelles" et "batiment"
CONSTANTES
//liste des extensions autorisés list string (ou type Extension natif ?) devellopé en extentions nécessaires et auxiliaires
liste des extensions nécessaires list string // TODO a regrouper en dico avec pour clés ( nécessaire , auxiliaires ) ??
liste des extentions auxiliaires list string
//liste des noms des sous dossiers du dossier Travail list string // pas necessaire car pas d'arborescence prédéfinie
//liste des projections géodésiques autorisés list string
//liste des encodages autorisés list string
//dictionnaire des couleurs à utiliser pour la colorisation du fichier Excel dico de paire string : Entier ( ou Hexa ou type Couleur natif ? )
VARIABLES
tableau ou liste des fichiers list Entité Fichier
dictionnaire des projets avec pour clé le nom de chaque projet dico de paire string : Entité Projet
variable de rapport de traitement Entité Rapport
//variable ou tableau contenant des chemins (relatifs et/ou absolus) des dossiers à traiter ( TODO ou simplement une variable pour le chemin du dossier SIG ?? pour le moment on va partir sur une simple variable pour le chemin racine de référence)
variable contenant le chemin absolue du repertoire racine du dossier a traiter string ( ou type Chemin natif ?)
// enumération des projections valides enum { "LAMBERT93" , "RGFG95" , "RGR92" , "RGSPM06" } pas nécessaire tant que juste dossier en France métropolitaine
Structure Entité Fichier
- son nom original string
- son chemin string (ou type Chemin natif ?)
- son extension string (ou enumération ?)
- sa conformité bool
- son nom nomenclaturé string
Structure Entité Projet
- son nom string
//- sa liste de fichiers list Entité Fichier
- son dictionnaire de fichiers nécessaires avec pour clé l'extention de chaque fichier dico de paire string : Entité Fichier
- son dictionnaire de fichiers auxiliaires avec pour clé l'extention de chaque fichier dico de paire string : Entité Fichier
- son nombre de fichiers entier
- sa conformité bool
- sa projection géodésique string (ou énumération ? on va faire avec une énum pour s'entrainer, cela permettra d'ajouter des projections valides plus facilement) FINALEMENT PAS BESOIN LAMBERT93 est la projection administrative officielle unique pour la france entière, peut être revoir cette variable en V2 si on a besoin de prjection pour les DOMTOMs
- son type d'encodage de données prévu pour QGIS string (ou enum ?? je pense pas qu'autre chose que UTF8 soit pertinent d'ou peut etre jsute faire un booleen ?)
Structure Entité Rapport
- son nom string (pour ce script ce sera forcément "Rapport de Pré-traitement Manuel")
- son nombre de projets conforme entier
- son nombre de projets non-conforme entier
- sa liste de projets conforme list Entité Projet
- sa liste de projets non-conforme list Entité Projet
//- sa conformité ( a définir )
- son verdict enum ( A-traiter-manuellement , A-traiter-auto , Ne-pas-traiter , Erreur )
1er NIVEAU D'AFFINAGE
DEBUT DU PROGRAMME
recupérer le chemin du dossier à traiter
analyser le dossier
produire le dossier de mise à disposition
produire le rapport
ARRET DU PROGRAMME
2ième NIVEAU D'AFFINAGE
DEBUT DU PROGRAMME
--recupérer le chemin du dossier à traiter
le dossier IN est le dossier fourni en entrée
se positionner dans le dossier IN et chercher le dossier SIG
enregistrer le chemin du dossier SIG
se positionner dans le dossier SIG
--analyser le dossier
initialiser la liste des Fichiers
initialiser le dictionnaire des Projets
Pour Chaque dossier et sous dossier à explorer Faire
analyser chaque fichier et peupler la liste des Fichiers ainsi que les clés du dictionnaire des Projets
Fin Pour
Pour Chaque entité de la liste des Fichiers Faire
associer l'entité courante à un projet du dictionnaire des Projets (créer aussi des projets non conformes)
Fin Pour
Pour Chaque entité du dictionnaire des Projets Faire
compter le nombre de fichiers associés à ce projet
controler la projection géodésique
controler l'encodage des caractères
définir la conformité du projet
Fin Pour
--produire le dossier de mise à disposition
créer un dossier "Travail" et un dossier "Livraison"
créer l'arborescence du dossier "Travail"
peupler le dossier "Travail"
--produire le rapport
créer et initialiser l' Entité Rapport
créer un feuille de calcul Excel et la formatter
Pour Chaque projet conforme dans le Rapport Faire
incrementer le compteur de projets conformes
rapporter le projet conforme courant
Fin Pour
Pour Chaque projet non-conforme Faire
incrementer le compteur de projets non-conformes
rapporter le projet non-conforme courant
Fin Pour
définir le verdict du rapport
ARRET DU PROGRAMME
3ième NIVEAU D'AFFINAGE
DEBUT DU PROGRAMME
--recupérer le chemin du dossier à traiter
--le dossier IN est le dossier fourni en entrée
enregistrer le chemin du dossier IN
--se positionner dans le dossier IN et chercher le dossier SIG
le dosssier IN devient le working directory
chercher le dossier SIG
Si le dossier SIG n'est pas trouvé Alors
rapporter la non présence du dossier SIG
finir le programme
Fin Si
enregistrer le chemin du dossier SIG
--se positionner dans le dossier SIG
le dossier SIG devient le working directory
--analyser le dossier
--initialiser la liste des Entités Fichier
la liste des Fichiers est vide
--initialiser le dictionnaire des Entités Projet
le dictionnaire des Projets est vide
Pour Chaque dossier et sous dossier à explorer Faire
--analyser chaque fichier et peupler la liste des Entités Fichier ainsi que les clés du dictionnaire des Entités Projet
Pour Chaque fichier du dossier courant Faire
initialiser son Entité Fichier A AFFINER
écrire le nom de son chemin
rechercher et définir sa partie nom et sa partie extension A AFFINER
écrire son nom original
écrire le nom de son extension
formatter le nom suivant la nomenclature autorisé et écrire son nom nomenclaturé A AFFINER
Si son extension est conforme Alors
écrire sa conformité comme conforme
Sinon
écrire sa conformité comme non-conforme (pas obligé si l'initialisation à été correctement faite à non-conforme)
Fin Si
ajouter son Entité à la liste des Fichiers
Fin Pour
Fin Pour
// * Ici, la liste des Fichiers doit être correctement peuplés *
Pour Chaque entité de la liste des Fichiers Faire
--associer l'entité courante à un projet du dictionnaire (créer aussi des projets non conformes)
la clé courante du dictionnaire des Projets est le nom nomenclaturé de l'entité courante
Si la clé courante n'est PAS une clé du dictionnaire des Projets Alors
ajouter la clé courante comme nouvelle clé du dictionnaire des projets
créer et initialiser une Entité Projet A AFFINER
ce projet prend comme nom le nom de la clé nouvellement ajouté // ( attribut .nom = le nom de la clé )
associer le Projet crée avec la clé courante dans le dictionnaire
Fin Si
le projet courant est celui associé à la clé courante
ajouter l'entité courante au dictionnaire pertinent du projet courant TODO A AFFINER
Fin Pour
// * Ici le dictionaire de Projets doit être correctement peuplé *
Pour Chaque entité du dictionnaire des Projets Faire
compter le nombre de fichiers associés à ce projet
--controler la projection géodésique
rechercher la présence de la chaine "RGF_1993_Lambert_93" dans le fichier *.prj du projet courant //on peut aussi lire dès le début de la ligne à la recherche de la chaine PROJCS["RGF_1993_Lambert_93", penser à échapper les guillemets ?
Si la chaine est présente Alors
la projection géodésique devient "LAMBERT93"
Fin Si
--controler l'encodage des caractères
rechercher la présence de la chaine "UTF-8" dans le fichier *.cpg // normalement dès le début du fichier
Si la chaine "UTF-8" est présente Alors
le type d'encodage devient "UTF-8"
Fin Si
--définir la conformité du projet
la conformité du projet est défini à non-conforme // Normalement cette instruction n'est pas nécessaire car deja mis a non-conforme à l'initialisation de l'Entité Projet
Si le projet contient les fichiers nécessaires dans son dictionnaire de fichiers nécessaires A AFFINER
ET
la projection géodésique est défini à "LAMBERT93"
ET
le type d'encodage est défini à "UTF-8" Alors
la conformité devient conforme
Fin Si
Fin Pour
--produire le dossier de mise à disposition
--créer un dossier Travail et un dossier Livraison
positionner le working directory sur le dossier racine
créer un dossier "Travail"
créer un dossier "Livraison"
--créer l'arborescence du dossier Travail
positionnner le working directory sur le dossier Travail
créer un dossier "00-Cadastre"
créer un dossier "01-Donnees_Valides"
créer un dossier "02-Donnees_Invalides"
créer un dossier "03-Production"
créer un dossier "04-Verif_Geometrie"
--peupler le dossier Travail
// copier le dossier Cadastres dans "00-Cadastres" A VOIR en V2 pas nécessaire pour le moment, les fichiers de cadastres sont traités comme des projets et seront visibles dans le VISA pour l'opérateur
Pour chaque entité du dictionnaire des Projets Faire
Si le projet est conforme Alors
//créer un dossier pour le projet courant dans le dossier "01-Donnees_Valides" PAS NECESSAIRE DE FAIRE UN DOSSIER PAR PROJET
ajouter ces fichiers dans le dossier "01-Donnees_Valides" A AFFINER
Sinon
//créer un dossier pour le projet courant dans le dossier "02-Donnes_Invalides"
ajouter ces fichiers dans le dossier "02-Donnees_Invalides" A AFFINER
Fin Si
//peupler le dossier nouvellement créé avec les fichiers du projet courant
Fin Pour
--produire le rapport
créer et initialiser l' Entité Rapport
--créer un feuille de calcul Excel et la formatter
créer le fichier workbook (classeur) Excel nommé VISA
se positionner sur la "worksheet 01" (Feuille 01)
mettre en page la feuille (Entête Digitanie, etc)
Pour Chaque projet conforme dans le Rapport Faire
incrementer le compteur de projets conformes
--rapporter le projet conforme courant (voir schéma cahier)
écrire le nom du projet et coloriser
écrire la confirmation de la présence des 5 fichiers nécessaires (SHP ou pas) et coloriser
écrire le type d'encodage et coloriser
ecrire la projection et coloriser
écrire la validation et coloriser
// écrire la liste des fichiers du projet
Fin Pour
Pour Chaque projet non-conforme Faire
incrementer le compteur de projets non-conformes
--rapporter le projet non-conforme courant
écrire le nom du projet et coloriser
écrire la confirmation de la présence des 5 fichiers nécessaires (SHP ou pas) et coloriser
écrire le type d'encodage et coloriser
ecrire la projection et coloriser
écrire la validation et coloriser
Fin Pour
--définir le verdict du rapport
Si il y au moins un projet conforme Alors
le verdict passe à "A-traiter-manuellement"
Sinon
le verdict passe à "Ne-pas-traiter"
Fin Si
Voulez vous en savoir plus ??
ARRET DU PROGRAMME
4ième NIVEAU D'AFFINAGE
DEBUT DU PROGRAMME
--recupérer le chemin du dossier à traiter
--le dossier IN est le dossier fourni en entrée
--enregistrer le chemin du dossier IN
le chemin de racine de traitement est le chemin du dossier IN
--se positionner dans le dossier IN et chercher le dossier SIG
le dosssier IN devient le working directory
chercher le dossier SIG
Si le dossier SIG n'est pas trouvé Alors
rapporter la non présence du dossier SIG
finir le programme
Fin Si
enregistrer le chemin du dossier SIG
--se positionner dans le dossier SIG
le dossier SIG devient le working directory
--analyser le dossier
--initialiser la liste des Entités Fichier
la liste des Fichiers est vide
--initialiser le dictionnaire des Entités Projet
le dictionnaire des Projets est vide
Pour Chaque dossier et sous dossier à explorer Faire
--analyser chaque fichier et peupler la liste des Entités Fichier ainsi que les clés du dictionnaire des Entités Projet
Pour Chaque fichier du dossier courant Faire
initialiser son Entité Fichier A AFFINER
écrire le nom de son chemin
rechercher et définir sa partie nom et sa partie extension A AFFINER
écrire son nom original
écrire le nom de son extension
formatter le nom suivant la nomenclature autorisé et écrire son nom nomenclaturé A AFFINER
Si son extension est conforme Alors
écrire sa conformité comme conforme
Sinon
écrire sa conformité comme non-conforme (pas obligé si l'initialisation à été correctement faite à non-conforme)
Fin Si
ajouter son Entité à la liste des Fichiers
Fin Pour
Fin Pour
// * Ici, la liste des Fichiers doit être correctement peuplés *
Pour Chaque entité de la liste des Fichiers Faire
--associer l'entité courante à un projet du dictionnaire (créer aussi des projets non conformes)
la clé courante du dictionnaire des Projets est le nom nomenclaturé de l'entité courante
Si la clé courante n'est PAS une clé du dictionnaire des Projets Alors
ajouter la clé courante comme nouvelle clé du dictionnaire des projets
créer et initialiser une Entité Projet A AFFINER
ce projet prend comme nom le nom de la clé nouvellement ajouté // ( attribut .nom = le nom de la clé )
associer le Projet crée avec la clé courante dans le dictionnaire
Fin Si
le projet courant est celui associé à la clé courante
ajouter l'entité courante au dictionnaire pertinent du projet courant TODO A AFFINER
Fin Pour
// * Ici le dictionaire de Projets doit être correctement peuplé *
Pour Chaque entité du dictionnaire des Projets Faire
compter le nombre de fichiers associés à ce projet
--controler la projection géodésique
rechercher la présence de la chaine "RGF_1993_Lambert_93" dans le fichier *.prj du projet courant //on peut aussi lire dès le début de la ligne à la recherche de la chaine PROJCS["RGF_1993_Lambert_93", penser à échapper les guillemets ?
Si la chaine est présente Alors
la projection géodésique devient "LAMBERT93"
Fin Si
--controler l'encodage des caractères
rechercher la présence de la chaine "UTF-8" dans le fichier *.cpg // normalement dès le début du fichier
Si la chaine "UTF-8" est présente Alors
le type d'encodage devient "UTF-8"
Fin Si
--définir la conformité du projet
la conformité du projet est défini à non-conforme // Normalement cette instruction n'est pas nécessaire car deja mis a non-conforme à l'initialisation de l'Entité Projet
Si le projet contient les fichiers nécessaires dans son dictionnaire de fichiers nécessaires A AFFINER
ET
la projection géodésique est défini à "LAMBERT93"
ET
le type d'encodage est défini à "UTF-8" Alors
la conformité devient conforme
Fin Si
Fin Pour
--produire le dossier de mise à disposition
--créer un dossier Travail et un dossier Livraison
positionner le working directory sur le dossier racine
créer un dossier "Travail"
créer un dossier "Livraison"
--créer l'arborescence du dossier Travail
positionnner le working directory sur le dossier Travail
créer un dossier "00-Cadastre"
créer un dossier "01-Donnees_Valides"
créer un dossier "02-Donnees_Invalides"
créer un dossier "03-Production"
créer un dossier "04-Verif_Geometrie"
--peupler le dossier Travail
// copier le dossier Cadastres dans "00-Cadastres" A VOIR en V2 pas nécessaire pour le moment, les fichiers de cadastres sont traités comme des projets et seront visibles dans le VISA pour l'opérateur
Pour chaque entité du dictionnaire des Projets Faire
Si le projet est conforme Alors
//créer un dossier pour le projet courant dans le dossier "01-Donnees_Valides" PAS NECESSAIRE DE FAIRE UN DOSSIER PAR PROJET
ajouter ces fichiers dans le dossier "01-Donnees_Valides" A AFFINER
Sinon
//créer un dossier pour le projet courant dans le dossier "02-Donnes_Invalides"
ajouter ces fichiers dans le dossier "02-Donnees_Invalides" A AFFINER
Fin Si
//peupler le dossier nouvellement créé avec les fichiers du projet courant
Fin Pour
--produire le rapport
créer et initialiser l' Entité Rapport
--créer un feuille de calcul Excel et la formatter
créer le fichier workbook (classeur) Excel nommé VISA
se positionner sur la "worksheet 01" (Feuille 01)
mettre en page la feuille (Entête Digitanie, etc)
Pour Chaque projet conforme dans le Rapport Faire
incrementer le compteur de projets conformes
--rapporter le projet conforme courant (voir schéma cahier)
écrire le nom du projet et coloriser
écrire la confirmation de la présence des 5 fichiers nécessaires (SHP ou pas) et coloriser
écrire le type d'encodage et coloriser
ecrire la projection et coloriser
écrire la validation et coloriser
// écrire la liste des fichiers du projet
Fin Pour
Pour Chaque projet non-conforme Faire
incrementer le compteur de projets non-conformes
--rapporter le projet non-conforme courant
écrire le nom du projet et coloriser
écrire la confirmation de la présence des 5 fichiers nécessaires (SHP ou pas) et coloriser
écrire le type d'encodage et coloriser
ecrire la projection et coloriser
écrire la validation et coloriser
Fin Pour
--définir le verdict du rapport
Si il y au moins un projet conforme Alors
le verdict passe à "A-traiter-manuellement"
Sinon
le verdict passe à "Ne-pas-traiter"
Fin Si
Voulez vous en savoir plus ??
ARRET DU PROGRAMME