banniere

Le portail francophone de la géomatique


Toujours pas inscrit ? Mot de passe oublié ?
Nom d'utilisateur    Mot de passe              Toujours pas inscrit ?   Mot de passe oublié ?

Annonce

State Of The Map 2024

#1 Mon 01 January 2024 07:57

mila
Juste Inscrit !
Date d'inscription: 30 Dec 2023
Messages: 5

QGIS: SOS code python ?

Bonjour la communauté,

Je dois rendre un code PyGis avec comme consigne d'utiliser des données provenant d'API et d'obtenir des couches SHP ou GPK en sortie. Seulement, je n'ai que très peu codé sur Python et je suis en grande difficulté.

Je voudrais tout simplement afficher et enregistrer comme couche QGis une carte des communes françaises à partir de l'API "https://geo.api.gouv.fr/communes", et y joindre les données de l'Atlas des Zones Inondables de l'API "https://www.georisques.gouv.fr/api/v1/gaspar/azi" pour savoir quelles communes sont classées en zones inondables. Le projet ne me semble pas trop ambitieux...

Voici le début de mon code :
#Bibliothèque
import requests
from qgis.core import QgsVectorLayer, QgsField, QgsFeature, QgsGeometry, QgsPointXY, QgsProject
from PyQt5.QtCore import QVariant

# Importer l'API communes
com_url = "https://geo.api.gouv.fr/communes"
com = requests.get(com_url)
com_data = com.json()

# Importer l'API AZI
azi_url = "https://www.georisques.gouv.fr/api/v1/gaspar/azi"
azi = requests.get(azi_url)
azi_data = azi.json()

Jusqu'ici, il me semble avoir bien importé les API. Mais alors qu'il s'agit d'afficher comme couche, plus rien ne fonctionne...

Lorsque j'ajoute ces trois lignes, une couche temporaire "Communes" apparaît dans les couches mais rien ne s'affiche et la table attributaire est complètement vide.
"layer_name = "Communes"
layer = QgsVectorLayer("Polygon?crs=epsg:4326", layer_name, "memory")
QgsProject.instance().addMapLayer(layer)

Voilà, je ne m'en sors pas..
Toute aide serait la bienvenue !

Hors ligne

 

#2 Tue 02 January 2024 16:41

neskuik01
Participant assidu
Date d'inscription: 16 Feb 2015
Messages: 197

Re: QGIS: SOS code python ?

Bonjour,

Le début est juste , vous faite un appel à chacune des APIs. La requête reçoit un json en réponse pour chacune, il faut cependant encore parser les données vers une couche QGIS.

Code:

créer une liste vide appelée "entités"
pour chaque "commune" dans com_data faire :
    créer une géométrie à partir des coordonnées WKT de "commune["geometry"]["coordinates"]"
    
    créer une nouvelle entité de la couche appelée "feature"
    définir la géométrie de "feature" comme étant la géométrie créée
    
    définir les attributs de "feature" comme étant :
        - "commune["properties"]["nom"]" pour le nom
        - "commune["properties"]["code"]" pour le code postal
        - "commune["properties"]["population"]" pour la population
    
    ajouter "feature" à la liste "entités"

ajouter toutes les entités de la liste "entités" à la couche "layer_data"

Dernière modification par neskuik01 (Tue 02 January 2024 17:35)

Hors ligne

 

Pied de page des forums

Powered by FluxBB