5  Évaluation

Date limite de rendu : 31/12/2023. En cas de dépassement une pénalité pourra être appliquée.

Certains travaux réalisés par les élèves seront pris en compte dans leur évaluation.

Le code doit être commenté et fonctionnel. Les fichiers de code doivent porter le nom de leur auteur ainsi que la version de QGIS sur laquelle ils ont été développés / testés (QGIS 3.4 est à proscrire). Les tests unitaires et la documentation complète ne sont pas attendus.

Les documents doivent être fournis soit dans une archive compressée téléchargeable via un lien Chapril ou équivalent (merci d’éviter Dropbox ou WeTransfer). Ou soit un lien vers un dépôt git.

Le lien est à envoyer par mail à nicolas (point) roelandt (at) univ-eiffel (point) fr.

5.1 Projet Géocodeur

Objectif: développer un plugin de géotraitement permettant de géocoder des adresses à l’aide de l’API Adresse fournie par data.gouv.fr

Données : https://roelandtn.frama.io/pyqgis-thematique/adresses.csv/

5.1.1 Fonctionnalités

L’utilisateur pourra:

  • Ouvrir un fichier .csv sur le disque

  • Créer une nouvelle couche de points avec:

    • une géométrie correspond aux coordonnées transmises par l’API et transformées en Lambert93;

    • Les données contenues dans le fichier d’origine (ID et adresse) et celles renvoyées par l’API (nom de la rue, numéro, etc.).

  • Par défaut, la nouvelle couche est ajoutée automatiquement au projet QGIS à la fin du traitement.

Important

Un script de géotraitement (processing script tel que vu en Section 3.3) est attendu. En complément, un plugin peut être livré et donnera lieu à un bonus de 2 points.

5.1.2 Proposition de réalisation

Il est possible de réaliser les tâches demandées de plusieurs manières,

Voici une proposition de découpage des tâches à réaliser.

Astuce

Afin de ne pas envoyer des requêtes inutiles, il est conseillé de travailler sur toutes les opérations avec une seule adresse puis de créer une boucle qui parcourra les adresses à géocoder.

  • Prise en main l’API

    • Comment construire la requête ? (point d’entrée SEARCH de l’API Adresse)

    • Comment envoyer la requête au serveur ? (Lisez ce tutoriel à propos du module requests)

    • Stockage de la réponse

      Astuce

      Commencez avec une seule requête en stockant l’adresse dans une chaîne de caractères.

  • Déterminer comment extraire les données depuis la réponse

    • Dans quel type d’objet sont contenues les informations ? Comment récupérer les coordonnées ?
Astuce

C’est un travail d’enquête. Il faut découvrir comment accéder aux informations imbriquées dans la réponse. Il vous faudra décortiquer plusieurs couches stockées dans des objets variés.

  • Reconstruire la géométrie

    • Comment créer un point à l’aide de coordonnées ? (Regardez la documentation de QgsPointXY))

    • Quelle méthode permet d’ajouter des valeurs attributaires ?

    • Comment créer une couche vectorielle vide ?

    • Comment en paramétrer les attributs ?

    • Comment ajouter un point à une couche vectorielle ?

  • Boucler sur les adresses

    • Charger le fichier CSV et en extraire les entités

      • L’objet QgsVectorLayer dispose d’une méthode dédiée qui retourne un objet qui permet d’itérer sur les entités de la couche.

      • Comment accéder au champ adresse ?

    • Créer une boucle qui parcours les entités

      • Lit le champ adresse et le champ ID

      • Envoie une requête à l’API Adresse

      • Construit un point avec les données renvoyées et l’ajoute à la couche

  • Réaliser l’interface avec l’utilisateur

    • Chercher un fichier sur le disque

    • Sortie utilisateur

  • Assembler l’interface et le code Python

  • Tester

    • Ajouter le script ou le plugin à QGIS

    • Charger un fichier csv

      • avec les colonnes dans l’ordre

      • avec les colonnes dans le désordre

    • Tester la sortie

      • en mémoire

      • vers un fichier Géopackage

Avertissement

À part l’ajout de la couche de points, le script ne doit pas interagir avec l’interface utilisateur et ne doit en aucun cas:

  • changer le système de référence de coordonnées du projet

  • supprimer des couches déjà présentes

L’utilisateur ne doit pas intervenir sur le script Python pour changer un chemin de fichier, cela doit être géré par l’interface