Développement d’outils de validation et correction de topologie Martine Girard 15 décembre 2009
Plan de présentation Introduction Problématique à l’origine du projet Objectifs visés Étapes de réalisation Objectifs spécifiques Description pressentie de l’application Description des algorithmes
Plan de présentation (suite) Modélisation de données Choix technologiques Phase de développement Démonstration Jeux de données test et résultats Conclusion
Introduction - Problématique Les entreprises bénéficiaires de contrats d’approvisionnement et d’aménagement forestier (C.A.A.F.) doivent déposer au MRNF des contours de travaux planifiés et réalisés. Les contours déposés doivent être conformes à une norme qui définit les caractéristiques spatiales et descriptives Reboitech a conçu pour ses clients bénéficiaires de CAAF un portail Internet de suivi des travaux sylvicoles
Introduction – Problématique (suite) Le portail accueille les contours de travaux, déposés par les exécutants des travaux. Il valide les informations descriptives mais pas les informations spatiales. Ces contours sont produits par des entreprises souvent mal outillées pour produire des fichiers qui répondent à la norme. On désire offrir à nos clients de générer les fichiers conformes pour la remise au MRNF à partir des fichiers déposés sur notre portail.
Introduction - Objectifs L’objectif principal visé par ce projet est de détecter et corriger certaines erreurs topologiques afin de générer des fichiers conformes à la norme. La norme concerne des fichiers de points, lignes et polygones. Comme les travaux concernent principalement des polygones, ce projet vise uniquement la correction de polygones. Un des objectifs de départ était de permettre à l’utilisateur d’accepter ou de refuser les corrections.
Étapes de réalisation Étude de la norme et identification des éléments couverts par le projet. Description fonctionnelle de l’application. Définition des algorithmes de détection et de correction des erreurs. Choix technologiques. Modélisation des données nécessaires. Installation et configuration de PostgreSQL/PostGIS
Étapes de réalisation (suite) Développement de l’application. Choix de données de tests. Essais sur les données choisies. Examen des résultats. Identification des correction réussies. Identification des problématiques restantes. Préparation de la présentation
Objectifs spécifiques Les objectifs spécifiques ont été déterminés suite à l’examen de la norme et au choix des éléments à inclure au projet. Adresse de la norme du RAIF ntreprises/NORME_RAIF_version%201.2.pdf ntreprises/NORME_RAIF_version%201.2.pdf Le tableau qui suit présente l’ensemble des exigences du MRNF sur les polygones avec choix pour ce projet.
Objectifs spécifiques (suite) CaractéristiqueDescriptionPriorisation 1- RésolutionLa résolution demandée par le MRNF est le mètre Aucune (Le MRNF fait cette correction) 2- ExactitudeLa géométrie doit refléter exactement la localisation sur le terrain Aucune (on ne peut valider cette information) 3- Dimension minimale d’une entité géométrique Superficie minimale des polygones et des exclusions (trous) de 0,05 hectares À réaliser 4- Distance minimale entre deux sommets Distance minimale de 4 mètres entre deux sommets consécutifs Optionnel 5- Distance maximale entre deux sommets Distance maximale de 1000 mètres entre deux sommets consécutifs Optionnel 6- GénéralisationApplication de l’algorithme de Douglas-Peucker avec tolérance de 0,35 mètre Aucune (Le MRNF fait cette correction)
Objectifs spécifiques (suite) CaractéristiqueDescriptionPriorisation 7- Distance minimale entre les limites d’un polygone Distance minimale de 4 mètres entre deux lignes d’un même polygone À réaliser 8- Polygone en une seule partieUne même entité ne peut être constituée de plus d’un polygone (excluant les trous) À réaliser 9- Polygone sans erreurs de numérisation Il ne doit pas y avoir d’erreurs de numérisation tel que la délimitation d’un polygone qui s’entrecoupe Optionnel 10- Appui sur une couche de référence Cohérence des polygones fournis avec les couches de référence diffusées par le MRNF ou provenant d’un RAIF antérieur Aucune (On ne peut valider sans les couches de référence)
Objectifs spécifiques (suite) CaractéristiqueDescriptionPriorisation 11- Cohérence géométrique globale Deux polygones dont les limites sont distantes ou s’entrecoupent d’un mètre ou moins partagent les mêmes segments. Deux polygones peuvent se superposer uniquement sur une superficie de 0,05 hectare et plus. Optionnel 12 – Cohérence spatiale de contexte Deux polygones qui ont les mêmes valeurs d’attributs ne peuvent être adjacents ou se superposer. À réaliser
Objectifs spécifiques (suite) L’objectif du projet est donc de détecter et de corriger, s’il y a lieu les erreurs identifiées dans le tableau précédent comme à réaliser. Pour celles identifiées comme optionnelles en début de projet, leur réalisation dépendait du temps disponible.
Description pressentie Interface utilisateur comme celle-ci
Description pressentie (suite) Les fichiers d’origine sont en format shapefiles. Donc ouverture de shapefiles et traitement sur ceux-ci. Traitements de détection et correction effectués selon les choix de l’utilisateur. Traitement de tous les polygones pour détection d’erreurs, si erreur, copie du polygone dans nouveau fichier à traiter.
Description pressentie (suite) Quand toutes les erreurs sont détectées, traitement des polygones en erreur et correction de celles-ci. Affichage des polygones corrigés en superposition aux polygones originaux pour acceptation ou refus de la correction.
Définition des algorithmes – Détection des erreurs Dimension minimales d’une entité Calculer superficie polygone Si < 0.05 erreur Calculer superficie exclusion Si < 0.05 erreur Distance minimale entre les limites d’un polygone Créer des lignes à partir des segments Si distance de moins de 4 m d’une autre ligne sauf sa voisine erreur
Définition des algorithmes – Détection des erreurs (suite) Polygone en une seule partie Si géométrie de type multiPolygon avec plus de 1 polygone erreur Cohérence spatiale de contexte Si 2 polygones partagent au moins 1 segment et qu’ils ont les mêmes attributs erreur
Définition des algorithmes – Correction des erreurs Dimension minimale d’une entité Polygone < 0.05 Si agrandir, appliquer un buffer jusqu’à superficie > 0.05 Si supprimer, supprimer le polygone Exclusion < 0.05 Si agrandir, appliquer un buffer jusqu’à superficie > 0.05 Si supprimer, supprimer l’exclusion
Définition des algorithmes – Correction des erreurs (suite) Distance minimale entre les limites d’un polygone Si agrandir, éloigner le segment afin d’obtenir 4 m Si supprimer, rapprocher le segment afin que les 2 polygones partagent le même segment Polygone en une seule partie Défaire le MultiPolygon en x polygones correspondant à ses x membres
Définition des algorithmes – Correction des erreurs (suite) Cohérence spatiale de contexte Unir les 2 polygones en un seul
Modélisation de données Les données d’origine sont en shapefile et ont des attributs prédéfinis et pré-validés. ChampTypeTailleDescription IDInteger4Identifiant unique No_sec_intText15Numéro du secteur d’intervention Pro_noText15Numéro de projet SupFloat6,2Superficie du polygone (ha) TraitText10Code du traitement SecteurText50Nom du secteur EtatText1Indique l’état de traitement (G : mesuré, non traité, C : commencé, T : terminé) Sup_traitFloat6,2Superficie traitée (ha)
Modélisation des données (suite) Attributs pour la table des polygones corrigés ChampTypeTailleDescription IDInt4Identifiant unique ID_oldInt4Identifiant du polygone corrigé SupFloat6,2Superficie du polygone (ha) Sup_oldFloat6,2Superficie avant correction (ha)
Choix technologiques Étant donné les manipulations de données spatiales, le choix de Java avec la librairie JTS s’imposait. Comme la manipulation de fichiers shapefiles n’est pas possible en JTS, j’ai décidé de transférer les données des shapefiles vers une BD PostgreSQL/PostGIS
Développement Intégration des shapefiles de test issus de données réelles dans PostgreSQL Développement de l’interface visuelle selon le modèle présenté Changement à apporter: enlever le choix de fichier d’entrée Ajouter les informations de connection à la BD Enlever le répertoire de sortie
Développement (suite) Application des validations, problématique: la correction d’un item peut apporter une autre erreur. Solution choisie: Prédéterminer un ordre de correction, corriger à mesure Faire toutes les corrections sans permettre le choix
Développement (suite) Autre problématique: On peut vouloir agrandir les polygones seulement s’ils sont plus grands que 0.04 ha. Aussi, on peut vouloir agrandir les polygones mais supprimer les exclusions
Développement (suite) Autre problème rencontré: Si des géométries ne sont pas valides, les fonctions de JTS provoquent des erreurs. Solution: appliquer la fonction simplify de JTS. Cette fonction est l’application de l’algorithme de Douglas-Peucker et retourne une géométrie valide.
Développement (suite) Interface finale Connexion Valeurs par type Paramètres pour choix Douglas-Peucker
Développement (suite) Algorithme retenu Faire une requête dans la BD pour obtenir gid et the_geom Placer le résultat dans une liste d’objet de la classe MonPoly formée de int fid: le gid MultiPolygon mpl : la géométrie String corr: indique le type de correction apportée Double supOld: superficie avant correction Double sup: superficie nouvelle
Développement (suite) Pour toute la liste faire les opérations suivantes: Simplifier selon l’algorithme de Douglass-Peucker avec la tolérance indiquée. Diviser les multi-parts (MultiPolygon avec plus de 1 membre).
Développement (suite) Déceler les distances inter géométries (fonction isWithinDistance) Corriger les distances inter géométries en divisant les 2 polygones par segments et en évaluant la distance entre les segments. Si agrandir, déplacer un segment de 0.5m à la fois. Si supprimer, partager le même segment.
Développement (suite) Déceler les adjacences non permises (fonction intersects et attributs identiques) Corriger les adjacences non permises (fonction union)
Développement (suite) Déceler les superpositions (fonction intersects et attributs différents) Corriger les superpositions (fonction intersects, difference)
Développement (suite) Déceler les distances intra polygone: diviser le polygone en ses points. Vérifier la distance entre tous les points du polygone Corriger distance intra: Trouver les 2 segments qui sont trop près (ils ne doivent pas être voisins). Si supprimer, éliminer le segment 1. Si agrandir, déplacer le segment 1 de 0.5m à la fois
Développement (suite) Déceler les exclusions trop petites: Transformer les trous en polygones et calculer la superficie (fonction getArea) Corriger : Refaire le polygone sans le trou ou agrandir celui-ci avec la fonction buffer de 0.05 m à la fois. Déceler les polygones trop petits avec la fonction getArea Corriger: appliquer la fonction buffer de 0.05 m à la fois ou supprimer le polygone. Insérer la liste de polygones résultante dans la table de polygones corrigés.
Démonstration
Tests et résultats Pour les fins de ce travail, j’ai utilisé de vraies données déposées sur le site. Les fonctions de détection d’erreurs fonctionnent bien. La plupart des erreurs semblent détectées. Problème avec adjacence. Peut être dû à un infime distance entre les polygones.
Tests et résultats (suite) Pour la correction, les suppressions d’exclusion et de polygones fonctionnent. L’explosion de multi-parties fonctionne La correction inter-géométrie avec élimination de l’espace fonctionne mais peut engendrer d’autres erreurs (adjacence et distance intra-géométrie) L’union ne fonctionne pas toujours, on perd des polygones.
Conclusion La détection des erreurs est relativement facile. La correction pose plusieurs problèmes. Une analyse plus approfondie s’impose avant de déployer l’application. Ce développement a permis de cerner les éléments les plus problématiques pour alimenter l’analyse future.
Recommandations Éliminer les segments de moins de 4 mètres. Vérifier auprès du client la conséquence des corrections Commencer par détecter et corriger les erreurs de ce type.