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.
- Algorithme de géotraitement
proximite.py
(réalisé en Section 3.3) - Algorithme de géotraitement
lieux_propices.py
(exercice Section 3.3.4) - Projet de géocodeur (voir spécifications ci-dessous)
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 disqueCré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
etadresse
) 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.
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.
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
AstuceCommencez 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 ?
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 champID
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
À 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