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

Rencontres QGIS 2025

L'appel à participation est ouvert jusqu'au 19 janvier 2025!

#1 Wed 02 February 2022 17:30

UMENAsso
Juste Inscrit !
Date d'inscription: 2 Feb 2022
Messages: 1

QGIS: Erreur traitement import donnees Georef-> pas d'index spatial

Bonjour à la Communauté GeoRezo

Je suis un petit nouveau dans le monde ses SIG et de la Geomatique.
Je suis accompagnateur en montagne, et pour les besoins de cartographie et qualification des itinéraires de notre association (qui utilise des chaise mono-roue tout terrain pour permettre à des personnes en situation de handicap d'aller en montagne), nous avons fait appel dans le cadre d'un stage à une future ingénieur Sigiste de l'ENSG qui dans le cadre d'un stage a développé un formidable outils Sig sur base Qgis (3.16.5-Hannover) avec le codage d'un plugin en langage python, qui permet d'automatiser l'import de la donnée géoréférencée sur le terrain via SWmaps et exporté en GPKG sur 3 couches vecteurs me servant de BDD.

Hors depuis une semaine, il y a un soucis lors du traitement et je suis bien embêté, d'autant que celle-ci n'est malheureusement pas joignable...

Voici mon souci;

Lorsque j'utilise le plugin développé par ses soins, une des 3 couches vecteur de Qgis sur laquelle doit venir s'incrémenter la nouvelle donnée ( en l'occurrence la couche itinéraire) bascule en mode édition, une boite de dialogue s'ouvre en me disant que "l'ajout n'a pas pu se faire. Quittez le mode édition", et dans le journal des messages/onglet "Traitement", la suite de messages suivant qui apparaissent:

2022-02-02T14:41:06     INFO    Résultats: {'OUTPUT': 'Reprojeté_d4ceea43_d761_4ba8_86c5_c550280a8798'}
2022-02-02T14:41:06     INFO    Résultats: {'OUTPUT': 'Reprojeté_4f63d912_bf98_42c1_87cf_173a6aa90cbe'}
2022-02-02T14:41:06     INFO    Résultats: {'OUTPUT': 'Reprojeté_dabb6a5e_748d_4e4e_9dbc_582e89a59159'}
2022-02-02T14:41:06     INFO    Résultats: {'OUTPUT': 'Calculé_913e997b_73a9_4d1d_86a4_c72a09fc3d31'}
2022-02-02T14:41:06     INFO    Résultats: {'OUTPUT': 'Couche_issue_de_la_jointure_spatiale_f7beb13d_4fd2_458f_9560_bdba5ef02086'}
2022-02-02T14:41:06     CRITICAL    II n'existe pas d'index spatial pour la couche jointe, les performances seront fortement dégradées
2022-02-02T14:41:06     INFO    Résultats: {'JOINED_COUNT': 1, 'OUTPUT': 'Couche_issue_de_la_jointure_spatiale_7a078c09_b1b2_4dc2_b18d_cad8abd722d6'}
2022-02-02T14:41:06     INFO    Résultats: {'JOINED_COUNT': 1, 'OUTPUT': 'Couche_issue_de_la_jointure_spatiale_77acd1f1_9e00_491d_aa10_7ace5b9533ed'}
2022-02-02T14:41:06     INFO    Résultats: {'JOINED_COUNT': 1, 'OUTPUT': 'Couche_issue_de_la_jointure_spatiale_93990ad0_65d1_45ec_b55d_ecbe361f33a9'}

Deplus j'ai localisé dans le code du plugin le bloc de code auquel fait référence le message d'erreur et donc la boite de dialogue qui s'ouvre. Voici le bloc de code python:

Code:

try : #parce que si le mode édition est activé et qu'une entité est en train d'être ajoutée, on aura une erreur
        #Boucle sur les entités de la couche (au cas où il y ai plusieurs itinéraires)
        for iti in ItineraireTerrain.getFeatures():
            feat = QgsFeature(layer.fields())
            feat.setGeometry(iti.geometry())
            layer.startEditing()
            idx=layer.fields().indexFromName('id')
            idNouv = layer.maximumValue(idx)+1
            feat.setAttribute(idx,idNouv)
            feat.setAttribute(layer.fields().indexFromName('nom'),iti['remarks'])
            feat.setAttribute(layer.fields().indexFromName('longueur'),iti['longueurC']/1000)#longueur en km
            feat.setAttribute(layer.fields().indexFromName('carte ign'),iti['Name_min'])
            feat.setAttribute(layer.fields().indexFromName('pays'), iti['reg_nat'])
            dep = 'FR_'+iti['INSEE_DEP']
            feat.setAttribute(layer.fields().indexFromName('departement'),dep)
            feat.setAttribute(layer.fields().indexFromName('communedepart'), iti['NOM_COM'])
            feat.setAttribute(layer.fields().indexFromName('statut'),'repéré')
            feat.setAttribute(layer.fields().indexFromName('type'),'Boucle')
            feat.setAttribute(layer.fields().indexFromName('sens'),'Bon')
            feat.setAttribute(layer.fields().indexFromName('usage1'),'Joëlette')
            
            #reprojection pour permettre le calcul de dénivelé qui se fait par l'IGN en 4326
            iti2154 = QgsVectorLayer("LineString", "ligne", "memory", crs=QgsCoordinateReferenceSystem("EPSG:2154"))
            fet = QgsFeature()
            fet.setGeometry(ligne)
            ligneLayer.dataProvider().addFeatures([fet])
            iti2154.updateExtents()
            iti4326 = processing.run("native:reprojectlayer", {'INPUT':iti2154,'TARGET_CRS':QgsCoordinateReferenceSystem('EPSG:4326'),'OPERATION':'+proj=pipeline +step +inv +proj=lcc +lat_0=46.5 +lon_0=3 +lat_1=49 +lat_2=44 +x_0=700000 +y_0=6600000 +ellps=GRS80 +step +proj=unitconvert +xy_in=rad +xy_out=deg','OUTPUT':'TEMPORARY_OUTPUT'})['OUTPUT']
            for feature in iti4326.getFeatures(): #y'a qu'un seul objet 
                #Calcul de dénivelé :
                cumulPositif, cumulNegatif =  calculDenivele(feature)
            
            feat.setAttribute(layer.fields().indexFromName('denivele_positif'),cumulPositif)
            feat.setAttribute(layer.fields().indexFromName('denivele_negatif'),cumulNegatif)
           
            res = iface.openFeatureForm(layer, feat, updateFeatureOnly = False, showModal = True )
            if res : 
                layer.dataProvider().addFeatures([feat])
                iface.vectorLayerTools().stopEditing(layer,False)
            else : 
                iface.vectorLayerTools().stopEditing(layer,False)#pour arreter l'édition.
        #pour les POI
        layer = QgsProject.instance().mapLayersByName('POI')[0]
        layer.startEditing()
        for point in poiTerrain.getFeatures():
            feat = QgsFeature(layer.fields())
            feat.setGeometry(point.geometry())
            idx=layer.fields().indexFromName('id')
            idNouv = layer.maximumValue(idx)+1
            feat.setAttribute(idx,idNouv)
            feat.setAttribute(layer.fields().indexFromName('nom'),point['Nom'])
            feat.setAttribute(layer.fields().indexFromName('type'),'{'+point['Type']+'}')
            feat.setAttribute(layer.fields().indexFromName('ouvreur'),point['Ouvreur'])
            feat.setAttribute(layer.fields().indexFromName('description'),point['Description'])
            feat.setAttribute(layer.fields().indexFromName('datereperage'),dateQGIS)
            feat.setAttribute(layer.fields().indexFromName('datepassage'),dateQGIS)
            feat.setAttribute(layer.fields().indexFromName('temporaire'),point['Temporaire'])
            layer.dataProvider().addFeatures([feat])
        iface.vectorLayerTools().stopEditing(layer,False)#pour arreter l'édition.

        #pour les tronçons : 
        tronconTerrain = processing.run("native:fieldcalculator", {'INPUT': tronconTerrain,'FIELD_NAME':'longueurC','FIELD_TYPE':0,'FIELD_LENGTH':10,'FIELD_PRECISION':3,'FORMULA':'round($length,2)','OUTPUT':'TEMPORARY_OUTPUT'})['OUTPUT']
        layer = QgsProject.instance().mapLayersByName('troncon')[0]
       
        layer.startEditing()
        for troncon in tronconTerrain.getFeatures():
            feat = QgsFeature(layer.fields())
            feat.setGeometry(troncon.geometry())
            idx=layer.fields().indexFromName('id')
            idNouv = layer.maximumValue(idx)+1
            feat.setAttribute(idx,idNouv)
            #Remplissage des attributs de la couche
            feat.setAttribute(layer.fields().indexFromName('typedifficulte1'),troncon['TypeDifficulte1'])
            feat.setAttribute(layer.fields().indexFromName('typedifficulte2'),troncon['TypeDifficulte2'])
            feat.setAttribute(layer.fields().indexFromName('caracteristique1'),troncon['Caracteristique1'])
            feat.setAttribute(layer.fields().indexFromName('caracteristique2'),troncon['Caracteristique2'])
            feat.setAttribute(layer.fields().indexFromName('difficulte'),troncon['Difficult'])
            feat.setAttribute(layer.fields().indexFromName('nombrepilote'),troncon['NombrePilote'])
            feat.setAttribute(layer.fields().indexFromName('niveaupilotage'),troncon['NiveauPilotage'])
            feat.setAttribute(layer.fields().indexFromName('paradestatique'),troncon['ParadeStatique'])
            #feat.setAttribute(layer.fields().indexFromName('ouvreur'),troncon['Ouvreur'])
            feat.setAttribute(layer.fields().indexFromName('description'),troncon['Description'])
            feat.setAttribute(layer.fields().indexFromName('longueur'),troncon['longueurC'])#en mètres
            feat.setAttribute(layer.fields().indexFromName('datereperage'),dateQGIS)
            feat.setAttribute(layer.fields().indexFromName('datepassage'),dateQGIS)
            feat.setAttribute(layer.fields().indexFromName('paradestatique'),troncon['ParadeStatique'])
           
            layer.dataProvider().addFeatures([feat])
            iface.vectorLayerTools().stopEditing(layer,False)#pour arreter l'édition.
        
        iface.messageBar().pushMessage("CartoUMEN", "Vos données terrains ont été ajoutés à la base de données", level=Qgis.Info, duration=7)
    except : 
        QMessageBox.information(iface.mainWindow(), "CartoUMEN ", ("L'ajout n'a pas pu être fait. Quittez le mode édition de toutes vos couches."), QMessageBox.Ok, QMessageBox.Ok)

En espérant que quelqu'un(e) ait la réponse, merci :-)

Hors ligne

 

#2 Mon 28 February 2022 14:18

mdvandamme
Juste Inscrit !
Date d'inscription: 6 Jun 2019
Messages: 5

Re: QGIS: Erreur traitement import donnees Georef-> pas d'index spatial

Bonjour,

C'est un peu difficile à debugger, il n'y a pas de messages d'erreur. Je ne pense pas que le message critique (pas d'index) soit ce qui bloque. Est-ce que vous avez essayer de faire la manipulation à la main ?
Est-ce que votre plugin est en open source ?

Bien cordialement,
Marie-Dominique Van Damme

Hors ligne

 

Pied de page des forums

Powered by FluxBB