Obtendo extensão da camada no PyQGIS?

10

Estou tentando escrever um script de processamento usando o r.neighborsalgoritmo de grama para rasters. Ao usar o Gui para esse algoritmo, você pode deixar o campo de extensão da camada GRASS em branco para usar a extensão mínima. Pelo contrário, quando usado no console python, não consigo encontrar como inserir esse tipo de valor "padrão".insira a descrição da imagem aqui

Vi em https://docs.qgis.org/2.2/en/docs/user_manual/processing/console.html que parece ser obrigatório inserir as quatro coordenadas para um parâmetro de extensão. Eu tentei usar, iface.mapCanvas().extent()mas o objeto retornado não é aceito como parâmetro e não consigo encontrar como obter suas coordenadas.

Existe uma maneira de obter a xmin, ymin, xmax, ymaxcamada do PyQGIS para inseri-los no algoritmo? Estou fazendo isso totalmente errado?

Clemente
fonte
Obrigado por suas respostas, eu encontrei esta solução ao meu lado também ... Na verdade, ela também foi respondida de maneira semelhante em gis.stackexchange.com/questions/213428/… mas parênteses depois extentestão faltando, portanto não estava funcionando .. .
Clement

Respostas:

12

A resposta está quase completamente contida em um post que escrevi recentemente.

A extensão é retornada como um objeto QgsRectangle () com o seguinte código:

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

Para obter as coordenadas dos vértices da camada atual, você pode executar 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

Por fim, você pode executar o código a seguir para usar o r.neighborsmódulo no Python Console:

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

você estava no caminho certo, basta dar um passo adiante. Consulte a documentação do QGIS para QgsRectangle

Basicamente, você faz:

  • obter a camada atual

    layer = iface.activeLayer()
  • obter a extensão que é um objeto QgsRectangle

    ex = layer.extent()
  • e extrair os valores com:

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