Message posté par : UMENAsso (contact(a)umen.fr)
----------------------------------------
Bonjour à la Communauté GéoRezo
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 :-)
----------------------------------------
Le message est situé
https://georezo.net/forum/viewtopic.php?pid=349947#p349947
Pour y répondre : qgis_fr(a)ml.georezo.net ou reply de votre messagerie
Pour vous désabonner connectez-vous sur le forum puis Profil / Abonnement
--
Association GeoRezo - le portail géomatique
https://georezo.net