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 |
BibliographieBonneau, M. E. (2008). Vérification d'aptitude de l'extraction différentielle dans un système client-serveur utilisant l'historique. ENSG. 68 p. Bordin, P. (2002). Chapitre 3.6.4 La question Quand ? et chapitre 6.8 La mise à jour. Dans SIG : concept, outils et donnéees (pp. 90-91 & 162-172). Hermès Science. 259 p. ISBN/ISSN : 9782746205543 Date, C. J. (2004). Introduction aux bases de données. (M. Chalmond, & J.-M. Thomas, Trads.) Paris: Vuibert. 1047 p. ISBN/ISSN : 2711748383. Guinaudeau, M. (2006). Etude préalable pour la misee en oeuvre du "Fond vert" produit par l'IFN et l'IGN. Mémoire d'examen professionel pour le recrutement d'Ingénieur des Travaux Géographiques et Cartographiques de l'Etat. 82 p. Heres, L. (2000). « Hodochronologics: History and time in the National Road Database ». Dans L. Heres (Éd.), Time in GIS: issues in spatio-temporal modelling (pp. 45-56). Publication on Geodesy. Vol. 47. Deft. Pays-Bas: Netherlands Geodetic Commision. 70 p. ISBN/ISSN : 9789061322696 IGN. (2007). GCVS pour les nuls. Service de la recherche. 11 p. IGN. (2011). BDUni V1.1 Grande Echelle : spécifications de contenu (éd. 5ème). 213 p. IGN. (2012). Spécification de saisie BDUni V1.1. Langran, G. (1992). Time in geographic information systems. Londres, New York, Philadelphia: Taylor & Francis. 189 p. ISBN/ISSN : 0748400036. Paque, D. (2004). « Gestion de l'historicité et méthodes de mise à jour dans les SIG » dans Cybergéo : Cartographie, Imagerie, SIG, article 278. Mis en ligne le 23 juin 2004. Consulté le 22 février 2013, sur http://cybergeo.revues.org/2500. 22 p. DOI : 10.4000/cybergeo.2500. xxxi AnnexesExemple de requête SQL temporelle dans la BDUni Cette requête permet l'extraction des objets du thème bâtiment correspondant à l'état de la base pour un instant et un département donné. 1 SELECT T.* 2 FROM( 3 SELECT bh.* 4 FROM batiment_h bh, metadonnees_departement d 5 WHERE d.code_insee = $2 6 AND (d.detruit is NULL or d.detruit=") 7 AND isvalid(bh.geometrie) 8 AND isvalid(d.geometrie) 9 AND intersects(bh.geometrie,d.geometrie) -- concaténation de la table historique avec la table actuelle -- pour avoir les numrec et les numrecmodif de tous les objets 10 UNION 11 -- on rajoute la colonne numrecmodif avec une valeur par défaut -- dans la table actuelle qui ne possède pas cette colonne SELECT b.*, 0 as numrecmodif 12 FROM batiment b, metadonnees_departement d 13 WHERE d.code_insee = $2 14 AND (d.detruit is NULL or d.detruit=") 15 AND isvalid(b.geometrie) 16 AND isvalid(d.geometrie) 17 AND intersects(b.geometrie,d.geometrie)) AS T -- jointure simple avec la table des réconciliations permettant d'éliminer toutes les versions de l'objet -- correspondant à des réconciliations postérieures à la date qui nous intéresse 18 JOIN( 19 SELECT * 20 FROM reconciliations -- opérateur <= ; borne gauche de l'intervalle fermée 21 WHERE daterec <= $1) AS R1 22 ON T.numrec = R1.numrec -- jointure gauche avec la table des réconciliations récupérant pour chaque version la date -- de la réconciliation suivante sur cet objet (celle qui a mis la version courante dans l'historique) 23 LEFT JOIN( 24 SELECT * 25 FROM reconciliations -- condition suivante peut-être inutile au regard du WHERE final 26 WHERE daterec > $1) AS R2 27 ON T.numrecmodif = R2.numrec -- la date du numrecmodif (date de la réconciliation suivante doit être postérieur à la date t afin de vérifier -- que l'objet courant a bien été réconcilié avant t ET que la réconciliation suivante a eu lieu après t -- opérateur > ; borne droite de l'intervalle ouverte 28 WHERE R2.daterec > $1 -- Toutefois, si on est sur l'objet courant, on n'a pas de date de -- numrecmodif et on se contente de s'assurer que l'objet n'est pas -- détruit ou que sa destruction est postérieure à t 29 OR (T.numrecmodif = 0 AND (T.date_destruction IS NULL OR T.date_destruction > $1) xxxii Commentaires : ? Première étape : création d'une table unique réunissant les objets actuels et l'historique Lignes 1 et 2 : sélectionner toutes les lignes et toutes les colonnes dans une table T qui correspondent au résultat de la requête énoncée de la ligne 3 à 29. Lignes 3 à 17 : création de la table T, contenant toutes les lignes et colonnes de la table historique (lignes 3 et 4), et (ligne 10) toutes les lignes et colonnes de la table des objets courants (lignes 11 et 12).La colonne « numrecmodif » est ajoutée et remplie avec la valeur « 0 » à la table des objets courants (ligne 11). ? Deuxième étape : borne inférieure de l'intervalle Lignes 17, 18 et 21,22 : jointure de la colonne « numrec » de table principale T sur la même colonne de R1, vue issue de la table des réconciliations. C'est une inner join qui crée une nouvelle table dont le résultat ne contient que les lignes satisfaisant le prédicat de jointure. Lignes 19 à 21 : R1est créé à partir d'une sélection dans la table des réconciliations de toutes les lignes et colonnes lorsque le contenu de la colonne « daterec » est strictement inférieur à la date choisie. ? Troisième étape : borne supérieure de l'intervalle Lignes 23, 26 et 27 : jointure de la colonne « numrecmodif » de T sur la colonne « numrec » de R2. Le left join consiste à ajouter des colonnes et à remplir les lignes satisfaisant le prédicat de jointure, tout comme le inner join, mais sans supprimer les autres lignes. Lignes 23 à 26 : une seconde vue, R2, est créé à partir d'une sélection dans la table des réconciliations de toutes les lignes et colonnes lorsque la colonne « daterec » est inférieure ou égale à la date choisie. ? Quatrième étape : Lignes 28 et 29 : sélection finale des lignes où la colonne R2.daterec est supérieure ou égale à la date choisie (l'objet est compris dans l'intervalle), ou quand il s'agit d'un objet actuel, borné à gauche mais pas à droite car il n'a pas été modifié ou détruit (« numrecmodif » = 0 et « date_destruction » non renseignée ou strictement supérieure à la date choisie). xxxiii Exemple : s Table actuelle « zone_de_vegetation »
s Table d'historique « zone_de_vegetation_h »
s Table des réconciliations
s Table T
67 Colonne toujours vide mais bien présente dans la table. 68 Cette colonne est ajoutée à titre indicatif. xxxiv L'opération est simulée pour quatre dates successives, le résultat final est souligné et noté en caractères gras. 1) t = 2000 s R1
s R2
s Résultat
2) t = 2001 s R1
s R2
s Résultat
xxxv 3) t = 2002 s R1
s R2
s Résultat
4) t = 2003 s R1
s R2
s Résultat
xxxvi Remarques : L'intervalle temporel défini par la requête (deuxième et troisième étape) pour obtenir l'état de la base à un instant t choisi peut être exprimé de la façon suivante : ? début de l'intervalle < ou = instant T choisi < fin de l'intervalle ? ou encore : [Tmin ; Tmax[ Cette définition est cohérente, car elle exclut une des valeurs des bornes, ce qui est nécessaire puisque le système d'historisation de la BDUni utilise une datation discrète : la fin d'un objet précédent et le début du suivant possède la même date, et non deux dates immédiatement consécutives. Deux états successifs ne peuvent pas en effet, selon la logique, se superposer dans le temps. Il faut donc exclure une des bornes. Dans l'absolu, il paraît plus conforme à la réalité du changement de considérer la borne de fin de l'intervalle comme ouverte, et non celle du début. Cela revient à faire correspondre à l'idée de durée d'un objet informatique la notion d'existence d'un objet du monde réel. Néanmoins, la résolution temporelle des données étant de l'ordre du cent-millième de seconde, ce point n'est pas nécessairement très important, d'autant plus que l'utilisation du temps dans la BDUni répond à un besoin de maintenance informatique. L'utilisation du temps réel et le suivi des changements dans le cadre de l'OCS GE demandera par contre de veiller au respect de ce principe. |
|