Pages: 1
- Sujet précédent - QGIS: Erreur traitement import donnees Georef-> pas d'index spatial - Sujet suivant
#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
Pages: 1
- Sujet précédent - QGIS: Erreur traitement import donnees Georef-> pas d'index spatial - Sujet suivant