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

GEODATA DAYS 2024

#1 Fri 21 August 2020 12:00

Alexpiration
Juste Inscrit !
Date d'inscription: 21 Aug 2020
Messages: 1

QGIS/PyQGIS: Nouvelle couche SHP a partir de 2 autres

Bonjour à tous !

Plusieurs jours que je planche sur un script Python me permettant de réaliser une opération qui, avec mes connaissance actuelles du logiciel QGIS, me parait compliqué !

Explication de mon but :
J'ai 2 sources de données :
- La première est une couche de centroïdes, dont chaque centroïdes est associés à une commune de l'Ile de France. Dans la table attributaire de cette couche se trouve le code INSEE associé à la commune ainsi que son nom
- La deuxieme est une base de donnée au format SQLITE contenant des informations concernant divers projets en cours sur des communes. Dans cette base de donnée, on y retrouve le nom du projet, la commune dans laquelle se trouve le projet, le code insee associé à la commune, et divers autres informations.

J'ai d'abord pensé à créer une simple jointure pour faire en sorte de générer un centroïde correspondant à chaque projet associé à sa commune. Cependant, ma table attributaire des centroïdes ne gerent pas les projets qui ont une commune en commun, uniquement un seul projet est rattaché et par conséquent, des projets de ma base de donnée ne sont pas pris en compte.

J'ai donc voulu débloquer cette situation avec mes connaissances en Python et avec PyQGIS.
La démarche de mon script est la suivante :
Faire une boucle sur le champ Code Insee de ma table des centroïdes et dans cette même boucle, faire une autre boucle sur le champ Code Insee de ma base de donnée.
Avec une structure conditionnelle, s'il y a correspondance de Code Insee, je récupère la géométrie du centroïdes correspondant , je récupère également les différents attributs correspondant dans ma base de donnée, et j'ajoute le tous dans une nouvelle couche Shapefile de points.
Cependant je n'arrive à comprendre ou debugger mon script sur la partie structure conditionnelle. A la fin de mon script, j'ai bien ma nouvelle couche Shape avec les champs de ma base de donnée, mais aucune entrée n'est enregistrée dedans, je suppose donc que mon programme ne trouve aucune correspondance de code insee, ce qui n'est pas le cas.

Voici mon script :

Code:

# Create new temporary layer
new_layer = QgsVectorLayer("Point", "Suivi_Topo", "memory")

# Get 2 layers that want
center_layer = QgsProject.instance().mapLayersByName('centroide_commune_idf')
center_layer = center_layer[0]
suivi_projet_db = QgsProject.instance().mapLayersByName('suivi_projet')
suivi_projet_db = suivi_topo_db[0]

# Get attributes of each layers
center_layer_attr = center_layer.getFeatures()
suivi_topo_db_attr = suivi_topo_db.getFeatures()

# Add Fields of db in the new layer
suivi_topo_field = suivi_topo_db.fields()
new_layer_co = new_layer.dataProvider()
new_layer_co.addAttributes(suivi_topo_field)
new_layer.updateFields()

# Loop in each features, if same attrs, add features
for center_feature in center_layer_attr:
    # get geometry of the feature
    geom_center = center_feature.geometry()
    for db_feature in suivi_topo_db_attr:
        if db_feature.attribute('insee') == center_feature.attribute('code_insee'):
            db_feature_lst = db_feature.attributes()
            new_feature = QgsFeature()
            new_feature.setGeometry(geom_center)
            new_feature.setAttributes(db_feature_lst)
            new_layer_co.addFeature(new_feature)

new_layer.updateExtents()
QgsProject.instance().addMapLayer(new_layer)

En vous remerciant tous d'avance pour votre contribution smile

Hors ligne

 

#2 Fri 21 August 2020 13:11

SANTANNA
Moderateur
Lieu: Angers
Date d'inscription: 18 Jan 2008
Messages: 3862

Re: QGIS/PyQGIS: Nouvelle couche SHP a partir de 2 autres

Bonjour,
Il me semble qu'il manque le paragraphe qui explique ce que vous souhaitez obtenir, avant vos tentatives: connaître la commune depuis la table projet ou connaître pour la commune, tous ses projets?
Autrement, regardez du côté des relations ...

Hors ligne

 

Pied de page des forums

Powered by FluxBB