Message posté par : LAURENT
----------------------------------------
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())
----------------------------------------
Le message est situé
https://georezo.net/forum/viewtopic.php?pid=339677#p339677
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