Obtenir l'étendue des couches dans PyQGIS?

11

J'essaie d'écrire un script de traitement en utilisant l' r.neighborsalgorithme Grass pour les rasters. Lorsque vous utilisez l'interface graphique pour cet algorithme, vous pouvez laisser le champ d'extension de couche GRASS blanc pour utiliser l'étendue minimale. Au contraire, lorsqu'il est utilisé dans la console python, je ne trouve pas comment saisir ce type de valeur "par défaut".entrez la description de l'image ici

J'ai vu sur https://docs.qgis.org/2.2/en/docs/user_manual/processing/console.html qu'il semble obligatoire de saisir les quatre coordonnées pour un paramètre d'étendue. J'ai essayé d'utiliser iface.mapCanvas().extent()mais l'objet retourné n'est pas accepté comme paramètre et je ne trouve pas comment obtenir ses coordonnées.

Existe-t-il un moyen d'obtenir la xmin, ymin, xmax, ymaxcouche dans PyQGIS pour les saisir dans l'algorithme? Suis-je en train de le faire totalement mal?

Clément
la source
Merci pour vos réponses, je trouve cette solution de mon côté aussi ... En fait , il a également répondu d'une manière similaire à gis.stackexchange.com/questions/213428/... mais entre parenthèses après extentmanquent donc il ne fonctionnait pas .. .
Clement

Réponses:

14

La réponse est presque entièrement contenue dans un article que j'ai récemment écrit.

L'étendue est renvoyée sous la forme d'un objet QgsRectangle () avec le code suivant:

layer = iface.activeLayer() # load the layer as you want
ext = layer.extent()

Pour obtenir les coordonnées des sommets de la couche actuelle, vous pouvez exécuter ce code:

xmin = ext.xMinimum()
xmax = ext.xMaximum()
ymin = ext.yMinimum()
ymax = ext.yMaximum()
coords = "%f,%f,%f,%f" %(xmin, xmax, ymin, ymax) # this is a string that stores the coordinates

Enfin, vous pouvez exécuter le code suivant pour utiliser le r.neighborsmodule à partir de la console Python:

processing.runalg("grass7:r.neighbors",layer,0,3,False,False,"",coords,0,None)
mgri
la source
5

vous étiez sur la bonne voie, il vous suffit d'aller plus loin. Voir la documentation QGIS pour QgsRectangle

Fondamentalement, vous faites:

  • obtenir le calque actuel

    layer = iface.activeLayer()
  • obtenir l'étendue qui est un objet QgsRectangle

    ex = layer.extent()
  • et y extraire les valeurs avec:

    xmax = ex.xMaximum()
    ymax = ex.yMaximum()
    xmin = ex.xMinimum()
    ymin = ex.yMinimum()
Rire
la source