#1 Mon 01 February 2021 08:47
- LADEUILLE
- Juste Inscrit !
- Date d'inscription: 25 Nov 2014
- Messages: 6
QGIS: Probl sur enchainement de 2 fonctions
Bonjour à tous.
Mon but final est de pouvoir à partir d'un code Python (Je travaille directement dans la console python de QGIS pour l'instant). Dans en second temps je l’intégrerai dans un plugin. Le but est de créer un bouton qui me permettrait en un clic de créer un symbole et de remplir la table attributaire avec des valeurs identiques pour certaines colonnes. Pour pouvoir créer une multitude de boutons par la suite aux paramètres différents.
J'ai développé en partie le code ci-dessous, avec lequel je souhaite en clic de souris pouvoir récupérer les coordonnées sous ma souris, créer un symbole a ces cordonnées, tout en remplissant la table attributaire avec toujours les mêmes paramètres.
Dans l’organisation de mes couches QGIS : J’ai intégré mes couches un groupe qui s’appelle 2021. La couche que je souhaite remplir s'appelle 'Activity'.
J'ai décomposé le code en différentes fonctions. C’est à dire que je récupére bien mes cordonnées sur un clic souri, j'arrive à les stocker dans ma liste. Et et mais, dans un second temps je suis obligé de taper le nom de ma fonction c'est à dire Apoint() pour que le point soit créé comme je le souhaite.
J'ai essayé pleins de choses mais je n'arrive pas à enchainer les codes avec une seul action. En clic faire les deux choses en même temps.
J’ai bien essayé de tous mettre dans la même fonction mais ça ne fonctionne pas plus.
Rmq : J’ai intégré des print dans mon code c’est juste pour vérifier si le codes est correct.
Quelqu’un aurait il une idée pour ressoudre ce probléme.
Merci d’avance pour votre aide.
Code:
from qgis.gui import QgsMapToolEmitPoint
Lat=[]
Long=[]
def display_point(point, mouse_button):
coords = "Map Coordinates: {:.4f}, {:.4f}".format(point.x(), point.y())
print (coords)
Lat.append(point.y())
Long.append(point.x())
print(Lat)
print(Long)
layer = iface.activeLayer()
feats = [ feat for feat in layer.getFeatures() ]
# a reference to our map canvas
canvas = iface.mapCanvas()
# this QGIS tool emits as QgsPoint after each click on the map canvas
pointTool = QgsMapToolEmitPoint(canvas)
pointTool.canvasClicked.connect(display_point)
canvas.setMapTool(pointTool)
def Apoint():
root = QgsProject.instance().layerTreeRoot()
GRD = root.findGroup('2021')
print (GRD.name())
for x in range(1):
child0 = GRD.children()[x]
print(child0.name()[:8])
A=child0.name()[:8]
layers = QgsProject.instance().mapLayersByName('Activity')
layer = QgsVectorLayer(layers[0].dataProvider().dataSourceUri(), '', 'ogr')
caps = layer.dataProvider().capabilities()
if caps & QgsVectorDataProvider.AddFeatures:
feat = QgsFeature(layer.fields())
feat.setAttributes([5, A, 'CAMION'])
feat.setGeometry(QgsGeometry.fromPointXY(QgsPointXY(Long[0], Lat[0])))
res, outFeats = layer.dataProvider().addFeatures([feat])
iface.mapCanvas().refresh()
iface.showAttributeTable(iface.activeLayer())
Hors ligne