banniere

Le portail francophone de la géomatique


Toujours pas inscrit ? Mot de passe oublié ?
Nom d'utilisateur    Mot de passe              Toujours pas inscrit ?   Mot de passe oublié ?

Annonce

Rencontres QGIS 2025

L'appel à participation est ouvert jusqu'au 19 janvier 2025!

#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

 

Pied de page des forums

Powered by FluxBB