¿Conseguir extensión de capa en PyQGIS?

10

Estoy tratando de escribir una secuencia de comandos de procesamiento utilizando el r.neighborsalgoritmo de hierba para rásteres. Cuando usa la Gui para este algoritmo, puede dejar el campo de extensión de capa de GRASS en blanco para usar la extensión mínima. Por el contrario, cuando se usa en la consola de Python, no puedo encontrar cómo ingresar este tipo de valor "predeterminado".ingrese la descripción de la imagen aquí

Vi en https://docs.qgis.org/2.2/en/docs/user_manual/processing/console.html que parece ser obligatorio ingresar las cuatro coordenadas para un parámetro de extensión. Intenté usarlo, iface.mapCanvas().extent()pero el objeto devuelto no se acepta como parámetro y no puedo encontrar cómo obtener sus coordenadas.

¿Hay alguna forma de obtener la xmin, ymin, xmax, ymaxcapa en PyQGIS para ingresarlos en el algoritmo? ¿Lo estoy haciendo totalmente mal?

Clemente
fuente
Gracias por sus respuestas, también encontré esta solución a mi lado ... De hecho, también fue respondida de manera similar en gis.stackexchange.com/questions/213428/… pero faltan paréntesis después extent, por lo que no estaba funcionando ... .
Clemente

Respuestas:

12

La respuesta está casi completamente contenida en una publicación que escribí recientemente.

La extensión se devuelve como un objeto QgsRectangle () con el siguiente código:

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

Para obtener las coordenadas de los vértices de la capa actual, puede ejecutar este código:

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

Finalmente, puede ejecutar el siguiente código para usar el r.neighborsmódulo desde la Consola Python:

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

estabas en el camino correcto, solo necesitas ir un paso más allá. Consulte la documentación de QGIS para QgsRectangle

Básicamente, haces:

  • obtener la capa actual

    layer = iface.activeLayer()
  • obtener la extensión que es un objeto QgsRectangle

    ex = layer.extent()
  • y allí extrae los valores con:

    xmax = ex.xMaximum()
    ymax = ex.yMaximum()
    xmin = ex.xMinimum()
    ymin = ex.yMinimum()
    
LaughU
fuente