#1 Wed 20 January 2021 22:12
- LADEUILLE
- Juste Inscrit !
- Date d'inscription: 25 Nov 2014
- Messages: 6
QGIS: Ordre des couches
Bonjour à tous,
A l aide d'un code Python que je ne maitrise pas encore :
Je souhaite afficher le ID des couches présentes dans mon projet QGIS et différencier les couches vecteurs et raster.
Je souhaiterai déterminer la couche raster qui est visible à l’écran et afficher son nom et le stocker dans une variable que je pourrai utiliser dans d'autres fonctions.
Pour l'instant j'utilise ce code pour lister mes couches :
l = [layer.name()
for layer in QgsProject.instance().mapLayers().values()]
# dictionary with key = layer name and value = layer object
layers_list = {}
print(layers_list)
for l in QgsProject.instance().mapLayers().values():
layers_list[l.name()] = l
for i in layers_list:
if i > '1':
#x=layers_list.keys
print(i)
Dans la fin du code je lui demande de faire remonter les couches dont les noms sont >1. J'avais renommé mes couches de 1 à 3.
Je ne sais pas comment m'y prendre. Auriez vous une solution? Faut t il que je travaille sur l'extension presente dans le nom ?
Merci beaucoup pour votre aide..............
Dernière modification par Patrice (Thu 21 January 2021 20:17)
Hors ligne
#2 Thu 21 January 2021 14:59
- JD
- Moderateur
- Date d'inscription: 8 Aug 2013
- Messages: 726
Re: QGIS: Ordre des couches
Bonsoir,
quelle est votre question ?
Par rapport à votre code,
la dernière partie est incorrecte, en supposant que vous ayez renommé vos couches 1, 2 , 3.
Vous tentez de vérifier si le nom de la couche (chaîne de caractère) est supérieure à la chaîne '1', mais ca n'a pas de sens. Enfin si, ca un sens il compare les chaînes une à une avec leur code ascii. Bref c'est pas ce que vous voulez.
Il faudrait adapté par :
Code:
try: i=int(i) if i > 1: print(i) except ValueError: print(f'impossible de transformer {i} en entier')
Hors ligne
#3 Sun 31 January 2021 16:34
- LADEUILLE
- Juste Inscrit !
- Date d'inscription: 25 Nov 2014
- Messages: 6
Re: QGIS: Ordre des couches
Merci JD pour votre réponse.
Hors ligne
#4 Sun 31 January 2021 17:06
- LADEUILLE
- Juste Inscrit !
- Date d'inscription: 25 Nov 2014
- Messages: 6
Re: QGIS: Ordre des couches
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 avec des données de la table attributaire identique. 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éré 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())
Dernière modification par SANTANNA (Sun 31 January 2021 17:34)
Hors ligne