Recherche d'un processus d'historisation de base de données d'occupation des sols appliqué au référentiel géographique forestier de l'IGN( Télécharger le fichier original )par Romain Louvet Université Paris Diderot - Paris 7 - M1 Géographie et Sciences des territoires 2013 |
VI.D - « evenements_test.py »# User : Romain Louvet, stagiaire # 28/08/2013 # IGN, equipe produit forêt environnement, projet OCS & mise a jour du RGFor # Nom: evenements.py # DESCRIPTION : # Ce programme lit la table attributaire de la feature classe matrice_evenements sous forme d'un .csc convertit en # convertit les colonnes en liste ; effectue des recherches dans ces listes afin de determiner le type d'evenement # en remplissant la colonne EVEtest, puis attribue un NUMEVE # Ce programme ne reconnait et n'a ete teste que pour les evenements "INC", "INT", "FUS" et "REM # IMPORTANT : # - avoir créé feature class matrice_evenements # - avoir ajouté evenements de la mise a jour datee par la PVA # - avoir un fichier texte lisible de la table attributaire : # - ouvrir matrice_evenements dans arcmap, ouvrir sa table attributaire # - "turn field off tous" les champs excepte OBJECTID, ENTITE_AV, PARTIE_AV, ENTITE_AP, PARTIE_AP, NUMEVE, EVEtest # - "Table options" > "select all" # - clic droit bordure grise côté gauche du tableau > "copy selected" # - coller selection dans tableau excel, enregistrer sous ex : EVE2010_65.csv # liste des codes numeve fichier = open(" C:/Users/Romain/Desktop/IGN/test_histoRGFOR_OCS/code_NUMEV065.txt","r") lire = fichier.read() code_numeve = lire.split("\n") # dernier code NUMEVE dans table "evenements" (entrer manuellement) dernier = 0 try : cle = code_numeve.index(dernier) except ValueError: cle = 0 fichier.close() # ouvrir tableau en mode lecture fichier = open(" C:/Users/Romain/Desktop/IGN/test_histoRGFOR_OCS/EVE2010_65.csv", "r") lire = fichier.read() # les evenements INC = "INC" INT = "INT" FUS = "FUS" SCI = "SCI" EXT = "EXT" REC = "REC" xxi REA = "REA" REM = "REM" DIV = "DIV" # creer les listes de colonne objectid = [] entiteAV = [] entiteAP = [] partieAV = [] partieAP = [] entparAV = [] entparAP = [] numeve = [] eveTEST = [] # listes lignes d'eve liINC = [] liNONINC = [] # transformation du contenu du fichier .csv en liste lignes = lire.splitlines() lgr = len(lignes) for i in range(lgr): if i > 0: ligne = lignes[i] colonne = ligne.split(";") objectid.append(colonne[0]) entiteAV.append(colonne[1]) partieAV.append(colonne[2]) entiteAP.append(colonne[3]) partieAP.append(colonne[4]) numeve.append(colonne[5]) eveTEST.append("<Nul>") entparAV.append(colonne[1]+colonne[2]) entparAP.append(colonne[3]+colonne[4]) ### INCHANGE ### # definition : intersection correspondant a la meme entite avant et apres le ou les evenements for i in range(lgr-1): ii = int(i)-1 av = entparAV[ii] ap = entparAP[ii] if av == ap : eveTEST[ii] = INC liINC.append(objectid[ii]) numeve[ii] = code_numeve[cle] else: liNONINC.append(objectid[ii]) xxii lgrINC = len(liINC) # prochain code cle = cle + 1 ### INTEGRATION ### # definition : l'entite est remplacee par entite preexistante for i in liNONINC: ii = objectid.index(i) eve = numeve[ii] av = entparAV[ii] ap = entparAP[ii] # entite existant en T est unique rech = entparAV.count(av) if rech == 1: # entite existant en T n'existe plus en T+1 rech1 = entparAP.count(av) if rech1 == 0: # successeur est inchange for j in liINC: jj = objectid.index(j) rechinv = entparAV[jj] if rechinv == ap: eveTEST[ii] = INT ### FUSION ### # definition : l'entite est remplacee par une nouvelle entite qui remplace au moins # deux entites distinctes # attention ! prendre en compte PARTIE sinon confondu avec reaffectation for i in liNONINC: x = 0 ii = objectid.index(i) eve = numeve[ii] av = entiteAV[ii] ap = entiteAP[ii] # entite existant en T est unique rech = entiteAV.count(av) if rech == 1: # entite existant en T n'existe plus en T+1 rech1 = entiteAP.count(av) if rech1 == 0: xxiii # successeur n'est pas inchange for j in liINC: jj = objectid.index(j) rechinv = entiteAV[jj] if rechinv != ap: x = x+1 if x == lgrINC: # successeur existe au moins 2 fois if entiteAP.count(ap)>=2: # ce n'est pas une reaffectation a definir !!! eveTEST[ii] = FUS ### REMPLACEMENT ### # definition : nouvelle entite avec la meme geometrie que precedente for i in liNONINC: x = 0 ii = objectid.index(i) eve = numeve[ii] av = entparAV[ii] ap = entparAP[ii] # entite existant en T est unique rech = entparAV.count(av) if rech == 1: # entite existant en T n'existe plus en T+1 rech1 = entparAP.count(av) if rech1 == 0: # successeur n'est pas inchange for j in liINC: jj = objectid.index(j) rechinv = entparAV[jj] if rechinv != ap: x = x+1 if x == lgrINC: # successeur existe une seule fois if entparAP.count(ap)==1: eveTEST[ii] = REM numeve[ii] = code_numeve[cle] # prochain code cle = cle + 1 ### NUMEVE # liste des num utilises xxiv num_ut = [] # pour chaque ligne de la colonne eveTEST for i in range(lgr-1): oid = objectid[i] test = numeve[i] # si la ligne n'a pas deja ete faite if test == "<Nul>": # cherche le type d'eve eve = eveTEST[i] # cherche l'identifiant ENTITE et PARTIE apres et avant idAP = entparAP[i] idAV = entparAV[i] # INTEGRATION : if eve == INT: for j in range(lgr-1): eve1 = eveTEST[j] oid1 = objectid[j] idAP1 = entparAP[j] # meme evenement si deux lignes ont le meme id apres et le meme eve INT if idAP == idAP1 and eve == eve1: numeve[j] = code_numeve[cle] # meme numeve numeve[i] = code_numeve[cle] # prochain code cle = cle + 1 # FUSION : if eve == FUS: for j in range(lgr-1): eve1 = eveTEST[j] oid1 = objectid[j] idAP1 = entparAP[j] # meme evenement si deux lignes ont le meme id apres et le meme eve FUS if idAP == idAP1 and eve == eve1: numeve[j] = code_numeve[cle] # meme numeve numeve[i] = code_numeve[cle] # prochain code cle = cle + 1 fichier1 = open(" C:/Users/Romain/Desktop/IGN/test_histoRGFOR_OCS/EVE2010_65test.csv", "w") for i in range(lgr): if i == 0: fichier1.write(lignes[i]+"\n") else: xxv fichier1.write(objectid[i-1]+";"+entiteAV[i-1]+";"+partieAV[i-1]+";"+entiteAP[i-1]+";"+partieAP[i-1]+";"+numeve[i-1]+";"+eveTEST[i-1]+"\n") fichier.close() fichier1.close() xxvi VII - Tableau statistique d'évolution de l'occupation des sols du jeu de données « RGFOR65_test »
xxvii Transition
xxviii Transition
xxix Transition
VIII - Rapport BDUni
Objet : XXX NOM - FONCTION SIGNATURE xxx Commanditaire Rédacteur Relecteur Valideur Liste de diffusion
Date Visa Nom Service
xxxi |
|