Pages: 1
- Sujet précédent - QGIS 3.x/PyQGIS: Remplacer le"processing.getObject" de QGIS 2.x - Sujet suivant
#1 Wed 24 June 2020 10:10
- ntouati
- Juste Inscrit !
- Date d'inscription: 14 Nov 2016
- Messages: 6
QGIS 3.x/PyQGIS: Remplacer le"processing.getObject" de QGIS 2.x
Bonjour à toutes et à tous,
Je travaille actuellement sur une conversion d'un plugin Qgis réalisé pour la version 2.18, vers une version pour la version LTR QQGIS 3.10.
Après avoir utiliser les scripts de conversion "2to3" et quelques modifications, mon plugin s'affiche correctement.
Le problème que je rencontre se situe dans le fonctionnement du script pour les géotraitements demandés et notamment dans la partie suivante où je ne trouve pas de subsitut au "processing.getObject" de la précédente version de PyQGIS.
Dans la version 2.18, le code est le suivant :
Code:
emprise=processing.runalg("qgis:extractbylocation", stations, vlayer, ['within'],0, None) #extract stations within vlayer stations = emprise['OUTPUT'] addStations = iface.addVectorLayer(stations, "STATIONS", 'ogr') objEmp = processing.getObject(emprise['OUTPUT'])
Après plusieurs recherches sur les forums et le cookbook, il semble que l'on peut utiliser à la place "QgsProcessingUtils.mapLayerFromString" ce qui donnerait le code suivant :
Code:
emprise=processing.run("native:extractbylocation", {'INPUT':stations,'PREDICATE':[0],'INTERSECT':vlayer,'OUTPUT':'memory:'}) stations = emprise['OUTPUT'] addStations = QgsProject.instance().addMapLayer(emprise) context = QgsProcessingContext() objEmp= QgsProcessingUtils.mapLayerFromString(emprise, context)
Mais le code me renvoie cette erreur que je n'arrive pas à corriger :
Code:
TypeError: QgsProcessingUtils.mapLayerFromString(): argument 1 has unexpected type 'QgsVectorLayer'
Il semble qu'il ne considère pas objEmp comme un objet de type couche...
Rien n'est clair sur le remplacement du getObject dans la version 3. Dans la version 2.18, nous l'avions utilisé car elle permettait, comme le dit la doc Qgis https://docs.qgis.org/2.8/fr/docs/user_ … nsole.html de renvoyer un objet QGIS (une couche ou une table) à partir d'un objet transmis.
Avez-vou déjà rencontrer ce type de problème ou avez-vous une idée ? Je sèche un peu...
En vous remerciant par avance pour votre aide, N.
Hors ligne
#2 Wed 24 June 2020 12:29
- JD
- Moderateur
- Date d'inscription: 8 Aug 2013
- Messages: 726
Re: QGIS 3.x/PyQGIS: Remplacer le"processing.getObject" de QGIS 2.x
Bonjour,
Code:
TypeError: QgsProcessingUtils.mapLayerFromString(): argument 1 has unexpected type 'QgsVectorLayer'
D'après l'erreur l'objet emprise est un vectorlayer, ce qui est étonnant car processing.run renvoie normalement un dictionnaire.
QgsProcessingUtils.mapLayerFromString est une fonction qui sert à récupérer un maplayer depuis le nom ou un id. Ici ce n'est pas la peine.
Remplacer objEmp = processing.getObject(emprise['OUTPUT']) par objEmp = emprise['OUTPUT'] et ca devrait fonctionner.
Cordialement,
Hors ligne
#3 Fri 26 June 2020 09:16
- ntouati
- Juste Inscrit !
- Date d'inscription: 14 Nov 2016
- Messages: 6
Re: QGIS 3.x/PyQGIS: Remplacer le"processing.getObject" de QGIS 2.x
Bonjour JD,
Merci beaucoup. ça fonctionne !
Bonne journée
Hors ligne
#4 Wed 06 January 2021 17:06
- guillaume
- Participant actif
- Date d'inscription: 5 Sep 2005
- Messages: 68
Re: QGIS 3.x/PyQGIS: Remplacer le"processing.getObject" de QGIS 2.x
Bonjour,
vous faites allusion à des scripts de conversion "2to3".
Cela m'intéresserait beaucoup de les trouver et de les employer.
Si vous pouviez m'aider...
Je vous remercie.
Cordialement
Guillaume
Hors ligne
Pages: 1
- Sujet précédent - QGIS 3.x/PyQGIS: Remplacer le"processing.getObject" de QGIS 2.x - Sujet suivant